|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 50176 (0xc400)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Library_Extensions, seg_00aeba
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦cfc2e13cd⟧ »Space Info Vol 2«
└─⟦this⟧
with Debug_Tools;
with Directory;
with Io;
with Import_Interface;
with Library_Interface;
with Log;
with Profile;
with Remote_Command_Interface;
with String_Utilities;
package body Library_Extensions is
package Naming renames Directory.Naming;
Default_Host_List_File : constant String := "alib_list";
Default_Target_List_File : constant String := "alib.list";
Default_Program_Library : constant String := "working";
function Program_Library_Name
(Stripped_Program_Library : String) return String is
begin
if Stripped_Program_Library'Length = 0 then
return Default_Program_Library;
else
return Stripped_Program_Library;
end if;
end Program_Library_Name;
procedure Set_Status (Status : in out Simple_Status.Condition;
Error_Type : String := "Remote_Operation_Error";
Message : String;
Severity : Simple_Status.Condition_Class :=
Simple_Status.Problem) is
begin
Simple_Status.Create_Condition (Status => Status,
Error_Type => Error_Type,
Message => Message,
Severity => Severity);
end Set_Status;
procedure Unhandled_Exception
(Status : in out Simple_Status.Condition; Routine : String) is
begin
Set_Status (Status => Status,
Error_Type => "Unhandled Exception",
Message => Debug_Tools.Get_Exception_Name &
" caught in " & Routine & ".");
end Unhandled_Exception;
procedure Set_Context (Old_Context : in out Naming.Context;
View : String;
Status : in out Simple_Status.Condition) is
Error_Status : Directory.Error_Status;
New_Context : Naming.Context;
Dir_Object : Directory.Object;
Name_Status : Naming.Name_Status;
begin
Naming.Resolve (Name => View,
The_Object => Dir_Object,
Status => Name_Status);
if not Naming."=" (Name_Status, Naming.Successful) then
Set_Status (Status => Status,
Message => "Unable to resolve" & View &
". " & "Name Status = " &
Naming.Name_Status'Image (Name_Status));
return;
end if;
-- Get the current naming context for Promote_Unit.
Naming.Get_Context (The_Context => New_Context,
The_Unit => Dir_Object,
Status => Error_Status);
if not Directory."=" (Error_Status, Directory.Successful) then
Set_Status (Status => Status,
Message => "Unable to get default context for " &
View & ". Error Status = " &
Directory.Error_Status'Image
(Error_Status));
return;
end if;
-- Get the job's default naming context.
Old_Context := Naming.Default_Context;
-- We must restore this context (after any errors) before we return.
-- Change the job's default context to the unit's current context.
Naming.Set_Default_Context (The_Context => New_Context,
Status => Error_Status);
if not Directory."=" (Error_Status, Directory.Successful) then
Set_Status (Status => Status,
Message => "Unable to default context to " &
View & ". Error Status = " &
Directory.Error_Status'Image
(Error_Status));
return;
end if;
end Set_Context;
procedure Reset_Context (Old_Context : Directory.Naming.Context) is
Error_Status : Directory.Error_Status;
begin
-- Restore the job's original naming context.
Naming.Set_Default_Context (The_Context => Old_Context,
Status => Error_Status);
end Reset_Context;
procedure Download_File (Host_File_Name : String;
Target_File_Name : String;
Remote_Directory : String;
Remote_Machine : String;
Status : in out Simple_Status.Condition) is
Remote_Connection : Remote_Command_Interface.Context;
Local_Status : Simple_Status.Condition;
Fully_Qualified_Target_Name : constant String :=
Remote_Directory & "/" & Target_File_Name;
begin
Log.Put_Line (Message => "Transferring " & Host_File_Name & " to " &
Fully_Qualified_Target_Name & ".",
Kind => Profile.Debug_Msg);
Remote_Command_Interface.Acquire
(Remote_Connection => Remote_Connection,
Target_Key => "Rs6000_Aix_Ibm",
Remote_Machine => Remote_Machine,
Status => Status);
if Simple_Status.Error (Status) then
Log.Put_Line (Message => Simple_Status.Message (Status),
Kind => Profile.Negative_Msg);
Set_Status (Status => Status,
Message => "Unable to acquire connection to " &
Remote_Machine);
return;
end if;
Remote_Command_Interface.Put
(Host_File_Name => Host_File_Name,
Target_File_Name => Fully_Qualified_Target_Name,
Remote_Connection => Remote_Connection,
Status => Status,
Trace_Command => False);
if Simple_Status.Error (Status) then
Log.Put_Line (Message => Simple_Status.Message (Status),
Kind => Profile.Negative_Msg);
Set_Status (Status => Status,
Message => "Unable to transfer " & Host_File_Name &
" to " & Target_File_Name &
" on " & Remote_Machine);
end if;
Remote_Command_Interface.Release
(Remote_Connection => Remote_Connection, Status => Local_Status);
end Download_File;
procedure Upload_File (Host_File_Name : String;
Target_File_Name : String;
Remote_Directory : String;
Remote_Machine : String;
Status : in out Simple_Status.Condition) is
Remote_Connection : Remote_Command_Interface.Context;
Local_Status : Simple_Status.Condition;
Fully_Qualified_Target_Name : constant String :=
Remote_Directory & "/" & Target_File_Name;
begin
Log.Put_Line (Message => "Uploading " & Host_File_Name & " from " &
Fully_Qualified_Target_Name & ".",
Kind => Profile.Debug_Msg);
Remote_Command_Interface.Acquire
(Remote_Connection => Remote_Connection,
Target_Key => "Rs6000_Aix_Ibm",
Remote_Machine => Remote_Machine,
Status => Status);
if Simple_Status.Error (Status) then
Log.Put_Line (Message => Simple_Status.Message (Status),
Kind => Profile.Negative_Msg);
Set_Status (Status => Status,
Message => "Unable to acquire connection to " &
Remote_Machine);
return;
end if;
Remote_Command_Interface.Get
(Host_File_Name => Host_File_Name,
Target_File_Name => Fully_Qualified_Target_Name,
Remote_Connection => Remote_Connection,
Status => Status,
Trace_Command => False);
if Simple_Status.Error (Status) then
Log.Put_Line (Message => Simple_Status.Message (Status),
Kind => Profile.Negative_Msg);
Set_Status (Status => Status,
Message => "Unable to upload " & Host_File_Name &
" to " & Target_File_Name &
" from " & Remote_Machine);
end if;
Remote_Command_Interface.Release
(Remote_Connection => Remote_Connection, Status => Local_Status);
end Upload_File;
procedure Build_List_File (Host_View : String;
Remote_Machine : String;
Remote_Directory : String;
Remote_Program_Library : String;
List_File_Name : String;
Status : in out Simple_Status.Condition) is
Dir_Object : Directory.Object;
Name_Status : Naming.Name_Status;
Local_Status : Simple_Status.Condition;
List_File : Io.File_Type;
begin
Log.Put_Line (Message =>
"Building list file for Host_View = " &
Host_View & ", and target library = " &
Remote_Directory & "/" & Remote_Program_Library,
Kind => Profile.Debug_Msg);
if Host_View = "" then
Set_Status
(Status => Status,
Message => "A null Host_View was supplied to " &
"Remote_Library_Integration.Build_List_File");
return;
end if;
Naming.Resolve (Name => List_File_Name,
The_Object => Dir_Object,
Status => Name_Status);
case Name_Status is
when Naming.Successful =>
Io.Open (File => List_File, Name => List_File_Name);
when Naming.Undefined =>
Io.Create (File => List_File, Name => List_File_Name);
-- do I need to open it here
when others =>
Set_Status (Status => Status,
Message => "Unable to resolve " &
List_File_Name & ". Status =" &
Naming.Name_Status'Image
(Name_Status));
return;
end case;
Io.Put_Line (File => List_File, Item => "-- Host_View => " & Host_View);
if Remote_Program_Library = "" then
Io.Put_Line (File => List_File, Item => Default_Program_Library);
else
Io.Put_Line (File => List_File, Item => Remote_Program_Library);
end if;
-- Add Imports Later !
Io.Put_Line (List_File, "/usr/lpp/ada/lib/libada");
Io.Close (List_File);
exception
when others =>
Unhandled_Exception (Status, "Build_List_File");
begin
Io.Close (List_File);
exception
when others =>
null;
end;
end Build_List_File;
procedure Create_Remote_Directory
(Remote_Directory : String;
Remote_Machine : String;
Status : in out Simple_Status.Condition) is
Remote_Connection : Remote_Command_Interface.Context;
Local_Status : Simple_Status.Condition;
Create_Dir_Command : constant String := "mkdir " & Remote_Directory;
begin
Log.Put_Line (Message =>
"Creating remote directory = " & Remote_Directory,
Kind => Profile.Debug_Msg);
Remote_Command_Interface.Acquire
(Remote_Connection => Remote_Connection,
Target_Key => "Rs6000_Aix_Ibm",
Remote_Machine => Remote_Machine,
Status => Status);
if Simple_Status.Error (Status) then
Log.Put_Line (Message => Simple_Status.Message (Status),
Kind => Profile.Negative_Msg);
Set_Status (Status => Status,
Message => "Unable to acquire connection to " &
Remote_Machine);
return;
end if;
Remote_Command_Interface.Execute_Command
(Command_Line => Create_Dir_Command,
Remote_Connection => Remote_Connection,
Status => Status);
if Simple_Status.Error (Status) then
Log.Put_Line (Message => Simple_Status.Message (Status),
Kind => Profile.Negative_Msg);
Set_Status (Status => Status,
Message => "Unable to create the remote directory, " &
Remote_Directory & ".");
end if;
Remote_Command_Interface.Release
(Remote_Connection => Remote_Connection, Status => Local_Status);
exception
when others =>
Unhandled_Exception (Status, "Create_Remote_Directory");
begin
Remote_Command_Interface.Release
(Remote_Connection => Remote_Connection,
Status => Local_Status);
exception
when others =>
null;
end;
end Create_Remote_Directory;
procedure Create_Program_Library
(Host_View : String;
Remote_Directory : String;
Remote_Program_Library : String;
Remote_Machine : String;
Status : in out Simple_Status.Condition) is
Remote_Connection : Remote_Command_Interface.Context;
Local_Status : Simple_Status.Condition;
Build_Library_Command : constant String :=
"PATH=$PATH:/usr/bin/ada ; export PATH ; /usr/bin/ada/alibinit -L " &
Remote_Directory & "/alib.list";
List_File_Name : constant String :=
Host_View & ".State.Tool_State." & Default_Host_List_File;
begin
Log.Put_Line (Message => "Creating remote program library = " &
Remote_Program_Library,
Kind => Profile.Debug_Msg);
Build_List_File (Host_View => Host_View,
Remote_Directory => Remote_Directory,
Remote_Machine => Remote_Machine,
Remote_Program_Library => Remote_Program_Library,
List_File_Name => List_File_Name,
Status => Status);
if Simple_Status.Error (Status) then
Log.Put_Line (Message => Simple_Status.Message (Status),
Kind => Profile.Negative_Msg);
Set_Status
(Status => Status,
Message => "Unable to create the remote library list file.");
return;
else
Download_File (Host_File_Name => List_File_Name,
Target_File_Name => Default_Target_List_File,
Remote_Directory => Remote_Directory,
Remote_Machine => Remote_Machine,
Status => Status);
end if;
Remote_Command_Interface.Acquire
(Remote_Connection => Remote_Connection,
Target_Key => "Rs6000_Aix_Ibm",
Set_Directory => "cd " & Remote_Directory,
Remote_Machine => Remote_Machine,
Status => Status);
if Simple_Status.Error (Status) then
Log.Put_Line (Message => Simple_Status.Message (Status),
Kind => Profile.Negative_Msg);
Set_Status (Status => Status,
Message => "Unable to acquire connection to " &
Remote_Machine);
return;
end if;
Remote_Command_Interface.Execute_Command
(Command_Line => Build_Library_Command,
Remote_Connection => Remote_Connection,
Status => Status);
if Simple_Status.Error (Status) then
Log.Put_Line (Message => Simple_Status.Message (Status),
Kind => Profile.Negative_Msg);
Set_Status
(Status => Status,
Message => "Unable to create the remote program library, " &
Remote_Program_Library & ".");
end if;
Remote_Command_Interface.Release
(Remote_Connection => Remote_Connection, Status => Local_Status);
exception
when others =>
Unhandled_Exception (Status, "Create_Program_Library");
begin
Remote_Command_Interface.Release
(Remote_Connection => Remote_Connection,
Status => Local_Status);
exception
when others =>
null;
end;
end Create_Program_Library;
procedure Destroy_Remote_Library
(Remote_Directory : String;
Remote_Machine : String;
Status : in out Simple_Status.Condition) is
Remote_Connection : Remote_Command_Interface.Context;
Local_Status : Simple_Status.Condition;
Destroy_Library_Command : constant String :=
"rm -r " & Remote_Directory;
begin
Log.Put_Line (Message =>
"Destroying Remote Directory = " & Remote_Directory,
Kind => Profile.Debug_Msg);
Remote_Command_Interface.Acquire
(Remote_Connection => Remote_Connection,
Target_Key => "Rs6000_Aix_Ibm",
Set_Directory => "cd " & Remote_Directory & "/..",
Remote_Machine => Remote_Machine,
Status => Status);
if Simple_Status.Error (Status) then
Log.Put_Line (Message => Simple_Status.Message (Status),
Kind => Profile.Negative_Msg);
Set_Status (Status => Status,
Message => "Unable to acquire connection to " &
Remote_Machine);
return;
end if;
Remote_Command_Interface.Execute_Command
(Command_Line => Destroy_Library_Command,
Remote_Connection => Remote_Connection,
Status => Status);
if Simple_Status.Error (Status) then
Log.Put_Line (Message => Simple_Status.Message (Status),
Kind => Profile.Negative_Msg);
Set_Status
(Status => Status,
Message => "Unable to destroy the remote directory/library, " &
Remote_Directory & ".");
end if;
Remote_Command_Interface.Release
(Remote_Connection => Remote_Connection, Status => Local_Status);
exception
when others =>
Unhandled_Exception (Status, "Destroy_Remote_Library");
begin
Remote_Command_Interface.Release
(Remote_Connection => Remote_Connection,
Status => Local_Status);
exception
when others =>
null;
end;
end Destroy_Remote_Library;
procedure File_Exists (Remote_Filename : String;
Remote_Machine : String;
Status : in out Simple_Status.Condition;
Exists : out Boolean) is
Remote_Connection : Remote_Command_Interface.Context;
begin
Exists := False;
Remote_Command_Interface.Acquire
(Remote_Connection => Remote_Connection,
Status => Status,
Target_Key => "Rs6000_Aix_Ibm",
Remote_Machine => Remote_Machine);
if Simple_Status.Error (Status) then
Log.Put_Line (Message => Simple_Status.Message (Status),
Kind => Profile.Negative_Msg);
Set_Status (Status => Status,
Message => "Unable to acquire connection to " &
Remote_Machine);
return;
end if;
Remote_Command_Interface.File_Exists
(The_File => Remote_Filename,
Remote_Connection => Remote_Connection,
Status => Status,
Exists => Exists);
exception
when others =>
Unhandled_Exception (Status, "File_Exists");
end File_Exists;
procedure Directory_Exists (Remote_Machine : String;
Remote_Directory : String;
Status : in out Simple_Status.Condition;
Exists : out Boolean) is
begin
File_Exists (Remote_Filename => Remote_Directory,
Remote_Machine => Remote_Machine,
Status => Status,
Exists => Exists);
exception
when others =>
Unhandled_Exception (Status, "Directory_Exists");
end Directory_Exists;
procedure Refresh_Imports (Host_View : String;
Host_List_File : String;
Remote_Directory : String;
Remote_Machine : String;
Remote_Program_Library : String;
Status : in out Simple_Status.Condition) is
Dir_Object : Directory.Object;
Name_Status : Naming.Name_Status;
Local_Status : Simple_Status.Condition;
List_File : Io.File_Type;
Imports : Import_Interface.Import_Iterator;
begin
Log.Put_Line (Message =>
"Refreshing imports for target library = " &
Remote_Directory & "/" & Remote_Program_Library,
Kind => Profile.Debug_Msg);
if Host_View = "" then
Set_Status
(Status => Status,
Message => "A null Host_View was supplied to " &
"Remote_Library_Integration.Refresh_Imports");
return;
end if;
Naming.Resolve (Name => Host_List_File,
The_Object => Dir_Object,
Status => Name_Status);
case Name_Status is
when Naming.Successful =>
Io.Open (File => List_File, Name => Host_List_File);
when Naming.Undefined =>
Io.Create (File => List_File, Name => Host_List_File);
-- do I need to open it here
when others =>
Set_Status (Status => Status,
Message => "Unable to resolve " &
Host_List_File & ". Status =" &
Naming.Name_Status'Image
(Name_Status));
return;
end case;
Import_Interface.Get_Remote_Imports (For_View => Host_View,
Closure => True,
Imports => Imports,
Condition => Status);
-- Add From View Comment and local working library
Io.Put_Line (File => List_File, Item => "-- Host_View => " & Host_View);
if Remote_Program_Library = "" then
Io.Put_Line (File => List_File, Item => Default_Program_Library);
else
Io.Put_Line (File => List_File, Item => Remote_Program_Library);
end if;
while not Import_Interface.Done (Imports) loop
declare
Next_Import : constant String :=
Import_Interface.Value (Imports);
Local_Library : constant String :=
Remote_Directory & "/" & Remote_Program_Library;
begin
if not String_Utilities.Equal (Str1 => Next_Import,
Str2 => Local_Library,
Ignore_Case => True) then
if Next_Import (Next_Import'Last) = '/' then
Io.Put_Line (List_File, Next_Import &
Default_Program_Library);
else
Io.Put_Line (List_File, Next_Import);
end if;
end if;
Import_Interface.Next (Imports);
end;
end loop;
-- Add predefined
Io.Put_Line (List_File, "/usr/lpp/ada/lib/libada");
Io.Close (List_File);
end Refresh_Imports;
procedure Update_Import_List (Host_View : String;
Remote_Directory : String;
Remote_Machine : String;
Remote_Program_Library : String;
Status : in out Simple_Status.Condition) is
Host_List_File : constant String :=
Host_View & ".State.Tool_State." & Default_Host_List_File;
Target_List_File : constant String :=
Remote_Directory & "/" & Default_Target_List_File;
begin
null;
-- Upload_File (Host_File_Name => Host_List_File,
-- Target_File_Name => Target_List_File,
-- Remote_Directory => Remote_Directory,
-- Remote_Machine => Remote_Machine,
-- Status => Status);
end Update_Import_List;
procedure Make_Path_Preprocess (Host_Path_Name : String;
Remote_Machine : String;
Remote_Directory : String;
Remote_Program_Library : String;
Status : in out Simple_Status.Condition) is
Remote_Connection : Remote_Command_Interface.Context;
Set_Path_Command : constant String :=
"PATH=$PATH:/usr/bin/ada; export PATH";
begin
Log.Put_Line (Message => "Executing Make_Path_Preprocess",
Kind => Profile.Note_Msg);
Remote_Command_Interface.Acquire
(Remote_Connection => Remote_Connection,
Status => Status,
Target_Key => "Rs6000_Aix_Ibm",
Remote_Machine => Remote_Machine);
Remote_Command_Interface.Execute_Command
(Command_Line => Set_Path_Command,
Remote_Connection => Remote_Connection,
Status => Status);
-- set context
Simple_Status.Initialize (Status);
-- reset context
exception
when others =>
Unhandled_Exception (Status, "Make_Path_Preprocess");
end Make_Path_Preprocess;
procedure Make_Path_Postprocess (Host_Path_Name : String;
Remote_Machine : String;
Remote_Directory : String;
Remote_Program_Library : String;
Status : in out Simple_Status.Condition) is
Stripped_Machine : constant String :=
String_Utilities.Strip (From => Remote_Machine, Filler => ' ');
Stripped_Directory : constant String :=
String_Utilities.Strip (From => Remote_Directory, Filler => ' ');
Stripped_Program_Library : constant String :=
String_Utilities.Strip
(From => Remote_Program_Library, Filler => ' ');
Dir_Exists : Boolean := False;
Fil_Exists : Boolean := False;
Old_Context : Directory.Naming.Context;
procedure Display_Information is
begin
if Stripped_Machine = "" then
Log.Put_Line (Message =>
"A null remote machine name was provided.",
Kind => Profile.Warning_Msg);
end if;
if Stripped_Directory = "" then
Log.Put_Line (Message =>
"A null remote directory name was provided.",
Kind => Profile.Warning_Msg);
end if;
end Display_Information;
begin
Log.Put_Line (Message => "Executing Make_Path_Postprocess",
Kind => Profile.Note_Msg);
if Stripped_Machine = "" or else Stripped_Directory = "" then
Display_Information;
Set_Status
(Status => Status,
Message =>
"Insufficient remote machine or directory information.",
Severity => Simple_Status.Problem);
return;
end if;
Set_Context (Old_Context => Old_Context,
View => Host_Path_Name,
Status => Status);
if Simple_Status.Error (Status) then
Log.Put_Line (Message => Simple_Status.Message (Status),
Kind => Profile.Negative_Msg);
Set_Status (Status => Status,
Message => "Make_Path_Postprocess Failed");
return;
end if;
Directory_Exists (Remote_Directory => Stripped_Directory,
Remote_Machine => Remote_Machine,
Status => Status,
Exists => Dir_Exists);
if Dir_Exists then
Log.Put_Line (Message => "Directory " & Stripped_Directory &
" already exists.",
Kind => Profile.Warning_Msg);
Log.Put_Line (Message => "Using an existing directory.",
Kind => Profile.Note_Msg);
else
Log.Put_Line (Message => "Creating a new remote directory," &
Stripped_Directory,
Kind => Profile.Note_Msg);
Create_Remote_Directory (Remote_Machine => Stripped_Machine,
Remote_Directory => Stripped_Directory,
Status => Status);
if Simple_Status.Error (Status) then
return;
end if;
end if;
File_Exists (Remote_Filename =>
Stripped_Directory & "/" & Default_Target_List_File,
Remote_Machine => Remote_Machine,
Status => Status,
Exists => Fil_Exists);
declare
Library_Name : constant String :=
Program_Library_Name (Stripped_Program_Library);
begin
Directory_Exists (Remote_Directory =>
Stripped_Directory & "/" & Library_Name,
Remote_Machine => Remote_Machine,
Status => Status,
Exists => Dir_Exists);
if Dir_Exists or else Fil_Exists then
Log.Put_Line (Message =>
"A program library already exists in " &
Stripped_Directory & ".",
Kind => Profile.Warning_Msg);
Log.Put_Line (Message =>
"The existing program library will be used.",
Kind => Profile.Warning_Msg);
return;
else
Log.Put_Line (Message =>
"Creating a new remote program library, " &
Stripped_Directory &
"/" & Library_Name & ".",
Kind => Profile.Note_Msg);
Create_Program_Library (Host_View => Host_Path_Name,
Remote_Machine => Stripped_Machine,
Remote_Program_Library => Library_Name,
Remote_Directory => Stripped_Directory,
Status => Status);
if Simple_Status.Error (Status) then
Set_Status
(Status => Status,
Message => "Unable to build remote program library " &
Library_Name & ".");
end if;
end if;
end;
Reset_Context (Old_Context);
exception
when others =>
Unhandled_Exception (Status, "Make_Path_Postprocess");
Reset_Context (Old_Context);
end Make_Path_Postprocess;
procedure Destroy_View_Preprocess
(Host_Path_Name : String;
Status : in out Simple_Status.Condition) is
Machine_Result : constant Library_Interface.String_Result :=
Library_Interface.Remote_Machine (View => Host_Path_Name);
Directory_Result : constant Library_Interface.String_Result :=
Library_Interface.Remote_Directory (View => Host_Path_Name);
Library_Result : constant Library_Interface.String_Result :=
Library_Interface.Remote_Library (View => Host_Path_Name);
Remote_Machine : constant String :=
Machine_Result.Result (1 .. Machine_Result.Size);
Remote_Directory : constant String :=
Directory_Result.Result (1 .. Directory_Result.Size);
Remote_Library : constant String :=
Library_Result.Result (1 .. Library_Result.Size);
Old_Context : Directory.Naming.Context;
Dir_Exists : Boolean := True;
procedure Display_Information is
begin
if Remote_Machine = "" then
Log.Put_Line (Message =>
"A null remote machine name was provided.",
Kind => Profile.Warning_Msg);
end if;
if Remote_Directory = "" then
Log.Put_Line (Message =>
"A null remote directory name was provided.",
Kind => Profile.Warning_Msg);
end if;
end Display_Information;
begin
Log.Put_Line (Message => "Executing Destroy_View_Preprocess",
Kind => Profile.Note_Msg);
Set_Context (Old_Context => Old_Context,
View => Host_Path_Name,
Status => Status);
if Remote_Machine = "" or else Remote_Directory = "" then
Display_Information;
Set_Status (Status => Status,
Message => "Insufficient remote library information.",
Severity => Simple_Status.Problem);
return;
end if;
Directory_Exists (Remote_Directory => Remote_Directory,
Remote_Machine => Remote_Machine,
Status => Status,
Exists => Dir_Exists);
if Dir_Exists then
Destroy_Remote_Library (Remote_Directory => Remote_Directory,
Remote_Machine => Remote_Machine,
Status => Status);
else
Log.Put_Line (Message =>
"The remote directory, " & Remote_Directory &
" does not exist on machine, " & Remote_Machine,
Kind => Profile.Negative_Msg);
Set_Status
(Status => Status,
Message =>
"Unable to destroy remote directory/program library.",
Severity => Simple_Status.Problem);
end if;
Reset_Context (Old_Context);
exception
when others =>
Unhandled_Exception (Status, "Destroy_View_Preprocess");
end Destroy_View_Preprocess;
procedure Destroy_View_Postprocess
(Host_Path_Name : String;
Status : in out Simple_Status.Condition) is
begin
Log.Put_Line (Message => "Executing Destroy_View_Postprocess",
Kind => Profile.Note_Msg);
Simple_Status.Initialize (Status);
exception
when others =>
Unhandled_Exception (Status, "Destroy_View_Postprocess");
end Destroy_View_Postprocess;
procedure Update_Remote_Imports (Host_View : String;
List_File_Name : String;
Remote_Directory : String;
Remote_Machine : String;
Remote_Program_Library : String;
Status : in out Simple_Status.Condition) is
begin
Refresh_Imports (Host_View => Host_View,
Host_List_File => List_File_Name,
Remote_Directory => Remote_Directory,
Remote_Machine => Remote_Machine,
Remote_Program_Library => Remote_Program_Library,
Status => Status);
if Simple_Status.Error (Status) then
Log.Put_Line (Message => "Unable to update remote imports.",
Kind => Profile.Negative_Msg);
return;
end if;
Download_File (Host_File_Name => List_File_Name,
Target_File_Name => Default_Target_List_File,
Remote_Directory => Remote_Directory,
Remote_Machine => Remote_Machine,
Status => Status);
end Update_Remote_Imports;
procedure Import_Postprocess (Views_To_Import : Directory.Naming.Iterator;
Into_View : String;
Status : in out Simple_Status.Condition) is
Machine_Result : constant Library_Interface.String_Result :=
Library_Interface.Remote_Machine (View => Into_View);
Directory_Result : constant Library_Interface.String_Result :=
Library_Interface.Remote_Directory (View => Into_View);
Library_Result : constant Library_Interface.String_Result :=
Library_Interface.Remote_Library (View => Into_View);
Remote_Machine : constant String :=
Machine_Result.Result (1 .. Machine_Result.Size);
Remote_Directory : constant String :=
Directory_Result.Result (1 .. Directory_Result.Size);
Remote_Library : constant String :=
Library_Result.Result (1 .. Library_Result.Size);
Host_List_File : constant String :=
Into_View & ".State.Tool_State." & Default_Host_List_File;
Old_Context : Directory.Naming.Context;
procedure Display_Information is
begin
if Remote_Machine = "" then
Log.Put_Line (Message =>
"A null remote machine name was provided.",
Kind => Profile.Warning_Msg);
end if;
if Remote_Directory = "" then
Log.Put_Line (Message =>
"A null remote directory name was provided.",
Kind => Profile.Warning_Msg);
end if;
end Display_Information;
begin
Log.Put_Line (Message => "Executing Import_Postprocess",
Kind => Profile.Note_Msg);
if Remote_Machine = "" or else Remote_Directory = "" then
Display_Information;
Set_Status
(Status => Status,
Message => "Insufficient remote program library information.",
Severity => Simple_Status.Problem);
return;
end if;
Set_Context (Old_Context => Old_Context,
View => Into_View,
Status => Status);
Update_Remote_Imports (Host_View => Into_View,
List_File_Name => Host_List_File,
Remote_Directory => Remote_Directory,
Remote_Machine => Remote_Machine,
Remote_Program_Library => Remote_Library,
Status => Status);
Reset_Context (Old_Context);
exception
when others =>
Unhandled_Exception (Status, "Import_Postprocess");
Reset_Context (Old_Context);
end Import_Postprocess;
procedure Import_Preprocess (Views_To_Import : Directory.Naming.Iterator;
Into_View : String;
Status : in out Simple_Status.Condition) is
begin
Log.Put_Line (Message => "Executing Import_Preprocess",
Kind => Profile.Note_Msg);
-- set context
Simple_Status.Initialize (Status);
-- reset context
exception
when others =>
Unhandled_Exception (Status, "Import_Preprocess");
end Import_Preprocess;
procedure Remove_Import_Preprocess
(View_To_Remove : Directory.Object;
From_View : String;
Status : in out Simple_Status.Condition) is
begin
Log.Put_Line (Message => "Executing Remove_Import_Preprocess",
Kind => Profile.Note_Msg);
-- set context
Simple_Status.Initialize (Status);
-- reset context
exception
when others =>
Unhandled_Exception (Status, "Remove_Import_Preprocess");
end Remove_Import_Preprocess;
procedure Remove_Import_Postprocess
(View_To_Remove : Directory.Object;
From_View : String;
Status : in out Simple_Status.Condition) is
Machine_Result : constant Library_Interface.String_Result :=
Library_Interface.Remote_Machine (View => From_View);
Directory_Result : constant Library_Interface.String_Result :=
Library_Interface.Remote_Directory (View => From_View);
Library_Result : constant Library_Interface.String_Result :=
Library_Interface.Remote_Library (View => From_View);
Remote_Machine : constant String :=
Machine_Result.Result (1 .. Machine_Result.Size);
Remote_Directory : constant String :=
Directory_Result.Result (1 .. Directory_Result.Size);
Remote_Library : constant String :=
Library_Result.Result (1 .. Library_Result.Size);
Host_List_File : constant String :=
From_View & ".State.Tool_State." & Default_Host_List_File;
Old_Context : Directory.Naming.Context;
begin
Log.Put_Line (Message => "Executing Remove_Import_Postprocess",
Kind => Profile.Note_Msg);
Set_Context (Old_Context => Old_Context,
View => From_View,
Status => Status);
Update_Remote_Imports (Host_View => From_View,
List_File_Name => Host_List_File,
Remote_Directory => Remote_Directory,
Remote_Machine => Remote_Machine,
Remote_Program_Library => Remote_Library,
Status => Status);
Reset_Context (Old_Context);
exception
when others =>
Unhandled_Exception (Status, "Remove_Import_Postprocess");
end Remove_Import_Postprocess;
procedure Release_Preprocess (From_Working_View : String;
Released_View : String;
Remote_Machine : String;
Remote_Directory : String;
Remote_Program_Library : String;
Status : in out Simple_Status.Condition) is
begin
Log.Put_Line (Message => "Executing Release_Preprocess",
Kind => Profile.Note_Msg);
-- set context
Simple_Status.Initialize (Status);
-- reset context
exception
when others =>
Unhandled_Exception (Status, "Release_Preprocess");
end Release_Preprocess;
procedure Release_Postprocess (View_To_Remove : String;
Released_View : String;
Remote_Machine : String;
Remote_Directory : String;
Remote_Program_Library : String;
Status : in out Simple_Status.Condition) is
begin
Log.Put_Line (Message => "Executing Release_Postprocess",
Kind => Profile.Note_Msg);
-- set context
Simple_Status.Initialize (Status);
-- reset context
exception
when others =>
Unhandled_Exception (Status, "Release_Postprocess");
end Release_Postprocess;
procedure Link_Preprocess (Main_Unit : String;
Executable_Name : String;
Status : in out Simple_Status.Condition) is
begin
Log.Put_Line (Message => "Executing Link_Preprocess",
Kind => Profile.Note_Msg);
-- set context
Simple_Status.Initialize (Status);
-- reset context
exception
when others =>
Unhandled_Exception (Status, "Link_Preprocess");
end Link_Preprocess;
procedure Link_Postprocess (Main_Unit : String;
Executable_Name : String;
Status : in out Simple_Status.Condition) is
begin
Log.Put_Line (Message => "Executing Link_Postprocess",
Kind => Profile.Note_Msg);
-- set context
Simple_Status.Initialize (Status);
-- reset context
exception
when others =>
Unhandled_Exception (Status, "Link_Postprocess");
end Link_Postprocess;
end Library_Extensions;
nblk1=30
nid=0
hdr6=60
[0x00] rec0=1f rec1=00 rec2=01 rec3=02c
[0x01] rec0=15 rec1=00 rec2=02 rec3=048
[0x02] rec0=18 rec1=00 rec2=03 rec3=052
[0x03] rec0=15 rec1=00 rec2=04 rec3=05a
[0x04] rec0=19 rec1=00 rec2=05 rec3=040
[0x05] rec0=1a rec1=00 rec2=06 rec3=070
[0x06] rec0=19 rec1=00 rec2=07 rec3=062
[0x07] rec0=16 rec1=00 rec2=08 rec3=02a
[0x08] rec0=1e rec1=00 rec2=09 rec3=050
[0x09] rec0=16 rec1=00 rec2=0a rec3=03c
[0x0a] rec0=17 rec1=00 rec2=0b rec3=090
[0x0b] rec0=1e rec1=00 rec2=0c rec3=022
[0x0c] rec0=1a rec1=00 rec2=0d rec3=056
[0x0d] rec0=1e rec1=00 rec2=0e rec3=01c
[0x0e] rec0=16 rec1=00 rec2=0f rec3=07a
[0x0f] rec0=18 rec1=00 rec2=10 rec3=030
[0x10] rec0=1a rec1=00 rec2=11 rec3=02c
[0x11] rec0=1c rec1=00 rec2=12 rec3=078
[0x12] rec0=1b rec1=00 rec2=13 rec3=008
[0x13] rec0=1b rec1=00 rec2=14 rec3=03e
[0x14] rec0=19 rec1=00 rec2=15 rec3=08e
[0x15] rec0=1e rec1=00 rec2=16 rec3=07a
[0x16] rec0=17 rec1=00 rec2=17 rec3=050
[0x17] rec0=18 rec1=00 rec2=18 rec3=01e
[0x18] rec0=16 rec1=00 rec2=19 rec3=048
[0x19] rec0=17 rec1=00 rec2=1a rec3=066
[0x1a] rec0=17 rec1=00 rec2=1b rec3=076
[0x1b] rec0=1c rec1=00 rec2=1c rec3=044
[0x1c] rec0=15 rec1=00 rec2=1d rec3=00e
[0x1d] rec0=1f rec1=00 rec2=1e rec3=04e
[0x1e] rec0=16 rec1=00 rec2=1f rec3=068
[0x1f] rec0=1c rec1=00 rec2=20 rec3=05c
[0x20] rec0=13 rec1=00 rec2=21 rec3=060
[0x21] rec0=18 rec1=00 rec2=22 rec3=036
[0x22] rec0=17 rec1=00 rec2=23 rec3=034
[0x23] rec0=1c rec1=00 rec2=24 rec3=01a
[0x24] rec0=17 rec1=00 rec2=25 rec3=042
[0x25] rec0=1f rec1=00 rec2=26 rec3=032
[0x26] rec0=14 rec1=00 rec2=27 rec3=036
[0x27] rec0=15 rec1=00 rec2=28 rec3=04c
[0x28] rec0=1b rec1=00 rec2=29 rec3=028
[0x29] rec0=1a rec1=00 rec2=2a rec3=038
[0x2a] rec0=1c rec1=00 rec2=2b rec3=038
[0x2b] rec0=1a rec1=00 rec2=2c rec3=004
[0x2c] rec0=15 rec1=00 rec2=2d rec3=012
[0x2d] rec0=1d rec1=00 rec2=2e rec3=004
[0x2e] rec0=16 rec1=00 rec2=2f rec3=05a
[0x2f] rec0=19 rec1=00 rec2=30 rec3=000
tail 0x21707ff4281f94dbcabca 0x42a00088462060003