|
|
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: 13312 (0x3400)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Misc_String_Utilities, seg_02ba41
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦5a81ac88f⟧ »Space Info Vol 1«
└─⟦this⟧
with String_Utilities;
package body Misc_String_Utilities is
function Is_Blank (This_String : in String) return Boolean is
Blank : constant Character := ' ';
Tab : constant Character := Ascii.Ht;
begin
if This_String = "" then
return True;
end if;
for Index in This_String'Range loop
case This_String (Index) is
when Blank | Tab =>
null;
when others =>
return False;
end case;
end loop;
return True;
end Is_Blank;
function Is_Continuous (This_String : in String) return Boolean is
begin
return Misc_String_Utilities.Continuous (This_String) = This_String;
end Is_Continuous;
function Continuous (This_String : in String) return String is
Tab : constant Character := Ascii.Ht;
begin
return Misc_String_Utilities.Stripped
(Misc_String_Utilities.Stripped
(This_String, This_Character => Tab));
end Continuous;
function Is_Padded (This_String : in String) return Boolean is
begin
return String_Utilities.
Strip_Leading (This_String) /= This_String or else
String_Utilities.
Strip_Trailing (This_String) /= This_String;
end Is_Padded;
function Strip (Character_At : in Integer; In_String : in String)
return String is
Preceeding_Stuff : constant String :=
In_String (In_String'First .. (Character_At - 1));
Following_Stuff : constant String :=
In_String ((Character_At + 1) .. In_String'Last);
New_String_Raw : constant String := Preceeding_Stuff & Following_Stuff;
New_String_Normalized :
constant String (1 .. New_String_Raw'Length) := New_String_Raw;
begin
return New_String_Normalized;
end Strip;
function Are_Equal (This_Character : in Character;
That_Character : in Character;
Ignore_Case : in Boolean) return Boolean is
begin
if Ignore_Case then
return String_Utilities.Upper_Case (This_Character) =
String_Utilities.Upper_Case (That_Character);
else
return This_Character = That_Character;
end if;
end Are_Equal;
function Stripped (This_String : in String;
This_Character : in Character := ' ';
Ignore_Case : in Boolean := False;
Starting_At : in Positive := 1) return String is
The_String : constant String (1 .. This_String'Length) := This_String;
begin
if The_String = "" then
return The_String;
end if;
for Index in The_String'Range loop
if Are_Equal
(The_String (Index), This_Character, Ignore_Case) then
return Stripped (This_String => Strip (Character_At => Index,
In_String => The_String),
This_Character => This_Character,
Ignore_Case => Ignore_Case,
Starting_At => Index + 1);
end if;
end loop;
return The_String;
end Stripped;
function Strip (From_Here : in Integer;
To_Here : in Integer;
In_String : in String) return String is
Preceeding_Stuff : constant String :=
In_String (In_String'First .. (From_Here - 1));
Following_Stuff : constant String :=
In_String ((To_Here + 1) .. In_String'Last);
New_String_Raw : constant String := Preceeding_Stuff & Following_Stuff;
New_String_Normalized :
constant String (1 .. New_String_Raw'Length) := New_String_Raw;
begin
return New_String_Normalized;
end Strip;
function Are_Equal (This_String : in String;
That_String : in String;
Ignore_Case : in Boolean) return Boolean is
begin
if Ignore_Case then
return String_Utilities.Upper_Case (This_String) =
String_Utilities.Upper_Case (That_String);
else
return This_String = That_String;
end if;
end Are_Equal;
function Locate (This_Substring : in String;
Within_String : in String;
Ignore_Case : in Boolean;
Starting_At : in Positive := 1) return Natural is
The_String : constant String (1 .. Within_String'Length) :=
Within_String;
begin
for Index in Starting_At .. The_String'Last loop
if Are_Equal (This_Substring,
The_String (Index ..
(Index + (This_Substring'Length - 1))),
Ignore_Case) then
return Index;
end if;
end loop;
return 0;
exception
when others =>
return 0;
end Locate;
function Stripped (This_String : in String;
This_Substring : in String;
Ignore_Case : in Boolean := False;
Starting_At : in Positive := 1) return String is
The_String : constant String (1 .. This_String'Length) := This_String;
Current_Index : Natural := 0;
begin
if This_String = "" or else This_Substring = "" then
-- Is a no-op.
return This_String;
end if;
loop
Current_Index := Locate (This_Substring => This_Substring,
Within_String => The_String,
Ignore_Case => Ignore_Case,
Starting_At => Starting_At);
if Current_Index /= 0 then
return Stripped
(This_String =>
Strip (From_Here => Current_Index,
To_Here => Current_Index +
(This_Substring'Length - 1),
In_String => The_String),
This_Substring => This_Substring,
Ignore_Case => Ignore_Case,
Starting_At => Current_Index +
This_Substring'Length);
else
return The_String;
end if;
end loop;
end Stripped;
function Replace (Character_At : in Integer;
With_Character : in Character;
In_String : in String) return String is
Preceeding_Stuff : constant String :=
In_String (In_String'First .. (Character_At - 1));
Following_Stuff : constant String :=
In_String ((Character_At + 1) .. In_String'Last);
New_String_Raw : constant String :=
Preceeding_Stuff & With_Character & Following_Stuff;
New_String_Normalized :
constant String (1 .. New_String_Raw'Length) := New_String_Raw;
begin
return New_String_Normalized;
end Replace;
function Replaced (This_String : in String;
Old_Character : in Character := '_';
New_Character : in Character := ' ';
Ignore_Case : in Boolean := False;
Starting_At : in Positive := 1) return String is
The_String : constant String (1 .. This_String'Length) := This_String;
begin
if The_String = "" then
return The_String;
end if;
for Index in The_String'Range loop
if Are_Equal
(The_String (Index), Old_Character, Ignore_Case) then
return Replaced (This_String =>
Replace (Character_At => Index,
With_Character => New_Character,
In_String => The_String),
Old_Character => Old_Character,
New_Character => New_Character,
Ignore_Case => Ignore_Case,
Starting_At => Index + 1);
end if;
end loop;
return The_String;
end Replaced;
function Replace (From_Here : in Integer;
To_Here : in Integer;
With_Substring : in String;
In_String : in String) return String is
Preceeding_Stuff : constant String :=
In_String (In_String'First .. (From_Here - 1));
Following_Stuff : constant String :=
In_String ((To_Here + 1) .. In_String'Last);
New_String_Raw : constant String :=
Preceeding_Stuff & With_Substring & Following_Stuff;
New_String_Normalized :
constant String (1 .. New_String_Raw'Length) := New_String_Raw;
begin
return New_String_Normalized;
end Replace;
function Replaced (This_String : in String;
Old_Substring : in String;
New_Substring : in String;
Ignore_Case : in Boolean := False;
Starting_At : in Positive := 1) return String is
The_String : constant String (1 .. This_String'Length) := This_String;
Current_Index : Natural := 0;
begin
if This_String = "" or else Old_Substring = "" then
-- Is a no-op.
return This_String;
end if;
loop
Current_Index := Locate (This_Substring => Old_Substring,
Within_String => The_String,
Ignore_Case => Ignore_Case,
Starting_At => Starting_At);
if Current_Index /= 0 then
return Replaced
(This_String =>
Replace (From_Here => Current_Index,
To_Here => Current_Index +
(Old_Substring'Length - 1),
With_Substring => New_Substring,
In_String => The_String),
Old_Substring => Old_Substring,
New_Substring => New_Substring,
Ignore_Case => Ignore_Case,
Starting_At => Current_Index + New_Substring'Length);
else
return The_String;
end if;
end loop;
end Replaced;
end Misc_String_Utilities;
nblk1=c
nid=0
hdr6=18
[0x00] rec0=23 rec1=00 rec2=01 rec3=056
[0x01] rec0=19 rec1=00 rec2=02 rec3=018
[0x02] rec0=1b rec1=00 rec2=03 rec3=020
[0x03] rec0=15 rec1=00 rec2=04 rec3=032
[0x04] rec0=1c rec1=00 rec2=05 rec3=00c
[0x05] rec0=1f rec1=00 rec2=06 rec3=008
[0x06] rec0=14 rec1=00 rec2=07 rec3=05e
[0x07] rec0=17 rec1=00 rec2=08 rec3=06c
[0x08] rec0=18 rec1=00 rec2=09 rec3=02c
[0x09] rec0=18 rec1=00 rec2=0a rec3=03a
[0x0a] rec0=15 rec1=00 rec2=0b rec3=022
[0x0b] rec0=0a rec1=00 rec2=0c rec3=000
tail 0x21523ff7683f07912c066 0x42a00088462060003