EGong

git clone git://xatko.vsos.ethz.ch/EGong.git
Log | Files | Refs

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 }