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 - download
Index: ┃ B T

⟦56265a121⟧ TextFile

    Length: 2320 (0x910)
    Types: TextFile
    Names: »B«

Derivation

└─⟦bfaa708f6⟧ Bits:30000531 8mm tape, Rational 1000, INSIGHT 1_3_0
    └─ ⟦c51948655⟧ »DATA« 
        └─⟦266b31e86⟧ 
            └─⟦this⟧ 

TextFile

function Next_Token_Scanner return String is
    -- global parameters:  Buffer, Buffer_Index
    Token_Start : Natural;
    Next_Char : Character;
    Quote : constant Character := '"';
begin
    while Buffer_Index <= Buffer'Last and then Buffer (Buffer_Index) = ' ' loop
        Buffer_Index := Buffer_Index + 1;
    end loop;

    Token_Start := Buffer_Index;
    if Buffer_Index > Buffer'Last then
        return "";
    end if;
    if Buffer (Buffer_Index) = Quote then
        -- quoted string token; look for ending Quote
        Buffer_Index := Buffer_Index + 1;  -- point to 1st string char
        Token_Start := Buffer_Index;
        while Buffer_Index <= Buffer'Last loop
            Next_Char := Buffer (Buffer_Index);
            Buffer_Index := Buffer_Index + 1;

            if Next_Char = Quote then
                -- if 2 quotes in a row; treat as one quote
                -- single quote; end of token
                if Buffer_Index > Buffer'Last or else
                   Buffer (Buffer_Index) /= Quote then
                    -- Just one quote.  Done
                    return Buffer (Token_Start .. Buffer_Index - 1);
                else
                    -- Got 2 quotes!
                    -- Shift array left 1.  Leave Buffer_Index
                    -- at char past double-"
                    Buffer (Buffer_Index .. Buffer'Last - 1) :=
                       Buffer (Buffer_Index + 1 .. Buffer'Last);
                end if;
            end if;
        end loop;

        -- open but no matching quote
        return Buffer (Token_Start .. Buffer'Last);
    else
        while Buffer_Index <= Buffer'Last loop
            -- regular case; just eat chars till delimiter
            Next_Char := Buffer (Buffer_Index);
            Buffer_Index := Buffer_Index + 1;
            case Next_Char is
                when '!' .. '~' => -- all printing characters
                    null;
                when others =>
                    exit;
            end case;
        end loop;

        if Buffer_Index > Buffer'Last then
            return Buffer (Token_Start .. Buffer'Last);
        else
            return Buffer (Token_Start .. Buffer_Index -
                                             2);  -- delim + incremented again
        end if;
    end if;
end Next_Token_Scanner;