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: 21938 (0x55b2) 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« └─⟦6d381756c⟧ └─⟦f64eaa120⟧ Bits:30000752 8mm tape, Rational 1000, !projects 93 02 16 └─ ⟦6f12a12be⟧ »DATA« └─⟦6d381756c⟧ └─⟦2f6cfab89⟧ Bits:30000547 8mm tape, Rational 1000, !projects 94-01-04 └─ ⟦d65440be7⟧ »DATA« └─⟦6d381756c⟧ └─⟦this⟧ └─⟦f64eaa120⟧ Bits:30000752 8mm tape, Rational 1000, !projects 93 02 16 └─ ⟦6f12a12be⟧ »DATA« └─⟦this⟧
with Debug_Tools; -- with Common; with Action; with Directory; with Dtia_Client; use Dtia_Client; with Gateway_Property; with Gateway_Object; with Io; with Profile; with Simple_Status; with System; with Device_Independent_Io; with Multi_Requests; package body Gateway_Driver is subtype Gateway_Handle is Dtia_Client.Gateway_Handle; subtype Image_Id is Dtia_Client.Image_Id; subtype Selection is Dtia_Client.Selection; subtype Cursor is Dtia_Client.Cursor; Fatal_Error : exception; package Requests is new Multi_Requests (Nb_Max_Connections, Max_Idle_Time); task body Waiter is begin accept Stop; end Waiter; function Expand_Command (Command : in String; Directory, Name : in String) return String is Index_Target : Natural := 0; procedure Append (Source : in String; Target : in out String; Index_Target : in out Natural; Count_Only : in Boolean) is begin if not Count_Only then Target (Index_Target + 1 .. Index_Target + Source'Length) := Source; end if; Index_Target := Index_Target + Source'Length; end Append; begin for Nb_Loop in 1 .. 2 loop declare Dollar : Boolean := False; Target : String (1 .. Index_Target); begin Index_Target := 0; for Index in Command'Range loop if Dollar then case Command (Index) is when 'D' => Append (Directory, Target, Index_Target, Nb_Loop = 1); when 'N' => Append (Name, Target, Index_Target, Nb_Loop = 1); -- when 'L' => -- Append ("" & Ascii.Lf, Target, -- Index_Target, Nb_Loop = 1); when '$' => Append ("$", Target, Index_Target, Nb_Loop = 1); when others => Append ("$" & Command (Index), Target, Index_Target, Nb_Loop = 1); end case; else if Command (Index) /= '$' then Append ("" & Command (Index), Target, Index_Target, Nb_Loop = 1); end if; end if; Dollar := Command (Index) = '$'; end loop; if (Nb_Loop = 2) then return Target; end if; end; end loop; end Expand_Command; procedure Re_Open (H : in out Gateway_Handle) is Error : Simple_Status.Condition; begin if not Gateway_Object.Is_Main_Object_Open_For_Update (H) then Gateway_Object.Re_Open_Main_Object_For_Update (H, Error); pragma Assert (not Simple_Status.Error (Error, Simple_Status.Warning)); end if; end Re_Open; procedure Update_Image (Local_Name : in String; Image : Image_Id) is File : Io.File_Type; Line_Number : Natural := 0; After_Line : Natural := Natural'Last; begin Io.Open (File, Io.In_File, Local_Name); Dtia_Client.Delete_Lines (Image, 1, Natural'Last - 10); while not Io.End_Of_File (File) loop Dtia_Client.Insert_Lines (Image, After_Line, Io.Get_Line (File)); Line_Number := Line_Number + 1; end loop; Io.Close (File); exception when others => Io.Echo ("Exception: " & Debug_Tools.Get_Exception_Name & " Unable to update create image" & Ascii.Lf); raise Fatal_Error; end Update_Image; procedure Get_If_Bad_Date (Current_Object : Requests.Object_Id; G_Handle : Gateway_Handle; Image : Image_Id; First_Time : Boolean; Local_Name, Ws_Name : in String) is Success : Boolean := True; New_Image : Boolean := False; Date_R1000_Object, Date_Ws_Object : Natural := 0; Status : Simple_Status.Condition; begin Requests.Last_Update (Current_Object, Ws_Name, Date_Ws_Object, Status); if Simple_Status.Error (Status, Simple_Status.Fatal) then Io.Echo (Simple_Status.Display_Message (Status) & Ascii.Lf); raise Fatal_Error; end if; if Simple_Status.Error (Status, Simple_Status.Warning) then Io.Echo ("Unknown Remote Object" & Ascii.Lf); Date_Ws_Object := 0; end if; Date_R1000_Object := Natural'Value (Gateway_Property.Value (G_Handle, "Data.Last_Ws_Stamp")); if Date_Ws_Object /= 0 then if Date_R1000_Object < Date_Ws_Object then Requests.Get (Current_Object, Ws_Name, Local_Name, False, Status); if Simple_Status.Error (Status, Simple_Status.Fatal) then Io.Echo (Simple_Status.Display_Message (Status) & Ascii.Lf); raise Fatal_Error; end if; if Simple_Status.Error (Status, Simple_Status.Warning) then Io.Echo ("Copy from Ws unsuccessful" & Ascii.Lf); else New_Image := True; -- Copy from ws successful Gateway_Property.Set_Value (G_Handle, "Data.Last_Ws_Stamp", Natural'Image (Date_Ws_Object), Success); if not Success then Io.Echo ("Last_Ws_Stamp not updated " & "(gateway_property.Set_Value error)" & Ascii.Lf); end if; end if; end if; end if; if First_Time or else New_Image then Update_Image (Dtia_Client.Objects_Name (Image) & "." & Gateway_Property.Value (G_Handle, "Edit.Object"), Image); Gateway_Object.Commit (G_Handle, False, Status); end if; end Get_If_Bad_Date; procedure Put_And_Set_Date (Current_Object : Requests.Object_Id; G_Handle : Gateway_Handle; Local_Name, Ws_Name : in String) is Success : Boolean := True; Date_Ws_Object : Natural := 0; Status : Simple_Status.Condition; begin Requests.Put (Current_Object, Local_Name, Ws_Name, Status); if Simple_Status.Error (Status, Simple_Status.Fatal) then Io.Echo (Simple_Status.Display_Message (Status) & Ascii.Lf); raise Fatal_Error; end if; if Simple_Status.Error (Status, Simple_Status.Warning) then Io.Echo ("Copy to ws unsuccessful" & Ascii.Lf); end if; Requests.Last_Update (Current_Object, Ws_Name, Date_Ws_Object, Status); if Simple_Status.Error (Status, Simple_Status.Fatal) then Io.Echo (Simple_Status.Display_Message (Status) & Ascii.Lf); raise Fatal_Error; end if; if Simple_Status.Error (Status, Simple_Status.Warning) then Io.Echo ("Unable to get new Ws Stamp Date" & Ascii.Lf); Date_Ws_Object := 0; end if; if Date_Ws_Object /= 0 then Gateway_Object.Set_Value (G_Handle, "Data.Last_Ws_Stamp", New_Value => Natural'Image (Date_Ws_Object)); if not Success then null; Io.Echo ("Last_Ws_Stamp not updated " & "(gateway_property.Set_Value error)" & Ascii.Lf); end if; end if; end Put_And_Set_Date; procedure Build_Image (Handle : Gateway_Handle; Visible : Boolean; In_Place : Boolean; First_Time : Boolean; Read_Only : in out Boolean; Image : Image_Id; No_Image : out Boolean; Underlying_Object : out Directory.Object) is Current_Object : Requests.Object_Id; G_Handle : Gateway_Handle := Handle; Connected : Boolean; Status : Simple_Status.Condition; Status_Naming : Directory.Naming.Name_Status; begin Re_Open (G_Handle); No_Image := False; Directory.Naming.Resolve (Dtia_Client.Objects_Name (Image) & "." & Gateway_Property.Value (G_Handle, "Edit.Object"), Underlying_Object, Status_Naming); pragma Assert (Directory.Naming."=" (Status_Naming, Directory.Naming.Successful)); Connected := Boolean'Value (Gateway_Property.Value (G_Handle, "Connected")); if not Connected then Io.Echo ("No Server Connected" & Ascii.Lf); else Requests.Init_Object (Current_Object, Gateway_Property.Value (G_Handle, "Data.Host")); if Simple_Status.Error (Status, Simple_Status.Fatal) then Io.Echo (Simple_Status.Display_Message (Status) & Ascii.Lf); raise Fatal_Error; end if; Get_If_Bad_Date (Current_Object, G_Handle, Image, First_Time, Dtia_Client.Objects_Name (Image) & "." & Gateway_Property.Value (G_Handle, "Edit.Object"), Gateway_Property.Value (G_Handle, "Data.Context") & Gateway_Property.Value (G_Handle, "Data.Context_Separator") & Gateway_Property.Value (G_Handle, "Data.Name") & Gateway_Property.Value (G_Handle, "Data.Suffix")); Requests.Disconnect (C => Current_Object, Status => Status); end if; pragma Assert (not Simple_Status.Error (Status, Simple_Status.Warning)); exception when Fatal_Error => Gateway_Object.Commit (G_Handle, False, Status); pragma Assert (not Simple_Status.Error (Status, Simple_Status.Warning)); null; when others => Io.Echo ("Exception: " & Debug_Tools.Get_Exception_Name & Ascii.Lf); Gateway_Object.Commit (G_Handle, False, Status); pragma Assert (not Simple_Status.Error (Status, Simple_Status.Warning)); end Build_Image; procedure Post_Commit (Handle : Gateway_Handle; Image : Image_Id) is Current_Object : Requests.Object_Id; G_Handle : Gateway_Handle := Handle; Connected : Boolean; Status : Simple_Status.Condition; begin Re_Open (G_Handle); Connected := Boolean'Value (Gateway_Property.Value (G_Handle, "Connected")); if not Connected then Io.Echo ("No Server Connected" & Ascii.Lf); else Requests.Init_Object (Current_Object, Gateway_Property.Value (G_Handle, "Data.Host")); if Simple_Status.Error (Status, Simple_Status.Fatal) then Io.Echo (Simple_Status.Display_Message (Status) & Ascii.Lf); raise Fatal_Error; end if; Put_And_Set_Date (Current_Object, G_Handle, Dtia_Client.Objects_Name (Image) & "." & Gateway_Property.Value (G_Handle, "Edit.Object"), Gateway_Property.Value (G_Handle, "Data.Context") & Gateway_Property.Value (G_Handle, "Data.Context_Separator") & Gateway_Property.Value (G_Handle, "Data.Name") & Gateway_Property.Value (G_Handle, "Data.Suffix")); Requests.Disconnect (C => Current_Object, Status => Status); end if; pragma Assert (not Simple_Status.Error (Status, Simple_Status.Warning)); exception when Fatal_Error => null; when others => Io.Echo ("Exception: " & Debug_Tools.Get_Exception_Name & Ascii.Lf); pragma Assert (not Simple_Status.Error (Status, Simple_Status.Warning)); null; end Post_Commit; procedure Shell (G_Handle : Gateway_Handle; Command_Property : in String) is Current_Object : Requests.Object_Id; Connected : Boolean; Status : Simple_Status.Condition; begin Connected := Boolean'Value (Gateway_Property.Value (G_Handle, "Connected")); if not Connected then Io.Echo ("No Server Connected" & Ascii.Lf); else Requests.Init_Object (Current_Object, Gateway_Property.Value (G_Handle, "Data.Host")); if Simple_Status.Error (Status, Simple_Status.Fatal) then Io.Echo (Simple_Status.Display_Message (Status) & Ascii.Lf); raise Fatal_Error; end if; Requests.Input_To_Remote_Shell (Current_Object, Expand_Command (Gateway_Property.Value (G_Handle, Command_Property), Gateway_Property.Value (G_Handle, "Data.Context"), Gateway_Property.Value (G_Handle, "Data.Name")), Integer'Value (Gateway_Property.Value (G_Handle, "Shell.Timeout")), Status); if Simple_Status.Error (Status, Simple_Status.Fatal) then Io.Echo (Simple_Status.Display_Message (Status) & Ascii.Lf); raise Fatal_Error; elsif Simple_Status.Error (Status) then Io.Echo (Simple_Status.Display_Message (Status) & Ascii.Lf); end if; end if; end Shell; procedure Semanticize (Handle : Gateway_Handle; Image : Image_Id; S : Selection; C : Cursor) is Current_Object : Requests.Object_Id; G_Handle : Gateway_Handle := Handle; Success : Boolean; begin Re_Open (G_Handle); Requests.Init_Object (Current_Object, Gateway_Property.Value (G_Handle, "Data.Host")); if Dtia_Client.Is_Modified (Image => Image) then Dtia_Client.Commit (Image => Image, Success => Success); if not Success then Io.Echo ("Unable to Commit Changes" & Ascii.Lf); return; end if; Put_And_Set_Date (Current_Object, G_Handle, Dtia_Client.Objects_Name (Image) & "." & Gateway_Property.Value (G_Handle, "Edit.Object"), Gateway_Property.Value (G_Handle, "Data.Context") & Gateway_Property.Value (G_Handle, "Data.Context_Separator") & Gateway_Property.Value (G_Handle, "Data.Name") & Gateway_Property.Value (G_Handle, "Data.Suffix")); end if; Shell (G_Handle, "Semanticize.Command"); exception when others => Io.Echo ("Exception: " & Debug_Tools.Get_Exception_Name & Ascii.Lf); end Semanticize; procedure Promote (Handle : Gateway_Handle; Image : Image_Id; S : Selection; C : Cursor) is Current_Object : Requests.Object_Id; G_Handle : Gateway_Handle := Handle; begin if not Dtia_Client.Is_Read_Only (Image) then -- if Dtia_Client.Is_Modified (Image => Image) then -- Re_Open (G_Handle); -- Requests.Init_Object (Current_Object, -- Gateway_Property.Value -- (G_Handle, "Data.Host"), -- Gateway_Property.Value -- (G_Handle, "Data.Remote_User"), -- Gateway_Property.Value -- (G_Handle, "Data.Remote_Password")); -- Put_And_Set_Date (Current_Object, G_Handle, -- Dtia_Client.Objects_Name (Image) & -- "." & Gateway_Property.Value -- (G_Handle, "Edit.Object"), -- Gateway_Property.Value -- (G_Handle, "Data.Context") & -- Gateway_Property.Value -- (G_Handle, "Data.Context_Separator") & -- Gateway_Property.Value -- (G_Handle, "Data.Name") & -- Gateway_Property.Value -- (G_Handle, "Data.Suffix")); -- end if; Dtia_Client.Make_Read_Only (Image); Shell (G_Handle, "Promot.Command1"); else Shell (G_Handle, "Promot.Command2"); end if; exception when others => Io.Echo ("Exception: " & Debug_Tools.Get_Exception_Name & Ascii.Lf); end Promote; procedure Format (Handle : Gateway_Handle; Image : Image_Id; S : Selection; C : Cursor) is Current_Object : Requests.Object_Id; G_Handle : Gateway_Handle := Handle; Ignored : Simple_Status.Condition; Success : Boolean; begin Re_Open (G_Handle); Requests.Init_Object (Current_Object, Gateway_Property.Value (G_Handle, "Data.Host")); if Dtia_Client.Is_Read_Only (Image => Image) then Io.Echo ("Image is Read_Only" & Ascii.Lf); else if Dtia_Client.Is_Modified (Image => Image) then Dtia_Client.Commit (Image => Image, Success => Success); if not Success then Io.Echo ("Unable to commit changes" & Ascii.Lf); return; end if; Put_And_Set_Date (Current_Object, G_Handle, Dtia_Client.Objects_Name (Image) & "." & Gateway_Property.Value (G_Handle, "Edit.Object"), Gateway_Property.Value (G_Handle, "Data.Context") & Gateway_Property.Value (G_Handle, "Data.Context_Separator") & Gateway_Property.Value (G_Handle, "Data.Name") & Gateway_Property.Value (G_Handle, "Data.Suffix")); end if; Shell (G_Handle, "Format.Command"); Get_If_Bad_Date (Current_Object, G_Handle, Image, True, Dtia_Client.Objects_Name (Image) & "." & Gateway_Property.Value (G_Handle, "Edit.Object"), Gateway_Property.Value (G_Handle, "Data.Context") & Gateway_Property.Value (G_Handle, "Data.Context_Separator") & Gateway_Property.Value (G_Handle, "Data.Name") & Gateway_Property.Value (G_Handle, "Data.Suffix")); end if; Requests.Disconnect (C => Current_Object, Status => Ignored); exception when others => Io.Echo ("Exception: " & Debug_Tools.Get_Exception_Name & Ascii.Lf); end Format; procedure Terminate_Server (Reason : Dtia_Client.Termination_Condition) is Status : Simple_Status.Condition; begin Requests.Shut_Down; Waiter.Stop; end Terminate_Server; package Driver is new Dtia_Client.Dtia_Client_Operations (Class_Name => "remote_file", --!!! Session_Server => True, Session_Server => False, Promote => Promote, Build_Image => Build_Image, Post_Commit => Post_Commit, Semanticize => Semanticize, Format => Format, -- Revert => Revert, Terminate_Server => Terminate_Server); end Gateway_Driver;