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 - downloadIndex: ┃ B T ┃
Length: 15090 (0x3af2) Types: TextFile Names: »B«
└─⟦149519bd4⟧ Bits:30000546 8mm tape, Rational 1000, !projects 93-07-13 └─ ⟦124ff5788⟧ »DATA« └─⟦this⟧ └─⟦a7d1ea751⟧ Bits:30000550 8mm tape, Rational 1000, !users!projects 94_04_11 └─ ⟦129cab021⟧ »DATA« └─⟦this⟧ └─⟦f64eaa120⟧ Bits:30000752 8mm tape, Rational 1000, !projects 93 02 16 └─ ⟦6f12a12be⟧ »DATA« └─⟦this⟧ └─⟦2f6cfab89⟧ Bits:30000547 8mm tape, Rational 1000, !projects 94-01-04 └─ ⟦d65440be7⟧ »DATA« └─⟦this⟧
with Asa_Definitions; with Debug_Tools; with Device_Independent_Io; with Directory_Tools; with Io; with Logger; with Profile; with Remote_Operations; with String_Utilities; with Unix_Definitions; pragma Elaborate (Asa_Definitions); package body Asaopen is package Asac renames Asa_Definitions.Commands; package Asas renames Asa_Definitions.Switches; package Dio renames Device_Independent_Io; package Dna renames Directory_Tools.Naming; package Ro renames Remote_Operations; package Ss renames Simple_Status; package Su renames String_Utilities; package Unix renames Unix_Definitions; Local_Annotations : constant String := Asa_Definitions.Main_Class_Directory & ".ANNOTATIONS"; Local_Annotation_Types : constant String := Asa_Definitions.Main_Class_Directory & ".ANNOTATION_TYPES"; Template_Error : exception; function "-" (S1 : in String; S2 : in String) return String is begin pragma Assert (S1'Length >= S2'Length and then S1 (S1'Last - S2'Length + 1 .. S1'Last) = S2); return S1 (S1'First .. S1'Last - S2'Length); end "-"; -- ------------------------------ -- ( ) Body of external procedure -- ------------------------------ procedure Execute (In_Context : in Remote_Operations.Context; Model : in String; Template_Name : in String; State : in out State_Record; Status : out Simple_Status.Condition) is -- ---------------- -- ( . ) Local data -- ---------------- S : Ss.Condition; Error_File : Io.File_Type; -- The remote stderr and stdout. Null_Input_File : Dio.File_Type; Output_File : Io.File_Type; -- The result of executing the script. Script_File : Io.File_Type; Template_File : Io.File_Type; Remote_Annotations : constant String := Unix.Temporary_Filename (Asac.Annotations_Extension); Remote_Annotation_Types : constant String := Unix.Temporary_Filename (Asac.Annotation_Types_Extension); Remote_Output : constant String := Unix.Temporary_Filename (""); Remote_Processed_Model : constant String := Unix.Temporary_Filename (Asac.Model_Extension); Remote_Script : constant String := Unix.Temporary_Filename (Asac.Asaopen_Extension); --[bugs] -- Due to a bug in ASA, the .opn extension cannot be included on -- the command line. -- Due to a bug in REMOTE_OPERATIONS.EXECUTE, we put a leading -- space to make sure that the lower bound of the command string -- is 1. -- Asaopen_Command : constant String := ' ' & Asas.Bin_Directory (Ro.Machine (In_Context)) & Unix.Context_Separator & Asac.Asaopen & ' ' & (Remote_Script - Asac.Asaopen_Extension); Rm_Command : constant String := Unix.Remove & ' ' & Remote_Annotations & ' ' & Remote_Annotation_Types & ' ' & Remote_Output & ' ' & Remote_Script & ' ' & Remote_Processed_Model; Sed_Command : constant String := Unix.Stream_Editor & ' ' & Unix.Edit & ' ' & "'/&requirement_[1-9] '""'""'.*'""'""'/s/ /_/g'" & ' ' & Unix.Edit & ' ' & "'/&requirement_[1-9] '""'""'[^'""'""']*$/,/'""'""';/s/ /_/g'" & ' ' & Unix.Edit & ' ' & "'/&requirement_[1-9]/s/_*\(&requirement_[1-9]\)_*'""'""'/ \1 '""'""'/'" & ' ' & Unix.Edit & ' ' & """s/_*;/;/""" & ' ' & Model & ' ' & Unix.Output_Redirect & ' ' & Remote_Processed_Model; -- ------------------------ -- ( . ) Template expansion -- ------------------------ procedure Expand (Template_File : in Io.File_Type; Script_File : in Io.File_Type) is use Io; pragma Assert (Io.Is_Open (Template_File) and then Io.Mode (Template_File) = Io.In_File and then Io.Is_Open (Script_File) and then Io.Mode (Script_File) = Io.Out_File); -- -- A line is decomposed into symbol fields and constant fields. -- Fields are separated by the separator. The first field of a -- line is always a constant field. BOUNDARY is the first -- character of the current field. -- type Field is (Constant_Field, Symbol_Field); Current_Field : Field; Boundary : Natural; The_Symbol : Symbol; begin while not Io.End_Of_File (Template_File) loop declare Line : constant String := Io.Get_Line (Template_File); begin Current_Field := Constant_Field; Boundary := Line'First; for I in Line'First .. Line'Last - Separator'Length + 1 loop if Line (I .. I + Separator'Length - 1) = Separator then case Current_Field is when Constant_Field => -- -- Found the initial symbol separator. First write -- the text preceding it. -- Io.Put (Script_File, Line (Boundary .. I - 1)); Current_Field := Symbol_Field; Boundary := I + Separator'Length; when Symbol_Field => -- -- Found the final symbol separator. Write the -- value of the symbol. -- The_Symbol := Symbol'Value (Line (Boundary .. I - 1)); case The_Symbol is when Annotations => Io.Put (Script_File, Remote_Annotations); when Annotation_Types => Io.Put (Script_File, Remote_Annotation_Types); when Asaopen.Model => Io.Put (Script_File, Remote_Processed_Model); when Output => Io.Put (Script_File, Remote_Output); end case; Current_Field := Constant_Field; Boundary := I + Separator'Length; end case; end if; end loop; Io.Put_Line (Script_File, Line (Boundary .. Line'Last)); end; end loop; exception when others => raise Template_Error; end Expand; begin -- -- Create a script file to hold the expanded asaopen text. Open -- the template, expand it, close it. Reset the script file to -- read mode. -- Io.Create (File => Script_File, Mode => Io.Out_File, Name => ""); Io.Open (File => Template_File, Mode => Io.In_File, Name => Template_Name); Logger.Note ("Expanding template file " & Io.Name (Template_File) & " into " & Io.Name (Script_File)); Expand (Template_File => Template_File, Script_File => Script_File); Io.Close (Template_File); Io.Reset (File => Script_File, Mode => Io.In_File); -- -- Download the script file and close it. -- Logger.Note ("Copying file " & Io.Name (Script_File) & " to " & Remote_Script); Ro.Put (From_File => Io.Convert (Script_File), To_File => Remote_Script, In_Context => In_Context, Status => S); Logger.Status (S, Interactive => False); Io.Close (Script_File); -- -- Download the annotation files. -- Logger.Note ("Copying file " & Local_Annotations & " to " & Remote_Annotations); Ro.Put (From_File => Local_Annotations, To_File => Remote_Annotations, In_Context => In_Context, Status => S); Logger.Status (S, Interactive => False); Logger.Note ("Copying file " & Local_Annotation_Types & " to " & Remote_Annotation_Types); Ro.Put (From_File => Local_Annotation_Types, To_File => Remote_Annotation_Types, In_Context => In_Context, Status => S); Logger.Status (S, Interactive => False); -- -- Create error files. -- Io.Create (File => Error_File, Mode => Io.Out_File, Name => ""); --[bug] -- Due to a bug in asaopen, the blanks are stripped from the -- requirements' text. Before calling asaopen, we run sed on the -- model file to change every space into an underscore. The -- reverse transformation will be made by package HIERARCHY. -- Logger.Note ("Executing command """ & Sed_Command & '"'); Ro.Execute (Command => Sed_Command, In_Context => In_Context, Input => Null_Input_File, Output => Io.Convert (Error_File), Error => Io.Convert (Error_File), Status => S, Timeout => Ro.Wait_Forever); Logger.Status (S, Interactive => False); -- -- Execute asaopen on the downloaded script file. Do not separate -- output and error flows. -- Logger.Note ("Executing command """ & Asaopen_Command & '"'); Ro.Execute (Command => Asaopen_Command, In_Context => In_Context, Input => Null_Input_File, Output => Io.Convert (Error_File), Error => Io.Convert (Error_File), Status => S, Timeout => Ro.Wait_Forever); -- -- Process the error file. -- Io.Reset (File => Error_File, Mode => Io.In_File); while not Io.End_Of_File (Error_File) loop Logger.Debug (Io.Get_Line (Error_File)); end loop; Logger.Status (S, Interactive => False); -- -- Upload the result of execution. -- Io.Create (File => Output_File, Mode => Io.Out_File, Name => ""); Logger.Note ("Copying file " & Remote_Output & " to " & Io.Name (Output_File)); Ro.Get (From_File => Remote_Output, In_Context => In_Context, To_File => Io.Convert (Output_File), Status => S); Logger.Status (S, Interactive => False); -- -- Clean up temporary files. -- Io.Reset (File => Error_File, Mode => Io.Out_File); Logger.Note ("Executing command """ & Rm_Command & '"'); Ro.Execute (Command => Rm_Command, In_Context => In_Context, Input => Null_Input_File, Output => Io.Convert (Error_File), Error => Io.Convert (Error_File), Status => S, Timeout => Ro.Wait_Forever); -- -- Process the error file and close it. -- Io.Reset (File => Error_File, Mode => Io.In_File); while not Io.End_Of_File (Error_File) loop declare The_Line : constant String := Io.Get_Line (Error_File); begin if Su.Locate (Fragment => "ERROR", Within => The_Line) = 0 then Logger.Debug (The_Line); else Logger.Error (The_Line); end if; end; end loop; Io.Close (Error_File); Logger.Status (S, Interactive => False); -- -- Process the output file and close it. -- Io.Reset (File => Output_File, Mode => Io.In_File); while not Io.End_Of_File (Output_File) loop Process (State => State, Line => Io.Get_Line (Output_File)); end loop; Io.Close (Output_File); Status := S; exception when Profile.Error => Ss.Create_Condition (Status => S, Error_Type => "", Message => "asaopen execution is quitting after errors", Severity => Ss.Problem); Status := S; when Template_Error => Ss.Create_Condition (Status => S, Error_Type => "Asaopen", Message => "syntax error in template or template not found", Severity => Ss.Problem); Status := S; when others => Ss.Create_Condition (Status => S, Error_Type => "Asaopen", Message => "execution aborted by exception " & Debug_Tools.Get_Exception_Name, Severity => Ss.Problem); Status := S; end Execute; end Asaopen;