/* winmain.c - a simple entry point for WindowsCE * * Copyright (c) 2000 Tenik Co.,Ltd. */ #include #include extern int main(int argc, char *argv[]); int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPWSTR lpszCmdLine, int nCmdShow) { #define SIZE_ARGV (32) TCHAR path[MAX_PATH]; LPTSTR file; char prog[MAX_PATH]; int argc; char *argv[SIZE_ARGV]; int size; char *buff; char *argp; char *args; char quote; // get program name argc = 0; GetModuleFileName(GetCurrentProcess(), path, MAX_PATH); file = _tcsrchr(path, TEXT('\\')); if (NULL == file) { file = path; } else { file++; } WideCharToMultiByte(CP_ACP, 0, file, -1, prog, MAX_PATH, NULL, NULL); argv[argc++] = prog; // analyze parameters size = WideCharToMultiByte(CP_ACP, 0, lpszCmdLine, -1, NULL, 0, NULL, NULL); buff = (char *)malloc(size); size = WideCharToMultiByte(CP_ACP, 0, lpszCmdLine, -1, buff, size, NULL, NULL); quote = 0x00; args = argp = buff; if (argp && *argp && size) { argv[argc++] = args; while (*argp) { if (quote) { if (*argp == quote) { argp++; if (*argp != quote) { quote = 0x00; } else { *args++ = *argp++; } } else { *args++ = *argp++; } } else { if (*argp == ' ') { *args++ = *argp++ = '\0'; while (*argp && *argp == ' ') { argp++; } if (*argp && argc < SIZE_ARGV) { argv[argc++] = args; } } else { if (*argp == '\"') { quote = *argp++; } else { *args++ = *argp++; } } } } } *args = '\0'; return main(argc, argv); }