void KPR_host_get_profilingDirectory(xsMachine* the) { KprHost self = xsGetHostData(xsThis); KprApplication application = (KprApplication)self->first; FskErr err = kFskErrNone; char* directory = NULL; xsBeginHost(application->the); { xsResult = xsCall0(xsGet(xsGlobal, xsID("xs")), xsID("getProfilingDirectory")); if (xsTest(xsResult)) err = KprPathToURL(xsToString(xsResult), &directory); } xsEndHost(application->the); if (directory) { xsResult = xsString(directory); FskMemPtrDispose(directory); } else { xsThrowIfFskErr(err); } }
int main(int argc, char* argv[]) { xsAllocation anAllocation = { 2048 * 1024, /* initialChunkSize */ 512 * 1024, /* incrementalChunkSize */ 1000 * 1000, /* initialHeapCount */ 50 * 1000, /* incrementalHeapCount */ 64 * 1024, /* stackCount */ 4096, /* symbolCount */ 1993 /* symbolModulo */ }; xsMachine* aMachine; int argi; int result = 1; aMachine = xsNewMachine(&anAllocation, &kpr2jsGrammar, NULL); if (aMachine) { xsBeginHost(aMachine); { xsTry { xsResult = xsNewInstanceOf(xsArrayPrototype); for (argi = 0; argi < argc; argi++) xsSet(xsResult, argi, xsString(argv[argi])); (void)xsCall1(xsGlobal, xsID("main"), xsResult); result = 0; } xsCatch { char* aMessage = xsToString(xsGet(xsException, xsID("message"))); if (*aMessage) fprintf(stderr, "### %s\n", aMessage); else fprintf(stderr, "### XML error(s)\n"); } } xsEndHost(aMachine); xsDeleteMachine(aMachine); } else
FskErr FskSSLFlush(void *a) { FskSSL *fssl = a; FskErr err = kFskErrNone; if (fssl->skt == NULL) return kFskErrOperationFailed; xsBeginHost(fssl->vm->the); xsTry { xsVars(1); xsCall1_noResult(fssl->socket, xsID("attachData"), xsHostData(fssl->skt)); xsResult = xsCall1(fssl->ssl, xsID("flush"), fssl->socket); err = xsToBoolean(xsResult) ? kFskErrNone: kFskErrNoData; } xsCatch { if (xsHas(xsException, xsID("code"))) err = xsToInteger(xsGet(xsException, xsID("code"))); if (err == kFskErrNone) err = kFskErrOperationFailed; } xsEndHost(fssl->vm->the); return err; }
int main(int argc, char* argv[]) { xsCreation creation_mc = { 25*1024, /* initial chunk size */ 2048, /* incremental chunk size */ 50*1024/16, /* initial heap count -- will be calculated later */ 128, /* incremental heap count -- wasting 16 bytes / allocation */ 650, /* stack count */ 2048+1024, /* key count */ 97, /* name modulo */ 127, /* symbol modulo */ }; xsCreation creation_tool = { 128 * 1024 * 1024, /* initialChunkSize */ 16 * 1024 * 1024, /* incrementalChunkSize */ 8 * 1024 * 1024, /* initialHeapCount */ 1 * 1024 * 1024, /* incrementalHeapCount */ 4096, /* stackCount */ 4096*3, /* keyCount */ 1993, /* nameModulo */ 127 /* symbolModulo */ }; xsCreation* creation = &creation_tool; int error = 0; int argi = 1; void* archive = NULL; xsBooleanValue program = 0; xsBooleanValue xsbug = 0; xsMachine* machine; char path[PATH_MAX]; char modulePath[PATH_MAX]; xsStringValue extension; xsStringValue slash; xsStringValue name; int size; if (argi < argc) { if (!strcmp(argv[argi], "-a")) { argi++; if (argi < argc) { if (realpath(argv[argi], path)) { archive = fxMapArchive(path, NULL); if (!archive) { fprintf(stderr, "# invalid archive: %s\n", path); return 1; } if (strstr(path, "mc.xsa")) { creation = &creation_mc; } } else { fprintf(stderr, "# archive not found: %s\n", argv[argi]); return 1; } argi++; } } } while (argi < argc) { if (!strcmp(argv[argi], "-p")) { program = 1; argi++; } else if (!strcmp(argv[argi], "-x")) { xsbug = 1; argi++; } else break; } gargc = argc; gargi = argi; gargv = argv; machine = xsCreateMachine(creation, archive, "xsr6", NULL); xsBeginHost(machine); { xsVars(2); { xsTry { xsVar(0) = xsNewInstanceOf(xsObjectPrototype); if (xsbug) xsVar(1) = xsNewHostFunction(console_log_xsbug, 0); else xsVar(1) = xsNewHostFunction(console_log, 0); xsSet(xsVar(0), xsID("log"), xsVar(1)); xsSet(xsGlobal, xsID("console"), xsVar(0)); xsVar(0) = xsNewHostObject(weakTest); xsVar(1) = xsNewHostConstructor(WeakTest, 1, xsVar(0)); xsSet(xsGlobal, xsID("WeakTest"), xsVar(1)); xsVar(1) = xsNewHostFunction(gc, 0); xsSet(xsGlobal, xsID("gc"), xsVar(1)); xsResult = xsModulePaths(); if (archive) { slash = strrchr(path, mxSeparator); if (slash) { *(slash + 1) = 0; xsCall1(xsResult, xsID("add"), xsString(path)); } } realpath(argv[0], modulePath); slash = strrchr(modulePath, mxSeparator); if (slash) { strcpy(slash + 1, "modules"); size = c_strlen(modulePath); modulePath[size++] = mxSeparator; modulePath[size] = 0; xsCall1(xsResult, xsID("add"), xsString(modulePath)); } if (argi == argc) { fprintf(stderr, "# no module, no program\n"); error = 1; } else if (program) { xsVar(0) = xsNewHostFunction(print, 0); xsSet(xsGlobal, xsID("print"), xsVar(0)); //xsStartProfiling(); while (argi < argc) { if (argv[argi][0] != '-') { xsElseError(realpath(argv[argi], path)); strcpy(modulePath, path); slash = strrchr(modulePath, mxSeparator); *(slash + 1) = 0; xsCall1(xsResult, xsID("add"), xsString(modulePath)); strcat(modulePath, "modules/"); xsCall1(xsResult, xsID("add"), xsString(modulePath)); fxRunProgram(the, path); } argi++; } fxRunLoop(the); //xsStopProfiling(); } else { xsVar(0) = xsNewInstanceOf(xsObjectPrototype); xsVar(1) = xsNewHostFunction(process_cwd, 0); xsSet(xsVar(0), xsID("cwd"), xsVar(1)); #ifdef mxDebug xsSet(xsVar(0), xsID("debug"), xsTrue); #else xsSet(xsVar(0), xsID("debug"), xsFalse); #endif xsVar(1) = xsNewHostFunction(process_execArgv, 0); xsSet(xsVar(0), xsID("execArgv"), xsVar(1)); xsVar(1) = xsNewHostFunction(process_getenv, 0); xsSet(xsVar(0), xsID("getenv"), xsVar(1)); xsVar(1) = xsNewHostFunction(process_then, 1); xsSet(xsVar(0), xsID("then"), xsVar(1)); xsSet(xsVar(0), xsID("platform"), xsString("darwin")); xsSet(xsGlobal, xsID("process"), xsVar(0)); strcpy(path, argv[argi]); slash = strrchr(path, mxSeparator); if (slash) { *slash = 0; realpath(path, modulePath); size = c_strlen(modulePath); modulePath[size++] = mxSeparator; modulePath[size] = 0; xsCall1(xsResult, xsID("add"), xsString(modulePath)); strcat(modulePath, "modules"); size = c_strlen(modulePath); modulePath[size++] = mxSeparator; modulePath[size] = 0; xsCall1(xsResult, xsID("add"), xsString(modulePath)); name = slash + 1; } else { realpath(".", modulePath); size = c_strlen(modulePath); modulePath[size++] = mxSeparator; modulePath[size] = 0; xsCall1(xsResult, xsID("add"), xsString(modulePath)); strcat(modulePath, "modules"); size = c_strlen(modulePath); modulePath[size++] = mxSeparator; modulePath[size] = 0; xsCall1(xsResult, xsID("add"), xsString(modulePath)); name = path; } extension = strrchr(name, '.'); if (extension) *extension = 0; //xsStartProfiling(); fxRunModule(the, name); //xsStopProfiling(); } } xsCatch { xsStringValue message = xsToString(xsException); fprintf(stderr, "### %s\n", message); error = 1; } } } xsEndHost(the); xsDeleteMachine(machine); fxUnmapArchive(archive); if (!error && process_then_parameters) { #if mxWindows error =_spawnvp(_P_WAIT, process_then_parameters[0], process_then_parameters); if (error < 0) fprintf(stderr, "### Cannot execute %s!\n", process_then_parameters[0]); #else execvp(process_then_parameters[0], process_then_parameters); #endif } return error; }
static FskErr makeSSLRootVM(const char *calistpath) { #ifdef KPR_CONFIG FskErr err = kFskErrNone; xsBeginHost(gShell->root); xsTry { xsCall1_noResult(xsGet(xsGlobal, xsID("FskSSL")), xsID("loadRootCerts"), xsString((xsStringValue)calistpath)); } xsCatch { err = kFskErrOperationFailed; } xsEndHost(gShell->root); return err; #else char *rootPath, *xsbPath, *xsbName; xsGrammar *grammar; FskErr err; if ((err = FskMemPtrNewClear(sizeof(FskECMAScriptRecord), &gSSLVM)) != kFskErrNone) return err; #if FSK_EMBED FskExtensionsEmbedLoad(SSL_VMNAME); FskExtensionsEmbedGrammar(SSL_VMNAME, &xsbName, &grammar); #else xsbName = "FskCore.xsb"; grammar = &FskCoreGrammar; #endif rootPath = FskEnvironmentDoApply(FskStrDoCopy("[applicationPath]")); xsbPath = FskStrDoCat(rootPath, xsbName); FskMemPtrDispose(rootPath); grammar->name = (xsStringValue)SSL_VMNAME; if ((err = loadGrammar(xsbPath, grammar)) == kFskErrNone) { if ((gSSLVM->the = xsNewMachine(&anAllocation, grammar, gSSLVM)) == NULL) err = kFskErrMemFull; FskMemPtrDispose(grammar->symbols); FskMemPtrDispose(grammar->code); } FskMemPtrDispose(xsbPath); BAIL_IF_ERR(err); xsBeginHost(gSSLVM->the); xsTry { #if !FSK_EMBED /* load Crypt and FskSSL extensions which are only needed for Fsk SSL */ xsCall3_noResult(xsGet(xsGlobal, xsID("System")), xsID("loadExtension"), xsString("Crypt"), xsString("[applicationPath]"), xsInteger(0)); xsCall3_noResult(xsGet(xsGlobal, xsID("System")), xsID("loadExtension"), xsString("FskSSL"), xsString("[applicationPath]"), xsInteger(1)); #endif xsCall1_noResult(xsGet(xsGlobal, xsID("FskSSL")), xsID("loadRootCerts"), xsString((xsStringValue)calistpath)); } xsCatch { err = kFskErrOperationFailed; } xsEndHost(gSSLVM->the); if (err == kFskErrNone) xsShareMachine(gSSLVM->the); bail: if (err != kFskErrNone) disposeSSLRootVM(); return err; #endif }