Wild Life  2.30
 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
argc- int argc
argv- 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, life_start, 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, what_next, and x_setup_builtins().

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
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 }
GENERIC stack_pointer
used to allocate from stack - size allocated added - adj for alignment
Definition: def_glob.h:69
#define prove
was enum (goal) – but must be long for error.c - now typedef
Definition: def_const.h:1051
void init_trace()
init_trace
Definition: error.c:651
void undo(ptr_stack limit)
undo
Definition: login.c:691
long assert_first
Definition: def_glob.h:1032
void put_back_char(long c)
put_back_char
Definition: token.c:729
void exit_life(long nl_flag)
exit_life
Definition: built_ins.c:2219
void exit_if_true(long exitflag)
exit_if_true
Definition: lib.c:55
ptr_module user_module
Default module for user input.
Definition: def_glob.h:694
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)
parse
Definition: parser.c:907
void init_system()
init_system
Definition: lib.c:83
void reset_step()
reset_step
Definition: error.c:665
long file_date
Definition: def_glob.h:1034
#define DEFRULES
Must be different from NULL, a built-in index, and a pointer Used to indicate that the rules of the d...
Definition: def_const.h:302
#define FACT
Fact Kind of user input.
Definition: def_const.h:338
long quietflag
Definition: def_glob.h:912
#define NULL
Definition: def_const.h:533
ptr_psi_term input_state
Definition: def_glob.h:856
long ignore_eff
Definition: def_glob.h:677
#define QUERY
Query Kind of user input.
Definition: def_const.h:345
long noisy
Definition: def_glob.h:1011
long assert_ok
Definition: def_glob.h:1033
void init_io()
void init_io
Definition: lib.c:69
struct tms life_start
time life started - seconds
Definition: def_glob.h:83
ptr_stack undo_stack
Definition: def_glob.h:1027
void Errorline(char *format,...)
Errorline.
Definition: error.c:465
unsigned long * GENERIC
unsigned long *GENERIC
Definition: def_struct.h:35
void end_terminal_io()
end_terminal_io
Definition: token.c:516
long goal_count
Definition: def_glob.h:678
void infoline(char *format,...)
infoline
Definition: error.c:281
char * heap_copy_string(char *s)
heap_copy_string
Definition: trees.c:172
void begin_terminal_io()
begin_terminal_io
Definition: token.c:493
int arg_c
set from argc in either life.c or lib.c
Definition: def_glob.h:20
#define TRUE
Standard boolean.
Definition: def_const.h:268
ptr_definition eof
symbol in syntax module
Definition: def_glob.h:263
#define what_next
was enum (goal) – but must be long for error.c - now typedef
Definition: def_const.h:1079
GENERIC other_base
mem_size memory allocated in init_memory by malloc
Definition: def_glob.h:98
void start_chrono()
start_chrono
Definition: login.c:349
#define FALSE
Standard boolean.
Definition: def_const.h:275
void init_print()
init_print
Definition: print.c:52
void init_memory()
init_memory ()
Definition: memory.c:1671
char * arg_v[ARGNN]
set from argv in either life.c or lib.c
Definition: def_glob.h:27
ptr_psi_term stack_copy_psi_term(psi_term t)
stack_copy_psi_term
Definition: parser.c:205
#define load
was enum (goal) – but must be long for error.c - now typedef
Definition: def_const.h:1156
long rand_array[256]
Definition: def_glob.h:920
void encode_types()
encode_types
Definition: types.c:1091
jmp_buf env
Definition: def_glob.h:877
void main_prove()
main_prove
Definition: login.c:2333
void x_setup_builtins()
x_setup_builtins
Definition: xpred.c:3374
void init_built_in_types()
init_built_in_types
Definition: built_ins.c:6155
long read_char()
read_char
Definition: token.c:680
GENERIC mem_base
mem_size memory allocated in init_memory by malloc
Definition: def_glob.h:48
void init_modules()
init_modules
Definition: modules.c:34
ptr_definition type
Definition: def_struct.h:181
void stdin_cleareof()
stdin_cleareof
Definition: token.c:51
void title()
TITLE.
Definition: info.c:39
void init_copy()
init_copy
Definition: copy.c:32
long var_occurred
???
Definition: def_glob.h:839
long open_input_file(char *file)
open_input_file
Definition: token.c:594
ptr_module set_current_module(ptr_module module)
set_current_module
Definition: modules.c:100
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:114

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:533

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.