|
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 - download
Length: 13312 (0x3400) Types: Ada Source Notes: 03_class, FILE, R1k_Segment, e3_tag, package body String_Class, seg_037f25, seg_038ad6
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─ ⟦5a81ac88f⟧ »Space Info Vol 1« └─⟦this⟧ └─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─ ⟦cfc2e13cd⟧ »Space Info Vol 2« └─⟦this⟧
with Boolean_Class; with Bounded_String; with Integer_Class; with Msg_Report; with Object; with Scanner; with String_Utilities; package body String_Class is function Bs_Image (A_String : Scanner.B_String) return String renames Bounded_String.Image; procedure Bs_Init (A_String : in out Scanner.B_String) renames Bounded_String.Free; procedure Bs_Copy (A_String : in out Scanner.B_String; A_Value : String) renames Bounded_String.Copy; procedure Bs_Cat (Target : in out Scanner.B_String; Source : Scanner.B_String) renames Bounded_String.Append; function Bs_Length (A_String : Scanner.B_String) return Natural renames Bounded_String.Length; function Is_Equal_String (Str1 : String; Str2 : String; Ignore_Case : Boolean := True) return Boolean renames String_Utilities.Equal; function Su_Lower (A_String : String) return String renames String_Utilities.Lower_Case; function Su_Upper (A_String : String) return String renames String_Utilities.Upper_Case; function Su_Capitalize (A_String : String) return String renames String_Utilities.Capitalize; Max : constant := 100; Instance_Table : array (1 .. Max) of Struct_Table; function First_Free return Natural is Pos : Natural := 0; begin for I in Instance_Table'Range loop if Instance_Table (I).Indic = Unused then Pos := I; exit; end if; end loop; if Pos /= 0 then return Pos; else Msg_Report.Interpret_Error ("sorry, string instance table is full"); raise Instance_Table_Full; end if; end First_Free; function Create (Value : String) return Object.Reference is Pos : Natural; A_String : Scanner.B_String; The_Class : Object.Class := Object.C_String; begin Bs_Init (A_String); Bs_Copy (A_String, Value); Pos := First_Free; Instance_Table (Pos).Indic := Used; Instance_Table (Pos).Value := A_String; return Object.Create (The_Class, Pos); end Create; function Delete (The_String : Object.Reference) return Object.Reference is begin Instance_Table (Object.Identificator (The_String)).Indic := Unused; return Object.Void_Reference; end Delete; function Size (The_String : Object.Reference) return Natural is begin return Bs_Length (Instance_Table (Object.Identificator (The_String)).Value); end Size; function In_Text (The_String : Object.Reference) return String is begin return Bs_Image (Instance_Table (Object.Identificator (The_String)).Value); end In_Text; function Lower_Case (The_String : Object.Reference) return Object.Reference is Result : Object.Reference; begin Result := Delete (The_String); Result := Create (Su_Lower (Bs_Image (Instance_Table (Object.Identificator (The_String)). Value))); return Result; end Lower_Case; function Upper_Case (The_String : Object.Reference) return Object.Reference is Result : Object.Reference; begin Result := Delete (The_String); Result := Create (Su_Upper (Bs_Image (Instance_Table (Object.Identificator (The_String)). Value))); return Result; end Upper_Case; function Capitalize (The_String : Object.Reference) return Object.Reference is Result : Object.Reference; begin Result := Delete (The_String); Result := Create (Su_Capitalize (Bs_Image (Instance_Table (Object.Identificator (The_String)). Value))); return Result; end Capitalize; function "+" (First_String : Object.Reference; Second_String : Object.Reference) return Object.Reference is Source, Target : Scanner.B_String; Result : Object.Reference; begin Source := Instance_Table (Object.Identificator (Second_String)).Value; Target := Instance_Table (Object.Identificator (First_String)).Value; Bs_Cat (Target, Source); Result := Delete (First_String); Result := Create (Bs_Image (Target)); return Result; end "+"; function Is_Equal (First_String : Object.Reference; Second_String : Object.Reference) return Object.Reference is begin return Boolean_Class.Create (Bs_Image (Instance_Table (Object.Identificator (First_String)). Value) = Bs_Image (Instance_Table (Object.Identificator (Second_String)). Value)); end Is_Equal; function Send (To_Object : Object.Reference; The_Message : Message.Selector; With_Arguments : Arguments.List := Arguments.Void_Arguments) return Object.Reference is Result, Object1, Object2 : Object.Reference; Args : Arguments.List; begin Object1 := To_Object; Args := With_Arguments; case Arguments.How_Many (Args) is when 0 => if Is_Equal_String (Message.Image (The_Message), "Capitalise") then Msg_Report.Information ("message is Capitalise "); Result := Capitalize (Object1); elsif Is_Equal_String (Message.Image (The_Message), "TaTaille") then Msg_Report.Information ("message is TaTaille "); Result := Integer_Class.Create (Integer (Size (Object1))); elsif Is_Equal_String (Message.Image (The_Message), "EnMajuscule") then Msg_Report.Information ("message is enmajuscule "); Result := Upper_Case (Object1); elsif Is_Equal_String (Message.Image (The_Message), "EnMinuscule") then Msg_Report.Information ("message is enminuscule "); Result := Lower_Case (Object1); else Msg_Report.Interpret_Error ("Incorrect unary method " & Message.Image (The_Message) & " for object " & In_Text (Object1)); raise Incorrect_Method; end if; when 1 => Arguments.First (Args); Arguments.Read (Args, Object2); if Message.Image (The_Message) = "+" then Msg_Report.Information ("Message is +"); Result := Object1 + Object2; elsif Message.Image (The_Message) = "=" then Msg_Report.Information ("Message is ="); Result := Is_Equal (Object1, Object2); else Msg_Report.Interpret_Error ("Incorrect binary method " & Message.Image (The_Message) & " for object " & In_Text (Object1)); raise Incorrect_Method; end if; when others => Msg_Report.Interpret_Error ("Incorrect nb of arguments for method " & Message.Image (The_Message) & " to object " & In_Text (Object1)); raise Incorrect_Nb_Args; end case; return Result; end Send; end String_Class;
nblk1=c nid=6 hdr6=14 [0x00] rec0=21 rec1=00 rec2=01 rec3=06e [0x01] rec0=26 rec1=00 rec2=07 rec3=032 [0x02] rec0=01 rec1=00 rec2=08 rec3=016 [0x03] rec0=22 rec1=00 rec2=04 rec3=018 [0x04] rec0=1e rec1=00 rec2=03 rec3=05c [0x05] rec0=1f rec1=00 rec2=0a rec3=030 [0x06] rec0=20 rec1=00 rec2=02 rec3=012 [0x07] rec0=15 rec1=00 rec2=0c rec3=024 [0x08] rec0=1d rec1=00 rec2=09 rec3=03a [0x09] rec0=16 rec1=00 rec2=05 rec3=000 [0x0a] rec0=0a rec1=00 rec2=05 rec3=000 [0x0b] rec0=7e rec1=00 rec2=00 rec3=000 tail 0x21531491484e663e91004 0x42a00088462060003 Free Block Chain: 0x6: 0000 00 0b 01 3a 80 19 73 20 53 74 72 69 6e 67 5f 55 ┆ : s String_U┆ 0xb: 0000 00 00 00 41 80 0a 74 72 69 6e 67 29 29 3b 20 20 ┆ A tring)); ┆