Source file : dual_io.adb
package body Dual_IO is
Log_open : Boolean := False;
Log_text : Ada.Text_IO.File_Type;
procedure Check_Log is
begin
if not Log_open then raise Log_not_open; end if;
end Check_Log;
procedure Create_Log (Name : in String) is
begin
if Log_open then raise Log_already_open; end if;
Ada.Text_IO.Create (File => Log_text,
Mode => Ada.Text_IO.Out_File,
Name => Name);
Log_open := True;
end Create_Log;
procedure Append_Log (Name : in String) is
begin
if Log_open then raise Log_already_open; end if;
Ada.Text_IO.Open (File => Log_text,
Mode => Ada.Text_IO.Append_File,
Name => Name);
Log_open := True;
end Append_Log;
procedure Close_Log is
begin
Check_Log;
Ada.Text_IO.Close (Log_text);
Log_open := False;
end Close_Log;
function Is_Log_Open return Boolean is
begin
return Log_open;
end Is_Log_Open;
procedure Close_and_Append_Log is
log_name : constant String := Ada.Text_IO.Name (Log_text);
begin
Close_Log;
Append_Log (log_name);
end Close_and_Append_Log;
procedure Flush is
begin
Ada.Text_IO.Flush;
Check_Log;
Ada.Text_IO.Flush (Log_text);
end Flush;
procedure New_Line (Spacing : in Positive_Count := 1) is
begin
Ada.Text_IO.New_Line (Spacing);
Check_Log;
Ada.Text_IO.New_Line (Log_text, Spacing);
end New_Line;
procedure Skip_Line (Spacing : in Positive_Count := 1) is
begin
Ada.Text_IO.Skip_Line (Spacing); -- *in* Standard
Check_Log;
Ada.Text_IO.New_Line (Log_text, Spacing); -- *out* Log
end Skip_Line;
procedure New_Page is
begin
Ada.Text_IO.New_Page;
Check_Log;
Ada.Text_IO.New_Page (Log_text);
end New_Page;
procedure Skip_Page is
begin
Ada.Text_IO.Skip_Page; -- *in* Standard
Check_Log;
Ada.Text_IO.New_Page (Log_text); -- *out* Log
end Skip_Page;
-----------------------------
-- Characters Input-Output --
-----------------------------
procedure Get (Item : out Character) is
C : Character;
begin
Ada.Text_IO.Get (C); -- *in* Standard
Check_Log;
Ada.Text_IO.Put (Log_text, C); -- *out* Log
Item := C;
end Get;
procedure Put (Item : in Character) is
begin
Ada.Text_IO.Put (Item);
Check_Log;
Ada.Text_IO.Put (Log_text, Item);
end Put;
--------------------------
-- Strings Input-Output --
--------------------------
procedure Get (Item : out String) is
S : String (Item'Range);
begin
Ada.Text_IO.Get (S); -- *in* Standard
Check_Log;
Ada.Text_IO.Put (Log_text, S); -- *out* Log
Item := S;
end Get;
procedure Put (Item : in String) is
begin
Ada.Text_IO.Put (Item);
Check_Log;
Ada.Text_IO.Put (Log_text, Item);
end Put;
procedure Get_Line
(Item : out String;
Last : out Natural) is
S : String (Item'Range);
L : Natural;
begin
Ada.Text_IO.Get_Line (S, L); -- *in* Standard
Check_Log;
Ada.Text_IO.Put_Line (Log_text, S (1 .. L)); -- *out* Log
Item (Item'First .. Item'First + L - 1) := S (1 .. L);
Last := L;
end Get_Line;
procedure Put_Line
(Item : in String) is
begin
Ada.Text_IO.Put_Line (Item);
Check_Log;
Ada.Text_IO.Put_Line (Log_text, Item);
end Put_Line;
package body Integer_IO is
package TIIO is new Ada.Text_IO.Integer_IO (Num);
procedure Get (Item : out Num;
Width : in Field := 0) is
I : Num;
begin
TIIO.Get (I, Width); -- *in* Standard
Check_Log;
TIIO.Put (Log_text, I, Width); -- *out* Log
Item := I;
end Get;
procedure Put (Item : in Num;
Width : in Field := Default_Width;
Base : in Number_Base := Default_Base) is
begin
TIIO.Put (Item, Width, Base);
Check_Log;
TIIO.Put (Log_text, Item, Width, Base);
end Put;
end Integer_IO;
package body Float_IO is
package TFIO is new Ada.Text_IO.Float_IO (Num);
procedure Get (Item : out Num;
Width : in Field := 0) is
I : Num;
begin
TFIO.Get (I, Width); -- *in* Standard
Check_Log;
TFIO.Put (Log_text, I); -- *out* Log
Item := I;
end Get;
procedure Put (Item : in Num;
Fore : in Field := Default_Fore;
Aft : in Field := Default_Aft;
Exp : in Field := Default_Exp) is
begin
TFIO.Put (Item, Fore, Aft, Exp);
Check_Log;
TFIO.Put (Log_text, Item, Fore, Aft, Exp);
end Put;
end Float_IO;
package body Fixed_IO is
package TXIO is new Ada.Text_IO.Fixed_IO (Num);
procedure Get (Item : out Num;
Width : in Field := 0) is
I : Num;
begin
TXIO.Get (I, Width); -- *in* Standard
Check_Log;
TXIO.Put (Log_text, I); -- *out* Log
Item := I;
end Get;
procedure Put (Item : in Num;
Fore : in Field := Default_Fore;
Aft : in Field := Default_Aft;
Exp : in Field := Default_Exp) is
begin
TXIO.Put (Item, Fore, Aft, Exp);
Check_Log;
TXIO.Put (Log_text, Item, Fore, Aft, Exp);
end Put;
end Fixed_IO;
package body Decimal_IO is
package TDIO is new Ada.Text_IO.Decimal_IO (Num);
procedure Get
(Item : out Num;
Width : in Field := 0) is
I : Num;
begin
TDIO.Get (I, Width); -- *in* Standard
Check_Log;
TDIO.Put (Log_text, I); -- *out* Log
Item := I;
end Get;
procedure Put
(Item : in Num;
Fore : in Field := Default_Fore;
Aft : in Field := Default_Aft;
Exp : in Field := Default_Exp) is
begin
TDIO.Put (Item, Fore, Aft, Exp);
Check_Log;
TDIO.Put (Log_text, Item, Fore, Aft, Exp);
end Put;
end Decimal_IO;
package body Modular_IO is
package TMIO is new Ada.Text_IO.Modular_IO (Num);
procedure Get
(Item : out Num;
Width : in Field := 0) is
I : Num;
begin
TMIO.Get (I, Width); -- *in* Standard
Check_Log;
TMIO.Put (Log_text, I, Width); -- *out* Log
Item := I;
end Get;
procedure Put
(Item : in Num;
Width : in Field := Default_Width;
Base : in Number_Base := Default_Base) is
begin
TMIO.Put (Item, Width, Base);
Check_Log;
TMIO.Put (Log_text, Item, Width, Base);
end Put;
end Modular_IO;
package body Enumeration_IO is
package TEIO is new Ada.Text_IO.Enumeration_IO (Enum);
procedure Get (Item : out Enum) is
I : Enum;
begin
TEIO.Get (I); -- *in* Standard
Check_Log;
TEIO.Put (Log_text, I); -- *out* Log
Item := I;
end Get;
procedure Put (Item : in Enum;
Width : in Field := Default_Width;
Set : in Type_Set := Default_Setting) is
begin
TEIO.Put (Item, Width, Set);
Check_Log;
TEIO.Put (Log_text, Item, Width, Set);
end Put;
end Enumeration_IO;
end Dual_IO;
Zip-Ada: Ada library for zip archive files (.zip).
Ada programming.
Some news about Zip-Ada and other Ada projects
on Gautier's blog.