void process(void) { /* search kirikiri executable through the executable's path */ char file[MAX_PATH*2+24]; if(find_kirikiri_executable(file)) { STARTUPINFO si; PROCESS_INFORMATION pi; BOOL ret; // append self filename to the executable path me_strcpy(file + me_strlen(file), " \""); GetModuleFileName(GetModuleHandle(NULL), file + me_strlen(file), MAX_PATH); me_strcpy(file + me_strlen(file), "\""); // execute the executable zeromemory(&si, sizeof(si)); si.cb = sizeof(si); si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_SHOWNORMAL; ret = /* execute the executable with "-userconf" option */ CreateProcess( NULL, file, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); if(ret) { CloseHandle(pi.hThread); CloseHandle(pi.hProcess); } } else { MessageBox(NULL, "Could not find kirikiri executable. " "Check that the program is properly placed.", "Error", MB_OK|MB_ICONSTOP); } }
int vbuildstring(char *str, int size, char *string, __builtin_va_list arglist) { unsigned char varlist[64]; char temps[100]; char workstring[strlen(string)]; int i,_i,l,strpos,vlc; l=strlen(string); vlc=0; if (size==0) return 0; strpos=0; // work on the copy of string, not the original for (i=0; i<strlen(string); i++) workstring[i]=string[i]; zeromemory(varlist,64); for (i=0; i<64; i++) varlist[i]=255; // parse the string for known operators for (i=0; i<l; i++) { if (workstring[i]=='%') { workstring[i]=0; if (workstring[i+1]=='d') //decimal { varlist[vlc]=0; } else if (workstring[i+1]=='x') //hex { varlist[vlc]=1; } else if (workstring[i+1]=='8') //8 char hex (%8) { varlist[vlc]=3; } else if (workstring[i+1]=='p') //8 char hex (%8) { varlist[vlc]=3; } else if (workstring[i+1]=='6') //16 char hex (%8) { varlist[vlc]=4; } else if (workstring[i+1]=='2') //2 char hex (%2) { varlist[vlc]=6; } else if (workstring[i+1]=='s') //string { varlist[vlc]=2; } else if (workstring[i+1]=='c') //char { varlist[vlc]=5; } workstring[i+1]=0; vlc++; } } i=0; vlc=0; while ((i<l) && (strpos<size)) { if (workstring[i]==0) { if (varlist[vlc]==255) { printstring("UNDEFINED VARLIST",60,22,2,4); while (1); } switch (varlist[vlc]) { case 0: //decimal { unsigned int x; x=__builtin_va_arg(arglist,unsigned int); itoa(x,10,temps,100); _i=strlen(temps); if (strpos+_i>=size) _i=size-(strpos+_i-size); copymem(&str[strpos],temps,_i); strpos+=_i; break; } case 1: //hex { unsigned int x; x=__builtin_va_arg(arglist,unsigned int); itoa(_i,16,temps,100); _i=strlen(temps); if (strpos+_i>=size) _i=size-(strpos+_i-size); copymem(&str[strpos],temps,_i); strpos+=_i; break; } case 3: //%8, DWORD { unsigned int x; x=__builtin_va_arg(arglist,unsigned int); itoa(x,16,temps,100); appendzero(temps,8,100); _i=strlen(temps); if (strpos+_i>=size) _i=size-(strpos+_i-size); copymem(&str[strpos],temps,_i); strpos+=_i; break; } case 6: //%2, char { unsigned char x; x=__builtin_va_arg(arglist,int); itoa(x,16,temps,100); appendzero(temps,2,100); _i=strlen(temps); if (strpos+_i>=size) _i=size-(strpos+_i-size); copymem(&str[strpos],temps,_i); strpos+=_i; break; } case 255: printstring("UNDEFINED VARLIST",40,21,2,4); /*printstring(string,40,22,2,4); printstring(temps,40,23,2,4); printstring(str,40,24,2,4);*/\ if (strpos>=size) strpos=size-1; str[strpos]=0; return strpos; break; } if (varlist[vlc]==2) //string { char *s=__builtin_va_arg(arglist,char *); _i=strlen(s); if (strpos+_i>size) _i=size-(strpos+_i-size); copymem(&str[strpos],s,_i); strpos+=_i; } if (varlist[vlc]==4) //16 char hex { unsigned long long i=__builtin_va_arg(arglist,unsigned long long); unsigned int p1=i; unsigned int p2=(unsigned long long)(i>>32); itoa(p2,16,temps,100); appendzero(temps,8,100); _i=8; if (strpos+_i>size) _i=size-(strpos+_i-size); copymem(&str[strpos],temps,_i); strpos+=_i; if (strpos>=size) { str[size-1]=0; return size; //enough } itoa(p1,16,temps,100); appendzero(temps,8,100); _i=8; if (strpos+_i>size) _i=size-(strpos+_i-size); copymem(&str[strpos],temps,_i); strpos+=_i; } if (varlist[vlc]==5) //char { int c=__builtin_va_arg(arglist,int); str[strpos]=(char)c; strpos++; }