DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - downloadIndex: ┃ B T ┃
Length: 7998 (0x1f3e) Types: TextFile Names: »B«
└─⟦afbc8121e⟧ Bits:30000532 8mm tape, Rational 1000, MC68020_OS2000 7_2_2 └─ ⟦77aa8350c⟧ »DATA« └─⟦f794ecd1d⟧ └─⟦4c85d69e2⟧ └─⟦this⟧
-- The use of this system is subject to the software license terms and -- conditions agreed upon between Rational and the Customer. -- -- Copyright 1988 by Rational. -- -- RESTRICTED RIGHTS LEGEND -- -- Use, duplication, or disclosure by the Government is subject to -- restrictions as set forth in subdivision (b)(3)(ii) of the Rights in -- Technical Data and Computer Software clause at 52.227-7013. -- -- -- Rational -- 3320 Scott Boulevard -- Santa Clara, California 95054-3197 -- -- PROPRIETARY AND CONFIDENTIAL INFORMATION OF RATIONAL; -- USE OR COPYING WITHOUT EXPRESS WRITTEN AUTHORIZATION -- IS STRICTLY PROHIBITED. THIS MATERIAL IS PROTECTED AS -- AN UNPUBLISHED WORK UNDER THE U.S. COPYRIGHT ACT OF -- 1976. CREATED 1988. ALL RIGHTS RESERVED. -- -- with Literal_Parser; with Primitive_Io; -- for debugging only separate (Common_Text_Io) package body Enum_Io is -- procedure Pput (S : in String; Absorb_Output : Boolean := False) -- renames Primitive_Io.Put_Line; -- Could be provided by a single instruction translate if the table -- space was warranted. procedure Lower (S : in out String) is begin for I in S'Range loop if S (I) in 'A' .. 'Z' then S (I) := Character'Val (Character'Pos (S (I)) - Character'Pos ('A') + Character'Pos ('a')); end if; end loop; end Lower; function Max (L, R : Integer) return Integer is begin if L > R then return L; else return R; end if; end Max; pragma Inline (Max); procedure Get (File : in File_Type; Item : out String; Item_Length : out Natural) is S : Input_State renames State_Handling.Get_Input_State (File).all; B : Buffering.Data_Buffer := Dio.Get (File); Status : Literal_Parser.Parse_Status; Last_Of_Source : Natural; function "=" (L, R : Literal_Parser.Parse_Status) return Boolean renames Literal_Parser."="; begin loop Next_Buffer (File, S, B); -- ^ Can raise End_Error here declare N : constant Natural := B.Head - B.Tail + 1; S : String (1 .. N); begin -- Too bad we have to make a copy here! if N > 0 then Machine_Primitive_Operations.Move_Bytes (B.Buffer (B.Tail .. B.Max_Length), S, N); end if; Literal_Parser.Parse_Enumeration (Source => S, Unprintable_Terminators => False, Result => Item, Last => Item_Length, Status => Status, Last_Of_Source => Last_Of_Source); -- Pput ("Status is " & -- Literal_Parser.Parse_Status'Image (Status)); end; -- Since we're in a copy of the buffer, the following doesn't work: -- Buffering.Consume (B, Last_Of_Source - B.Tail + 1); Buffering.Consume (B, Last_Of_Source); exit when Status /= Literal_Parser.Empty_Field; -- Here we may have to skip a terminator next if not Buffering.Is_Empty (B) then declare C : Character := Buffering.Peek (B); begin if C = Line_Terminator then Buffering.Consume (B, 1); New_Line (S); elsif C = Page_Terminator then Buffering.Consume (B, 1); if not Buffering.Is_Empty (B) then C := Buffering.Peek (B); if C = Line_Terminator then Buffering.Consume (B, 1); end if; end if; New_Page (S); else -- and if it isn't a terminator ???????? raise Data_Error; end if; end; end if; end loop; case Status is when Literal_Parser.Ok => null; when Literal_Parser.Syntax_Error => raise Iof.Input_Syntax_Error; when others => raise Data_Error; -- How can this happen? end case; Dio.Release (File); exception when Constraint_Error => Dio.Release (File); raise Iof.Input_Value_Error; when others => Dio.Release (File); raise; end Get; procedure Get (From : in String; Item : out String; Item_Length : out Natural; Last : out Positive) is Status : Literal_Parser.Parse_Status; Last_Of_Source : Natural; begin Literal_Parser.Parse_Enumeration (Source => From, Unprintable_Terminators => False, Result => Item, Last => Item_Length, Status => Status, Last_Of_Source => Last_Of_Source); case Status is when Literal_Parser.Ok => Last := Last_Of_Source; when Literal_Parser.Empty_Field => raise End_Error; when Literal_Parser.Syntax_Error => raise Iof.Input_Syntax_Error; when others => raise Data_Error; -- How can this happen? end case; exception when Constraint_Error => raise Iof.Input_Value_Error; end Get; procedure Put (File : in File_Type; Item : in String; Width : in Field; Set : in Type_Set) is S : Output_State renames State_Handling.Get_Output_State (File).all; Item_Length : constant Natural := Item'Length; Padded_Image : String (1 .. Max (Width, Item_Length)); begin Padded_Image (1 .. Item_Length) := Item; if Set = Lower_Case and Item (Item'First) /= ''' then Lower (Padded_Image (1 .. Item_Length)); end if; if Item'Length < Width then Machine_Primitive_Operations.Blank_Fill (Padded_Image (Item_Length + 1 .. Padded_Image'Last), Width - Item_Length); end if; Put_Unbroken (File, S, Padded_Image); Dio.Release (File); exception when others => Dio.Release (File); raise; end Put; procedure Put (To : out String; Item : in String; Set : in Type_Set) is To_First : constant Natural := To'First; Item_Length : constant Natural := Item'Length; begin if Item_Length > To'Length then raise Iof.Item_Length_Error; end if; if Set = Lower_Case and Item (Item'First) /= ''' then declare I : String (1 .. Item_Length) := Item; begin Lower (I); To (To_First .. To_First + Item_Length - 1) := I; end; else To (To_First .. To_First + Item_Length - 1) := Item; end if; if Item_Length < To'Length then Machine_Primitive_Operations.Blank_Fill (To (To'First + Item_Length .. To'Last), To'Last - To_First - Item_Length + 1); end if; end Put; end Enum_Io;