Wild Life  2.29
 All Data Structures Files Functions Variables Typedefs Macros
Functions | Variables
life.c File Reference

life main More...

Go to the source code of this file.

Functions

int main (int argc, char *argv[])
 main More...
 

Variables

char * numbers [21]
 
long set_extra_args [6] = {set_empty, set_1, set_2, set_1_2, set_1_2_3, set_1_2_3_4}
 

Detailed Description

life main

Definition in file life.c.

Function Documentation

int main ( int  argc,
char *  argv[] 
)

main

int main(int argc,char *argv[])

Parameters
intargc
char*argv[]

MAIN(argc,argv) This routine contains the Read-Solve-Print loop.

Definition at line 34 of file life.c.

References arg_c, arg_v, assert, assert_clause(), assert_first, assert_ok, begin_terminal_io(), DEFRULES, encode_types(), end_terminal_io(), env, eof, Errorline(), exit_if_true(), exit_life(), FACT, FALSE, file_date, GetBoolOption(), goal_count, heap_copy_string(), ignore_eff, infoline(), init_built_in_types(), init_copy(), init_interrupt(), init_io(), init_memory(), init_modules(), init_print(), init_system(), init_trace(), input_state, load, main_prove(), mem_base, noisy, NULL, open_input_file(), other_base, parse(), prove, push_goal(), put_back_char(), QUERY, quietflag, rand_array, read_char(), reset_step(), set_current_module(), stack_copy_psi_term(), stack_pointer, start_chrono(), stdin_cleareof(), title(), TRUE, wl_psi_term::type, undo(), undo_stack, user_module, var_occurred, and what_next.

35 {
36  ptr_psi_term s;
37  ptr_stack save_undo_stack;
38  long sort,exitflag;
39  long c; /* 21.12 (prev. char) */
40 
41  int i;
42 #ifdef SOLARIS
43  for(i=0;i<256;i++)
44  rand_array[i]=rand_r(&lifeseed);
45 #else
46  for(i=0;i<256;i++)
47  rand_array[i]=random();
48 #endif
49 
50 
51  arg_c=argc;
52  if (argc < 10)
53  {
54  for (i = 0; i < argc;i++)
55  {
56  arg_v[i]=argv[i];
57  }
58  }
59  else
60  Errorline("Too many command line arguments\n");
61 
62  // arg_v=argv;
63  quietflag = GetBoolOption("q");
64  init_io();
65  init_memory();
67  assert(stack_pointer==mem_base); /* 8.10 */
68  init_copy();
69  assert(stack_pointer==mem_base); /* 8.10 */
70  init_print();
71  assert(stack_pointer==mem_base); /* 8.10 */
72 
73  /* Timekeeping initialization */
74  tzset();
75  (void)times(&life_start);
76  assert(stack_pointer==mem_base); /* 8.10 */
77 
78  init_modules(); /* RM: Jan 8 1993 */
79 
81  assert(stack_pointer==mem_base); /* 8.10 */
82 #ifdef X11
83  x_setup_builtins();
84  assert(stack_pointer==mem_base); /* 8.10 */
85 #endif
87 
88  assert(stack_pointer==mem_base); /* 8.10 */
89  title();
90  assert(stack_pointer==mem_base); /* 8.10 */
91  init_trace();
92  noisy=FALSE;
93 
94  assert(stack_pointer==mem_base); /* 8.10 */
95 
96 
97  (void)set_current_module(user_module); /* RM: Jan 27 1993 */
98 
99  /* Read in the .set_up file */
100  init_system();
101 
102 #ifdef ARITY /* RM: Mar 29 1993 */
103  arity_init();
104 #endif
105 
106 
107  (void)open_input_file("+SETUP+");
109  file_date+=2;
110  main_prove();
111 
112 
113  /* Main loop of interpreter */
114  do {
115  (void)setjmp(env);
116  /* printf("%ld\n",(long)(stack_pointer-mem_base)); */ /* 8.10 */
117  init_system();
118  init_trace();
119 
122  save_undo_stack=undo_stack;
123  stdin_cleareof();
124  c=read_char();
125  /* Wait until an EOF or a good character */
126  while (c!=EOF && !(c>32 && c!='.' && c!=';')) c=read_char();
127  if (c==EOF)
128  exitflag=TRUE;
129  else {
130  put_back_char(c);
131  s=stack_copy_psi_term(parse(&sort));
132  exitflag=(s->type==eof);
133  }
134  end_terminal_io();
135 
136  if (!exitflag) {
137  if (sort==QUERY) {
138 
139  // clear_already_loaded(symbol_table); RM: Feb 3 1993
140 
142 
144  goal_count=0;
146  reset_step();
147  start_chrono();
148  main_prove();
149  /* assert(goal_stack==NULL); */
150  /* assert(choice_stack==NULL); */
151  if (undo_stack) {
152  undo(NULL);
153  Errorline("non-NULL undo stack.\n");
154  }
155  /* assert(undo_stack==NULL); */
156  }
157  else if (sort==FACT) {
159  assert_clause(s);
160  undo(save_undo_stack); /* 17.8 */
161  var_occurred=FALSE; /* 18.8 */
162  encode_types();
163 
164  infoline(assert_ok?"\n*** Yes\n":"\n*** No\n"); /* 21.1 */
165  }
166  }
167  } while (!exitflag);
168 
169  /* hash_display(x_module->symbol_table); */
170 
171  exit_life(TRUE);
172  return 0;
173 }
#define prove
Definition: def_const.h:273
void init_trace()
Definition: error.c:587
void undo(ptr_stack limit)
undo
Definition: login.c:691
long assert_first
Definition: def_glob.h:58
void put_back_char(long c)
Definition: token.c:633
void exit_life(long nl_flag)
exit_life
Definition: built_ins.c:2220
void exit_if_true(long exitflag)
exit_if_true
Definition: lib.c:55
void push_goal(goals t, ptr_psi_term a, ptr_psi_term b, GENERIC c)
push_goal
Definition: login.c:600
psi_term parse(long *q)
Definition: parser.c:877
void init_system()
init_system
Definition: lib.c:94
void reset_step()
Definition: error.c:596
long file_date
Definition: def_glob.h:60
#define DEFRULES
Definition: def_const.h:138
#define FACT
Definition: def_const.h:151
ptr_module user_module
Definition: def_glob.h:156
GENERIC other_base
Definition: def_glob.h:19
long quietflag
Definition: def_glob.h:271
#define NULL
Definition: def_const.h:203
ptr_psi_term input_state
Definition: def_glob.h:199
long ignore_eff
Definition: def_glob.h:151
#define QUERY
Definition: def_const.h:152
long noisy
Definition: def_glob.h:35
long assert_ok
Definition: def_glob.h:59
void init_io()
void init_io
Definition: lib.c:69
ptr_stack undo_stack
Definition: def_glob.h:53
void Errorline(char *format,...)
Definition: error.c:414
char * heap_copy_string(char *s)
Definition: trees.c:147
void end_terminal_io()
Definition: token.c:431
long goal_count
Definition: def_glob.h:152
void infoline(char *format,...)
Definition: error.c:245
void begin_terminal_io()
Definition: token.c:410
ptr_definition eof
Definition: def_glob.h:86
#define TRUE
Definition: def_const.h:127
#define what_next
Definition: def_const.h:277
void start_chrono()
start_chrono
Definition: login.c:349
#define FALSE
Definition: def_const.h:128
int arg_c
Definition: def_glob.h:5
void init_print()
Definition: print.c:48
long var_occurred
Definition: def_glob.h:189
GENERIC mem_base
Definition: def_glob.h:11
void init_memory()
init_memory ()
Definition: memory.c:1671
char * arg_v[10]
Definition: def_glob.h:6
ptr_psi_term stack_copy_psi_term(psi_term t)
Definition: parser.c:183
#define load
Definition: def_const.h:288
long rand_array[256]
Definition: def_glob.h:279
void encode_types()
Definition: types.c:1015
jmp_buf env
Definition: def_glob.h:236
void main_prove()
main_prove
Definition: login.c:2335
void init_built_in_types()
init_built_in_types
Definition: built_ins.c:6150
long read_char()
Definition: token.c:587
GENERIC stack_pointer
Definition: def_glob.h:14
void init_modules()
Definition: modules.c:30
ptr_definition type
Definition: def_struct.h:165
void stdin_cleareof()
Definition: token.c:42
unsigned long * GENERIC
Definition: def_struct.h:17
void title()
TITLE.
Definition: info.c:39
void init_copy()
init_copy
Definition: copy.c:32
long open_input_file(char *file)
Definition: token.c:504
ptr_module set_current_module(ptr_module module)
Definition: modules.c:95
void assert_clause(ptr_psi_term t)
assert_clause
Definition: login.c:287
void init_interrupt()
INIT_INTERRUPT.
Definition: interrupt.c:36
int GetBoolOption(char *name)
GetBoolOption.
Definition: memory.c:64
#define assert(N)
Definition: memory.c:113

Variable Documentation

char* numbers[21]
Initial value:
= {"1","2","3","4","5","6","7","8","9","10",
"11","12","13","14","15","16","17","18","19","20",
#define NULL
Definition: def_const.h:203

Definition at line 17 of file life.c.

long set_extra_args[6] = {set_empty, set_1, set_2, set_1_2, set_1_2_3, set_1_2_3_4}

Definition at line 22 of file life.c.