home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Vectronix 2
/
VECTRONIX2.iso
/
FILES_01
/
X_PROLOG.LZH
/
X_PROLOG
/
SOURCES
/
PROLOG.C
< prev
next >
Wrap
C/C++ Source or Header
|
1990-08-13
|
3KB
|
131 lines
/*
* X PROLOG Vers. 2.0
*
*
* Written by : Andreas Toenne
* CS Dept. , IRB
* University of Dortmund, W-Germany
* <at@unido.uucp>
* <....!seismo!unido!at>
* <at@unido.bitnet>
*
* Copyright : This software is copyrighted by Andreas Toenne.
* Permission is granted hereby to copy the entire
* package including this copyright notice without fee.
*
*/
#include "prolog.h"
#include "global.h"
#define USAGE {fprintf(stderr,"Usage: xprolog [-pcsrft<value>] image\n"); exit(1);}
#define OPTVALUE(i,x) if (!(x=atol(argv[i]+2))) USAGE
#ifdef ATARI /* define stacksize (MWC) */
long _stksize = 32000;
#endif
extern void alloc_area(); /* memory */
extern term *term_copy(); /* terms */
extern functor *get_functor(); /* functor */
extern void build_bis(); /* builtin */
extern void init_std(); /* init */
extern void init_streams(); /* init */
extern short bootload(); /* init */
extern term *read_term(); /* reader */
extern void display(); /* reader */
extern void push_env(); /* memory */
extern void push_frame(); /* memory */
extern short read_image(); /* image */
extern char *getenv();
extern long atol();
main(argc, argv, envp)
int argc;
char *argv[];
char **envp;
{
term *t;
long pr_size = 30000L; /* default protostack size */
long cp_size = 50000L; /* default copystack size */
long st_size = 50000L; /* default stack size */
long tr_size = 800L; /* default # of trails */
long cl_size = 1000L; /* default # of clauses */
long fu_size = 30000L; /* default space of functors */
short i;
short image = FALSE; /* no image */
init_cputime();
booting = FALSE;
/* check the program's enviroment */
enviroment = envp;
if (!(shell=getenv("SHELL")))
shell = SHELL;
dodebug = FALSE; /* silence please */
/*
* Parse the arguments
* -p<protostack size>
* -c<copystack size>
* -s<stack size>
* -r<clauses(rules)>
* -f<functors(atoms)>
* -t<trails>
*
* stprolog [options] [imagefile]
*/
for (i=1; i<argc; i++) /* first scan options */
{
if (argv[i][0] != '-') /* no option */
{
image = i;
continue;
}
switch(argv[i][1])
{
case 'p': OPTVALUE(i, pr_size); break;
case 'c': OPTVALUE(i, cp_size); break;
case 't': OPTVALUE(i, tr_size); break;
case 's': OPTVALUE(i, st_size); break;
case 'r': OPTVALUE(i, cl_size); break;
case 'f': OPTVALUE(i, fu_size); break;
default: USAGE;
}
}
if (image) /* an image was given */
{
read_image(argv[image]);
}
else
{
alloc_area(fu_size, cl_size, tr_size,pr_size,cp_size,st_size);
init_std(); /* initialise std values */
build_bis(); /* create built in's */
}
init_streams(); /* clear all streams */
prompt = term_copy(get_functor("?- ", 0));
if (!image) /* read crucial definitions */
{
booting = TRUE;
push_env(NULL, NULL);
push_frame(Topenv, MAXVARS);
bootload("_boot");
Topenv = Preenv = (env *)0L;
stacktop = stack;
booting = FALSE;
}
t = term_copy(COMMAFUNCTOR); /* create main goal */
ARG(t,1) = term_copy(get_functor("main", 0));
ARG(t,2) = term_copy(get_functor("true", 0));
machine(t); /* start things */
}