|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 9216 (0x2400)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Integer_Io, seg_04ba7a, separate Text_Io
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦cfc2e13cd⟧ »Space Info Vol 2«
└─⟦this⟧
with Number_Io;
use Number_Io;
separate (Text_Io)
package body Integer_Io is
pragma Suppress (Access_Check);
pragma Suppress (Discriminant_Check);
pragma Suppress (Index_Check);
pragma Suppress (Length_Check);
pragma Suppress (Division_Check);
pragma Suppress (Overflow_Check);
pragma Suppress (Elaboration_Check);
Numbers : constant String (1 .. 16) := "0123456789ABCDEF";
procedure Get (File : in File_Type;
Item : out Num;
Width : in Field := 0) is
Result : Integer;
Fp : File_Ptr := File_Ptr (File);
End_Ptr : Integer;
Error : Boolean := False;
begin
Safe_Support.File_Lock (File);
Must_Be_Input (File);
if Width /= 0 then
if Tstfile (Fp) /= At_Char then
raise Data_Error;
end if;
End_Ptr := Fp.In_Ptr + Width;
if End_Ptr > Fp.Last then
-- We need to get width characters into the buffer,
-- but since they may not all fit we'll stick the next
-- width characters into an array, and getnum on that.
declare
Str : String (1 .. Width);
Len : Integer := 0;
Last : Integer;
begin
while Len < Width loop
Len := Len + 1;
Str (Len) := Getchar (Fp);
exit when Tstfile (Fp) /= At_Char;
end loop;
Getnum (Str (1 .. Len), Result, Last, Error);
if Error or else Last /= Len then
raise Data_Error;
end if;
end;
else
Getnum (String (Fp.Buffer.Elem (Fp.In_Ptr + 1 .. End_Ptr)),
Result, Fp.In_Ptr, Error);
if End_Ptr /= Fp.In_Ptr and then Tstfile (Fp) = At_Char then
while Fp.In_Ptr < End_Ptr loop
exit when Tstfile (Fp) /= At_Char;
Fp.In_Ptr := Fp.In_Ptr + 1;
end loop;
raise Data_Error;
elsif Error then
raise Data_Error;
end if;
end if;
else
Getnum (File, Result);
end if;
begin
Item := Num (Result);
exception
when Constraint_Error =>
raise Data_Error;
end;
Safe_Support.File_Unlock (File);
exception
when others =>
Safe_Support.File_Unlock (File);
raise;
end Get;
procedure Get (Item : out Num; Width : in Field := 0) is
begin
-- Called get() does file_lock()/file_unlock()
Get (Current_Input, Item, Width);
end Get;
procedure Put (File : in File_Type;
Item : in Num;
Width : in Field := Default_Width;
Base : in Number_Base := Default_Base) is
Last : Integer := 68;
First : Integer := Last;
Len : Integer;
Str : String (1 .. Last);
begin
Safe_Support.File_Lock (File);
Must_Be_Output (File);
Put (Str, Item, Base);
while First > 1 loop
if Str (First) = ' ' then
exit;
end if;
First := First - 1;
end loop;
Len := Width;
if Width < Last - First then
Len := Last - First;
end if;
if File.Linelength /= 0 and then Len > File.Linelength then
raise Layout_Error;
end if;
if File.Linelength /= 0 and then
Natural (Get_Col (File)) + Len - 1 > File.Linelength then
Putchar (File_Ptr (File), Ascii.Lf);
end if;
for I in Last - First + 1 .. Width loop
Putchar (File_Ptr (File), ' ');
end loop;
for I in First + 1 .. Last loop
Putchar (File_Ptr (File), Str (I));
end loop;
if File.Always_Flush then
Flush (File_Ptr (File));
end if;
Safe_Support.File_Unlock (File);
exception
when others =>
Safe_Support.File_Unlock (File);
raise;
end Put;
procedure Put (Item : in Num;
Width : in Field := Default_Width;
Base : in Number_Base := Default_Base) is
begin
-- Called put() does file_lock()/file_unlock()
Put (Current_Output, Item, Width, Base);
end Put;
procedure Get (From : in String; Item : out Num; Last : out Positive) is
Result : Integer;
Error : Boolean := False;
I : Integer;
Int_Last : Integer; -- In case getnum returns a last of 0
begin
--
-- test for end_error
--
I := From'First;
loop
if I > From'Last then
raise End_Error;
end if;
exit when From (I) /= ' ' and then From (I) /= Ascii.Ht;
I := I + 1;
end loop;
Getnum (From, Result, Int_Last, Error);
if Error or Int_Last = 0 then
raise Data_Error;
else
Last := Int_Last;
end if;
begin
Item := Num (Result);
exception
when Constraint_Error =>
raise Data_Error;
end;
end Get;
procedure Put (To : out String;
Item : in Num;
Base : in Number_Base := Default_Base) is
Val : Integer := Integer (Item);
Sign : Character := '-';
First : Boolean := True;
Done : Boolean := False;
Last : Integer := To'Last;
Pos : Integer := -1;
Cbase : Number_Base := Base;
begin
if Base /= 10 then
Last := To'Last - 1;
if (Last < To'First) then
raise Layout_Error;
end if;
To (To'Last) := '#';
end if;
if Val >= 0 then
Sign := ' ';
Val := -Val;
end if;
for I in reverse To'First .. Last loop
if Val /= 0 then
To (I) := Numbers (-(Val rem Cbase) + 1);
Val := Val / Cbase;
else
if First then
To (I) := '0';
elsif not Done and Base /= 10 then
To (I) := '#';
Val := -Base;
Done := True;
Cbase := 10;
else
To (I) := Sign;
Sign := ' ';
end if;
end if; First := False;
end loop;
if Val /= 0 or else Sign = '-' then
raise Layout_Error;
end if;
if Base /= 10 and not Done then
raise Layout_Error;
end if;
end Put;
end Integer_Io;
nblk1=8
nid=0
hdr6=10
[0x00] rec0=21 rec1=00 rec2=01 rec3=014
[0x01] rec0=15 rec1=00 rec2=02 rec3=038
[0x02] rec0=20 rec1=00 rec2=03 rec3=00e
[0x03] rec0=1c rec1=00 rec2=04 rec3=00c
[0x04] rec0=1d rec1=00 rec2=05 rec3=06e
[0x05] rec0=23 rec1=00 rec2=06 rec3=034
[0x06] rec0=20 rec1=00 rec2=07 rec3=002
[0x07] rec0=0b rec1=00 rec2=08 rec3=000
tail 0x21750c11e86843c13de41 0x42a00088462060003