|
|
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 - metrics - downloadIndex: B T
Length: 14771 (0x39b3)
Types: TextFile
Names: »B«
└─⟦85b835f43⟧ Bits:30000549 8mm tape, Rational 1000, Xlib rev 6.00
└─⟦0c20f784e⟧ »DATA«
└─⟦1abbe589f⟧
└─⟦591c5b094⟧
└─⟦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.
------------------------------------------------------------------------------
--\f
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;
--\f
procedure Empty_Vstring (Vstr : Vstring) is
----Sets the Vstring to be Empty; the null string.
begin
Vstr.Length := 0;
end Empty_Vstring;
--\f
function Length (Vstr : Vstring_Data) return S_Natural is
----Called to obtain the current length of the string.
begin
return Vstr.Length;
end Length;
--\f
function Length (Vstr : Vstring) return S_Natural is
----Called to obtain the current length of the string.
begin
return Vstr.Length;
end Length;
--\f
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;
--\f
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;
--\f
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;
--\f
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;
--\f
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;
--\f
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;
--\f
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;
--\f
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;
--\f
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;
--\f
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;
--\f
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;
--\f
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;
--\f
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;
--\f
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;
--\f
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;
--\f
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;
--\f
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;
--\f
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;
--\f
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;
--\f
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;
--\f
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;
--\f
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;
--\f
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;
--\f
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;
--\f
end Vstring_Query;