home *** CD-ROM | disk | FTP | other *** search
/ Vectronix 2 / VECTRONIX2.iso / FILES_01 / X_PROLOG.LZH / X_PROLOG / SOURCES / PROLOG.C < prev    next >
C/C++ Source or Header  |  1990-08-13  |  3KB  |  131 lines

  1. /*
  2.  *        X PROLOG  Vers. 2.0
  3.  *
  4.  *
  5.  *    Written by :     Andreas Toenne
  6.  *            CS Dept. , IRB
  7.  *            University of Dortmund, W-Germany
  8.  *            <at@unido.uucp>
  9.  *            <....!seismo!unido!at>
  10.  *            <at@unido.bitnet>
  11.  *
  12.  *    Copyright :    This software is copyrighted by Andreas Toenne.
  13.  *            Permission is granted hereby to copy the entire
  14.  *            package including this copyright notice without fee.
  15.  *
  16.  */
  17.  
  18. #include "prolog.h"
  19. #include "global.h"
  20.  
  21. #define USAGE {fprintf(stderr,"Usage: xprolog [-pcsrft<value>] image\n"); exit(1);}
  22. #define OPTVALUE(i,x) if (!(x=atol(argv[i]+2))) USAGE
  23.  
  24. #ifdef ATARI            /* define stacksize (MWC) */
  25. long _stksize = 32000;
  26. #endif
  27.  
  28. extern void alloc_area();            /* memory */
  29. extern term *term_copy();            /* terms */
  30. extern functor *get_functor();            /* functor */
  31. extern void build_bis();            /* builtin */
  32. extern void init_std();                /* init */
  33. extern void init_streams();            /* init */
  34. extern short bootload();            /* init */
  35. extern term *read_term();            /* reader */
  36. extern void display();                /* reader */
  37. extern void push_env();                /* memory */
  38. extern void push_frame();            /* memory */
  39. extern short read_image();            /* image */
  40.  
  41. extern char *getenv();
  42. extern long atol();
  43.  
  44. main(argc, argv, envp)
  45. int argc;
  46. char *argv[];
  47. char **envp;
  48. {
  49.     term *t;
  50.     long pr_size = 30000L;        /* default protostack size */
  51.     long cp_size = 50000L;        /* default copystack size */
  52.     long st_size = 50000L;        /* default stack size */
  53.     long tr_size = 800L;        /* default # of trails */
  54.     long cl_size = 1000L;        /* default # of clauses */
  55.     long fu_size = 30000L;        /* default space of functors */
  56.     short i;
  57.     short image = FALSE;        /* no image */
  58.     
  59.     init_cputime();
  60.     booting = FALSE;
  61.  
  62.     /* check the program's enviroment */
  63.     
  64.     enviroment = envp;
  65.     if (!(shell=getenv("SHELL")))
  66.         shell = SHELL;
  67.  
  68.     dodebug = FALSE;            /* silence please */
  69.  
  70. /*
  71.  *    Parse the arguments
  72.  *    -p<protostack size>
  73.  *    -c<copystack size>
  74.  *    -s<stack size>
  75.  *    -r<clauses(rules)>
  76.  *    -f<functors(atoms)>
  77.  *    -t<trails>
  78.  *
  79.  *    stprolog [options] [imagefile]
  80.  */
  81.  
  82.     for (i=1; i<argc; i++)        /* first scan options */
  83.     {
  84.         if (argv[i][0] != '-')    /* no option */
  85.         {
  86.             image = i;
  87.             continue;
  88.         }
  89.         switch(argv[i][1])
  90.         {
  91.             case 'p': OPTVALUE(i, pr_size); break;
  92.             case 'c': OPTVALUE(i, cp_size); break;
  93.             case 't': OPTVALUE(i, tr_size); break;
  94.             case 's': OPTVALUE(i, st_size); break;
  95.             case 'r': OPTVALUE(i, cl_size); break;
  96.             case 'f': OPTVALUE(i, fu_size); break;
  97.             default: USAGE;
  98.         }
  99.     }
  100.  
  101.     if (image)                /* an image was given */
  102.     {
  103.         read_image(argv[image]);
  104.     }
  105.     else
  106.     {
  107.         alloc_area(fu_size, cl_size, tr_size,pr_size,cp_size,st_size);
  108.         init_std();            /* initialise std values */
  109.         build_bis();            /* create built in's */    
  110.     }
  111.     init_streams();            /* clear all streams */        
  112.     prompt = term_copy(get_functor("?- ", 0));
  113.  
  114.     if (!image)                /* read crucial definitions */
  115.     {
  116.         booting = TRUE;
  117.         push_env(NULL, NULL);
  118.         push_frame(Topenv, MAXVARS);
  119.         bootload("_boot");
  120.         Topenv = Preenv = (env *)0L;
  121.         stacktop = stack;
  122.         booting = FALSE;
  123.     }
  124.     
  125.     t = term_copy(COMMAFUNCTOR);        /* create main goal */
  126.     ARG(t,1) = term_copy(get_functor("main", 0));
  127.     ARG(t,2) = term_copy(get_functor("true", 0));
  128.     
  129.     machine(t);                /* start things */
  130. }
  131.