|
|
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: 8153 (0x1fd9)
Types: TextFile
Names: »B«
└─⟦afbc8121e⟧ Bits:30000532 8mm tape, Rational 1000, MC68020_OS2000 7_2_2
└─⟦77aa8350c⟧ »DATA«
└─⟦f794ecd1d⟧
└─⟦4c85d69e2⟧
└─⟦this⟧
-- The use of this system is subject to the software license terms and
-- conditions agreed upon between Rational and the Customer.
--
-- Copyright 1988 by Rational.
--
-- RESTRICTED RIGHTS LEGEND
--
-- Use, duplication, or disclosure by the Government is subject to
-- restrictions as set forth in subdivision (b)(3)(ii) of the Rights in
-- Technical Data and Computer Software clause at 52.227-7013.
--
--
-- Rational
-- 3320 Scott Boulevard
-- Santa Clara, California 95054-3197
--
-- PROPRIETARY AND CONFIDENTIAL INFORMATION OF RATIONAL;
-- USE OR COPYING WITHOUT EXPRESS WRITTEN AUTHORIZATION
-- IS STRICTLY PROHIBITED. THIS MATERIAL IS PROTECTED AS
-- AN UNPUBLISHED WORK UNDER THE U.S. COPYRIGHT ACT OF
-- 1976. CREATED 1988. ALL RIGHTS RESERVED.
--
--
package body Command_Line is
Max_Param_Size : constant := 512 * 8;
subtype Param_String is String (1 .. Max_Param_Size);
type Param_Ptr_Type is access Param_String;
for Param_Ptr_Type'Storage_Size use 0; -- suppress collection
Param_Size : Natural;
pragma Import_Object (Param_Size, "__OS_PARAM_SIZE");
Param_Ptr : Param_Ptr_Type;
pragma Import_Object (Param_Ptr, "__OS_PARAM_PTR");
Parameter_String : Param_String := Param_Ptr.all;
Param_First : constant Natural := 1;
Param_Last : Natural := Param_Size;
Environ_First : Natural := Param_Size + 1;
Environ_Last : Natural := 0;
function Upper_Case (C : Character) return Character is
begin
case C is
when 'a' .. 'z' =>
return Character'Val (Character'Pos (C) - 16#20#);
when others =>
return C;
end case;
end Upper_Case;
function Equal_Mod_Case (C1 : Character; C2 : Character) return Boolean is
begin
if C1 = C2 then
return True;
else
return Upper_Case (C1) = Upper_Case (C2);
end if;
end Equal_Mod_Case;
procedure Find_Insensitive (Substr : String;
Start : Natural;
Finish : Natural;
Found : out Boolean;
Next_Index : out Natural) is
First_Index : constant Natural := Substr'First;
First_Char : constant Character := Substr (First_Index);
Last_Char : constant Character := Substr (Substr'Last);
Last_Bias : constant Natural := Substr'Length - 1;
begin
for I in Start .. Finish - Last_Bias loop
if Equal_Mod_Case (First_Char, Parameter_String (I)) and then
Equal_Mod_Case (Last_Char, Parameter_String (I + Last_Bias)) then
for J in reverse 1 .. Last_Bias - 1 loop
if not Equal_Mod_Case (Substr (First_Index + J),
Parameter_String (I + J)) then
goto Inner_Character_Mismatch;
end if;
end loop;
Found := True;
Next_Index := I + Last_Bias + 1;
return;
end if;
<<Inner_Character_Mismatch>> null;
end loop;
Found := False;
Next_Index := 0;
end Find_Insensitive;
procedure Find_Sensitive (Substr : String;
Start : Natural;
Finish : Natural;
Found : out Boolean;
Next_Index : out Natural) is
First_Index : constant Natural := Substr'First;
First_Char : constant Character := Substr (First_Index);
Last_Char : constant Character := Substr (Substr'Last);
Last_Bias : constant Natural := Substr'Length - 1;
begin
for I in Start .. Finish - Last_Bias loop
if First_Char = Parameter_String (I) and then
Last_Char = Parameter_String (I + Last_Bias) then
for J in reverse 1 .. Last_Bias - 1 loop
if Substr (First_Index + J) /= Parameter_String (I + J) then
goto Inner_Character_Mismatch;
end if;
end loop;
Found := True;
Next_Index := I + Last_Bias + 1;
return;
end if;
<<Inner_Character_Mismatch>> null;
end loop;
Found := False;
Next_Index := 0;
end Find_Sensitive;
function Length_Of_Parameters return Natural is
begin
if Param_Last > Param_First then
return Param_Last - Param_First + 1;
else
return 0;
end if;
end Length_Of_Parameters;
function Parameters return String is
begin
return Parameter_String (Param_First .. Param_Last);
end Parameters;
function Contains_Substring (S : String; Case_Insensitive : Boolean := True)
return Boolean is
Found_It : Boolean;
Next : Natural;
begin
if S'Length > 0 then
if Case_Insensitive then
Find_Insensitive (S, Param_First, Param_Last, Found_It, Next);
else
Find_Sensitive (S, Param_First, Param_Last, Found_It, Next);
end if;
return Found_It;
else
return True; -- vacuously contains ""
end if;
end Contains_Substring;
function Length_Of_Environment return Natural is
begin
if Environ_Last > Environ_First then
return Environ_Last - Environ_First + 1;
else
return 0;
end if;
end Length_Of_Environment;
function Environment return String is
begin
return Parameter_String (Environ_First .. Environ_Last);
end Environment;
function Environment_Value
(Name : String; Case_Insensitive : Boolean := True)
return String is
Found_It : Boolean;
Value_First : Natural;
Value_Last : Natural := Environ_Last;
begin
if Name'Length > 0 then
if Case_Insensitive then
Find_Insensitive (Name & '=', Environ_First,
Environ_Last, Found_It, Value_First);
else
Find_Sensitive (Name & '=', Environ_First,
Environ_Last, Found_It, Value_First);
end if;
else
return "";
end if;
if Found_It then
for I in Value_First .. Environ_Last loop
if Parameter_String (I) = ' ' then
Value_Last := I - 1;
exit;
end if;
end loop;
return Parameter_String (Value_First .. Value_Last);
else
return "";
end if;
end Environment_Value;
function Is_Printable (C : Character) return Boolean is
begin
return C >= ' ';
end Is_Printable;
procedure Setup_Parameter_Bounds is
begin
First_Loop:
for I in 1 .. Param_Size loop
if (Parameter_String (I) = Ascii.Cr) or else
(Parameter_String (I) = Ascii.Nul) then
Param_Last := I - 1;
for J in I + 1 .. Param_Size loop
if Is_Printable (Parameter_String (J)) then
Environ_First := J;
exit First_Loop;
end if;
end loop;
end if;
end loop First_Loop;
Second_Loop:
for I in Environ_First .. Param_Size loop
if not Is_Printable (Parameter_String (I)) then
Environ_Last := I - 1;
exit Second_Loop;
end if;
end loop Second_Loop;
end Setup_Parameter_Bounds;
begin
Setup_Parameter_Bounds;
end Command_Line;