EGong.c (1566B)
1 #include <EGong/Main.h> 2 #include <EGong/Interfaces/CMD.h> 3 #include <EGong/Interfaces/GUI.h> 4 #include <EGong/Util/Config_Compiletime.h> 5 6 #ifdef USE_WINGUI 7 #define WIN32_LEAN_AND_MEAN 8 #define UNICODE 9 #include <windows.h> 10 #include <wchar.h> 11 #include <stdlib.h> 12 #include <EGong/Util/Array.h> 13 #include <EGong/Util/Log.h> 14 #include <EGong/Interfaces/Windows.h> 15 int WINAPI WinMain(HINSTANCE instance, HINSTANCE prev_instance, LPSTR argv, int commands){ 16 EGong_if_win_instance=instance; 17 18 do_log("Simulating argc and argv", LOG_TYPE_NORMAL, LOG_LEVEL_INFO); 19 LPTSTR cmdlineW=GetCommandLine(); 20 size_t length=wcslen(cmdlineW)+1; 21 char *cmdline=calloc(length, sizeof(char)); 22 memset(cmdline, '\0', length*sizeof(char)); 23 wcstombs(cmdline, cmdlineW, length); 24 struct Array argva; 25 Array_init(&argva, sizeof(char *), 5); 26 unsigned int i=0; 27 unsigned short int blind=0; 28 char *charptr; 29 while(i<length){ 30 charptr=&cmdline[i]; 31 if(i==0||(*charptr==' '&&*(charptr-sizeof(char))!='\\'&&!blind)){ 32 if(i>0){ 33 *charptr='\0'; 34 i++; 35 charptr=&cmdline[i]; 36 } 37 Array_add(&argva, &charptr); 38 } 39 if((*charptr=='"'||*charptr=='\'')&&*(charptr-sizeof(char))!='\\'){ 40 blind=!blind; 41 } 42 if(cmdline[i]=='\0'){ 43 break; 44 } 45 i++; 46 } 47 EGong_global_argc=argva.element_count; 48 EGong_global_argv=argva.memory.data; 49 #else 50 int main(int argc, char **argv){ 51 EGong_global_argc=argc; 52 EGong_global_argv=argv; 53 #endif 54 if(EGong_main_init()<0){ 55 return 0; 56 } 57 EGong_main_loop(); 58 EGong_main_deinit(); 59 #ifdef USE_WINGUI 60 Array_destroy(&argva); 61 free(cmdline); 62 #endif 63 return 0; 64 }