DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦1a68257c1⟧ Ada Source

    Length: 12288 (0x3000)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Name_Utilities, seg_00469e

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦cfc2e13cd⟧ »Space Info Vol 2« 
        └─⟦this⟧ 

E3 Source Code



with Random;
with Time_Utilities;
with Directory_Tools;
with String_Utilities;
with System_Utilities;
with More_String_Utilities;
package body Name_Utilities is

    Null_String : constant String := "";

    Underscore : constant Character := '_';

    Exclamation_Point : constant Character := '!';

    function Is_Null (This_String : in String) return Boolean is
    begin  
        return This_String = Null_String;
    end Is_Null;

    function Is_Non_Null (This_String : in String) return Boolean is
    begin
        return This_String /= Null_String;
    end Is_Non_Null;

    function Has_No_Leading_Underscore
                (This_String : in String) return Boolean is
    begin
        return This_String (This_String'First) /= Underscore;
    end Has_No_Leading_Underscore;

    function Has_No_Trailing_Underscore
                (This_String : in String) return Boolean is
    begin
        return This_String (This_String'Last) /= Underscore;
    end Has_No_Trailing_Underscore;

    function First_Character_Is_Letter
                (The_String : in String) return Boolean is
    begin
        case The_String (The_String'First) is
            when 'A' .. 'Z' | 'a' .. 'z' =>
                return True;
            when others =>
                return False;
        end case;
    end First_Character_Is_Letter;

    function Contains_No_Forbidden_Characters
                (This_String : in String) return Boolean is
    begin
        for Index in This_String'First .. This_String'Last loop
            case This_String (Index) is
                when  
                   Ascii.Nul .. '/' |  
                   ':' .. '@' |  
                   '[' .. '^' |  
                   '{' .. Ascii.Del |  
                   '`' =>
                    return False;
                when others =>
                    null;
            end case;
        end loop;
        return True;
    end Contains_No_Forbidden_Characters;

    function Contains_No_Double_Underscores
                (This_String : in String) return Boolean is

        Found_Underscore : Boolean := False;

    begin
        for Index in This_String'First .. This_String'Last loop
            if This_String (Index) = Underscore then
                if Found_Underscore then
                    return False;
                else
                    Found_Underscore := True;
                end if;
            else
                Found_Underscore := False;
            end if;
            return True;
        end loop;
    end Contains_No_Double_Underscores;

    function Is_Simple_Ada_Name (This_String : in String) return Boolean is
    begin
        if Is_Non_Null (This_String) and then
           Has_No_Leading_Underscore (This_String) and then
           Has_No_Trailing_Underscore (This_String) and then
           First_Character_Is_Letter (This_String) and then
           Contains_No_Forbidden_Characters (This_String) and then
           Contains_No_Double_Underscores (This_String) then
            return True;
        else
            return False;
        end if;

    exception
        when others =>
            return False;

    end Is_Simple_Ada_Name;

    function Is_Dotted_Ada_Name (This_String : in String) return Boolean is

        Dot : constant Character := '.';

        Start_Of_Segment : Integer := This_String'First;
        End_Of_Segment   : Integer := This_String'First;

    begin  
        loop
            while End_Of_Segment <= This_String'Last and then
                     This_String (End_Of_Segment) /= Dot loop
                End_Of_Segment := End_Of_Segment + 1;
            end loop;  
            if not Is_Simple_Ada_Name
                      (This_String (Start_Of_Segment ..
                                       (End_Of_Segment - 1))) then
                return False;
            else
                Start_Of_Segment := End_Of_Segment + 1;
                End_Of_Segment   := End_Of_Segment + 1;
                if Start_Of_Segment > This_String'Last then
                    return True;
                end if;
            end if;  
        end loop;

    exception
        when others =>
            return False;

    end Is_Dotted_Ada_Name;

    function Is_Ada_Name (This_String : in String) return Boolean is
    begin
        return Is_Simple_Ada_Name (This_String) or else
                  Is_Dotted_Ada_Name (This_String);
    end Is_Ada_Name;

    function Is_Pathname (This_String : in String) return Boolean is
    begin
        if not More_String_Utilities.Is_Continuous (This_String) then
            return False;
        end if;
        if Is_Null (This_String) then
            return False;
        end if;
        if not Directory_Tools.Naming.Is_Well_Formed (This_String) then
            return False;
        end if;
        return True;

    exception
        when others =>
            return False;

    end Is_Pathname;

    function First_Character_Is_Not_Exclamation_Point
                (This_String : in String) return Boolean is
    begin
        return This_String (This_String'First) /= Exclamation_Point;
    end First_Character_Is_Not_Exclamation_Point;

    function Is_Fully_Qualified_Pathname
                (This_String : in String) return Boolean is
    begin
        if Is_Null (This_String) then
            return False;
        end if;
        if First_Character_Is_Not_Exclamation_Point (This_String) then
            return False;
        end if;  
        return Is_Dotted_Ada_Name
                  (This_String ((This_String'First + 1) .. This_String'Last));
    exception
        when others =>
            return False;

    end Is_Fully_Qualified_Pathname;

    function Is_User_Name (This_String : in String) return Boolean is
    begin
        return Is_Simple_Ada_Name (This_String);
    end Is_User_Name;

    function Random_Number_Image return String is

        Random_Handle : Random.Handle;

        Random_Number : Natural;

    begin
        Random.Initialize (Random_Handle);
        Random_Number := Random.Natural_Value
                            (Random_Handle, Max => Natural'Last);
        return String_Utilities.Strip (Natural'Image (Random_Number));
    end Random_Number_Image;

    function Unique_Temporary_File_Name return String is

        Prefix : constant String := "!MACHINE.TEMPORARY.UNIQUE_TEMPORARY_FILE_";

        User_Name : constant String := System_Utilities.User_Name;

        Session_Name : constant String := System_Utilities.Session_Name;

        Time_Stamp : constant String := Time_Utilities.Image
                                           (Date => Time_Utilities.Get_Time,
                                            Date_Style => Time_Utilities.Ada,
                                            Time_Style => Time_Utilities.Ada,
                                            Contents => Time_Utilities.Both);
    begin
        return Prefix & User_Name & "_" & Session_Name & "_" &
                  Time_Stamp & "_" & Random_Number_Image;
    end Unique_Temporary_File_Name;

    function Indirect_File_Name_For
                (This_File_Name : in String) return String is
    begin
        return "_" & String_Utilities.Upper_Case (This_File_Name);
    end Indirect_File_Name_For;

    function All_Objects_In (This_Library : in String;
                             Include_Object_Itself : in Boolean;
                             Transitive : in Boolean) return String is
    begin  
        if Transitive then
            if Include_Object_Itself then
                return String_Utilities.Upper_Case (This_Library) & "??";
            else
                return String_Utilities.Upper_Case (This_Library) & ".@??";
            end if;
        else
            if Include_Object_Itself then
                return "[" & String_Utilities.Upper_Case (This_Library) & "," &
                          String_Utilities.Upper_Case (This_Library) & ".@]";
            else
                return String_Utilities.Upper_Case (This_Library) & ".@";
            end if;
        end if;
    end All_Objects_In;

end Name_Utilities;

E3 Meta Data

    nblk1=b
    nid=0
    hdr6=16
        [0x00] rec0=23 rec1=00 rec2=01 rec3=062
        [0x01] rec0=1e rec1=00 rec2=02 rec3=028
        [0x02] rec0=1c rec1=00 rec2=03 rec3=076
        [0x03] rec0=1f rec1=00 rec2=04 rec3=006
        [0x04] rec0=00 rec1=00 rec2=0b rec3=004
        [0x05] rec0=1f rec1=00 rec2=05 rec3=004
        [0x06] rec0=00 rec1=00 rec2=0a rec3=004
        [0x07] rec0=20 rec1=00 rec2=06 rec3=088
        [0x08] rec0=1c rec1=00 rec2=07 rec3=084
        [0x09] rec0=16 rec1=00 rec2=08 rec3=084
        [0x0a] rec0=0d rec1=00 rec2=09 rec3=000
    tail 0x2170029cc815c66a8ab45 0x42a00088462061e03