/* ** Command & Conquer Red Alert(tm) ** Copyright 2025 Electronic Arts Inc. ** ** This program is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program. If not, see . */ #include "process.h" Process::Process() { directory[0]=0; command[0]=0; args[0]=0; hProcess=NULL; hThread=NULL; } // Create a process bit8 Create_Process(Process &process) { int retval; STARTUPINFO si; PROCESS_INFORMATION piProcess; ZeroMemory(&si,sizeof(si)); si.cb=sizeof(si); char cmdargs[513]; memset(cmdargs,0,513); strcpy(cmdargs,process.command); strcat(cmdargs,process.args); retval=CreateProcess(NULL,cmdargs,NULL,NULL,FALSE, 0 ,NULL, NULL/*process.directory*/,&si,&piProcess); process.hProcess=piProcess.hProcess; process.hThread=piProcess.hThread; return(TRUE); } bit8 Wait_Process(Process &process) { DWORD retval; retval=WaitForSingleObject(process.hProcess,INFINITE); if (retval==WAIT_OBJECT_0) // process exited return(TRUE); else // can this happen? return(FALSE); } // // Get the process to run from the config object // bit8 Read_Process_Info(ConfigFile &config,OUT Process &info) { Wstring procinfo; if (config.getString("RUN",procinfo)==FALSE) { DBGMSG("Couldn't read the RUN line"); return(FALSE); } int offset=0; Wstring dir; Wstring executable; Wstring args; offset=procinfo.getToken(offset," ",dir); offset=procinfo.getToken(offset," ",executable); args=procinfo; args.remove(0,offset); /// /// DBGMSG("RUN: EXE = "<