package Store is pragma Shared_Passive; protected Shared is function Counter return Natural; -- Returns current counter value procedure Increment; -- Increment counter by one procedure Set (Name : in String); -- Store Name into an internal buffer function Get return String; -- Returns last stored name private C : Natural := 0; Buffer : String (1 .. 100) := "undefined" & (1 .. 91 => ' '); Last : Natural := 9; end Shared; end Store; package body Store is ------------ -- Shared -- ------------ protected body Shared is ------------- -- Counter -- ------------- function Counter return Natural is begin return C; end Counter; --------------- -- Increment -- --------------- procedure Increment is begin C := C + 1; end Increment; --------- -- Set -- --------- procedure Set (Name : in String) is begin if Name'Length > Buffer'Length then Buffer := Name (Name'First .. Name'First + Buffer'Length - 1); Last := Buffer'Last; else Buffer (1 .. Name'Length) := Name; Last := Name'Length; end if; end Set; --------- -- Get -- --------- function Get return String is begin return Buffer (1 .. Last); end Get; end Shared; end Store; with Ada.Calendar.Formatting; with Ada.Text_IO; with Store; procedure Main is use Ada; use Ada.Text_IO; begin Put_Line ("Counter : " & Natural'Image (Store.Shared.Counter) & " last run " & Store.Shared.Get); Store.Shared.Increment; Store.Shared.Set (Calendar.Formatting.Image (Calendar.Clock)); end Main;