int main(int argc, char* argv[]) { void* callbacks[] = {Joutput,0,Jinput,0,(void*)SMCON}; int type; jepath(argv[0]); // get path to JFE folder jt=jeload(callbacks); if(!jt){char m[1000]; jefail(m), fputs(m,stdout); exit(1);} adadbreak=(char**)jt; // first address in jt is address of breakdata signal(SIGINT,sigint); #ifdef READLINE char* rl_readline_name="jconsole"; /* argv[0] varies too much*/ #endif if(argc==2&&!strcmp(argv[1],"-jprofile")) type=3; else if(argc>2&&!strcmp(argv[1],"-jprofile")) type=1; else type=0; addargv(argc,argv,input+strlen(input)); jefirst(type,input); while(1){jedo(Jinput(jt," "));} jefree(); return 0; }
int main(int argc, char* argv[]) { void* callbacks[] = {Joutput,0,Jinput,0,(void*)SMCON}; int type; #if !defined(WIN32) && !(defined(__arm__)||defined(__mips__)) // set stack size to get limit error instead of crash struct rlimit lim; getrlimit(RLIMIT_STACK,&lim); lim.rlim_cur=0x1000000; // 0xc000000 12mb works, but let's be safe with 16mb setrlimit(RLIMIT_STACK,&lim); #endif jepath(argv[0]); // get path to JFE folder jt=jeload(callbacks); if(!jt){char m[1000]; jefail(m), fputs(m,stdout); exit(1);} adadbreak=(char**)jt; // first address in jt is address of breakdata signal(SIGINT,sigint); #ifdef READLINE char* rl_readline_name="jconsole"; /* argv[0] varies too much*/ #endif if(argc==2&&!strcmp(argv[1],"-jprofile")) type=3; else if(argc>2&&!strcmp(argv[1],"-jprofile")) type=1; else type=0; addargv(argc,argv,input+strlen(input)); #ifndef READLINE #ifndef ANDROID // _O_TEXT may not be defined on non-VC++ systems #ifdef _O_TEXT _setmode( _fileno( stdin ), _O_TEXT ); //readline filters '\r' (so does this) #endif #endif #endif jefirst(type,input); while(1){jedo(Jinput(jt," "));} jefree(); return 0; }
void speedy_getopt( OptsRec myopts[], int numopts, char *argv[], char *envp[], char ***scr_argv, char ***perl_argv ) { char **p; int i, state, perl_argc, scr_argc; // Init perl argv initargv(&perl_argc, perl_argv); addargv(&perl_argc, perl_argv, ""); // Init script argv initargv(&scr_argc, scr_argv); // Fill in opts from environment first. for (p = envp; *p; ++p) { if (strncmp(*p, PRE, sizeof(PRE)-1) == 0) { for (i = 0; i < numopts; ++i) { char *name = myopts[i].name; int l = strlen(name); if (strncmp(*p+sizeof(PRE)-1, name, l) == 0 && (*p)[sizeof(PRE)+l-1] == '=') { setval(myopts +i, *p+sizeof(PRE)+l); } } } } // Fill in opts from command line. for (++argv, state = ST_PERLOPTS; *argv; ++argv) { int c, j; char *beg, *end; for (beg = *argv; ; beg = end + 1) { c = *beg; while (xispc(c)) { c = *++beg; } end = beg; while (c && !xispc(c)) { c = *++end; } *end = '\0'; if (beg == end) break; if (beg[0] != '-') { // End of perl/speedy opts, start of argv[0] for script *end = c; addargv(&perl_argc, perl_argv, beg); addargv(&scr_argc, scr_argv, beg); for (++argv; *argv; ++argv) { addargv(&perl_argc, perl_argv, *argv); addargv(&scr_argc, scr_argv, *argv); } return; } else { switch(state) { case ST_PERLOPTS: if (beg[1] == '-') { state = ST_SPEEDYOPTS; } else { addargv(&perl_argc, perl_argv, beg); } break; case ST_SPEEDYOPTS: for (j = 0; j < numopts; ++j) { OptsRec *r = myopts + j; if (r->opt == beg[1]) { if (!beg[2]) { fprintf(stderr, "missing argument to speedy option -%c\n", beg[1] ); exit(1); } setval(r, beg+2); break; } } if (j == numopts) { fprintf(stderr, "unknown speedy option -%c\n", beg[1]); exit(1); } break; } } if (c == '\0') break; *end = c; } } }