| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426 | 
							- /*=========================================================================
 
-   Program:   KWSys - Kitware System Library
 
-   Module:    $RCSfile$
 
-   Copyright (c) Kitware, Inc., Insight Consortium.  All rights reserved.
 
-   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
 
-      This software is distributed WITHOUT ANY WARRANTY; without even
 
-      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
 
-      PURPOSE.  See the above copyright notices for more information.
 
- =========================================================================*/
 
- #ifndef @KWSYS_NAMESPACE@_Process_h
 
- #define @KWSYS_NAMESPACE@_Process_h
 
- #include <@KWSYS_NAMESPACE@/Configure.h>
 
- /* Redefine all public interface symbol names to be in the proper
 
-    namespace.  These macros are used internally to kwsys only, and are
 
-    not visible to user code.  Use kwsysHeaderDump.pl to reproduce
 
-    these macros after making changes to the interface.  */
 
- #if !defined(KWSYS_NAMESPACE)
 
- # define kwsys_ns(x) @KWSYS_NAMESPACE@##x
 
- # define kwsysEXPORT @KWSYS_NAMESPACE@_EXPORT
 
- #endif
 
- #define kwsysProcess                     kwsys_ns(Process)
 
- #define kwsysProcess_s                   kwsys_ns(Process_s)
 
- #define kwsysProcess_New                 kwsys_ns(Process_New)
 
- #define kwsysProcess_Delete              kwsys_ns(Process_Delete)
 
- #define kwsysProcess_SetCommand          kwsys_ns(Process_SetCommand)
 
- #define kwsysProcess_AddCommand          kwsys_ns(Process_AddCommand)
 
- #define kwsysProcess_SetTimeout          kwsys_ns(Process_SetTimeout)
 
- #define kwsysProcess_SetWorkingDirectory kwsys_ns(Process_SetWorkingDirectory)
 
- #define kwsysProcess_SetPipeFile         kwsys_ns(Process_SetPipeFile)
 
- #define kwsysProcess_SetPipeNative       kwsys_ns(Process_SetPipeNative)
 
- #define kwsysProcess_SetPipeShared       kwsys_ns(Process_SetPipeShared)
 
- #define kwsysProcess_Option_Detach       kwsys_ns(Process_Option_Detach)
 
- #define kwsysProcess_Option_HideWindow   kwsys_ns(Process_Option_HideWindow)
 
- #define kwsysProcess_Option_Verbatim     kwsys_ns(Process_Option_Verbatim)
 
- #define kwsysProcess_GetOption           kwsys_ns(Process_GetOption)
 
- #define kwsysProcess_SetOption           kwsys_ns(Process_SetOption)
 
- #define kwsysProcess_Option_e            kwsys_ns(Process_Option_e)
 
- #define kwsysProcess_State_Starting      kwsys_ns(Process_State_Starting)
 
- #define kwsysProcess_State_Error         kwsys_ns(Process_State_Error)
 
- #define kwsysProcess_State_Exception     kwsys_ns(Process_State_Exception)
 
- #define kwsysProcess_State_Executing     kwsys_ns(Process_State_Executing)
 
- #define kwsysProcess_State_Exited        kwsys_ns(Process_State_Exited)
 
- #define kwsysProcess_State_Expired       kwsys_ns(Process_State_Expired)
 
- #define kwsysProcess_State_Killed        kwsys_ns(Process_State_Killed)
 
- #define kwsysProcess_State_Disowned      kwsys_ns(Process_State_Disowned)
 
- #define kwsysProcess_GetState            kwsys_ns(Process_GetState)
 
- #define kwsysProcess_State_e             kwsys_ns(Process_State_e)
 
- #define kwsysProcess_Exception_None      kwsys_ns(Process_Exception_None)
 
- #define kwsysProcess_Exception_Fault     kwsys_ns(Process_Exception_Fault)
 
- #define kwsysProcess_Exception_Illegal   kwsys_ns(Process_Exception_Illegal)
 
- #define kwsysProcess_Exception_Interrupt kwsys_ns(Process_Exception_Interrupt)
 
- #define kwsysProcess_Exception_Numerical kwsys_ns(Process_Exception_Numerical)
 
- #define kwsysProcess_Exception_Other     kwsys_ns(Process_Exception_Other)
 
- #define kwsysProcess_GetExitException    kwsys_ns(Process_GetExitException)
 
- #define kwsysProcess_Exception_e         kwsys_ns(Process_Exception_e)
 
- #define kwsysProcess_GetExitCode         kwsys_ns(Process_GetExitCode)
 
- #define kwsysProcess_GetExitValue        kwsys_ns(Process_GetExitValue)
 
- #define kwsysProcess_GetErrorString      kwsys_ns(Process_GetErrorString)
 
- #define kwsysProcess_GetExceptionString  kwsys_ns(Process_GetExceptionString)
 
- #define kwsysProcess_Execute             kwsys_ns(Process_Execute)
 
- #define kwsysProcess_Disown              kwsys_ns(Process_Disown)
 
- #define kwsysProcess_WaitForData         kwsys_ns(Process_WaitForData)
 
- #define kwsysProcess_Pipes_e             kwsys_ns(Process_Pipes_e)
 
- #define kwsysProcess_Pipe_None           kwsys_ns(Process_Pipe_None)
 
- #define kwsysProcess_Pipe_STDIN          kwsys_ns(Process_Pipe_STDIN)
 
- #define kwsysProcess_Pipe_STDOUT         kwsys_ns(Process_Pipe_STDOUT)
 
- #define kwsysProcess_Pipe_STDERR         kwsys_ns(Process_Pipe_STDERR)
 
- #define kwsysProcess_Pipe_Timeout        kwsys_ns(Process_Pipe_Timeout)
 
- #define kwsysProcess_Pipe_Handle         kwsys_ns(Process_Pipe_Handle)
 
- #define kwsysProcess_WaitForExit         kwsys_ns(Process_WaitForExit)
 
- #define kwsysProcess_Kill                kwsys_ns(Process_Kill)
 
- #if defined(__cplusplus)
 
- extern "C"
 
- {
 
- #endif
 
- /**
 
-  * Process control data structure.
 
-  */
 
- typedef struct kwsysProcess_s kwsysProcess;
 
- /* Platform-specific pipe handle type.  */
 
- #if defined(_WIN32) && !defined(__CYGWIN__)
 
- typedef void* kwsysProcess_Pipe_Handle;
 
- #else
 
- typedef int kwsysProcess_Pipe_Handle;
 
- #endif
 
- /**
 
-  * Create a new Process instance.
 
-  */
 
- kwsysEXPORT kwsysProcess* kwsysProcess_New(void);
 
- /**
 
-  * Delete an existing Process instance.  If the instance is currently
 
-  * executing a process, this blocks until the process terminates.
 
-  */
 
- kwsysEXPORT void kwsysProcess_Delete(kwsysProcess* cp);
 
- /**
 
-  * Set the command line to be executed.  Argument is an array of
 
-  * pointers to the command and each argument.  Ths array must end with
 
-  * a NULL pointer.  Any previous command lines are removed.  Returns
 
-  * 1 for success and 0 otherwise.
 
-  */
 
- kwsysEXPORT int kwsysProcess_SetCommand(kwsysProcess* cp,
 
-                                         char const* const* command);
 
- /**
 
-  * Add a command line to be executed.  Argument is an array of
 
-  * pointers to the command and each argument.  Ths array must end with
 
-  * a NULL pointer.  If this is not the first command added, its
 
-  * standard input will be connected to the standard output of the
 
-  * previous command.  Returns 1 for success and 0 otherwise.
 
-  */
 
- kwsysEXPORT int kwsysProcess_AddCommand(kwsysProcess* cp,
 
-                                         char const* const* command);
 
- /**
 
-  * Set the timeout in seconds for the child process.  The timeout
 
-  * period begins when the child is executed.  If the child has not
 
-  * terminated when the timeout expires, it will be killed.  A
 
-  * non-positive (<= 0) value will disable the timeout.
 
-  */
 
- kwsysEXPORT void kwsysProcess_SetTimeout(kwsysProcess* cp, double timeout);
 
- /**
 
-  * Set the working directory for the child process.  The working
 
-  * directory can be absolute or relative to the current directory.
 
-  * Returns 1 for success and 0 for failure.
 
-  */
 
- kwsysEXPORT int kwsysProcess_SetWorkingDirectory(kwsysProcess* cp,
 
-                                                  const char* dir);
 
- /**
 
-  * Set the name of a file to be attached to the given pipe.  Returns 1
 
-  * for success and 0 for failure.
 
-  */
 
- kwsysEXPORT int kwsysProcess_SetPipeFile(kwsysProcess* cp, int pipe,
 
-                                          const char* file);
 
- /**
 
-  * Set whether the given pipe in the child is shared with the parent
 
-  * process.  The default is no for Pipe_STDOUT and Pipe_STDERR and yes
 
-  * for Pipe_STDIN.
 
-  */
 
- kwsysEXPORT void kwsysProcess_SetPipeShared(kwsysProcess* cp, int pipe,
 
-                                             int shared);
 
- /**
 
-  * Specify a platform-specific native pipe for use as one of the child
 
-  * interface pipes.  The native pipe is specified by an array of two
 
-  * descriptors or handles.  The first entry in the array (index 0)
 
-  * should be the read end of the pipe.  The second entry in the array
 
-  * (index 1) should be the write end of the pipe.  If a null pointer
 
-  * is given the option will be disabled.
 
-  *
 
-  * For Pipe_STDIN the native pipe is connected to the first child in
 
-  * the pipeline as its stdin.  After the children are created the
 
-  * write end of the pipe will be closed in the child process and the
 
-  * read end will be closed in the parent process.
 
-  *
 
-  * For Pipe_STDOUT and Pipe_STDERR the pipe is connected to the last
 
-  * child as its stdout or stderr.  After the children are created the
 
-  * write end of the pipe will be closed in the parent process and the
 
-  * read end will be closed in the child process.
 
-  */
 
- kwsysEXPORT void kwsysProcess_SetPipeNative(kwsysProcess* cp, int pipe,
 
-                                             kwsysProcess_Pipe_Handle p[2]);
 
- /**
 
-  * Get/Set a possibly platform-specific option.  Possible options are:
 
-  *
 
-  *  kwsysProcess_Option_Detach = Whether to detach the process.
 
-  *         0 = No (default)
 
-  *         1 = Yes
 
-  *
 
-  *  kwsysProcess_Option_HideWindow = Whether to hide window on Windows.
 
-  *         0 = No (default)
 
-  *         1 = Yes
 
-  *
 
-  *  kwsysProcess_Option_Verbatim = Whether SetCommand and AddCommand
 
-  *                                 should treat the first argument
 
-  *                                 as a verbatim command line
 
-  *                                 and ignore the rest of the arguments.
 
-  *         0 = No (default)
 
-  *         1 = Yes
 
-  */
 
- kwsysEXPORT int kwsysProcess_GetOption(kwsysProcess* cp, int optionId);
 
- kwsysEXPORT void kwsysProcess_SetOption(kwsysProcess* cp, int optionId,
 
-                                         int value);
 
- enum kwsysProcess_Option_e
 
- {
 
-   kwsysProcess_Option_HideWindow,
 
-   kwsysProcess_Option_Detach,
 
-   kwsysProcess_Option_Verbatim
 
- };
 
- /**
 
-  * Get the current state of the Process instance.  Possible states are:
 
-  *
 
-  *  kwsysProcess_State_Starting  = Execute has not yet been called.
 
-  *  kwsysProcess_State_Error     = Error administrating the child process.
 
-  *  kwsysProcess_State_Exception = Child process exited abnormally.
 
-  *  kwsysProcess_State_Executing = Child process is currently running.
 
-  *  kwsysProcess_State_Exited    = Child process exited normally.
 
-  *  kwsysProcess_State_Expired   = Child process's timeout expired.
 
-  *  kwsysProcess_State_Killed    = Child process terminated by Kill method.
 
-  *  kwsysProcess_State_Disowned  = Child is no longer managed by this object.
 
-  */
 
- kwsysEXPORT int kwsysProcess_GetState(kwsysProcess* cp);
 
- enum kwsysProcess_State_e
 
- {
 
-   kwsysProcess_State_Starting,
 
-   kwsysProcess_State_Error,
 
-   kwsysProcess_State_Exception,
 
-   kwsysProcess_State_Executing,
 
-   kwsysProcess_State_Exited,
 
-   kwsysProcess_State_Expired,
 
-   kwsysProcess_State_Killed,
 
-   kwsysProcess_State_Disowned
 
- };
 
- /**
 
-  * When GetState returns "Exception", this method returns a
 
-  * platform-independent description of the exceptional behavior that
 
-  * caused the child to terminate abnormally.  Possible exceptions are:
 
-  *
 
-  *  kwsysProcess_Exception_None      = No exceptional behavior occurred.
 
-  *  kwsysProcess_Exception_Fault     = Child crashed with a memory fault.
 
-  *  kwsysProcess_Exception_Illegal   = Child crashed with an illegal instruction.
 
-  *  kwsysProcess_Exception_Interrupt = Child was interrupted by user (Cntl-C/Break).
 
-  *  kwsysProcess_Exception_Numerical = Child crashed with a numerical exception.
 
-  *  kwsysProcess_Exception_Other     = Child terminated for another reason.
 
-  */
 
- kwsysEXPORT int kwsysProcess_GetExitException(kwsysProcess* cp);
 
- enum kwsysProcess_Exception_e
 
- {
 
-   kwsysProcess_Exception_None,
 
-   kwsysProcess_Exception_Fault,
 
-   kwsysProcess_Exception_Illegal,
 
-   kwsysProcess_Exception_Interrupt,
 
-   kwsysProcess_Exception_Numerical,
 
-   kwsysProcess_Exception_Other
 
- };
 
- /**
 
-  * When GetState returns "Exited" or "Exception", this method returns
 
-  * the platform-specific raw exit code of the process.  UNIX platforms
 
-  * should use WIFEXITED/WEXITSTATUS and WIFSIGNALED/WTERMSIG to access
 
-  * this value.  Windows users should compare the value to the various
 
-  * EXCEPTION_* values.
 
-  *
 
-  * If GetState returns "Exited", use GetExitValue to get the
 
-  * platform-independent child return value.
 
-  */
 
- kwsysEXPORT int kwsysProcess_GetExitCode(kwsysProcess* cp);
 
- /**
 
-  * When GetState returns "Exited", this method returns the child's
 
-  * platform-independent exit code (such as the value returned by the
 
-  * child's main).
 
-  */
 
- kwsysEXPORT int kwsysProcess_GetExitValue(kwsysProcess* cp);
 
- /**
 
-  * When GetState returns "Error", this method returns a string
 
-  * describing the problem.  Otherwise, it returns NULL.
 
-  */
 
- kwsysEXPORT const char* kwsysProcess_GetErrorString(kwsysProcess* cp);
 
- /**
 
-  * When GetState returns "Exception", this method returns a string
 
-  * describing the problem.  Otherwise, it returns NULL.
 
-  */
 
- kwsysEXPORT const char* kwsysProcess_GetExceptionString(kwsysProcess* cp);
 
- /**
 
-  * Start executing the child process.
 
-  */
 
- kwsysEXPORT void kwsysProcess_Execute(kwsysProcess* cp);
 
- /**
 
-  * Stop management of a detached child process.  This closes any pipes
 
-  * being read.  If the child was not created with the
 
-  * kwsysProcess_Option_Detach option, this method does nothing.  This
 
-  * is because disowning a non-detached process will cause the child
 
-  * exit signal to be left unhandled until this process exits.
 
-  */
 
- kwsysEXPORT void kwsysProcess_Disown(kwsysProcess* cp);
 
- /**
 
-  * Block until data are available on a pipe, a timeout expires, or the
 
-  * child process terminates.  Arguments are as follows:
 
-  *
 
-  *  data    = If data are read, the pointer to which this points is
 
-  *            set to point to the data.
 
-  *  length  = If data are read, the integer to which this points is
 
-  *            set to the length of the data read.
 
-  *  timeout = Specifies the maximum time this call may block.  Upon
 
-  *            return after reading data, the time elapsed is subtracted
 
-  *            from the timeout value.  If this timeout expires, the
 
-  *            value is set to 0.  A NULL pointer passed for this argument
 
-  *            indicates no timeout for the call.  A negative or zero
 
-  *            value passed for this argument may be used for polling
 
-  *            and will always return immediately.
 
-  *
 
-  * Return value will be one of:
 
-  *
 
-  *   Pipe_None    = No more data will be available from the child process,
 
-  *    ( == 0)       or no process has been executed.  WaitForExit should
 
-  *                  be called to wait for the process to terminate.
 
-  *   Pipe_STDOUT  = Data have been read from the child's stdout pipe.
 
-  *   Pipe_STDERR  = Data have been read from the child's stderr pipe.
 
-  *   Pipe_Timeout = No data available within timeout specified for the
 
-  *                  call.  Time elapsed has been subtracted from timeout
 
-  *                  argument.
 
-  */
 
- kwsysEXPORT int kwsysProcess_WaitForData(kwsysProcess* cp, char** data,
 
-                                          int* length, double* timeout);
 
- enum kwsysProcess_Pipes_e
 
- {
 
-   kwsysProcess_Pipe_None,
 
-   kwsysProcess_Pipe_STDIN,
 
-   kwsysProcess_Pipe_STDOUT,
 
-   kwsysProcess_Pipe_STDERR,
 
-   kwsysProcess_Pipe_Timeout=255
 
- };
 
- /**
 
-  * Block until the child process terminates or the given timeout
 
-  * expires.  If no process is running, returns immediatly.  The
 
-  * argument is:
 
-  *
 
-  *  timeout = Specifies the maximum time this call may block.  Upon
 
-  *            returning due to child termination, the elapsed time
 
-  *            is subtracted from the given value.  A NULL pointer
 
-  *            passed for this argument indicates no timeout for the
 
-  *            call.
 
-  *
 
-  * Return value will be one of:
 
-  *
 
-  *    0 = Child did not terminate within timeout specified for
 
-  *        the call.  Time elapsed has been subtracted from timeout
 
-  *        argument.
 
-  *    1 = Child has terminated or was not running.
 
-  */
 
- kwsysEXPORT int kwsysProcess_WaitForExit(kwsysProcess* cp, double* timeout);
 
- /**
 
-  * Forcefully terminate the child process that is currently running.
 
-  * The caller should call WaitForExit after this returns to wait for
 
-  * the child to terminate.
 
-  */
 
- kwsysEXPORT void kwsysProcess_Kill(kwsysProcess* cp);
 
- #if defined(__cplusplus)
 
- } /* extern "C" */
 
- #endif
 
- /* If we are building a kwsys .c or .cxx file, let it use these macros.
 
-    Otherwise, undefine them to keep the namespace clean.  */
 
- #if !defined(KWSYS_NAMESPACE)
 
- # undef kwsys_ns
 
- # undef kwsysEXPORT
 
- # undef kwsysProcess
 
- # undef kwsysProcess_s
 
- # undef kwsysProcess_New
 
- # undef kwsysProcess_Delete
 
- # undef kwsysProcess_SetCommand
 
- # undef kwsysProcess_AddCommand
 
- # undef kwsysProcess_SetTimeout
 
- # undef kwsysProcess_SetWorkingDirectory
 
- # undef kwsysProcess_SetPipeFile
 
- # undef kwsysProcess_SetPipeNative
 
- # undef kwsysProcess_SetPipeShared
 
- # undef kwsysProcess_Option_Detach
 
- # undef kwsysProcess_Option_HideWindow
 
- # undef kwsysProcess_Option_Verbatim
 
- # undef kwsysProcess_GetOption
 
- # undef kwsysProcess_SetOption
 
- # undef kwsysProcess_Option_e
 
- # undef kwsysProcess_State_Starting
 
- # undef kwsysProcess_State_Error
 
- # undef kwsysProcess_State_Exception
 
- # undef kwsysProcess_State_Executing
 
- # undef kwsysProcess_State_Exited
 
- # undef kwsysProcess_State_Expired
 
- # undef kwsysProcess_State_Killed
 
- # undef kwsysProcess_State_Disowned
 
- # undef kwsysProcess_GetState
 
- # undef kwsysProcess_State_e
 
- # undef kwsysProcess_Exception_None
 
- # undef kwsysProcess_Exception_Fault
 
- # undef kwsysProcess_Exception_Illegal
 
- # undef kwsysProcess_Exception_Interrupt
 
- # undef kwsysProcess_Exception_Numerical
 
- # undef kwsysProcess_Exception_Other
 
- # undef kwsysProcess_GetExitException
 
- # undef kwsysProcess_Exception_e
 
- # undef kwsysProcess_GetExitCode
 
- # undef kwsysProcess_GetExitValue
 
- # undef kwsysProcess_GetErrorString
 
- # undef kwsysProcess_GetExceptionString
 
- # undef kwsysProcess_Execute
 
- # undef kwsysProcess_Disown
 
- # undef kwsysProcess_WaitForData
 
- # undef kwsysProcess_Pipes_e
 
- # undef kwsysProcess_Pipe_None
 
- # undef kwsysProcess_Pipe_STDIN
 
- # undef kwsysProcess_Pipe_STDOUT
 
- # undef kwsysProcess_Pipe_STDERR
 
- # undef kwsysProcess_Pipe_Timeout
 
- # undef kwsysProcess_Pipe_Handle
 
- # undef kwsysProcess_WaitForExit
 
- # undef kwsysProcess_Kill
 
- #endif
 
- #endif
 
 
  |