void extract_jsa_genetic_candidate(jsa_genetic_solutiont &solution, const jsa_programt &prog, const goto_tracet &trace) { goto_tracet::stepst::const_iterator first(trace.steps.begin()); const goto_tracet::stepst::const_iterator last(trace.steps.end()); goto_tracet::stepst::const_iterator last_pred; encoded_programt tmp; while (find_prog(tmp, first, last, JSA_PRED_PREFIX)) { solution.predicates.push_back(to_genetic_pred(tmp)); last_pred=first; } first=last_pred; assert(find_prog(tmp, first, last, JSA_QUERY)); solution.query=to_genetic_query(tmp); assert(find_prog(tmp, first, last, JSA_INV)); solution.invariant=to_genetic_inv(tmp); }
void add_special(int argc, char **argv) { int i; prog_t *p = find_prog(argv[1]); if (p == NULL) { if (reading_cache) return; fprintf(stderr, "%s:%d: no prog %s previously declared, skipping special.\n", curfilename, linenum, argv[1]); goterror = 1; return; } if (!strcmp(argv[2], "ident")) { if (argc != 4) goto argcount; if ((p->ident = strdup(argv[3])) == NULL) out_of_memory(); } else if (!strcmp(argv[2], "srcdir")) { if (argc != 4) goto argcount; if ((p->srcdir = strdup(argv[3])) == NULL) out_of_memory(); } else if (!strcmp(argv[2], "mf_name")) { if (argc != 4) goto argcount; if ((p->mf_name = strdup(argv[3])) == NULL) out_of_memory(); } else if (!strcmp(argv[2], "objdir")) { if (argc != 4) goto argcount; if ((p->objdir = strdup(argv[3])) == NULL) out_of_memory(); } else if (!strcmp(argv[2], "objs")) { p->objs = NULL; for (i = 3; i < argc; i++) add_string(&p->objs, argv[i]); } else if (!strcmp(argv[2], "objpaths")) { p->objpaths = NULL; for (i = 3; i < argc; i++) add_string(&p->objpaths, argv[i]); } else { fprintf(stderr, "%s:%d: bad parameter name `%s', skipping line.\n", curfilename, linenum, argv[2]); goterror = 1; } return; argcount: fprintf(stderr, "%s:%d: too %s arguments, expected \"special %s %s <string>\".\n", curfilename, linenum, argc < 4 ? "few" : "many", argv[1], argv[2]); goterror = 1; }
samplv1_programs::Prog *samplv1_programs::Bank::add_prog ( uint16_t prog_id, const QString& prog_name ) { Prog *prog = find_prog(prog_id); if (prog) { prog->set_name(prog_name); } else { prog = new Prog(prog_id, prog_name); m_progs.insert(prog_id, prog); } return prog; }
void add_link(int argc, char **argv) { int i; prog_t *p = find_prog(argv[1]); if (p == NULL) { fprintf(stderr, "%s:%d: no prog %s previously declared, skipping link.\n", curfilename, linenum, argv[1]); goterror = 1; return; } for (i = 2; i < argc; i++) add_string(&p->links, argv[i]); }
int main(int argc, char **argv) { char *p; char *abspath; char *bindir; /* Location of executables. */ char rootdir[PATH_MAX]; /* Root location of Erlang installation. */ char progname[PATH_MAX]; /* Name of this program. */ char erlexec[PATH_MAX]; /* Path to erlexec */ /* Determine progname */ abspath = find_prog(argv[0]); strcpy(progname, abspath); for (p = progname+strlen(progname)-1;p >= progname && *p != '/'; --p) ; /* Determine bindir */ bindir = find_bindir(abspath); /* Determine rootdir */ strcpy(rootdir, bindir); for (p = rootdir+strlen(rootdir)-1;p >= rootdir && *p != '/'; --p) ; p--; for (;p >= rootdir && *p != '/'; --p) ; *p ='\0'; /* Update environment */ set_env("EMU", "beam"); set_env("PROGNAME", progname); set_env("BINDIR", bindir); set_env("ROOTDIR", rootdir); /* Invoke erlexec */ strcpy(erlexec, bindir); strcat(erlexec, DIRSEP); strcat(erlexec, "erlexec"); efree(abspath); efree(bindir); execvp(erlexec, argv); error("Error %d executing \'%s\'.", errno, erlexec); return 2; }
void add_special(int argc, char **argv) { int i; prog_t *p = find_prog(argv[1]); if (p == NULL) { if (reading_cache) return; warnx("%s:%d: no prog %s previously declared, skipping special", curfilename, linenum, argv[1]); goterror = 1; return; } if (!strcmp(argv[2], "ident")) { if (argc != 4) goto argcount; if ((p->ident = strdup(argv[3])) == NULL) out_of_memory(); } else if (!strcmp(argv[2], "srcdir")) { if (argc != 4) goto argcount; if ((p->srcdir = strdup(argv[3])) == NULL) out_of_memory(); } else if (!strcmp(argv[2], "objdir")) { if(argc != 4) goto argcount; if((p->objdir = strdup(argv[3])) == NULL) out_of_memory(); } else if (!strcmp(argv[2], "objs")) { p->objs = NULL; for (i = 3; i < argc; i++) add_string(&p->objs, argv[i]); } else if (!strcmp(argv[2], "objpaths")) { p->objpaths = NULL; for (i = 3; i < argc; i++) add_string(&p->objpaths, argv[i]); } else if (!strcmp(argv[2], "keep")) { p->keeplist = NULL; for(i = 3; i < argc; i++) add_string(&p->keeplist, argv[i]); } else if (!strcmp(argv[2], "objvar")) { if(argc != 4) goto argcount; if ((p->objvar = strdup(argv[3])) == NULL) out_of_memory(); } else if (!strcmp(argv[2], "buildopts")) { p->buildopts = NULL; for (i = 3; i < argc; i++) add_string(&p->buildopts, argv[i]); } else if (!strcmp(argv[2], "lib")) { for (i = 3; i < argc; i++) add_string(&p->libs, argv[i]); } else { warnx("%s:%d: bad parameter name `%s', skipping line", curfilename, linenum, argv[2]); goterror = 1; } return; argcount: warnx("%s:%d: too %s arguments, expected \"special %s %s <string>\"", curfilename, linenum, argc < 4? "few" : "many", argv[1], argv[2]); goterror = 1; }
int main(int argc, char** argv) { int eargv_size; int eargc_base; /* How many arguments in the base of eargv. */ char* emulator; char* env; char* basename; char* absname; char scriptname[PMAX]; char** last_opt; char** first_opt; emulator = env = get_env("ESCRIPT_EMULATOR"); if (emulator == NULL) { emulator = get_default_emulator(argv[0]); } if (strlen(emulator) >= PMAX) error("Value of environment variable ESCRIPT_EMULATOR is too large"); /* * Allocate the argv vector to be used for arguments to Erlang. * Arrange for starting to pushing information in the middle of * the array, to allow easy addition of commands in the beginning. */ eargv_size = argc*4+1000+LINEBUFSZ/2; eargv_base = (char **) emalloc(eargv_size*sizeof(char*)); eargv = eargv_base; eargc = 0; push_words(emulator); eargc_base = eargc; eargv = eargv + eargv_size/2; eargc = 0; free_env_val(env); /* * Push initial arguments. */ PUSH("+B"); PUSH2("-boot", "start_clean"); PUSH("-noshell"); /* Determine basename of the executable */ for (basename = argv[0]+strlen(argv[0]); basename > argv[0] && !(IS_DIRSEP(basename[-1])); --basename) ; first_opt = argv; last_opt = argv; #ifdef __WIN32__ if ( (_stricmp(basename, "escript.exe") == 0) ||(_stricmp(basename, "escript") == 0)) { #else if (strcmp(basename, "escript") == 0) { #endif /* * Locate all options before the script name. */ while (argc > 1 && argv[1][0] == '-') { argc--; argv++; last_opt = argv; } if (argc <= 1) { error("Missing filename\n"); } strncpy(scriptname, argv[1], sizeof(scriptname)); scriptname[sizeof(scriptname)-1] = '\0'; argc--; argv++; } else { #ifdef __WIN32__ int len; #endif absname = find_prog(argv[0]); #ifdef __WIN32__ len = strlen(absname); if (len >= 4 && _stricmp(absname+len-4, ".exe") == 0) { absname[len-4] = '\0'; } #endif erts_snprintf(scriptname, sizeof(scriptname), "%s.escript", absname); efree(absname); } /* * Read options from the %%! row in the script and add them as args */ append_shebang_args(scriptname); /* * Push the script name and everything following it as extra arguments. */ PUSH3("-run", "escript", "start"); /* * Push all options before the script name. But omit the leading hyphens. */ while (first_opt != last_opt) { PUSH(first_opt[1]+1); first_opt++; } PUSH("-extra"); PUSH(scriptname); while (argc > 1) { PUSH(argv[1]); argc--, argv++; } /* * Move up the commands for invoking the emulator and adjust eargv * accordingly. */ while (--eargc_base >= 0) { UNSHIFT(eargv_base[eargc_base]); } /* * Invoke Erlang with the collected options. */ PUSH(NULL); return run_erlang(eargv[0], eargv); } static void push_words(char* src) { char sbuf[PMAX]; char* dst; dst = sbuf; while ((*dst++ = *src++) != '\0') { if (isspace((int)*src)) { *dst = '\0'; PUSH(strsave(sbuf)); dst = sbuf; do { src++; } while (isspace((int)*src)); } } if (sbuf[0]) PUSH(strsave(sbuf)); }
void samplv1_programs::Bank::remove_prog ( uint16_t prog_id ) { Prog *prog = find_prog(prog_id); if (prog && m_progs.remove(prog_id)) delete prog; }
int wmain(int argc, wchar_t **wcargv) { char** argv; #else int main(int argc, char** argv) { #endif int eargv_size; int eargc_base; /* How many arguments in the base of eargv. */ char* emulator; char* basename; char* def_emu_lookup_path; char scriptname[PMAX]; char** last_opt; char** first_opt; #ifdef __WIN32__ int i; int len; /* Convert argv to utf8 */ argv = emalloc((argc+1) * sizeof(char*)); for (i=0; i<argc; i++) { len = WideCharToMultiByte(CP_UTF8, 0, wcargv[i], -1, NULL, 0, NULL, NULL); argv[i] = emalloc(len*sizeof(char)); WideCharToMultiByte(CP_UTF8, 0, wcargv[i], -1, argv[i], len, NULL, NULL); } argv[argc] = NULL; #endif /* * Allocate the argv vector to be used for arguments to Erlang. * Arrange for starting to pushing information in the middle of * the array, to allow easy addition of commands in the beginning. */ eargv_size = argc*4+1000+LINEBUFSZ/2; eargv_base = (char **) emalloc(eargv_size*sizeof(char*)); eargv = eargv_base; eargc = 0; eargc_base = eargc; eargv = eargv + eargv_size/2; eargc = 0; /* Determine basename of the executable */ for (basename = argv[0]+strlen(argv[0]); basename > argv[0] && !(IS_DIRSEP(basename[-1])); --basename) ; first_opt = argv; last_opt = argv; #ifdef __WIN32__ if ( (_stricmp(basename, "escript.exe") == 0) ||(_stricmp(basename, "escript") == 0)) { #else if (strcmp(basename, "escript") == 0) { #endif def_emu_lookup_path = argv[0]; /* * Locate all options before the script name. */ while (argc > 1 && argv[1][0] == '-') { argc--; argv++; last_opt = argv; } if (argc <= 1) { error("Missing filename\n"); } strncpy(scriptname, argv[1], sizeof(scriptname)); scriptname[sizeof(scriptname)-1] = '\0'; argc--; argv++; } else { char *absname = find_prog(argv[0]); #ifdef __WIN32__ int len = strlen(absname); if (len >= 4 && _stricmp(absname+len-4, ".exe") == 0) { absname[len-4] = '\0'; } #endif erts_snprintf(scriptname, sizeof(scriptname), "%s.escript", absname); efree(absname); def_emu_lookup_path = scriptname; } /* Determine path to emulator */ emulator = get_env("ESCRIPT_EMULATOR"); if (emulator == NULL) { emulator = get_default_emulator(def_emu_lookup_path); } if (strlen(emulator) >= PMAX) error("Value of environment variable ESCRIPT_EMULATOR is too large"); /* * Push initial arguments. */ PUSH(emulator); PUSH("+B"); PUSH2("-boot", "no_dot_erlang"); PUSH("-noshell"); /* * Read options from the %%! row in the script and add them as args */ append_shebang_args(scriptname); /* * Push the script name and everything following it as extra arguments. */ PUSH3("-run", "escript", "start"); /* * Push all options before the script name. But omit the leading hyphens. */ while (first_opt != last_opt) { PUSH(first_opt[1]+1); first_opt++; } PUSH("-extra"); PUSH(scriptname); while (argc > 1) { PUSH(argv[1]); argc--, argv++; } /* * Move up the commands for invoking the emulator and adjust eargv * accordingly. */ while (--eargc_base >= 0) { UNSHIFT(eargv_base[eargc_base]); } /* * Add scriptname to env */ set_env("ESCRIPT_NAME", scriptname); /* * Invoke Erlang with the collected options. */ PUSH(NULL); return run_erlang(eargv[0], eargv); } #ifdef __WIN32__ wchar_t *make_commandline(char **argv) { static wchar_t *buff = NULL; static int siz = 0; int num = 0, len; char **arg; wchar_t *p; if (*argv == NULL) { return L""; } for (arg = argv; *arg != NULL; ++arg) { num += strlen(*arg)+1; } if (!siz) { siz = num; buff = (wchar_t *) emalloc(siz*sizeof(wchar_t)); } else if (siz < num) { siz = num; buff = (wchar_t *) erealloc(buff,siz*sizeof(wchar_t)); } p = buff; num=0; for (arg = argv; *arg != NULL; ++arg) { len = MultiByteToWideChar(CP_UTF8, 0, *arg, -1, p, siz); p+=(len-1); *p++=L' '; } *(--p) = L'\0'; if (debug) { printf("Processed command line:%S\n",buff); } return buff; } int my_spawnvp(char **argv) { STARTUPINFOW siStartInfo; PROCESS_INFORMATION piProcInfo; DWORD ec; memset(&siStartInfo,0,sizeof(STARTUPINFOW)); siStartInfo.cb = sizeof(STARTUPINFOW); siStartInfo.dwFlags = STARTF_USESTDHANDLES; siStartInfo.hStdInput = GetStdHandle(STD_INPUT_HANDLE); siStartInfo.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE); siStartInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE); if (!CreateProcessW(NULL, make_commandline(argv), NULL, NULL, TRUE, 0, NULL, NULL, &siStartInfo, &piProcInfo)) { return -1; } CloseHandle(piProcInfo.hThread); WaitForSingleObject(piProcInfo.hProcess,INFINITE); if (!GetExitCodeProcess(piProcInfo.hProcess,&ec)) { return 0; } return (int) ec; }