1 /* See COPYING.txt for the full license governing this code. */ 2 /** 3 * \file SDL_visualtest_process.h 4 * 5 * Provides cross-platfrom process launching and termination functionality. 6 */ 7 8 #include <SDL_platform.h> 9 10 #if defined(__WIN32__) 11 #include <Windows.h> 12 #include <Shlwapi.h> 13 #elif defined(__LINUX__) 14 #include <unistd.h> 15 #else 16 #error "Unsupported platform." 17 #endif 18 19 #ifndef _SDL_visualtest_process_h 20 #define _SDL_visualtest_process_h 21 22 /* Set up for C function definitions, even when using C++ */ 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 /** 28 * Struct to store a platform specific handle to a process. 29 */ 30 typedef struct SDL_ProcessInfo 31 { 32 //#if defined(_WIN32) || defined(__WIN32__) 33 #if defined(__WIN32__) 34 PROCESS_INFORMATION pi; 35 //#elif defined(__linux__) 36 #elif defined(__LINUX__) 37 int pid; 38 #endif 39 } SDL_ProcessInfo; 40 41 /** 42 * This structure stores the exit status (value returned by main()) and 43 * whether the process exited sucessfully or not. 44 */ 45 typedef struct SDL_ProcessExitStatus 46 { 47 int exit_success; /*!< Zero if the process exited successfully */ 48 int exit_status; /*!< The exit status of the process. 8-bit value. */ 49 } SDL_ProcessExitStatus; 50 51 /** 52 * Launches a process with the given commandline arguments. 53 * 54 * \param file The path to the executable to be launched. 55 * \param args The command line arguments to be passed to the process. 56 * \param pinfo Pointer to an SDL_ProcessInfo object to be populated with 57 * platform specific information about the launched process. 58 * 59 * \return Non-zero on success, zero on failure. 60 */ 61 int SDL_LaunchProcess(char* file, char* args, SDL_ProcessInfo* pinfo); 62 63 /** 64 * Checks if a process is running or not. 65 * 66 * \param pinfo Pointer to SDL_ProcessInfo object of the process that needs to be 67 * checked. 68 * 69 * \return 1 if the process is still running; zero if it is not and -1 if the 70 * status could not be retrieved. 71 */ 72 int SDL_IsProcessRunning(SDL_ProcessInfo* pinfo); 73 74 /** 75 * Kills a currently running process. 76 * 77 * \param pinfo Pointer to a SDL_ProcessInfo object of the process to be terminated. 78 * \param ps Pointer to a SDL_ProcessExitStatus object which will be populated 79 * with the exit status. 80 * 81 * \return 1 on success, 0 on failure. 82 */ 83 int SDL_KillProcess(SDL_ProcessInfo* pinfo, SDL_ProcessExitStatus* ps); 84 85 /** 86 * Cleanly exits the process represented by \c pinfo and stores the exit status 87 * in the exit status object pointed to by \c ps. 88 * 89 * \return 1 on success, 0 on failure. 90 */ 91 int SDL_QuitProcess(SDL_ProcessInfo* pinfo, SDL_ProcessExitStatus* ps); 92 93 /** 94 * Gets the exit status of a process. If the exit status is -1, the process is 95 * still running. 96 * 97 * \param pinfo Pointer to a SDL_ProcessInfo object of the process to be checked. 98 * \param ps Pointer to a SDL_ProcessExitStatus object which will be populated 99 * with the exit status. 100 * 101 * \return 1 on success, 0 on failure. 102 */ 103 int SDL_GetProcessExitStatus(SDL_ProcessInfo* pinfo, SDL_ProcessExitStatus* ps); 104 105 /* Ends C function definitions when using C++ */ 106 #ifdef __cplusplus 107 } 108 #endif 109 110 #endif /* _SDL_visualtest_process_h */ 111 112