From a9d1bd788e521d6c3a731893fea093cccffb1be8 Mon Sep 17 00:00:00 2001 From: Vitor Santos Costa Date: Fri, 22 Jun 2012 03:56:01 -0500 Subject: [PATCH] improve SWI console --- C/pl-yap.c | 2 +- Makefile.in | 8 +- console/LGPL/pl-ntcon.c | 0 console/LGPL/pl-ntmain.c | 31 +- console/yap.c | 535 +--------------------------------- include/YapInterface.h | 3 + include/yap_structs.h | 8 + library/dialect/swi/fli/swi.c | 8 +- 8 files changed, 46 insertions(+), 549 deletions(-) mode change 100644 => 100755 console/LGPL/pl-ntcon.c mode change 100644 => 100755 include/YapInterface.h mode change 100644 => 100755 include/yap_structs.h diff --git a/C/pl-yap.c b/C/pl-yap.c index 48a285a4e..138e61c97 100755 --- a/C/pl-yap.c +++ b/C/pl-yap.c @@ -1048,7 +1048,7 @@ X_API int PL_raise(int sig) { if (sig < SIG_PROLOG_OFFSET) { - Yap_signal(YAP_FAIL_SIGNAL); + Yap_signal(YAP_INT_SIGNAL); return 1; } else if (sig == SIG_PLABORT) { YAP_signal(0x40); /* YAP_INT_SIGNAL */ diff --git a/Makefile.in b/Makefile.in index 2ee0ffda9..288434edf 100755 --- a/Makefile.in +++ b/Makefile.in @@ -262,6 +262,7 @@ C_SOURCES= \ $(srcdir)/packages/udi/rtree.c \ $(srcdir)/packages/udi/rtree_udi.c \ $(srcdir)/C/utilpreds.c $(srcdir)/C/write.c $(srcdir)/console/yap.c \ + $(srcdir)/C/yap-args.c \ $(srcdir)/C/ypstdio.c \ $(srcdir)/BEAM/eam_am.c $(srcdir)/BEAM/eam_showcode.c \ $(srcdir)/BEAM/eamindex.c $(srcdir)/BEAM/eamamasm.c \ @@ -367,7 +368,7 @@ ENGINE_OBJECTS = \ sysbits.o threads.o tracer.o \ udi.o rtree.o rtree_udi.o\ unify.o userpreds.o utilpreds.o \ - write.o \ + yap-args.o write.o \ blobs.o swi.o ypstdio.o $(IOLIB_OBJECTS) @MPI_OBJS@ LIBTAI_OBJECTS = \ @@ -442,6 +443,9 @@ parms.h: Makefile c_interface.o: $(srcdir)/C/c_interface.c $(srcdir)/include/c_interface.h config.h $(CC) $(C_INTERF_FLAGS) -c $(srcdir)/C/c_interface.c -o c_interface.o +yap-argss.o: $(srcdir)/C/yap-args.c $(srcdir)/include/c_interface.h config.h + $(CC) $(C_INTERF_FLAGS) -c $(srcdir)/C/yap-args.c -o yap-args.o + clause_list.o: $(srcdir)/C/clause_list.c $(srcdir)/include/clause_list.h config.h $(CC) $(C_INTERF_FLAGS) -c $(srcdir)/C/clause_list.c -o clause_list.o @@ -581,7 +585,7 @@ pl-nt.o: $(srcdir)/os/pl-nt.c config.h $(CC) -c $(CFLAGS) -I$(srcdir)/include -I$(srcdir)/os @EXTRA_INCLUDES_FOR_WIN32@ $(srcdir)/os/pl-nt.c -o $@ pl-ntcon.o: $(srcdir)/console/LGPL/pl-ntcon.c config.h - $(CC) -municode -DUNICODE -D_UNICODE -c $(CFLAGS) -DPL_CONSOLE=1 -I$(srcdir)/include $(srcdir)/console/LGPL/pl-ntcon.c -o $@ + $(CC) -c $(CFLAGS) -DPL_CONSOLE=1 -I$(srcdir)/include $(srcdir)/console/LGPL/pl-ntcon.c -o $@ pl-ntconsole.o: $(srcdir)/console/LGPL/pl-ntconsole.c config.h $(CC) -municode -DUNICODE -D_UNICODE -c $(CFLAGS) -DPL_CONSOLE=1 -I$(srcdir) -I$(srcdir)/include -I$(srcdir)/os @EXTRA_INCLUDES_FOR_WIN32@ $(srcdir)/console/LGPL/pl-ntconsole.c -o $@ diff --git a/console/LGPL/pl-ntcon.c b/console/LGPL/pl-ntcon.c old mode 100644 new mode 100755 diff --git a/console/LGPL/pl-ntmain.c b/console/LGPL/pl-ntmain.c index d4a2c97e7..484028ea3 100755 --- a/console/LGPL/pl-ntmain.c +++ b/console/LGPL/pl-ntmain.c @@ -1005,8 +1005,25 @@ win32main(rlc_console c, int argc, TCHAR **argv) set_window_title(c); rlc_bind_terminal(c); + /* YAP has to initialize before doing anything else */ +#ifdef _YAP_NOT_INSTALLED_ + if ( argc > MAX_ARGC ) + argc = MAX_ARGC; + for(i=0; i MAX_ARGC ) - argc = MAX_ARGC; - for(i=0; i 0) - { - p = *++argv; - if (*p == '-') - switch (*++p) - { - case 'b': - BootMode = YAP_BOOT_FROM_PROLOG; - iap->YapPrologBootFile = *++argv; - argc--; - break; - case '?': - print_usage(); - exit(EXIT_SUCCESS); - case 'q': - iap->QuietMode = TRUE; - break; -#if defined(YAPOR_COPY) || defined(YAPOR_COW) || defined(YAPOR_SBA) || defined(YAPOR_THREADS) - case 'w': - ssize = &(iap->NumberWorkers); - goto GetSize; - case 'd': - if (!strcmp("dump-runtime-variables",p)) - return dump_runtime_variables(); - ssize = &(iap->DelayedReleaseLoad); - goto GetSize; -#else - case 'd': - if (!strcmp("dump-runtime-variables",p)) - return dump_runtime_variables(); -#endif /* YAPOR_COPY || YAPOR_COW || YAPOR_SBA || YAPOR_THREADS */ - case 'F': - /* just ignore for now */ - argc--; - argv++; - break; - case 'f': - if (argc > 1 && argv[1][0] != '-') { - argc--; - argv++; - if (!strcmp(*argv,"none")) { - iap->FastBoot = TRUE; - } else { - iap->YapPrologRCFile = *argv; - } - break; - } - iap->FastBoot = TRUE; - break; -#ifdef MYDDAS_MYSQL - case 'm': - if (strncmp(p,"myddas_",7) == 0) - { - iap->myddas = 1; - if ((*argv)[0] == '\0') - myddas_temp = *argv; - else { - argc--; - if (argc == 0) { - fprintf(stderr," [ YAP unrecoverable error: missing file name with option 'l' ]\n"); - exit(EXIT_FAILURE); - } - argv++; - myddas_temp = *argv; - } - - if (strstr(p,"user") != NULL) - iap->myddas_user = myddas_temp; - else if (strstr(p,"pass") != NULL) - iap->myddas_pass = myddas_temp; - else if (strstr(p,"db") != NULL) - iap->myddas_db = myddas_temp; - else if (strstr(p,"host") != NULL) - iap->myddas_host = myddas_temp; - else - goto myddas_error_print; - break; - } -#endif - // execution mode - case 'J': - switch (p[1]) { - case '0': - iap->ExecutionMode = YAPC_INTERPRETED; - break; - case '1': - iap->ExecutionMode = YAPC_MIXED_MODE_USER; - break; - case '2': - iap->ExecutionMode = YAPC_MIXED_MODE_ALL; - break; - case '3': - iap->ExecutionMode = YAPC_COMPILE_USER; - break; - case '4': - iap->ExecutionMode = YAPC_COMPILE_ALL; - break; - default: - fprintf(stderr,"[ YAP unrecoverable error: unknown switch -%c%c ]\n", *p, p[1]); - exit(EXIT_FAILURE); - } - p++; - break; - case 'G': - ssize = &(iap->MaxGlobalSize); - goto GetSize; - break; - case 's': - case 'S': - ssize = &(iap->StackSize); -#if defined(YAPOR_COPY) || defined(YAPOR_COW) || defined(YAPOR_SBA) || defined(YAPOR_THREADS) - if (p[1] == 'l') { - p++; - ssize = &(iap->SchedulerLoop); - } -#endif /* YAPOR_COPY || YAPOR_COW || YAPOR_SBA || YAPOR_THREADS */ - goto GetSize; - case 'a': - case 'A': - ssize = &(iap->AttsSize); - goto GetSize; - case 'T': - ssize = &(iap->MaxTrailSize); - goto get_trail_size; - case 't': - ssize = &(iap->TrailSize); -#ifdef TABLING - if (p[1] == 's') { - p++; - ssize = &(iap->MaxTableSpaceSize); - } -#endif /* TABLING */ - get_trail_size: - if (*++p == '\0') - { - if (argc > 1) - --argc, p = *++argv; - else - { - fprintf(stderr,"[ YAP unrecoverable error: missing size in flag %s ]", argv[0]); - print_usage(); - exit(EXIT_FAILURE); - } - } - { - unsigned long int i = 0, ch; - while ((ch = *p++) >= '0' && ch <= '9') - i = i * 10 + ch - '0'; - switch(ch) { - case 'M': - case 'm': - i *= 1024; - ch = *p++; - break; - case 'g': - i *= 1024*1024; - ch = *p++; - break; - case 'k': - case 'K': - ch = *p++; - break; - } - if (ch) { - iap->YapPrologTopLevelGoal = add_end_dot(*argv); - } else { - *ssize = i; - } - } - break; - case 'h': - case 'H': - ssize = &(iap->HeapSize); - GetSize: - if (*++p == '\0') - { - if (argc > 1) - --argc, p = *++argv; - else - { - fprintf(stderr,"[ YAP unrecoverable error: missing size in flag %s ]", argv[0]); - print_usage(); - exit(EXIT_FAILURE); - } - } - { - unsigned long int i = 0, ch; - while ((ch = *p++) >= '0' && ch <= '9') - i = i * 10 + ch - '0'; - switch(ch) { - case 'M': - case 'm': - i *= 1024; - ch = *p++; - break; - case 'g': - case 'G': - i *= 1024*1024; - ch = *p++; - break; - case 'k': - case 'K': - ch = *p++; - break; - } - if (ch) - { - fprintf(stderr,"[ YAP unrecoverable error: illegal size specification %s ]", argv[-1]); - YAP_Exit(1); - } - *ssize = i; - } - break; -#ifdef DEBUG - case 'P': - YAP_SetOutputMessage(); - output_msg = TRUE; - break; -#endif - case 'L': - if (p[1] && p[1] >= '0' && p[1] <= '9') /* hack to emulate SWI's L local option */ - { - ssize = &(iap->MaxStackSize); - goto GetSize; - } - iap->QuietMode = TRUE; - iap->HaltAfterConsult = TRUE; - case 'l': - p++; - if (!*++argv) { - fprintf(stderr,"%% YAP unrecoverable error: missing load file name\n"); - exit(1); - } else if (!strcmp("--",*argv)) { - /* shell script, the next entry should be the file itself */ - iap->YapPrologRCFile = argv[1]; - argc = 1; - break; - } else { - iap->YapPrologRCFile = *argv; - argc--; - } - if (*p) { - /* we have something, usually, of the form: - -L -- - FileName - ExtraArgs - */ - /* being called from a script */ - while (*p && (*p == ' ' || *p == '\t')) - p++; - if (p[0] == '-' && p[1] == '-') { - /* ignore what is next */ - argc = 1; - } - } - break; - /* run goal before top-level */ - case 'g': - if ((*argv)[0] == '\0') - iap->YapPrologGoal = *argv; - else { - argc--; - if (argc == 0) { - fprintf(stderr," [ YAP unrecoverable error: missing initialization goal for option 'g' ]\n"); - exit(EXIT_FAILURE); - } - argv++; - iap->YapPrologGoal = *argv; - } - break; - /* run goal as top-level */ - case 'z': - if ((*argv)[0] == '\0') - iap->YapPrologTopLevelGoal = *argv; - else { - argc--; - if (argc == 0) { - fprintf(stderr," [ YAP unrecoverable error: missing goal for option 'z' ]\n"); - exit(EXIT_FAILURE); - } - argv++; - iap->YapPrologTopLevelGoal = add_end_dot(*argv); - } - break; - case 'p': - if ((*argv)[0] == '\0') - iap->YapPrologAddPath = *argv; - else { - argc--; - if (argc == 0) { - fprintf(stderr," [ YAP unrecoverable error: missing paths for option 'p' ]\n"); - exit(EXIT_FAILURE); - } - argv++; - iap->YapPrologAddPath = *argv; - } - break; - /* nf: Begin preprocessor code */ - case 'D': - { - char *var, *value; - ++p; - var = p; - if (var == NULL || *var=='\0') - break; - while(*p!='=' && *p!='\0') ++p; - if ( *p=='\0' ) break; - *p='\0'; - ++p; - value=p; - if ( *value == '\0' ) break; - ++def_c; - def_var[def_c-1]=var; - def_value[def_c-1]=value; - break; - } - /* End preprocessor code */ - case '-': - /* skip remaining arguments */ - argc = 1; - break; - default: - { -#ifdef MYDDAS_MYSQL - myddas_error_print : -#endif - fprintf(stderr,"[ YAP unrecoverable error: unknown switch -%c ]\n", *p); -#ifdef MYDDAS_MYSQL - myddas_error : -#endif - print_usage(); - exit(EXIT_FAILURE); - } - } - else { - iap->SavedState = p; - } - } -#ifdef MYDDAS_MYSQL - /* Check MYDDAS Arguments */ - if (iap->myddas_user != NULL || iap->myddas_pass != NULL - || iap->myddas_db != NULL || iap->myddas_host != NULL) - if (iap->myddas_user == NULL || iap->myddas_db == NULL){ - fprintf(stderr,"[ YAP unrecoverable error: Missing Mandatory Arguments for MYDDAS ]\n"); - goto myddas_error; - } -#endif - return BootMode; -} - static int init_standard_system(int argc, char *argv[], YAP_init_args *iap) { int BootMode; - iap->SavedState = NULL; - iap->HeapSize = 0; - iap->StackSize = 0; - iap->TrailSize = 0; - iap->AttsSize = 0; - iap->MaxAttsSize = 0; - iap->MaxHeapSize = 0; - iap->MaxStackSize = 0; - iap->MaxGlobalSize = 0; - iap->MaxTrailSize = 0; - iap->YapLibDir = NULL; - iap->YapPrologBootFile = NULL; - iap->YapPrologInitFile = NULL; - iap->YapPrologRCFile = NULL; - iap->YapPrologGoal = NULL; - iap->YapPrologTopLevelGoal = NULL; - iap->YapPrologAddPath = NULL; - iap->HaltAfterConsult = FALSE; - iap->FastBoot = FALSE; - iap->MaxTableSpaceSize = 0; - iap->NumberWorkers = DEFAULT_NUMBERWORKERS; - iap->SchedulerLoop = DEFAULT_SCHEDULERLOOP; - iap->DelayedReleaseLoad = DEFAULT_DELAYEDRELEASELOAD; - iap->PrologShouldHandleInterrupts = TRUE; - iap->ExecutionMode = YAPC_INTERPRETED; - iap->Argc = argc; - iap->Argv = argv; -#ifdef MYDDAS_MYSQL - iap->myddas = 0; - iap->myddas_user = NULL; - iap->myddas_pass = NULL; - iap->myddas_db = NULL; - iap->myddas_host = NULL; -#endif - iap->ErrorNo = 0; - iap->ErrorCause = NULL; - iap->QuietMode = FALSE; - - BootMode = parse_yap_arguments(argc,argv,iap); + BootMode = YAP_parse_yap_arguments(argc,argv,iap); /* init memory */ if (BootMode == YAP_BOOT_FROM_PROLOG || @@ -693,10 +166,10 @@ main (int argc, char **argv) mod_arg[0] = YAP_MkAtomTerm(YAP_LookupAtom("ypp")); YAP_RunGoalOnce(YAP_MkApplTerm(YAP_MkFunctor(YAP_LookupAtom("use_module"),1), 1, mod_arg)); // process the definitions - for(i=0;i