int parsearg(fake * fk, int & argc, const char ** & argv) { g_selfname = argv[0]; // start compile,memcmp无解只能用这种 if (g_replacebuff[0] != 's' || g_replacebuff[1] != 't' || g_replacebuff[2] != 'a' || g_replacebuff[3] != 'r' || g_replacebuff[4] != 't' || g_replacebuff[5] != ' ' || g_replacebuff[6] != 'c' || g_replacebuff[7] != 'o' || g_replacebuff[8] != 'm' || g_replacebuff[9] != 'p' || g_replacebuff[10] != 'i' || g_replacebuff[11] != 'l' || g_replacebuff[12] != 'e') { g_iscompiled = true; } else if (argc < 2) { printf("try -h for help\n"); return -1; } if (argc >= 2 && argv[1][0] == '-') { if (strstr(argv[1], "h")) { printf("\ fakescript\n\narg : [-hjpgtsl] file [arg]\n\ -h help\n\ -j open jit\n\ -p open profile\n\ -g open google profile\n\ -t open test mode\n\ -s save func to fake.bin\n\ -l load func from file\n\ -o print return value and time\n\ -c compile script to out.exe\n\ -d debug step mod\n\ sample:./fake a.fk\n\n"); return -1; } if (strstr(argv[1], "j")) { fkopenjit(fk); g_isopenjit = true; } if (strstr(argv[1], "p")) { fkopenprofile(fk); g_isopenprofile = true; } #ifndef WIN32 if (strstr(argv[1], "g")) { g_isopengoogleprofile = true; } #endif if (strstr(argv[1], "t")) { g_testnum = 9000000; } if (strstr(argv[1], "s")) { g_issave = true; } if (strstr(argv[1], "l")) { g_isload = true; } if (strstr(argv[1], "o")) { g_isprintoutput = true; } if (strstr(argv[1], "c")) { printf("%s\n", g_replacebuff); g_iscompile = true; } if (strstr(argv[1], "d")) { g_isstep = true; } argc--; argv++; }
int main(int argc, const char *argv[]) { // ½âÎö²ÎÊý if (argc < 2) { printf("arg : [-hjp] file [arg]\n"); return 0; } fake * fk = newfake(); bool isopenprofile = false; bool isopenjit = false; if (argv[1][0] == '-') { if (strstr(argv[1], "h")) { printf("fakescript\n\narg : [-hjp] file [arg]\n-h help\n-j open jit\n-p open profile\n\nsample:./fake -jp a.fk\n\n"); return 0; } if (strstr(argv[1], "j")) { fkopenjit(fk); isopenjit = true; } if (strstr(argv[1], "p")) { fkopenprofile(fk); isopenprofile = true; } argc--; argv++; } fksetargv(fk, argc - 2, argv + 2); fkopenalllib(fk); fkseterrorfunc(fk, error_log); fkparse(fk, argv[1]); if (fkerror(fk)) { return 0; } if (!isopenjit) { fkrun<int>(fk, "main"); } else { fkrunjit<int>(fk, "main"); } if (fkerror(fk)) { return 0; } if (isopenprofile) { printf("call profile:\n%s", fkdumpprofile(fk)); } delfake(fk); return 0; }