/* picoc main program - this varies depending on your operating system and * how you're using picoc */ /* platform-dependent code for running programs is in this file */ #if defined(UNIX_HOST) || defined(WIN32) #include #include #include #endif /* include only picoc.h here - should be able to use it with only the external interfaces, no internals from interpreter.h */ #include "picoc.h" #include "stats.h" #if defined(UNIX_HOST) || defined(WIN32) #include "LICENSE.h" /* Override via STACKSIZE environment variable */ #define PICOC_STACK_SIZE (32*1024*1024) int main(int argc, char **argv) { int ParamCount = 1; int DontRunMain = false; int CollectStats = false; int StatsType = 0; int StackSize = getenv("STACKSIZE") ? atoi(getenv("STACKSIZE")) : PICOC_STACK_SIZE; Picoc pc; if (argc < 2 || strcmp(argv[ParamCount], "-h") == 0) { printf(PICOC_VERSION " \n" "Format:\n\n" "> picoc ... [- ...] : run a program, calls main() as the entry point\n" "> picoc -s ... [- ...] : run a script, runs the program without calling main()\n" "> picoc -d[type] ... [- ...] : run a program, outputting debugging stats\n" "> picoc -i : interactive mode, Ctrl+d to exit\n" "> picoc -c : copyright info\n" "> picoc -h : this help message\n"); return 0; } if (strcmp(argv[ParamCount], "-c") == 0) { printf("%s\n", (char*)&__LICENSE); return 0; } PicocInitialize(&pc, StackSize); if (strcmp(argv[ParamCount], "-s") == 0) { DontRunMain = true; PicocIncludeAllSystemHeaders(&pc); ParamCount++; } else if (strncmp(argv[ParamCount], "-d", 2) == 0) { if (strlen(argv[ParamCount]) > 2) { StatsType = atoi(&argv[ParamCount][2]); } CollectStats = true; pc.CollectStats = true; ParamCount++; } if (argc > ParamCount && strcmp(argv[ParamCount], "-i") == 0) { PicocIncludeAllSystemHeaders(&pc); PicocParseInteractive(&pc); } else { if (PicocPlatformSetExitPoint(&pc)) { PicocCleanup(&pc); return pc.PicocExitValue; } for (; ParamCount < argc && strcmp(argv[ParamCount], "-") != 0; ParamCount++) PicocPlatformScanFile(&pc, argv[ParamCount]); if (!DontRunMain) PicocCallMain(&pc, argc - ParamCount, &argv[ParamCount]); } PicocCleanup(&pc); if (CollectStats) { stats_print_tokens(StatsType == 1); } return pc.PicocExitValue; } #endif