DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400 Tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400 Tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: B T

⟦7d67b73d8⟧ TextFile

    Length: 2118 (0x846)
    Types: TextFile
    Names: »B«

Derivation

└─⟦180fe333a⟧ Bits:30000405 8mm tape, Rational 1000, SW CATALOG, 10_20_0
└─⟦180fe333a⟧ Bits:30000537 8mm tape, Rational 1000, SW Catalog 10_20_0
    └─⟦5cb1d1d7f⟧ »DATA« 
        └─⟦3b1ee7bd8⟧ 
            └─⟦this⟧ 

TextFile

with Text_Io;

separate (Tar)
procedure Put_Bytes (Data : System.Byte_String) is

    Line : String (1 .. 80);
    Count : Natural := 0;

    Byte_Line : System.Byte_String (1 .. 16);
    Byte_Count : Natural := 0;

    type Digit_Table is array (System.Byte range 0 .. 15) of Character;

    To_Digit : constant Digit_Table := ('0', '1', '2', '3', '4', '5', '6', '7',
                                        '8', '9', 'A', 'B', 'C', 'D', 'E', 'F');

    procedure Flush is
    begin
        Text_Io.Put_Line (Line (1 .. Count));
        Count := 0;
    end Flush;

    procedure Put (Data : Character) is
    begin
        if Data in ' ' .. '~' then
            Count := Count + 1;
            Line (Count) := Data;

            if Count = Line'Last then
                Flush;
            end if;
        else
            Put ('.');
        end if;
    end Put;

    procedure Byte_Flush is

        procedure Put (Data : System.Byte) is
        begin
            Put (' ');
            Put (To_Digit (System."/" (Data, 16)));
            Put (To_Digit (System."mod" (Data, 16)));
        end Put;

    begin
        if Byte_Count > 0 then
            for I in 1 .. Byte_Count loop
                Put (Byte_Line (I));
            end loop;
            for I in Byte_Count + 1 .. Byte_Line'Last loop
                Put (' ');
                Put (' ');
                Put (' ');
            end loop;

            Put (' ');
            Put (' ');

            for I in 1 .. Byte_Count loop
                Put (Character'Val (System."mod" (Byte_Line (I), 128)));
            end loop;

            Flush;
        end if;

        Byte_Count := 0;
    end Byte_Flush;

    procedure Byte_Put (Data : System.Byte) is
    begin
        Byte_Count := Byte_Count + 1;
        Byte_Line (Byte_Count) := Data;

        if Byte_Count = Byte_Line'Last then
            Byte_Flush;
        end if;
    end Byte_Put;

begin
    if Data'Length <= 0 then
        Text_Io.Put_Line ("");
    else
        for I in Data'Range loop
            Byte_Put (Data (I));
        end loop;

        Byte_Flush;
    end if;
end Put_Bytes;