| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | /*************************************************************************
 | 
					
						
							|  |  |  | *									 * | 
					
						
							|  |  |  | *	 Yap Prolog 							 * | 
					
						
							|  |  |  | *									 * | 
					
						
							|  |  |  | *	Yap Prolog Was Developed At Nccup - Universidade Do Porto	 * | 
					
						
							|  |  |  | *									 * | 
					
						
							|  |  |  | * Copyright L.Damas, V.S.Costa And Universidade Do Porto 1985-1997	 * | 
					
						
							|  |  |  | *									 * | 
					
						
							|  |  |  | ************************************************************************** | 
					
						
							|  |  |  | *									 * | 
					
						
							|  |  |  | * File:		Yap.C							 * | 
					
						
							|  |  |  | * Last Rev:								 * | 
					
						
							|  |  |  | * Mods:									 * | 
					
						
							|  |  |  | * Comments:	Yap's Main File						 * | 
					
						
							|  |  |  | *									 * | 
					
						
							|  |  |  | *************************************************************************/ | 
					
						
							|  |  |  | /* static char SccsId[] = "X 4.3.3"; */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "config.h"
 | 
					
						
							| 
									
										
										
										
											2002-09-09 17:40:12 +00:00
										 |  |  | #include "YapInterface.h"
 | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-11-18 18:52:41 +00:00
										 |  |  | #ifdef CUT_C
 | 
					
						
							|  |  |  | #include "cut_c.h"
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-06-18 17:02:19 +00:00
										 |  |  | #if (DefTrailSpace < MinTrailSpace)
 | 
					
						
							|  |  |  | #undef DefTrailSpace
 | 
					
						
							|  |  |  | #define DefTrailSpace	MinTrailSpace
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if (DefStackSpace < MinStackSpace)
 | 
					
						
							|  |  |  | #undef DefStackSpace
 | 
					
						
							|  |  |  | #define DefStackSpace	MinStackSpace
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if (DefHeapSpace < MinHeapSpace)
 | 
					
						
							|  |  |  | #undef DefHeapSpace
 | 
					
						
							|  |  |  | #define DefHeapSpace	MinHeapSpace
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-12-06 20:03:26 +00:00
										 |  |  | #define DEFAULT_NUMBERWORKERS       1
 | 
					
						
							|  |  |  | #define DEFAULT_SCHEDULERLOOP      10
 | 
					
						
							|  |  |  | #define DEFAULT_DELAYEDRELEASELOAD  3
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | #ifdef _MSC_VER /* Microsoft's Visual C++ Compiler */
 | 
					
						
							|  |  |  | #ifdef  HAVE_UNISTD_H
 | 
					
						
							|  |  |  | #undef  HAVE_UNISTD_H
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <stdio.h>
 | 
					
						
							|  |  |  | #if HAVE_SYS_TYPES_H
 | 
					
						
							|  |  |  | #include <sys/types.h>
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #if HAVE_SYS_STAT_H
 | 
					
						
							|  |  |  | #include <sys/stat.h>
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #if HAVE_FCNTL_H
 | 
					
						
							|  |  |  | #include <fcntl.h>
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #if HAVE_STDARG_H
 | 
					
						
							|  |  |  | #include <stdarg.h>
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #include <stdlib.h>
 | 
					
						
							|  |  |  | #if HAVE_UNISTD_H
 | 
					
						
							|  |  |  | #include <unistd.h>
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #if HAVE_ERRNO_H
 | 
					
						
							|  |  |  | #include <errno.h>
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2008-10-16 17:19:14 +01:00
										 |  |  | #if HAVE_CTYPE_H
 | 
					
						
							|  |  |  | #include <ctype.h>
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | #if HAVE_STRING_H
 | 
					
						
							|  |  |  | #include <string.h>
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-09-09 17:40:12 +00:00
										 |  |  | static void PROTO(do_top_goal,(YAP_Term)); | 
					
						
							| 
									
										
										
										
											2002-10-30 17:27:19 +00:00
										 |  |  | static void PROTO(exec_top_level,(int, YAP_init_args *)); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #ifdef DEBUG
 | 
					
						
							|  |  |  | static int output_msg; | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef lint
 | 
					
						
							|  |  |  | /* VARARGS1 */ | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef M_WILLIAMS
 | 
					
						
							|  |  |  | long _stksize = 32000; | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-06 05:08:14 +00:00
										 |  |  | /* nf: Begin preprocessor code */ | 
					
						
							|  |  |  | #define MAXDEFS 100
 | 
					
						
							|  |  |  | static char *def_var[MAXDEFS]; | 
					
						
							|  |  |  | static char *def_value[MAXDEFS]; | 
					
						
							|  |  |  | static int  def_c=0; | 
					
						
							|  |  |  | /* End preprocessor code */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-25 22:03:14 +00:00
										 |  |  | #ifdef USE_MYPUTC
 | 
					
						
							| 
									
										
										
										
											2003-05-20 19:11:59 +00:00
										 |  |  | static void | 
					
						
							|  |  |  | myputc (int ch) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | { | 
					
						
							|  |  |  |   putc(ch,stderr); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2004-05-14 16:34:49 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							| 
									
										
										
										
											2002-09-09 17:40:12 +00:00
										 |  |  | do_top_goal (YAP_Term Goal) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | { | 
					
						
							|  |  |  | #ifdef DEBUG
 | 
					
						
							|  |  |  |   if (output_msg) | 
					
						
							|  |  |  |     fprintf(stderr,"Entering absmi\n"); | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2008-06-04 13:58:42 +00:00
										 |  |  |   YAP_RunGoalOnce(Goal); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-06-18 17:02:19 +00:00
										 |  |  | static void | 
					
						
							| 
									
										
										
										
											2002-12-06 20:03:26 +00:00
										 |  |  | print_usage(void) | 
					
						
							| 
									
										
										
										
											2002-06-18 17:02:19 +00:00
										 |  |  | { | 
					
						
							|  |  |  |   fprintf(stderr,"\n[ Valid switches for command line arguments: ]\n"); | 
					
						
							|  |  |  |   fprintf(stderr,"  -?   Shows this screen\n"); | 
					
						
							| 
									
										
										
										
											2002-10-30 17:27:19 +00:00
										 |  |  |   fprintf(stderr,"  -b   Boot file \n"); | 
					
						
							| 
									
										
										
										
											2009-10-23 14:22:17 +01:00
										 |  |  |   fprintf(stderr,"  -dump-runtime-variables\n"); | 
					
						
							| 
									
										
										
										
											2008-08-24 00:30:25 +01:00
										 |  |  |   fprintf(stderr,"  -f   initialization file or \"none\"\n"); | 
					
						
							| 
									
										
										
										
											2005-10-21 16:09:03 +00:00
										 |  |  |   fprintf(stderr,"  -g   Run Goal Before Top-Level \n"); | 
					
						
							|  |  |  |   fprintf(stderr,"  -z   Run Goal Before Top-Level \n"); | 
					
						
							| 
									
										
										
										
											2008-03-13 18:41:52 +00:00
										 |  |  |   fprintf(stderr,"  -q   start with informational messages off\n"); | 
					
						
							| 
									
										
										
										
											2005-10-21 16:09:03 +00:00
										 |  |  |   fprintf(stderr,"  -l   load Prolog file\n"); | 
					
						
							|  |  |  |   fprintf(stderr,"  -L   run Prolog file and exit\n"); | 
					
						
							| 
									
										
										
										
											2005-10-28 17:55:30 +00:00
										 |  |  |   fprintf(stderr,"  -p   extra path for file-search-path\n"); | 
					
						
							| 
									
										
										
										
											2010-04-12 17:22:03 +01:00
										 |  |  |   fprintf(stderr,"  -hSize   Heap area in Kbytes (default: %d, minimum: %d)\n", | 
					
						
							| 
									
										
										
										
											2002-06-18 17:02:19 +00:00
										 |  |  | 	  DefHeapSpace, MinHeapSpace); | 
					
						
							| 
									
										
										
										
											2010-04-12 17:22:03 +01:00
										 |  |  |   fprintf(stderr,"  -sSize   Stack area in Kbytes (default: %d, minimum: %d)\n", | 
					
						
							| 
									
										
										
										
											2002-06-18 17:02:19 +00:00
										 |  |  | 	  DefStackSpace, MinStackSpace); | 
					
						
							| 
									
										
										
										
											2010-04-12 17:22:03 +01:00
										 |  |  |   fprintf(stderr,"  -tSize   Trail area in Kbytes (default: %d, minimum: %d)\n", | 
					
						
							| 
									
										
										
										
											2002-06-18 17:02:19 +00:00
										 |  |  | 	  DefTrailSpace, MinTrailSpace); | 
					
						
							| 
									
										
										
										
											2010-04-12 17:22:03 +01:00
										 |  |  |   fprintf(stderr,"  -GSize  Max Area for Global Stack\n"); | 
					
						
							|  |  |  |   fprintf(stderr,"  -LSize   Max Area for Local Stack (number must follow L)\n"); | 
					
						
							|  |  |  |   fprintf(stderr,"  -TSize   Max Area for Trail (number must follow L)\n"); | 
					
						
							| 
									
										
										
										
											2009-04-08 00:32:36 +01:00
										 |  |  |   fprintf(stderr,"\n[Execution Modes]\n"); | 
					
						
							|  |  |  |   fprintf(stderr,"  -J0  Interpreted mode (default)\n"); | 
					
						
							|  |  |  |   fprintf(stderr,"  -J1  Mixed mode only for user predicates\n"); | 
					
						
							|  |  |  |   fprintf(stderr,"  -J2  Mixed mode for all predicates\n"); | 
					
						
							|  |  |  |   fprintf(stderr,"  -J3  Compile all user predicates\n"); | 
					
						
							|  |  |  |   fprintf(stderr,"  -J4  Compile all predicates\n"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-08-04 15:45:56 +00:00
										 |  |  | #ifdef TABLING
 | 
					
						
							|  |  |  |   fprintf(stderr,"  -ts  Maximum table space area in Mbytes (default: unlimited)\n"); | 
					
						
							|  |  |  | #endif /* TABLING */
 | 
					
						
							| 
									
										
										
										
											2011-04-29 14:59:17 +01:00
										 |  |  | #if defined(YAPOR_COPY) || defined(YAPOR_COW) || defined(YAPOR_SBA) || defined(YAPOR_THREADS)
 | 
					
						
							| 
									
										
										
										
											2005-08-04 15:45:56 +00:00
										 |  |  |   fprintf(stderr,"  -w   Number of workers (default: %d)\n", | 
					
						
							| 
									
										
										
										
											2002-12-06 20:03:26 +00:00
										 |  |  | 	  DEFAULT_NUMBERWORKERS); | 
					
						
							| 
									
										
										
										
											2005-08-04 15:45:56 +00:00
										 |  |  |   fprintf(stderr,"  -sl  Loop scheduler executions before look for hiden shared work (default: %d)\n",  | 
					
						
							|  |  |  |           DEFAULT_SCHEDULERLOOP); | 
					
						
							|  |  |  |   fprintf(stderr,"  -d   Value of delayed release of load (default: %d)\n", | 
					
						
							| 
									
										
										
										
											2002-12-06 20:03:26 +00:00
										 |  |  | 	  DEFAULT_DELAYEDRELEASELOAD); | 
					
						
							| 
									
										
										
										
											2011-04-29 14:59:17 +01:00
										 |  |  | #endif /* YAPOR_COPY || YAPOR_COW || YAPOR_SBA || YAPOR_THREADS */
 | 
					
						
							| 
									
										
										
										
											2005-08-04 15:45:56 +00:00
										 |  |  |   /* nf: Preprocessor */		 | 
					
						
							| 
									
										
										
										
											2008-04-11 16:30:28 +00:00
										 |  |  |   /* fprintf(stderr,"  -DVar=Name   Persistent definition\n"); */ | 
					
						
							| 
									
										
										
										
											2002-06-18 17:02:19 +00:00
										 |  |  |   fprintf(stderr,"\n"); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-10-16 17:19:14 +01:00
										 |  |  | static int | 
					
						
							|  |  |  | myisblank(int c) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   switch (c) { | 
					
						
							|  |  |  |   case ' ': | 
					
						
							|  |  |  |   case '\t': | 
					
						
							|  |  |  |   case '\n': | 
					
						
							|  |  |  |   case '\r': | 
					
						
							|  |  |  |     return TRUE; | 
					
						
							|  |  |  |   default: | 
					
						
							|  |  |  |     return FALSE; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-08-23 17:26:41 +01:00
										 |  |  | static char * | 
					
						
							|  |  |  | add_end_dot(char arg[]) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   int sz = strlen(arg), i; | 
					
						
							|  |  |  |   i = sz; | 
					
						
							| 
									
										
										
										
											2008-10-16 17:19:14 +01:00
										 |  |  |   while (i && myisblank(arg[--i])); | 
					
						
							| 
									
										
										
										
											2008-08-23 17:26:41 +01:00
										 |  |  |   if (i && arg[i] != ',') { | 
					
						
							|  |  |  |     char *p = (char *)malloc(sz+2); | 
					
						
							|  |  |  |     if (!p) | 
					
						
							|  |  |  |       return NULL; | 
					
						
							|  |  |  |     strncpy(p,arg,sz); | 
					
						
							|  |  |  |     p[sz] = '.'; | 
					
						
							|  |  |  |     p[sz+1] = '\0'; | 
					
						
							|  |  |  |     return p; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   return arg; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-23 09:09:16 +01:00
										 |  |  | static int | 
					
						
							|  |  |  | dump_runtime_variables(void) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2010-04-13 00:30:15 +01:00
										 |  |  |   fprintf(stdout,"CC=\"%s\"\n",YAP_CC); | 
					
						
							|  |  |  |   fprintf(stdout,"YAP_ROOTDIR=\"%s\"\n",YAP_ROOTDIR); | 
					
						
							|  |  |  |   fprintf(stdout,"YAP_LIBS=\"%s\"\n",YAP_LIBS); | 
					
						
							|  |  |  |   fprintf(stdout,"YAP_SHLIB_SUFFIX=\"%s\"\n",YAP_SHLIB_SUFFIX); | 
					
						
							|  |  |  |   fprintf(stdout,"YAP_VERSION=%d\n",YAP_VERSION); | 
					
						
							| 
									
										
										
										
											2009-10-23 14:22:17 +01:00
										 |  |  |   exit(0); | 
					
						
							|  |  |  |   return 1; | 
					
						
							| 
									
										
										
										
											2009-10-23 09:09:16 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * proccess command line arguments: valid switches are: -b    boot -s | 
					
						
							|  |  |  |  * stack area size (K) -h    heap area size -a    aux stack size -e | 
					
						
							| 
									
										
										
										
											2005-06-06 05:08:14 +00:00
										 |  |  |  * emacs_mode -m  -DVar=Value  reserved memory for alloc IF DEBUG -p    if you | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |  * want to check out startup IF MAC -mpw  if we are using the mpw | 
					
						
							|  |  |  |  * shell | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2002-06-18 17:02:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | static int | 
					
						
							| 
									
										
										
										
											2002-10-30 17:27:19 +00:00
										 |  |  | parse_yap_arguments(int argc, char *argv[], YAP_init_args *iap) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | { | 
					
						
							|  |  |  |   char *p; | 
					
						
							| 
									
										
										
										
											2008-03-25 22:03:14 +00:00
										 |  |  | #ifdef USE_SYSTEM_MALLOC
 | 
					
						
							| 
									
										
										
										
											2004-01-23 02:23:51 +00:00
										 |  |  |   int BootMode = YAP_FULL_BOOT_FROM_PROLOG; | 
					
						
							|  |  |  | #else
 | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |   int BootMode = YAP_BOOT_FROM_SAVED_CODE; | 
					
						
							| 
									
										
										
										
											2006-02-08 17:29:55 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef MYDDAS_MYSQL
 | 
					
						
							|  |  |  |   char *myddas_temp; | 
					
						
							| 
									
										
										
										
											2004-01-23 02:23:51 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2009-03-27 15:15:54 +00:00
										 |  |  |   unsigned long int *ssize; | 
					
						
							| 
									
										
										
										
											2009-05-10 13:36:55 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |   while (--argc > 0) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       p = *++argv; | 
					
						
							|  |  |  |       if (*p == '-') | 
					
						
							|  |  |  | 	switch (*++p) | 
					
						
							|  |  |  | 	  { | 
					
						
							|  |  |  | 	  case 'b': | 
					
						
							|  |  |  | 	    BootMode = YAP_BOOT_FROM_PROLOG; | 
					
						
							| 
									
										
										
										
											2002-10-30 17:27:19 +00:00
										 |  |  | 	    iap->YapPrologBootFile = *++argv; | 
					
						
							|  |  |  | 	    argc--; | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 	    break; | 
					
						
							|  |  |  |           case '?': | 
					
						
							| 
									
										
										
										
											2002-12-06 20:03:26 +00:00
										 |  |  | 	    print_usage(); | 
					
						
							| 
									
										
										
										
											2002-06-18 17:02:19 +00:00
										 |  |  |             exit(EXIT_SUCCESS); | 
					
						
							| 
									
										
										
										
											2008-03-13 18:41:52 +00:00
										 |  |  |           case 'q': | 
					
						
							|  |  |  | 	    iap->QuietMode = TRUE; | 
					
						
							|  |  |  | 	    break; | 
					
						
							| 
									
										
										
										
											2011-04-29 14:59:17 +01:00
										 |  |  | #if defined(YAPOR_COPY) || defined(YAPOR_COW) || defined(YAPOR_SBA) || defined(YAPOR_THREADS)
 | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 	  case 'w': | 
					
						
							| 
									
										
										
										
											2002-10-30 17:27:19 +00:00
										 |  |  | 	    ssize = &(iap->NumberWorkers); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 	    goto GetSize; | 
					
						
							|  |  |  |           case 'd': | 
					
						
							| 
									
										
										
										
											2009-10-23 09:09:16 +01:00
										 |  |  | 	    if (!strcmp("dump-runtime-variables",p)) | 
					
						
							|  |  |  | 		return dump_runtime_variables(); | 
					
						
							| 
									
										
										
										
											2002-10-30 17:27:19 +00:00
										 |  |  |             ssize = &(iap->DelayedReleaseLoad); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 	    goto GetSize; | 
					
						
							| 
									
										
										
										
											2009-10-23 09:09:16 +01:00
										 |  |  | #else
 | 
					
						
							| 
									
										
										
										
											2009-10-23 14:22:17 +01:00
										 |  |  |           case 'd': | 
					
						
							| 
									
										
										
										
											2009-10-23 09:09:16 +01:00
										 |  |  | 	    if (!strcmp("dump-runtime-variables",p)) | 
					
						
							|  |  |  | 		return dump_runtime_variables(); | 
					
						
							| 
									
										
										
										
											2011-04-29 14:59:17 +01:00
										 |  |  | #endif /* YAPOR_COPY || YAPOR_COW || YAPOR_SBA || YAPOR_THREADS */
 | 
					
						
							| 
									
										
										
										
											2010-06-17 00:34:57 +01:00
										 |  |  | 	  case 'F': | 
					
						
							|  |  |  | 	    /* just ignore for now */ | 
					
						
							|  |  |  | 	      argc--; | 
					
						
							|  |  |  | 	      argv++; | 
					
						
							|  |  |  | 	      break; | 
					
						
							| 
									
										
										
										
											2002-01-27 20:40:10 +00:00
										 |  |  | 	  case 'f': | 
					
						
							| 
									
										
										
										
											2009-06-08 20:23:55 -05:00
										 |  |  | 	    if (argc > 1 && argv[1][0] != '-') { | 
					
						
							| 
									
										
										
										
											2008-08-24 00:30:25 +01:00
										 |  |  | 	      argc--; | 
					
						
							|  |  |  | 	      argv++; | 
					
						
							|  |  |  | 	      if (!strcmp(*argv,"none")) { | 
					
						
							|  |  |  | 		iap->FastBoot = TRUE; | 
					
						
							|  |  |  | 	      } else { | 
					
						
							|  |  |  | 		iap->YapPrologRCFile = *argv; | 
					
						
							|  |  |  | 	      } | 
					
						
							|  |  |  | 	      break; | 
					
						
							|  |  |  | 	    } | 
					
						
							| 
									
										
										
										
											2002-10-30 17:27:19 +00:00
										 |  |  | 	    iap->FastBoot = TRUE; | 
					
						
							| 
									
										
										
										
											2002-01-27 20:40:10 +00:00
										 |  |  | 	    break; | 
					
						
							| 
									
										
										
										
											2006-02-08 17:29:55 +00:00
										 |  |  | #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; | 
					
						
							|  |  |  | 	      } | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2009-04-08 00:32:36 +01:00
										 |  |  |          // 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; | 
					
						
							| 
									
										
										
										
											2009-05-10 13:36:55 -04:00
										 |  |  | 	  case 'G': | 
					
						
							|  |  |  | 	    ssize = &(iap->MaxGlobalSize); | 
					
						
							|  |  |  | 	    goto GetSize; | 
					
						
							|  |  |  | 	    break; | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 	  case 's': | 
					
						
							| 
									
										
										
										
											2002-06-18 04:30:57 +00:00
										 |  |  | 	  case 'S': | 
					
						
							| 
									
										
										
										
											2002-10-30 17:27:19 +00:00
										 |  |  | 	    ssize = &(iap->StackSize); | 
					
						
							| 
									
										
										
										
											2011-04-29 14:59:17 +01:00
										 |  |  | #if defined(YAPOR_COPY) || defined(YAPOR_COW) || defined(YAPOR_SBA) || defined(YAPOR_THREADS)
 | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 	    if (p[1] == 'l') { | 
					
						
							|  |  |  | 	      p++; | 
					
						
							| 
									
										
										
										
											2002-10-30 17:27:19 +00:00
										 |  |  | 	      ssize = &(iap->SchedulerLoop); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 	    } | 
					
						
							| 
									
										
										
										
											2011-04-29 14:59:17 +01:00
										 |  |  | #endif /* YAPOR_COPY || YAPOR_COW || YAPOR_SBA || YAPOR_THREADS */
 | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 	    goto GetSize; | 
					
						
							| 
									
										
										
										
											2009-03-27 15:15:54 +00:00
										 |  |  | 	  case 'a': | 
					
						
							|  |  |  | 	  case 'A': | 
					
						
							|  |  |  | 	    ssize = &(iap->AttsSize); | 
					
						
							|  |  |  | 	    goto GetSize; | 
					
						
							| 
									
										
										
										
											2002-06-18 04:30:57 +00:00
										 |  |  | 	  case 'T': | 
					
						
							| 
									
										
										
										
											2009-05-10 13:36:55 -04:00
										 |  |  | 	    ssize = &(iap->MaxTrailSize); | 
					
						
							|  |  |  | 	    goto get_trail_size; | 
					
						
							|  |  |  | 	  case 't': | 
					
						
							| 
									
										
										
										
											2002-10-30 17:27:19 +00:00
										 |  |  | 	    ssize = &(iap->TrailSize); | 
					
						
							| 
									
										
										
										
											2008-04-11 16:30:28 +00:00
										 |  |  | #ifdef TABLING
 | 
					
						
							| 
									
										
										
										
											2005-08-04 15:45:56 +00:00
										 |  |  | 	    if (p[1] == 's') { | 
					
						
							|  |  |  | 	      p++; | 
					
						
							|  |  |  | 	      ssize = &(iap->MaxTableSpaceSize); | 
					
						
							|  |  |  | 	    } | 
					
						
							| 
									
										
										
										
											2008-08-24 00:30:25 +01:00
										 |  |  | #endif /* TABLING */
 | 
					
						
							| 
									
										
										
										
											2009-05-10 13:36:55 -04:00
										 |  |  | 	  get_trail_size: | 
					
						
							| 
									
										
										
										
											2008-08-23 17:26:41 +01:00
										 |  |  | 	    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); | 
					
						
							|  |  |  | 		  } | 
					
						
							|  |  |  | 	      } | 
					
						
							|  |  |  | 	    { | 
					
						
							| 
									
										
										
										
											2009-03-27 15:15:54 +00:00
										 |  |  | 	      unsigned long int i = 0, ch; | 
					
						
							| 
									
										
										
										
											2008-08-23 17:26:41 +01:00
										 |  |  | 	      while ((ch = *p++) >= '0' && ch <= '9') | 
					
						
							|  |  |  | 		i = i * 10 + ch - '0'; | 
					
						
							| 
									
										
										
										
											2008-08-23 17:48:38 +01:00
										 |  |  | 	      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; | 
					
						
							|  |  |  | 	      } | 
					
						
							| 
									
										
										
										
											2008-08-23 17:26:41 +01:00
										 |  |  | 	      if (ch) { | 
					
						
							|  |  |  | 		iap->YapPrologTopLevelGoal = add_end_dot(*argv); | 
					
						
							|  |  |  | 	      } else { | 
					
						
							|  |  |  | 		*ssize = i; | 
					
						
							|  |  |  | 	      } | 
					
						
							|  |  |  | 	    } | 
					
						
							|  |  |  | 	    break; | 
					
						
							|  |  |  | 	  case 'h': | 
					
						
							|  |  |  | 	  case 'H': | 
					
						
							|  |  |  | 	    ssize = &(iap->HeapSize); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 	  GetSize: | 
					
						
							|  |  |  | 	    if (*++p == '\0') | 
					
						
							|  |  |  | 	      { | 
					
						
							|  |  |  | 		if (argc > 1) | 
					
						
							|  |  |  | 		  --argc, p = *++argv; | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | 		  { | 
					
						
							| 
									
										
										
										
											2002-06-18 04:27:33 +00:00
										 |  |  | 		    fprintf(stderr,"[ YAP unrecoverable error: missing size in flag %s ]", argv[0]); | 
					
						
							| 
									
										
										
										
											2002-12-06 20:03:26 +00:00
										 |  |  | 		    print_usage(); | 
					
						
							| 
									
										
										
										
											2002-06-18 17:02:19 +00:00
										 |  |  | 		    exit(EXIT_FAILURE); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 		  } | 
					
						
							|  |  |  | 	      } | 
					
						
							|  |  |  | 	    { | 
					
						
							| 
									
										
										
										
											2009-03-27 15:15:54 +00:00
										 |  |  | 	      unsigned long int i = 0, ch; | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 	      while ((ch = *p++) >= '0' && ch <= '9') | 
					
						
							|  |  |  | 		i = i * 10 + ch - '0'; | 
					
						
							| 
									
										
										
										
											2008-08-23 17:48:38 +01:00
										 |  |  | 	      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; | 
					
						
							|  |  |  | 	      } | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 	      if (ch) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 		  fprintf(stderr,"[ YAP unrecoverable error: illegal size specification %s ]", argv[-1]); | 
					
						
							| 
									
										
										
										
											2002-09-09 17:40:12 +00:00
										 |  |  | 		  YAP_Exit(1); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	      *ssize = i; | 
					
						
							|  |  |  | 	    } | 
					
						
							|  |  |  | 	    break; | 
					
						
							|  |  |  | #ifdef DEBUG
 | 
					
						
							| 
									
										
										
										
											2005-10-28 17:55:30 +00:00
										 |  |  | 	  case 'P': | 
					
						
							| 
									
										
										
										
											2002-09-09 17:40:12 +00:00
										 |  |  | 	    YAP_SetOutputMessage(); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 	    output_msg = TRUE; | 
					
						
							|  |  |  | 	    break; | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 	  case 'L': | 
					
						
							| 
									
										
										
										
											2008-10-16 17:19:14 +01:00
										 |  |  | 	    if (p[1] && p[1] >= '0' && p[1] <= '9') /* hack to emulate SWI's L local option */ | 
					
						
							| 
									
										
										
										
											2009-05-10 13:36:55 -04:00
										 |  |  | 	      { | 
					
						
							|  |  |  | 		ssize = &(iap->MaxStackSize); | 
					
						
							|  |  |  | 		goto GetSize; | 
					
						
							|  |  |  | 	      } | 
					
						
							| 
									
										
										
										
											2008-03-13 18:41:52 +00:00
										 |  |  | 	    iap->QuietMode = TRUE; | 
					
						
							|  |  |  | 	    iap->HaltAfterConsult = TRUE; | 
					
						
							| 
									
										
										
										
											2001-05-28 19:54:53 +00:00
										 |  |  | 	  case 'l': | 
					
						
							| 
									
										
										
										
											2006-06-02 15:21:35 +00:00
										 |  |  |            p++; | 
					
						
							|  |  |  | 	   if (!*++argv) { | 
					
						
							| 
									
										
										
										
											2008-10-16 17:19:14 +01:00
										 |  |  | 	     fprintf(stderr,"%% YAP unrecoverable error: missing load file name\n"); | 
					
						
							| 
									
										
										
										
											2006-06-02 15:21:35 +00:00
										 |  |  | 	     exit(1); | 
					
						
							| 
									
										
										
										
											2008-10-16 17:19:14 +01:00
										 |  |  | 	   } else if (!strcmp("--",*argv)) { | 
					
						
							|  |  |  | 	     /* shell script, the next entry should be the file itself */ | 
					
						
							|  |  |  | 	     iap->YapPrologRCFile = argv[1]; | 
					
						
							|  |  |  | 	     argc = 1; | 
					
						
							|  |  |  | 	     break; | 
					
						
							| 
									
										
										
										
											2006-06-02 15:21:35 +00:00
										 |  |  | 	   } 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 */ | 
					
						
							| 
									
										
										
										
											2005-10-21 16:09:03 +00:00
										 |  |  | 	  case 'g': | 
					
						
							|  |  |  | 	    if ((*argv)[0] == '\0')  | 
					
						
							| 
									
										
										
										
											2005-10-28 17:55:30 +00:00
										 |  |  | 	      iap->YapPrologGoal = *argv; | 
					
						
							| 
									
										
										
										
											2005-10-21 16:09:03 +00:00
										 |  |  | 	    else { | 
					
						
							|  |  |  | 	      argc--; | 
					
						
							|  |  |  | 	      if (argc == 0) { | 
					
						
							| 
									
										
										
										
											2005-10-28 17:55:30 +00:00
										 |  |  | 		fprintf(stderr," [ YAP unrecoverable error: missing initialization goal for option 'g' ]\n"); | 
					
						
							| 
									
										
										
										
											2005-10-21 16:09:03 +00:00
										 |  |  | 		exit(EXIT_FAILURE); | 
					
						
							|  |  |  | 	      } | 
					
						
							|  |  |  | 	      argv++; | 
					
						
							|  |  |  | 	      iap->YapPrologGoal = *argv; | 
					
						
							|  |  |  | 	    } | 
					
						
							|  |  |  | 	    break; | 
					
						
							|  |  |  | 	    /* run goal as top-level */ | 
					
						
							|  |  |  | 	  case 'z': | 
					
						
							|  |  |  | 	    if ((*argv)[0] == '\0')  | 
					
						
							| 
									
										
										
										
											2005-10-28 17:55:30 +00:00
										 |  |  | 	      iap->YapPrologTopLevelGoal = *argv; | 
					
						
							| 
									
										
										
										
											2005-10-21 16:09:03 +00:00
										 |  |  | 	    else { | 
					
						
							|  |  |  | 	      argc--; | 
					
						
							|  |  |  | 	      if (argc == 0) { | 
					
						
							| 
									
										
										
										
											2005-10-28 17:55:30 +00:00
										 |  |  | 		fprintf(stderr," [ YAP unrecoverable error: missing goal for option 'z' ]\n"); | 
					
						
							| 
									
										
										
										
											2005-10-21 16:09:03 +00:00
										 |  |  | 		exit(EXIT_FAILURE); | 
					
						
							|  |  |  | 	      } | 
					
						
							|  |  |  | 	      argv++; | 
					
						
							| 
									
										
										
										
											2008-08-23 17:26:41 +01:00
										 |  |  | 	      iap->YapPrologTopLevelGoal = add_end_dot(*argv); | 
					
						
							| 
									
										
										
										
											2005-10-21 16:09:03 +00:00
										 |  |  | 	    } | 
					
						
							|  |  |  | 	    break; | 
					
						
							| 
									
										
										
										
											2005-10-28 17:55:30 +00:00
										 |  |  | 	  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; | 
					
						
							| 
									
										
										
										
											2005-06-06 05:08:14 +00:00
										 |  |  | 	    /* 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 */ | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 	  case '-': | 
					
						
							|  |  |  | 	    /* skip remaining arguments */ | 
					
						
							|  |  |  | 	    argc = 1; | 
					
						
							|  |  |  | 	    break; | 
					
						
							|  |  |  | 	  default: | 
					
						
							|  |  |  | 	    { | 
					
						
							| 
									
										
										
										
											2006-02-08 17:29:55 +00:00
										 |  |  | #ifdef MYDDAS_MYSQL
 | 
					
						
							|  |  |  | 	    myddas_error_print : | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 	      fprintf(stderr,"[ YAP unrecoverable error: unknown switch -%c ]\n", *p); | 
					
						
							| 
									
										
										
										
											2006-02-08 17:29:55 +00:00
										 |  |  | #ifdef MYDDAS_MYSQL
 | 
					
						
							|  |  |  | 	    myddas_error : | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2002-12-06 20:03:26 +00:00
										 |  |  | 	      print_usage(); | 
					
						
							| 
									
										
										
										
											2002-06-18 17:02:19 +00:00
										 |  |  | 	      exit(EXIT_FAILURE); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 	    } | 
					
						
							|  |  |  | 	  } | 
					
						
							|  |  |  |       else { | 
					
						
							| 
									
										
										
										
											2002-10-30 17:27:19 +00:00
										 |  |  | 	iap->SavedState = p; | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2006-02-08 17:29:55 +00:00
										 |  |  | #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
 | 
					
						
							| 
									
										
										
										
											2008-03-27 00:41:33 +00:00
										 |  |  |   return BootMode; | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int | 
					
						
							| 
									
										
										
										
											2002-10-30 17:27:19 +00:00
										 |  |  | init_standard_system(int argc, char *argv[], YAP_init_args *iap) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | { | 
					
						
							|  |  |  |   int BootMode; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-30 17:27:19 +00:00
										 |  |  |   iap->SavedState = NULL; | 
					
						
							|  |  |  |   iap->HeapSize = 0; | 
					
						
							|  |  |  |   iap->StackSize = 0; | 
					
						
							|  |  |  |   iap->TrailSize = 0; | 
					
						
							| 
									
										
										
										
											2009-03-31 13:51:44 +01:00
										 |  |  |   iap->AttsSize = 0; | 
					
						
							| 
									
										
										
										
											2009-05-10 13:36:55 -04:00
										 |  |  |   iap->MaxAttsSize = 0; | 
					
						
							|  |  |  |   iap->MaxHeapSize = 0; | 
					
						
							|  |  |  |   iap->MaxStackSize = 0; | 
					
						
							|  |  |  |   iap->MaxGlobalSize = 0; | 
					
						
							|  |  |  |   iap->MaxTrailSize = 0; | 
					
						
							| 
									
										
										
										
											2002-10-30 17:27:19 +00:00
										 |  |  |   iap->YapLibDir = NULL; | 
					
						
							|  |  |  |   iap->YapPrologBootFile = NULL; | 
					
						
							| 
									
										
										
										
											2004-01-23 02:23:51 +00:00
										 |  |  |   iap->YapPrologInitFile = NULL; | 
					
						
							| 
									
										
										
										
											2002-10-30 17:27:19 +00:00
										 |  |  |   iap->YapPrologRCFile = NULL; | 
					
						
							| 
									
										
										
										
											2005-10-21 16:09:03 +00:00
										 |  |  |   iap->YapPrologGoal = NULL; | 
					
						
							|  |  |  |   iap->YapPrologTopLevelGoal = NULL; | 
					
						
							| 
									
										
										
										
											2005-10-28 17:55:30 +00:00
										 |  |  |   iap->YapPrologAddPath = NULL; | 
					
						
							| 
									
										
										
										
											2002-10-30 17:27:19 +00:00
										 |  |  |   iap->HaltAfterConsult = FALSE; | 
					
						
							|  |  |  |   iap->FastBoot = FALSE; | 
					
						
							| 
									
										
										
										
											2005-08-04 15:45:56 +00:00
										 |  |  |   iap->MaxTableSpaceSize = 0; | 
					
						
							| 
									
										
										
										
											2002-12-06 20:03:26 +00:00
										 |  |  |   iap->NumberWorkers = DEFAULT_NUMBERWORKERS; | 
					
						
							|  |  |  |   iap->SchedulerLoop = DEFAULT_SCHEDULERLOOP; | 
					
						
							|  |  |  |   iap->DelayedReleaseLoad = DEFAULT_DELAYEDRELEASELOAD; | 
					
						
							| 
									
										
										
										
											2004-11-18 22:32:40 +00:00
										 |  |  |   iap->PrologShouldHandleInterrupts = TRUE; | 
					
						
							| 
									
										
										
										
											2009-04-08 00:32:36 +01:00
										 |  |  |   iap->ExecutionMode = YAPC_INTERPRETED; | 
					
						
							| 
									
										
										
										
											2002-10-30 17:27:19 +00:00
										 |  |  |   iap->Argc = argc; | 
					
						
							|  |  |  |   iap->Argv = argv; | 
					
						
							| 
									
										
										
										
											2006-02-08 17:29:55 +00:00
										 |  |  | #ifdef MYDDAS_MYSQL
 | 
					
						
							|  |  |  |   iap->myddas = 0; | 
					
						
							|  |  |  |   iap->myddas_user = NULL; | 
					
						
							|  |  |  |   iap->myddas_pass = NULL; | 
					
						
							|  |  |  |   iap->myddas_db = NULL; | 
					
						
							|  |  |  |   iap->myddas_host = NULL; | 
					
						
							|  |  |  | #endif  
 | 
					
						
							| 
									
										
										
										
											2005-03-02 18:35:49 +00:00
										 |  |  |   iap->ErrorNo = 0; | 
					
						
							|  |  |  |   iap->ErrorCause = NULL; | 
					
						
							| 
									
										
										
										
											2008-03-13 18:41:52 +00:00
										 |  |  |   iap->QuietMode = FALSE; | 
					
						
							| 
									
										
										
										
											2002-10-30 17:27:19 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   BootMode = parse_yap_arguments(argc,argv,iap); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   /* init memory */ | 
					
						
							| 
									
										
										
										
											2004-01-23 02:23:51 +00:00
										 |  |  |   if (BootMode == YAP_BOOT_FROM_PROLOG || | 
					
						
							|  |  |  |       BootMode == YAP_FULL_BOOT_FROM_PROLOG) { | 
					
						
							| 
									
										
										
										
											2005-03-09 06:35:52 +00:00
										 |  |  |     int NewBootMode = YAP_Init(iap); | 
					
						
							|  |  |  |     if (NewBootMode != YAP_BOOT_FROM_PROLOG && BootMode != YAP_FULL_BOOT_FROM_PROLOG) | 
					
						
							|  |  |  |       BootMode = NewBootMode; | 
					
						
							| 
									
										
										
										
											2002-10-30 17:27:19 +00:00
										 |  |  |   } else { | 
					
						
							|  |  |  |     BootMode = YAP_Init(iap); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2005-03-02 18:35:49 +00:00
										 |  |  |   if (iap->ErrorNo) { | 
					
						
							|  |  |  |     /* boot failed */ | 
					
						
							|  |  |  |     YAP_Error(iap->ErrorNo,0L,iap->ErrorCause); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2005-03-09 06:35:52 +00:00
										 |  |  |   return BootMode; | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							| 
									
										
										
										
											2002-10-30 17:27:19 +00:00
										 |  |  | exec_top_level(int BootMode, YAP_init_args *iap) | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2002-09-09 17:40:12 +00:00
										 |  |  |   YAP_Term atomfalse; | 
					
						
							|  |  |  |   YAP_Atom livegoal; | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   if (BootMode == YAP_BOOT_FROM_SAVED_STACKS) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       /* continue executing from the frozen stacks */ | 
					
						
							| 
									
										
										
										
											2002-09-09 17:40:12 +00:00
										 |  |  |       YAP_ContinueGoal(); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2007-03-22 11:12:22 +00:00
										 |  |  |   /* the top-level is now ready */ | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   /* read it before case someone, that is, Ashwin, hides
 | 
					
						
							|  |  |  |      the atom false away ;-). | 
					
						
							|  |  |  |   */ | 
					
						
							| 
									
										
										
										
											2009-10-23 16:50:43 +01:00
										 |  |  |   livegoal = YAP_FullLookupAtom("$live"); | 
					
						
							| 
									
										
										
										
											2003-02-19 16:43:24 +00:00
										 |  |  |   atomfalse = YAP_MkAtomTerm (YAP_FullLookupAtom("$false")); | 
					
						
							| 
									
										
										
										
											2002-09-09 17:40:12 +00:00
										 |  |  |   while (YAP_GetValue (livegoal) != atomfalse) { | 
					
						
							| 
									
										
										
										
											2002-10-08 14:32:42 +00:00
										 |  |  |     YAP_Reset(); | 
					
						
							| 
									
										
										
										
											2002-09-09 17:40:12 +00:00
										 |  |  |     do_top_goal (YAP_MkAtomTerm (livegoal)); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2002-09-09 17:40:12 +00:00
										 |  |  |   YAP_Exit(EXIT_SUCCESS); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef LIGHT
 | 
					
						
							|  |  |  | int | 
					
						
							|  |  |  | _main (int argc, char **argv) | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  | int | 
					
						
							|  |  |  | main (int argc, char **argv) | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   int BootMode; | 
					
						
							| 
									
										
										
										
											2002-10-30 17:27:19 +00:00
										 |  |  |   YAP_init_args init_args; | 
					
						
							| 
									
										
										
										
											2005-06-06 05:08:14 +00:00
										 |  |  |   int i; | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-11-18 18:52:41 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-30 17:27:19 +00:00
										 |  |  |   BootMode = init_standard_system(argc, argv, &init_args); | 
					
						
							| 
									
										
										
										
											2005-03-02 18:35:49 +00:00
										 |  |  |   if (BootMode == YAP_BOOT_ERROR) { | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  |     fprintf(stderr,"[ FATAL ERROR: could not find saved state ]\n"); | 
					
						
							|  |  |  |     exit(1); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2005-06-06 05:08:14 +00:00
										 |  |  |   /* Begin preprocessor code */ | 
					
						
							| 
									
										
										
										
											2010-11-26 18:02:44 +00:00
										 |  |  |   if (BootMode != YAP_BOOT_FROM_SAVED_STACKS) { | 
					
						
							| 
									
										
										
										
											2005-06-06 05:08:14 +00:00
										 |  |  |     // load the module
 | 
					
						
							|  |  |  |     YAP_Term mod_arg[1]; | 
					
						
							|  |  |  |     mod_arg[0] = YAP_MkAtomTerm(YAP_LookupAtom("ypp")); | 
					
						
							| 
									
										
										
										
											2008-06-04 13:58:42 +00:00
										 |  |  |     YAP_RunGoalOnce(YAP_MkApplTerm(YAP_MkFunctor(YAP_LookupAtom("use_module"),1), 1, mod_arg));  | 
					
						
							| 
									
										
										
										
											2005-06-06 05:08:14 +00:00
										 |  |  |     // process the definitions
 | 
					
						
							|  |  |  |     for(i=0;i<def_c;++i) { | 
					
						
							|  |  |  |       YAP_Term t_args[2],t_goal; | 
					
						
							|  |  |  |       t_args[0] = YAP_MkAtomTerm(YAP_LookupAtom(def_var[i])); | 
					
						
							|  |  |  |       t_args[1] = YAP_MkAtomTerm(YAP_LookupAtom(def_value[i]));  | 
					
						
							|  |  |  |       t_goal  = YAP_MkApplTerm(YAP_MkFunctor(YAP_LookupAtom("ypp_define"),2), 2, t_args);  | 
					
						
							| 
									
										
										
										
											2008-06-04 13:58:42 +00:00
										 |  |  |       YAP_RunGoalOnce(t_goal); | 
					
						
							| 
									
										
										
										
											2005-06-06 05:08:14 +00:00
										 |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2005-08-17 13:35:52 +00:00
										 |  |  |   YAP_ClearExceptions(); | 
					
						
							| 
									
										
										
										
											2005-06-06 05:08:14 +00:00
										 |  |  |   /* End preprocessor code */ | 
					
						
							| 
									
										
										
										
											2003-11-05 18:31:49 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-30 17:27:19 +00:00
										 |  |  |   exec_top_level(BootMode, &init_args); | 
					
						
							| 
									
										
										
										
											2001-04-09 19:54:03 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   return(0); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 |