|
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 |