|
|
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: 25600 (0x6400)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Vstring_Query, seg_005841
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦5a81ac88f⟧ »Space Info Vol 1«
└─⟦this⟧
with Vstring_Type;
use Vstring_Type;
package body Vstring_Query is
------------------------------------------------------------------------------
-- VString Query and SubString Functions
------------------------------------------------------------------------------
-- Copyright 1988 - 1991 by Rational, Santa Clara, California.
--
-- All Rights Reserved.
--
-- Permission to use, copy, modify, and distribute this software and its
-- documentation for any purpose and without fee is hereby granted,
-- provided that the above copyright notice(s) appear in all copies and that
-- both that copyright notice(s) and this permission notice appear in
-- supporting documentation, and that the name of Rational not be used in
-- advertising or publicity pertaining to distribution of the software
-- without specific, written prior permission.
--
-- Rational disclaims all warranties with regard to this software, including
-- all implied warranties of merchantability and fitness, in no event shall
-- Rational be liable for any special, indirect or consequential damages or
-- any damages whatsoever resulting from loss of use, data or profits, whether
-- in an action of contract, negligence or other tortious action, arising out
-- of or in connection with the use or performance of this software.
------------------------------------------------------------------------------
--\x0c
procedure Empty_Vstring (Vstr : in out Vstring_Data) is
----Sets the Vstring to be Empty; the null string.
begin
Vstr.Length := 0;
end Empty_Vstring;
--\x0c
procedure Empty_Vstring (Vstr : Vstring) is
----Sets the Vstring to be Empty; the null string.
begin
Vstr.Length := 0;
end Empty_Vstring;
--\x0c
function Length (Vstr : Vstring_Data) return S_Natural is
----Called to obtain the current length of the string.
begin
return Vstr.Length;
end Length;
--\x0c
function Length (Vstr : Vstring) return S_Natural is
----Called to obtain the current length of the string.
begin
return Vstr.Length;
end Length;
--\x0c
function Maximum_Length (Vstr : Vstring_Data) return S_Natural is
----Called to obtain the maximum number of characters a string may hold.
begin
return Vstr.Maximum_Length;
end Maximum_Length;
--\x0c
function Maximum_Length (Vstr : Vstring) return S_Natural is
----Called to obtain the maximum number of characters a string may hold.
begin
return Vstr.Maximum_Length;
end Maximum_Length;
--\x0c
function Length_Left (Vstr : Vstring_Data) return S_Natural is
----Called to obtain the amount of room remaining in a string.
begin
return Vstr.Maximum_Length - Vstr.Length;
end Length_Left;
--\x0c
function Length_Left (Vstr : Vstring) return S_Natural is
----Called to obtain the amount of room remaining in a string.
begin
return Vstr.Maximum_Length - Vstr.Length;
end Length_Left;
--\x0c
function Char_At (Vstr : Vstring_Data; Pos : S_Positive) return Character is
----Called to return character Pos in the string. Returns Ascii.Nul if
-- the character is not present.
begin
if Pos > Vstr.Length then
return Ascii.Nul;
end if;
return Vstr.Chars (Pos);
end Char_At;
--\x0c
function Char_At (Vstr : Vstring; Pos : S_Positive) return Character is
----Called to return character Pos in the string. Returns Ascii.Nul if
-- the character is not present.
begin
if Pos > Vstr.Length then
return Ascii.Nul;
end if;
return Vstr.Chars (Pos);
end Char_At;
--\x0c
function First (Vstr : Vstring_Data) return Character is
----Returns the first character in the Vstring; returns Ascii.Nul if the
-- string is empty.
begin
if Vstr.Length > 0 then
return Vstr.Chars (1);
else
return Ascii.Nul;
end if;
end First;
--\x0c
function First (Vstr : Vstring) return Character is
----Returns the first character in the Vstring; returns Ascii.Nul if the
-- string is empty.
begin
if Vstr.Length > 0 then
return Vstr.Chars (1);
else
return Ascii.Nul;
end if;
end First;
--\x0c
procedure Lop_First (Vstr : in out Vstring_Data; Char : out Character) is
----Just like First except that the character is removed from the Vstring.
begin
if Vstr.Length = 0 then
Char := Ascii.Nul;
return;
end if;
Char := Vstr.Chars (1);
Vstr.Length := Vstr.Length - 1;
Vstr.Chars (1 .. Vstr.Length) := Vstr.Chars (2 .. Vstr.Length + 1);
end Lop_First;
--\x0c
function Lop_First (Vstr : Vstring) return Character is
----Just like First except that the character is removed from the Vstring.
Char : Character;
begin
if Vstr.Length = 0 then
return Ascii.Nul;
end if;
Char := Vstr.Chars (1);
Vstr.Length := Vstr.Length - 1;
Vstr.Chars (1 .. Vstr.Length) := Vstr.Chars (2 .. Vstr.Length + 1);
return Char;
end Lop_First;
--\x0c
function Last (Vstr : Vstring_Data) return Character is
----Returns the last character in the Vstring; returns Ascii.Nul if the
-- string is empty.
begin
if Vstr.Length > 0 then
return Vstr.Chars (Vstr.Length);
else
return Ascii.Nul;
end if;
end Last;
--\x0c
function Last (Vstr : Vstring) return Character is
----Returns the last character in the Vstring; returns Ascii.Nul if the
-- string is empty.
begin
if Vstr.Length > 0 then
return Vstr.Chars (Vstr.Length);
else
return Ascii.Nul;
end if;
end Last;
--\x0c
procedure Lop_Last (Vstr : in out Vstring_Data; Char : out Character) is
----Just like Last except that the character is removed from the Vstring.
begin
if Vstr.Length = 0 then
Char := Ascii.Nul;
return;
end if;
Char := Vstr.Chars (Vstr.Length);
Vstr.Length := Vstr.Length - 1;
end Lop_Last;
--\x0c
function Lop_Last (Vstr : Vstring) return Character is
----Just like Last except that the character is removed from the Vstring.
begin
if Vstr.Length = 0 then
return Ascii.Nul;
end if;
Vstr.Length := Vstr.Length - 1;
return Vstr.Chars (Vstr.Length + 1);
end Lop_Last;
--\x0c
function Substring_To (Vstr : Vstring_Data;
Pos : S_Positive;
To : S_Positive) return E_String is
----Called to obtain the substring of a Vstring which is contained in
-- Vstr.Chars(Pos..To). If To > Vstr.Length then we return
-- Vstr.Chars(Pos..Vstr.Length). If Pos > Vstr.Length then we return
-- the null string.
begin
if To > Vstr.Length then
return Vstr.Chars (Pos .. Vstr.Length);
end if;
return Vstr.Chars (Pos .. To);
end Substring_To;
--\x0c
function Substring_To (Vstr : Vstring;
Pos : S_Positive;
To : S_Positive) return E_String is
----Called to obtain the substring of a Vstring which is contained in
-- Vstr.Chars(Pos..To). If To > Vstr.Length then we return
-- Vstr.Chars(Pos..Vstr.Length). If Pos > Vstr.Length then we return
-- the null string.
begin
if To > Vstr.Length then
return Vstr.Chars (Pos .. Vstr.Length);
end if;
return Vstr.Chars (Pos .. To);
end Substring_To;
--\x0c
procedure Truncstring_To (Vstr : in out Vstring_Data;
Pos : S_Positive;
To : S_Positive) is
----Called to truncate a string down to the substring contained in
-- Vstr.Chars(Pos..To). If To > Vstr.Length then we truncate it to
-- Vstr.Chars(Pos..Vstr.Length). If Pos > Vstr.Length then the string
-- is set to the null string.
Pos2 : S_Natural := To;
Length : S_Natural := To - Pos + 1;
begin
if Pos2 > Vstr.Length then -- Watch for index overflow
Pos2 := Vstr.Length; -- New 2nd index
Length := Vstr.Length - Pos + 1; -- New result length
end if;
if Pos = 1 then -- Simple case; no data motion
Vstr.Length := Length; -- Just set length and return
return;
end if;
Vstr.Chars (1 .. Length) := Vstr.Chars (Pos .. Pos2);
Vstr.Length := Length;
end Truncstring_To;
-\x0c
procedure Truncstring_To (Vstr : Vstring;
Pos : S_Positive;
To : S_Positive) is
----Called to truncate a string down to the substring contained in
-- Vstr.Chars(Pos..To). If To > Vstr.Length then we truncate it to
-- Vstr.Chars(Pos..Vstr.Length). If Pos > Vstr.Length then the string
-- is set to the null string.
Pos2 : S_Natural := To;
Length : S_Natural := To - Pos + 1;
begin
if Pos2 > Vstr.Length then -- Watch for index overflow
Pos2 := Vstr.Length; -- New 2nd index
Length := Vstr.Length - Pos + 1; -- New result length
end if;
if Pos = 1 then -- Simple case; no data motion
Vstr.Length := Length; -- Just set length and return
return;
end if;
Vstr.Chars (1 .. Length) := Vstr.Chars (Pos .. Pos2);
Vstr.Length := Length;
end Truncstring_To;
--\x0c
function Substring_For (Vstr : Vstring_Data;
Pos : S_Positive;
Cnt : S_Positive) return E_String is
----Called to obtain the substring of a Vstring which is contained in
-- Vstr.Chars(Pos..Pos+Cnt-1). If Pos+Cnt-1 > Vstr.Length then we return
-- Vstr.Chars(Pos..Vstr.Length). If Pos > Vstr.Length then we return
-- the null string.
Pos2 : S_Natural;
begin
----Since Pos+Cnt-1 can be > S_Natural'Last we check this way first.
if Cnt >= Vstr.Length then
return Vstr.Chars (Pos .. Vstr.Length);
end if;
----Now check to see if the For reaches past end-of-string.
Pos2 := Pos + Cnt - 1;
if Pos2 >= Vstr.Length then -- Watch for index overflow
return Vstr.Chars (Pos .. Vstr.Length);
end if;
----Return proper substring
return Vstr.Chars (Pos .. Pos2);
end Substring_For;
--\x0c
function Substring_For (Vstr : Vstring;
Pos : S_Positive;
Cnt : S_Positive) return E_String is
----Called to obtain the substring of a Vstring which is contained in
-- Vstr.Chars(Pos..Pos+Cnt-1). If Pos+Cnt-1 > Vstr.Length then we return
-- Vstr.Chars(Pos..Vstr.Length). If Pos > Vstr.Length then we return
-- the null string.
Pos2 : S_Natural;
begin
----Since Pos+Cnt-1 can be > S_Natural'Last we check this way first.
if Cnt >= Vstr.Length then
return Vstr.Chars (Pos .. Vstr.Length);
end if;
----Now check to see if the For reaches past end-of-string.
Pos2 := Pos + Cnt - 1;
if Pos2 >= Vstr.Length then -- Watch for index overflow
return Vstr.Chars (Pos .. Vstr.Length);
end if;
----Return proper substring
return Vstr.Chars (Pos .. Pos2);
end Substring_For;
--\x0c
procedure Truncstring_For (Vstr : in out Vstring_Data;
Pos : S_Positive;
Cnt : S_Positive) is
----Called to truncate a string down to the substring contained in
-- Vstr.Chars(Pos..Pos+Cnt-1). If Pos+Cnt-1 > Vstr.Length then we truncate it to
-- Vstr.Chars(Pos..Vstr.Length). If Pos > Vstr.Length then the string
-- is set to the null string.
Pos2 : S_Natural;
Length : S_Natural := Cnt;
begin
----Since Pos+Cnt-1 can be > S_Natural'Last we check this way first.
if Cnt >= Vstr.Length then
Pos2 := Vstr.Length;
Length := Vstr.Length - Pos + 1;
else
----Now check the other way since we know overflow cannot occur (on any machine
-- with less than 2**32 virtual bytes/words of memory).
Pos2 := Pos + Cnt - 1;
if Pos2 >= Vstr.Length then
Pos2 := Vstr.Length;
Length := Vstr.Length - Pos + 1;
end if;
end if;
----Watch for the simple no-data-motion case.
if Pos = 1 then
Vstr.Length := Length;
return;
end if;
----Move the data and set the length.
Vstr.Chars (1 .. Length) := Vstr.Chars (Pos .. Pos2);
Vstr.Length := Length;
end Truncstring_For;
--\x0c
procedure Truncstring_For (Vstr : Vstring;
Pos : S_Positive;
Cnt : S_Positive) is
----Called to truncate a string down to the substring contained in
-- Vstr.Chars(Pos..Pos+Cnt-1). If Pos+Cnt-1 > Vstr.Length then we truncate it to
-- Vstr.Chars(Pos..Vstr.Length). If Pos > Vstr.Length then the string
-- is set to the null string.
Pos2 : S_Natural;
Length : S_Natural := Cnt;
begin
----Since Pos+Cnt-1 can be > S_Natural'Last we check this way first.
if Cnt >= Vstr.Length then
Pos2 := Vstr.Length;
Length := Vstr.Length - Pos + 1;
else
----Now check the other way since we know overflow cannot occur (on any machine
-- with less than 2**32 virtual bytes/words of memory).
Pos2 := Pos + Cnt - 1;
if Pos2 >= Vstr.Length then
Pos2 := Vstr.Length;
Length := Vstr.Length - Pos + 1;
end if;
end if;
----Watch for the simple no-data-motion case.
if Pos = 1 then
Vstr.Length := Length;
return;
end if;
----Move the data and set the length.
Vstr.Chars (1 .. Length) := Vstr.Chars (Pos .. Pos2);
Vstr.Length := Length;
end Truncstring_For;
--\x0c
function To_String (Vstr : Vstring_Data) return E_String is
----Called to obtain the full string contained in a Vstring.
begin
return Vstr.Chars (1 .. Vstr.Length);
end To_String;
--\x0c
function To_String (Vstr : Vstring) return E_String is
----Called to obtain the full string contained in a Vstring.
begin
return Vstr.Chars (1 .. Vstr.Length);
end To_String;
--\x0c
end Vstring_Query;
nblk1=18
nid=0
hdr6=30
[0x00] rec0=16 rec1=00 rec2=01 rec3=04a
[0x01] rec0=1d rec1=00 rec2=02 rec3=028
[0x02] rec0=21 rec1=00 rec2=03 rec3=020
[0x03] rec0=24 rec1=00 rec2=04 rec3=030
[0x04] rec0=21 rec1=00 rec2=05 rec3=004
[0x05] rec0=00 rec1=00 rec2=18 rec3=056
[0x06] rec0=20 rec1=00 rec2=06 rec3=00e
[0x07] rec0=01 rec1=00 rec2=17 rec3=01e
[0x08] rec0=1f rec1=00 rec2=07 rec3=008
[0x09] rec0=00 rec1=00 rec2=16 rec3=00e
[0x0a] rec0=1f rec1=00 rec2=08 rec3=01c
[0x0b] rec0=15 rec1=00 rec2=09 rec3=01a
[0x0c] rec0=02 rec1=00 rec2=15 rec3=002
[0x0d] rec0=15 rec1=00 rec2=0a rec3=00e
[0x0e] rec0=00 rec1=00 rec2=14 rec3=008
[0x0f] rec0=1e rec1=00 rec2=0b rec3=016
[0x10] rec0=00 rec1=00 rec2=13 rec3=01a
[0x11] rec0=1e rec1=00 rec2=0c rec3=042
[0x12] rec0=1c rec1=00 rec2=0d rec3=00a
[0x13] rec0=00 rec1=00 rec2=12 rec3=008
[0x14] rec0=1f rec1=00 rec2=0e rec3=042
[0x15] rec0=00 rec1=00 rec2=11 rec3=022
[0x16] rec0=22 rec1=00 rec2=0f rec3=012
[0x17] rec0=0d rec1=00 rec2=10 rec3=000
tail 0x21500afd081978f1edda9 0x42a00088462063203