|
|
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: 7168 (0x1c00)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Strings, seg_04b97d
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦5a81ac88f⟧ »Space Info Vol 1«
└─⟦this⟧
-- This package defines types and routines for manipulating
-- varying-length Ada strings. Similar to A_strings.
-- SFZ\x0910/26/91
with A_Strings;
package body Strings is
pragma Suppress (Length_Check);
pragma Suppress (Range_Check);
pragma Suppress (Index_Check);
function Insert (S : String; Into : String; At_Char : Natural)
return String is
begin
return Into (Into'First .. At_Char - 1) &
S & Into (At_Char .. Into'Last);
end Insert;
function Insert (S : Character; Into : String; At_Char : Natural)
return String is
begin
return Into (Into'First .. At_Char - 1) &
S & Into (At_Char .. Into'Last);
end Insert;
function Change (S : String; At_Char, To_Char : Natural; Into : String)
return String is
begin
return S (S'First .. At_Char - 1) & Into & S (To_Char + 1 .. S'Last);
end Change;
function Has (Pattern, S : String; Start : Natural := 1) return Integer is
Len_Less_One : Integer := Pattern'Length - 1;
Real_Start : Natural := Start;
begin
if Start < S'First then
Real_Start := S'First;
end if;
for I in Start .. S'Last - Len_Less_One loop
if S (I .. I + Len_Less_One) = Pattern then
return I;
end if;
end loop;
return 0;
end Has;
function Has (Pattern : Character; S : String; Start : Natural := 1)
return Integer is
Real_Start : Natural := Start;
begin
if Start < S'First then
Real_Start := S'First;
end if;
for I in Start .. S'Last loop
if S (I) = Pattern then
return I;
end if;
end loop;
return 0;
end Has;
function Next (Pattern, S : String; Start : Natural := 1) return Natural is
Index : Integer := Has (Pattern, S, Start);
begin
if Index = 0 then
raise Not_Found;
end if;
return Index;
end Next;
function Next (Pattern : Character; S : String; Start : Natural := 1)
return Natural is
Index : Integer := Has (Pattern, S, Start);
begin
if Index = 0 then
raise Not_Found;
end if;
return Index;
end Next;
function Last (Pattern, S : String; Start : Natural := 1) return Natural is
I : Integer := Start - 1;
begin
if I = 0 then
I := S'First - 1;
end if;
loop
I := Next (Pattern, S, I + 1);
end loop;
exception
when Not_Found =>
if I = Start - 1 then
raise Not_Found;
end if;
return I;
end Last;
function Last (Pattern : Character; S : String; Start : Natural := 1)
return Natural is
begin
return Last (String'(1 => Pattern), S, Start);
end Last;
function Substitute
(For_Pattern, To_Pattern : String; S : String) return String is
begin
raise Program_Error; -- not yet implemented
return ""; --WARNING
end Substitute;
function Reverse_Order (S : String) return String is
Result : String (S'Range);
begin
for I in S'Range loop
Result (I) := S (S'Last + S'First - I);
end loop;
return Result;
end Reverse_Order;
function Trim (S : String) return String is
begin
for I in reverse 1 .. S'Length loop
if S (I) /= ' ' then
return S (S'First .. I);
end if;
end loop;
return "";
end Trim;
procedure Pad_Left
(S : String; T : in out String; Pad_Char : Character := ' ') is
begin
if S'Length > T'Length then
raise Constraint_Error;
end if;
for I in T'First .. T'Last - S'Length loop
T (I) := Pad_Char;
end loop;
T (T'Last - S'Length + 1 .. T'Last) := S;
end Pad_Left;
procedure Pad_Right
(S : String; T : in out String; Pad_Char : Character := ' ') is
begin
if S'Length > T'Length then
raise Constraint_Error;
end if;
for I in T'First + S'Length .. T'Last loop
T (I) := Pad_Char;
end loop;
T (T'First .. T'First + S'Length - 1) := S;
end Pad_Right;
procedure Lower_To_Upper (S : in out String) is
begin
for I in S'Range loop
S (I) := A_Strings.To_Upper (S (I));
end loop;
end Lower_To_Upper;
procedure Upper_To_Lower (S : in out String) is
begin
for I in S'Range loop
S (I) := A_Strings.To_Lower (S (I));
end loop;
end Upper_To_Lower;
procedure Translate (From_Old, To_New : String; S : in out String) is
Trans : array (Character) of Character;
begin
if From_Old'First /= To_New'First or else
From_Old'Last /= To_New'Last then
raise Constraint_Error;
end if;
for C in Character loop
Trans (C) := C;
end loop;
for I in From_Old'Range loop
Trans (From_Old (I)) := To_New (I);
end loop;
for I in S'Range loop
S (I) := Trans (S (I));
end loop;
end Translate;
end Strings;
nblk1=6
nid=0
hdr6=c
[0x00] rec0=1f rec1=00 rec2=01 rec3=012
[0x01] rec0=20 rec1=00 rec2=02 rec3=082
[0x02] rec0=24 rec1=00 rec2=03 rec3=064
[0x03] rec0=21 rec1=00 rec2=04 rec3=092
[0x04] rec0=21 rec1=00 rec2=05 rec3=032
[0x05] rec0=17 rec1=00 rec2=06 rec3=000
tail 0x21548c952868436802259 0x42a00088462060003