/* include one of a number of predefined libraries, or perhaps an actual file */ void IncludeFile(char *FileName) { struct IncludeLibrary *LInclude; /* scan for the include file name to see if it's in our list of predefined includes */ for (LInclude = IncludeLibList; LInclude != NULL; LInclude = LInclude->NextLib) { if (strcmp(LInclude->IncludeName, FileName) == 0) { /* found it - protect against multiple inclusion */ if (!VariableDefined(FileName)) { VariableDefine(NULL, FileName, NULL, &VoidType, FALSE); /* run an extra startup function if there is one */ if (LInclude->SetupFunction != NULL) (*LInclude->SetupFunction)(); /* parse the setup C source code - may define types etc. */ if (LInclude->SetupCSource != NULL) PicocParse(FileName, LInclude->SetupCSource, strlen(LInclude->SetupCSource), TRUE, TRUE, FALSE); /* set up the library functions */ if (LInclude->FuncList != NULL) LibraryAdd(&GlobalTable, FileName, LInclude->FuncList); } return; } } /* not a predefined file, read a real file */ PicocPlatformScanFile(FileName); }
int main(int argc, char **argv) { int ParamCount = 1; int DontRunMain = false; 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 <file1.c>... [- <arg1>...] : run a program, calls main() as the entry point\n" "> picoc -s <file1.c>... [- <arg1>...] : run a script, runs the program without calling main()\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++; } 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); return pc.PicocExitValue; }
int main(int argc, char **argv) { int ParamCount = 1; int DontRunMain = FALSE; int StackSize = getenv("STACKSIZE") ? atoi(getenv("STACKSIZE")) : PICOC_STACK_SIZE; Picoc pc; if (argc < 2) { printf("Format: picoc <csource1.c>... [- <arg1>...] : run a program (calls main() to start it)\n" " picoc -s <csource1.c>... [- <arg1>...] : script mode - runs the program without calling main()\n" " picoc -i : interactive mode\n"); exit(1); } PicocInitialise(&pc, StackSize); if (strcmp(argv[ParamCount], "-s") == 0 || strcmp(argv[ParamCount], "-m") == 0) { DontRunMain = TRUE; PicocIncludeAllSystemHeaders(&pc); 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); return pc.PicocExitValue; }
/* include one of a number of predefined libraries, or perhaps an actual file */ void IncludeFile(Picoc *pc, char *FileName) { struct IncludeLibrary *LInclude; struct InteractiveState_Struct OldState; /* scan for the include file name to see if it's in our list of predefined includes */ for (LInclude = pc->IncludeLibList; LInclude != NULL; LInclude = LInclude->NextLib) { if (strcmp(LInclude->IncludeName, FileName) == 0) { /* found it - protect against multiple inclusion */ if (!VariableDefined(pc, FileName)) { VariableDefine(pc, NULL, FileName, NULL, &pc->VoidType, FALSE); /* run an extra startup function if there is one */ if (LInclude->SetupFunction != NULL) (*LInclude->SetupFunction)(pc); /* parse the setup C source code - may define types etc. */ if (LInclude->SetupCSource != NULL) PicocParse(pc, FileName, LInclude->SetupCSource, (int) strlen(LInclude->SetupCSource), TRUE, TRUE, FALSE, FALSE); /* set up the library functions */ if (LInclude->FuncList != NULL) LibraryAdd(pc, &pc->GlobalTable, FileName, LInclude->FuncList); } return; } } /* not a predefined file, read a real file */ OldState = pc->InteractiveState; memset(&pc->InteractiveState, 0, sizeof(pc->InteractiveState)); PicocPlatformScanFile(pc, FileName); pc->InteractiveState = OldState; }