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

Go to the source code of this file.

Functions

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

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}
 

Function Documentation

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

Definition at line 40 of file life2.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.

41 {
42  ptr_psi_term s;
43  ptr_stack save_undo_stack;
44  long sort,exitflag;
45  long c; /* 21.12 (prev. char) */
46 
47  int i;
48 #ifdef SOLARIS
49  for(i=0;i<256;i++)
50  rand_array[i]=rand_r(&lifeseed);
51 #else
52  for(i=0;i<256;i++)
53  rand_array[i]=random();
54 #endif
55 
56 
57  arg_c=argc;
58  if (argc < 10)
59  {
60  for (i = 0; i < argc;i++)
61  {
62  arg_v[i]=argv[i];
63  }
64  }
65  else
66  Errorline("Too many command line arguments\n");
67 
68  // arg_v=argv;
69  quietflag = GetBoolOption("q");
70  init_io();
71  init_memory();
73  assert(stack_pointer==mem_base); /* 8.10 */
74  init_copy();
75  assert(stack_pointer==mem_base); /* 8.10 */
76  init_print();
77  assert(stack_pointer==mem_base); /* 8.10 */
78 
79  /* Timekeeping initialization */
80  tzset();
81  (void)times(&life_start);
82  assert(stack_pointer==mem_base); /* 8.10 */
83 
84  init_modules(); /* RM: Jan 8 1993 */
85 
87  assert(stack_pointer==mem_base); /* 8.10 */
88 #ifdef X11
89  x_setup_builtins();
90  assert(stack_pointer==mem_base); /* 8.10 */
91 #endif
93 
94  assert(stack_pointer==mem_base); /* 8.10 */
95  title();
96  assert(stack_pointer==mem_base); /* 8.10 */
97  init_trace();
98  noisy=FALSE;
99 
100  assert(stack_pointer==mem_base); /* 8.10 */
101 
102 
103  (void)set_current_module(user_module); /* RM: Jan 27 1993 */
104 
105  /* Read in the .set_up file */
106  init_system();
107 
108 #ifdef ARITY /* RM: Mar 29 1993 */
109  arity_init();
110 #endif
111 
112 
113  (void)open_input_file("~/life_local/Source/.set_up");
114  push_goal(load,input_state,(ptr_psi_term)file_date,(GENERIC)heap_copy_string("~/life_local/Source/.set_up"));
115  file_date+=2;
116  main_prove();
117 
118 
119  /* Main loop of interpreter */
120  do {
121  (void)setjmp(env);
122  /* printf("%ld\n",(long)(stack_pointer-mem_base)); */ /* 8.10 */
123  init_system();
124  init_trace();
125 
128  save_undo_stack=undo_stack;
129  stdin_cleareof();
130  c=read_char();
131  /* Wait until an EOF or a good character */
132  while (c!=EOF && !(c>32 && c!='.' && c!=';')) c=read_char();
133  if (c==EOF)
134  exitflag=TRUE;
135  else {
136  put_back_char(c);
137  s=stack_copy_psi_term(parse(&sort));
138  exitflag=(s->type==eof);
139  }
140  end_terminal_io();
141 
142  if (!exitflag) {
143  if (sort==QUERY) {
144 
145  // clear_already_loaded(symbol_table); RM: Feb 3 1993
146 
148 
150  goal_count=0;
152  reset_step();
153  start_chrono();
154  main_prove();
155  /* assert(goal_stack==NULL); */
156  /* assert(choice_stack==NULL); */
157  if (undo_stack) {
158  undo(NULL);
159  Errorline("non-NULL undo stack.\n");
160  }
161  /* assert(undo_stack==NULL); */
162  }
163  else if (sort==FACT) {
165  assert_clause(s);
166  undo(save_undo_stack); /* 17.8 */
167  var_occurred=FALSE; /* 18.8 */
168  encode_types();
169 
170  infoline(assert_ok?"\n*** Yes\n":"\n*** No\n"); /* 21.1 */
171  }
172  }
173  } while (!exitflag);
174 
175  /* hash_display(x_module->symbol_table); */
176 
177  exit_life(TRUE);
178  return 0;
179 }
#define prove
Definition: def_const.h:273
void init_trace()
Definition: error.c:587
void undo(ptr_stack limit)
Definition: login.c:646
long assert_first
Definition: def_glob.h:58
void put_back_char(long c)
Definition: token.c:633
void exit_life(long nl_flag)
Definition: built_ins.c:2090
void exit_if_true(long exitflag)
Definition: lib.c:40
void push_goal(goals t, ptr_psi_term a, ptr_psi_term b, GENERIC c)
Definition: login.c:555
psi_term parse(long *q)
Definition: parser.c:877
void init_system()
Definition: lib.c:77
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()
Definition: lib.c:53
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()
Definition: login.c:330
#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()
Definition: memory.c:1572
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()
Definition: login.c:2205
void init_built_in_types()
Definition: built_ins.c:5805
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()
Definition: info.c:31
void init_copy()
Definition: copy.c:34
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)
Definition: login.c:267
void init_interrupt()
Definition: interrupt.c:28
int GetBoolOption(char *name)
Definition: memory.c:54
#define assert(N)
Definition: memory.c:104

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 13 of file life2.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 18 of file life2.c.