#include #include #include "Clean.h" #include "thread_message.h" int get_message_number (void) { return RegisterWindowMessage ("CleanCompiler"); } int get_current_thread_id (void) { return GetCurrentThreadId(); } int start_compiler_process (CleanString compiler_path,CleanString compiler_directory,CleanString command, int *compiler_thread_id_p,int *compiler_thread_handle_p,int *compiler_process_handle_p) { PSTR application_name,command_line,env,dir; STARTUPINFO si; PROCESS_INFORMATION pi; int r; application_name=CleanStringCharacters (compiler_path); dir=CleanStringCharacters (compiler_directory); command_line=CleanStringCharacters (command); env=NULL; si.cb = sizeof (STARTUPINFO); si.lpReserved = NULL; si.lpReserved2 = NULL; si.cbReserved2 = 0; si.lpDesktop = NULL; si.lpTitle = NULL; si.dwFlags = 0; r=CreateProcess (application_name,command_line,NULL,NULL,TRUE,DETACHED_PROCESS/*0*/,env,dir,&si,&pi); if (r!=0){ *compiler_thread_id_p=pi.dwThreadId; *compiler_thread_handle_p=pi.hThread; *compiler_process_handle_p=pi.hProcess; } else { *compiler_thread_id_p=0; *compiler_thread_handle_p=0; *compiler_process_handle_p=0; } return r; } int get_integers_from_message (int wm_number,int *i1_p,int *i2_p) { MSG message; int r; r=GetMessage (&message,NULL,wm_number,wm_number); if (r!=0){ *i1_p=message.wParam; *i2_p=message.lParam; } else { *i1_p=0; *i2_p=0; } return r; } int get_integers_from_thread_message (int wm_number,int thread_handle,int *i1_p,int *i2_p) { MSG message; int r; r=PeekMessage (&message,NULL,wm_number,wm_number,PM_NOREMOVE); while (r==0){ r=MsgWaitForMultipleObjects (1,&thread_handle,0,INFINITE,QS_POSTMESSAGE); if (r==-1 || r==WAIT_OBJECT_0 || r==WAIT_ABANDONED_0){ *i1_p=0; *i2_p=0; return 0; } r=PeekMessage (&message,NULL,wm_number,wm_number,PM_NOREMOVE); } r=GetMessage (&message,NULL,wm_number,wm_number); if (r!=0){ *i1_p=message.wParam; *i2_p=message.lParam; } else { *i1_p=0; *i2_p=0; } return r; } int get_string_from_file_map_and_delete_map (int file_map,CleanString s) { int l,i; char *chars,*p; chars=CleanStringCharacters (s); l=CleanStringLength (s); p=MapViewOfFile ((HANDLE)file_map,FILE_MAP_ALL_ACCESS,0,0,l); if (p==NULL) return 0; for (i=0; i