diff --git a/source/spawn/spawn-processes.ads b/source/spawn/spawn-processes.ads index 42e12f2..5a5adf4 100644 --- a/source/spawn/spawn-processes.ads +++ b/source/spawn/spawn-processes.ads @@ -178,6 +178,48 @@ package Spawn.Processes is Data : out Ada.Streams.Stream_Element_Array; Last : out Ada.Streams.Stream_Element_Offset); + function Wait_For_Started + (Self : in out Process'Class; + Timeout : Duration := Duration'Last) return Boolean; + -- Block until process has started or until Timeout have passed. Return + -- True when process has been started successfully. + -- + -- Started subprogram of the listener is called before exit from this + -- subprogram. + + function Wait_For_Finished + (Self : in out Process'Class; + Timeout : Duration := Duration'Last) return Boolean; + -- Block until process has been finished ot until Timeout have passed. + -- Return True when process has finished. + -- + -- Finished subprogram of the listener is called before exit from this + -- subprogram. + + function Wait_For_Standard_Input_Available + (Self : in out Process'Class; + Timeout : Duration := Duration'Last) return Boolean; + -- Block until standard input is available for write. + -- + -- Standard_Input_Available subprogram of the listener is called before + -- exit from this subprogram. + + function Wait_For_Standard_Output_Available + (Self : in out Process'Class; + Timeout : Duration := Duration'Last) return Boolean; + -- Block until standard output has data available for read. + -- + -- Standard_Output_Available subprogram of the listener is called before + -- exit from this subprogram. + + function Wait_For_Standard_Error_Available + (Self : in out Process'Class; + Timeout : Duration := Duration'Last) return Boolean; + -- Block until standard error has data available for read. + -- + -- Standard_Error_Available subprogram of the listener is called before + -- exit from this subprogram. + private use all type Internal.Pipe_Kinds; diff --git a/source/spawn/spawn-processes__glib.adb b/source/spawn/spawn-processes__glib.adb index 114210d..7f5b604 100644 --- a/source/spawn/spawn-processes__glib.adb +++ b/source/spawn/spawn-processes__glib.adb @@ -624,6 +624,66 @@ package body Spawn.Processes is pragma Assert (Code = 0); end Terminate_Process; + ----------------------- + -- Wait_For_Finished -- + ----------------------- + + function Wait_For_Finished + (Self : in out Process'Class; + Timeout : Duration := Duration'Last) return Boolean is + begin + raise Program_Error; + return False; + end Wait_For_Finished; + + --------------------------------------- + -- Wait_For_Standard_Error_Available -- + --------------------------------------- + + function Wait_For_Standard_Error_Available + (Self : in out Process'Class; + Timeout : Duration := Duration'Last) return Boolean is + begin + raise Program_Error; + return False; + end Wait_For_Standard_Error_Available; + + --------------------------------------- + -- Wait_For_Standard_Input_Available -- + --------------------------------------- + + function Wait_For_Standard_Input_Available + (Self : in out Process'Class; + Timeout : Duration := Duration'Last) return Boolean is + begin + raise Program_Error; + return False; + end Wait_For_Standard_Input_Available; + + ---------------------------------------- + -- Wait_For_Standard_Output_Available -- + ---------------------------------------- + + function Wait_For_Standard_Output_Available + (Self : in out Process'Class; + Timeout : Duration := Duration'Last) return Boolean is + begin + raise Program_Error; + return False; + end Wait_For_Standard_Output_Available; + + ---------------------- + -- Wait_For_Started -- + ---------------------- + + function Wait_For_Started + (Self : in out Process'Class; + Timeout : Duration := Duration'Last) return Boolean is + begin + raise Program_Error; + return False; + end Wait_For_Started; + ----------------------- -- Working_Directory -- ----------------------- diff --git a/source/spawn/spawn-processes__glib_windows.adb b/source/spawn/spawn-processes__glib_windows.adb index f850b9a..dad1e93 100644 --- a/source/spawn/spawn-processes__glib_windows.adb +++ b/source/spawn/spawn-processes__glib_windows.adb @@ -403,6 +403,66 @@ package body Spawn.Processes is Windows.Do_Terminate_Process (Self); end Terminate_Process; + ----------------------- + -- Wait_For_Finished -- + ----------------------- + + function Wait_For_Finished + (Self : in out Process'Class; + Timeout : Duration := Duration'Last) return Boolean is + begin + raise Program_Error; + return False; + end Wait_For_Finished; + + --------------------------------------- + -- Wait_For_Standard_Error_Available -- + --------------------------------------- + + function Wait_For_Standard_Error_Available + (Self : in out Process'Class; + Timeout : Duration := Duration'Last) return Boolean is + begin + raise Program_Error; + return False; + end Wait_For_Standard_Error_Available; + + --------------------------------------- + -- Wait_For_Standard_Input_Available -- + --------------------------------------- + + function Wait_For_Standard_Input_Available + (Self : in out Process'Class; + Timeout : Duration := Duration'Last) return Boolean is + begin + raise Program_Error; + return False; + end Wait_For_Standard_Input_Available; + + ---------------------------------------- + -- Wait_For_Standard_Output_Available -- + ---------------------------------------- + + function Wait_For_Standard_Output_Available + (Self : in out Process'Class; + Timeout : Duration := Duration'Last) return Boolean is + begin + raise Program_Error; + return False; + end Wait_For_Standard_Output_Available; + + ---------------------- + -- Wait_For_Started -- + ---------------------- + + function Wait_For_Started + (Self : in out Process'Class; + Timeout : Duration := Duration'Last) return Boolean is + begin + raise Program_Error; + return False; + end Wait_For_Started; + ----------------------- -- Working_Directory -- ----------------------- diff --git a/source/spawn/spawn-processes__posix.adb b/source/spawn/spawn-processes__posix.adb index 426e704..f02c94a 100644 --- a/source/spawn/spawn-processes__posix.adb +++ b/source/spawn/spawn-processes__posix.adb @@ -312,6 +312,66 @@ package body Spawn.Processes is pragma Assert (Code = 0); end Terminate_Process; + ----------------------- + -- Wait_For_Finished -- + ----------------------- + + function Wait_For_Finished + (Self : in out Process'Class; + Timeout : Duration := Duration'Last) return Boolean is + begin + raise Program_Error; + return False; + end Wait_For_Finished; + + --------------------------------------- + -- Wait_For_Standard_Error_Available -- + --------------------------------------- + + function Wait_For_Standard_Error_Available + (Self : in out Process'Class; + Timeout : Duration := Duration'Last) return Boolean is + begin + raise Program_Error; + return False; + end Wait_For_Standard_Error_Available; + + --------------------------------------- + -- Wait_For_Standard_Input_Available -- + --------------------------------------- + + function Wait_For_Standard_Input_Available + (Self : in out Process'Class; + Timeout : Duration := Duration'Last) return Boolean is + begin + raise Program_Error; + return False; + end Wait_For_Standard_Input_Available; + + ---------------------------------------- + -- Wait_For_Standard_Output_Available -- + ---------------------------------------- + + function Wait_For_Standard_Output_Available + (Self : in out Process'Class; + Timeout : Duration := Duration'Last) return Boolean is + begin + raise Program_Error; + return False; + end Wait_For_Standard_Output_Available; + + ---------------------- + -- Wait_For_Started -- + ---------------------- + + function Wait_For_Started + (Self : in out Process'Class; + Timeout : Duration := Duration'Last) return Boolean is + begin + raise Program_Error; + return False; + end Wait_For_Started; + ----------------------- -- Working_Directory -- ----------------------- diff --git a/source/spawn/spawn-processes__windows.adb b/source/spawn/spawn-processes__windows.adb index 978d19b..da64cec 100644 --- a/source/spawn/spawn-processes__windows.adb +++ b/source/spawn/spawn-processes__windows.adb @@ -263,6 +263,66 @@ package body Spawn.Processes is Windows.Do_Terminate_Process (Self); end Terminate_Process; + ----------------------- + -- Wait_For_Finished -- + ----------------------- + + function Wait_For_Finished + (Self : in out Process'Class; + Timeout : Duration := Duration'Last) return Boolean is + begin + raise Program_Error; + return False; + end Wait_For_Finished; + + --------------------------------------- + -- Wait_For_Standard_Error_Available -- + --------------------------------------- + + function Wait_For_Standard_Error_Available + (Self : in out Process'Class; + Timeout : Duration := Duration'Last) return Boolean is + begin + raise Program_Error; + return False; + end Wait_For_Standard_Error_Available; + + --------------------------------------- + -- Wait_For_Standard_Input_Available -- + --------------------------------------- + + function Wait_For_Standard_Input_Available + (Self : in out Process'Class; + Timeout : Duration := Duration'Last) return Boolean is + begin + raise Program_Error; + return False; + end Wait_For_Standard_Input_Available; + + ---------------------------------------- + -- Wait_For_Standard_Output_Available -- + ---------------------------------------- + + function Wait_For_Standard_Output_Available + (Self : in out Process'Class; + Timeout : Duration := Duration'Last) return Boolean is + begin + raise Program_Error; + return False; + end Wait_For_Standard_Output_Available; + + ---------------------- + -- Wait_For_Started -- + ---------------------- + + function Wait_For_Started + (Self : in out Process'Class; + Timeout : Duration := Duration'Last) return Boolean is + begin + raise Program_Error; + return False; + end Wait_For_Started; + ----------------------- -- Working_Directory -- -----------------------