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

Go to the source code of this file.

Functions

char ** group_features (char **f, ptr_node n)
 
void exit_if_true (long exitflag)
 
void init_io ()
 
void init_system ()
 
void WFInit (long argc, argv)
 
int WFInput (char *query)
 
PsiTerm WFGetVar (char *name)
 
int WFfeature_count_loop (ptr_node n)
 
int WFFeatureCount (ptr_psi_term psi)
 
char * WFType (ptr_psi_term psi)
 
char ** WFFeatures (ptr_psi_term psi)
 
double WFGetDouble (ptr_psi_term psi, int *ok)
 
char * WFGetString (ptr_psi_term psi, int *ok)
 
PsiTerm WFGetFeature (ptr_psi_term psi, char *feature)
 

Variables

long noisy =TRUE
 
long file_date =3
 
long types_done =FALSE
 
float garbage_time =0
 

Function Documentation

void exit_if_true ( long  exitflag)

Definition at line 40 of file lib.c.

42 {
43  if (exitflag) {
44  printf("\n\n*** Execution is not allowed to continue.\n");
45  /*exit_life(TRUE);*/
46  exit(EXIT_FAILURE);
47  }
48 }
char** group_features ( char **  f,
ptr_node  n 
)

Definition at line 22 of file lib.c.

References wl_node::key, wl_node::left, NULL, and wl_node::right.

25 {
26  *f=NULL;
27  if(n) {
28  if(n->left)
29  f=group_features(f,n->left);
30  *f=n->key;
31  f++;
32  if(n->right)
33  f=group_features(f,n->right);
34  }
35 
36  return f;
37 }
#define NULL
Definition: def_const.h:203
ptr_node left
Definition: def_struct.h:183
char * key
Definition: def_struct.h:182
char ** group_features(char **f, ptr_node n)
Definition: lib.c:22
ptr_node right
Definition: def_struct.h:184
void init_io ( )

Definition at line 53 of file lib.c.

References buffer, input_state, NULL, output_stream, stdin_state, stdin_terminal, and TRUE.

54 {
55 #ifdef DJD_PORT_FALSE
56  struct stat buffer_loc;
57 
58  fstat(fileno(stdin), &buffer_loc);
59  /* True iff stdin is from a terminal */
60  stdin_terminal=(S_IFCHR & buffer.st_mode)!=0;
63  output_stream=stdout;
64 #else
68  output_stream=stdout;
69 #endif
70 }
ptr_psi_term stdin_state
Definition: def_glob.h:200
long stdin_terminal
Definition: def_glob.h:188
#define NULL
Definition: def_const.h:203
ptr_psi_term input_state
Definition: def_glob.h:199
char * buffer
Definition: def_glob.h:175
#define TRUE
Definition: def_const.h:127
FILE * output_stream
Definition: def_glob.h:41
void init_system ( )

Definition at line 77 of file lib.c.

References choice_stack, current_module, exit_if_true(), FALSE, goal_stack, init_global_vars(), mem_base, memory_check(), wl_module::module_name, NULL, prompt, PROMPT, PROMPT_BUFFER, prompt_buffer, resid_aim, stack_nil(), stack_pointer, undo_stack, user_module, var_tree, x_window_creation, and xevent_list.

78 {
79 #ifdef X11
81 #endif
85  undo_stack=NULL; /* 7.8 */
86  var_tree=NULL;
87 
88  /* RM: Oct 13 1993 */
90  prompt=PROMPT;
91  else {
94  }
95 
98 
99 #ifdef X11
100  /* RM: Dec 15 1992 */
102 #endif
103 
104  init_global_vars(); /* RM: Feb 15 1993 */
105 }
ptr_goal goal_stack
Definition: def_glob.h:50
ptr_module current_module
Definition: def_glob.h:161
char prompt_buffer[PROMPT_BUFFER]
Definition: def_glob.h:237
ptr_psi_term xevent_list
Definition: def_glob.h:208
ptr_module user_module
Definition: def_glob.h:156
#define NULL
Definition: def_const.h:203
ptr_node var_tree
Definition: def_glob.h:26
#define PROMPT
Definition: def_const.h:109
ptr_goal resid_aim
Definition: def_glob.h:220
long x_window_creation
Definition: def_glob.h:217
ptr_stack undo_stack
Definition: def_glob.h:53
void exit_if_true(long exitflag)
Definition: lib.c:40
void init_global_vars()
Definition: lefun.c:1337
#define FALSE
Definition: def_const.h:128
GENERIC mem_base
Definition: def_glob.h:11
ptr_psi_term stack_nil()
Definition: built_ins.c:29
char * module_name
Definition: def_struct.h:75
#define PROMPT_BUFFER
Definition: def_const.h:112
char * prompt
Definition: def_glob.h:42
GENERIC stack_pointer
Definition: def_glob.h:14
long memory_check()
Definition: memory.c:1622
ptr_choice_point choice_stack
Definition: def_glob.h:51
int WFfeature_count_loop ( ptr_node  n)

Definition at line 315 of file lib.c.

318 {
319  int result=0;
320 
321  if(n) {
322  if(n->left)
323  result+=WFfeature_count_loop(n->left);
324  result++;
325  if(n->right)
326  result+=WFfeature_count_loop(n->right);
327  }
328 
329  return result;
330 }
ptr_node left
Definition: def_struct.h:183
int WFfeature_count_loop(ptr_node n)
Definition: lib.c:315
ptr_node right
Definition: def_struct.h:184
int WFFeatureCount ( ptr_psi_term  psi)

Definition at line 334 of file lib.c.

References deref_ptr, and WFfeature_count_loop().

337 {
338  int result=0;
339 
340  if(psi) {
341  deref_ptr(psi);
342  result=WFfeature_count_loop(psi->attr_list);
343  }
344 
345  return result;
346 }
#define deref_ptr(P)
Definition: def_macro.h:95
int WFfeature_count_loop(ptr_node n)
Definition: lib.c:315
ptr_node attr_list
Definition: def_struct.h:171
char** WFFeatures ( ptr_psi_term  psi)

Definition at line 364 of file lib.c.

References deref_ptr, group_features(), NULL, and WFfeature_count_loop().

367 {
368  char **features_loc=NULL;
369  int n;
370 
371  if(psi) {
372  deref_ptr(psi);
373 
375  if(n) {
376  features_loc=(char **)malloc((n+1)*sizeof(char *));
377  (void)group_features(features_loc,psi->attr_list);
378  }
379  }
380 
381  return features_loc;
382 }
#define NULL
Definition: def_const.h:203
#define deref_ptr(P)
Definition: def_macro.h:95
char ** group_features(char **f, ptr_node n)
Definition: lib.c:22
int WFfeature_count_loop(ptr_node n)
Definition: lib.c:315
ptr_node attr_list
Definition: def_struct.h:171
double WFGetDouble ( ptr_psi_term  psi,
int *  ok 
)

Definition at line 387 of file lib.c.

References deref_ptr, FALSE, real, sub_type(), and TRUE.

390 {
391  double value=0.0;
392 
393  if(ok)
394  *ok=FALSE;
395 
396  if(psi) {
397  deref_ptr(psi);
398 
399  if(sub_type(psi->type,real) && psi->value_3) {
400  value= *((double *)psi->value_3);
401  if(ok)
402  *ok=TRUE;
403  }
404  }
405  return value;
406 }
long sub_type(ptr_definition t1, ptr_definition t2)
Definition: types.c:1544
ptr_definition real
Definition: def_glob.h:102
#define deref_ptr(P)
Definition: def_macro.h:95
#define TRUE
Definition: def_const.h:127
#define FALSE
Definition: def_const.h:128
GENERIC value_3
Definition: def_struct.h:170
ptr_definition type
Definition: def_struct.h:165
PsiTerm WFGetFeature ( ptr_psi_term  psi,
char *  feature 
)

Definition at line 433 of file lib.c.

References wl_node::data, deref_ptr, FEATCMP, find(), and NULL.

437 {
438  ptr_psi_term result=NULL;
439  ptr_node n;
440 
441  if(psi && feature) {
442  deref_ptr(psi);
443  n=find(FEATCMP,feature,psi->attr_list);
444  if(n)
445  result=(PsiTerm)n->data;
446  }
447 
448  return result;
449 }
#define FEATCMP
Definition: def_const.h:257
GENERIC data
Definition: def_struct.h:185
#define NULL
Definition: def_const.h:203
void * PsiTerm
Definition: def_struct.h:4
#define deref_ptr(P)
Definition: def_macro.h:95
ptr_node find(long comp, char *keystr, ptr_node tree)
Definition: trees.c:341
ptr_node attr_list
Definition: def_struct.h:171
char* WFGetString ( ptr_psi_term  psi,
int *  ok 
)

Definition at line 410 of file lib.c.

References deref_ptr, FALSE, NULL, quoted_string, sub_type(), and TRUE.

413 {
414  char *value=NULL;
415 
416  if(ok)
417  *ok=FALSE;
418 
419  if(psi) {
420  deref_ptr(psi);
421 
422  if(sub_type(psi->type,quoted_string) && psi->value_3) {
423  value=(char *)psi->value_3;
424  if(ok)
425  *ok=TRUE;
426  }
427  }
428  return value;
429 }
#define NULL
Definition: def_const.h:203
long sub_type(ptr_definition t1, ptr_definition t2)
Definition: types.c:1544
#define deref_ptr(P)
Definition: def_macro.h:95
#define TRUE
Definition: def_const.h:127
#define FALSE
Definition: def_const.h:128
ptr_definition quoted_string
Definition: def_glob.h:101
GENERIC value_3
Definition: def_struct.h:170
ptr_definition type
Definition: def_struct.h:165
PsiTerm WFGetVar ( char *  name)

Definition at line 297 of file lib.c.

References wl_node::data, deref_ptr, find(), NULL, STRCMP, and var_tree.

300 {
301  ptr_psi_term result=NULL;
302  ptr_node n;
303 
305  if(n) {
306  result=(ptr_psi_term)n->data;
307  if(result)
308  deref_ptr(result);
309  }
310 
311  return result;
312 }
GENERIC data
Definition: def_struct.h:185
#define NULL
Definition: def_const.h:203
ptr_node var_tree
Definition: def_glob.h:26
#define deref_ptr(P)
Definition: def_macro.h:95
char * name
Definition: def_glob.h:325
#define STRCMP
Definition: def_const.h:255
ptr_node find(long comp, char *keystr, ptr_node tree)
Definition: trees.c:341
struct wl_psi_term * ptr_psi_term
Definition: def_struct.h:34
void WFInit ( long  argc,
argv   
)

Definition at line 114 of file lib.c.

References arg_c, arg_v, assert, begin_terminal_io(), c_query_level, env, Errorline(), exit_if_true(), FALSE, file_date, heap_copy_string(), 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, open_input_file(), other_base, push_goal(), quietflag, rand_array, set_current_module(), stack_pointer, stdin_cleareof(), title(), TRUE, undo_stack, user_module, and var_occurred.

118 {
119  // ptr_psi_term s;
120  ptr_stack save_undo_stack;
121  // long sort,exitflag;
122  // int c; 21.12 (prev. char)
123 
124 
125  int i;
126 #ifdef SOLARIS
127  for(i=0;i<256;i++)
128  rand_array[i]=rand_r(&libseed);
129 #else
130  for(i=0;i<256;i++)
131  rand_array[i]=random();
132 #endif
133 
134  if (argc < 10)
135  {
136  arg_c=argc;
137  for (i = 0; i < argc; i++) {
138  arg_v[i]=argv[i];
139  }
140  }
141  else
142  {
143  Errorline("Too many command line arguments\n");
144  }
145 
146  quietflag = TRUE; /* RM: Mar 31 1993 */
147 
148  init_io();
149  init_memory();
151  assert(stack_pointer==mem_base); /* 8.10 */
152  init_copy();
153  assert(stack_pointer==mem_base); /* 8.10 */
154  init_print();
155  assert(stack_pointer==mem_base); /* 8.10 */
156 
157  /* Timekeeping initialization */
158  tzset();
159  (void)times(&life_start);
160  assert(stack_pointer==mem_base); /* 8.10 */
161 
162  init_modules(); /* RM: Jan 8 1993 */
163 
165  assert(stack_pointer==mem_base); /* 8.10 */
166 #ifdef X11
167  x_setup_builtins();
168  assert(stack_pointer==mem_base); /* 8.10 */
169 #endif
170  init_interrupt();
171  assert(stack_pointer==mem_base); /* 8.10 */
172  title();
173  assert(stack_pointer==mem_base); /* 8.10 */
174  init_trace();
175  noisy=FALSE;
176 
177  assert(stack_pointer==mem_base); /* 8.10 */
178 
179 
180  (void)set_current_module(user_module); /* RM: Jan 27 1993 */
181 
182  /* Read in the .set_up file */
183  init_system();
184 
185 #ifdef ARITY /* RM: Mar 29 1993 */
186  arity_init();
187 #endif
188 
189 
190  (void)open_input_file("+SETUP+");
192  file_date+=2;
193  main_prove();
194 
195 
196  (void)setjmp(env);
197  /* printf("%ld\n",(long)(stack_pointer-mem_base)); */ /* 8.10 */
198  init_system();
199  init_trace();
202  save_undo_stack=undo_stack;
203  stdin_cleareof();
204 
205  c_query_level=0;
206 }
void init_trace()
Definition: error.c:587
void push_goal(goals t, ptr_psi_term a, ptr_psi_term b, GENERIC c)
Definition: login.c:555
void init_system()
Definition: lib.c:77
void init_io()
Definition: lib.c:53
ptr_module user_module
Definition: def_glob.h:156
GENERIC other_base
Definition: def_glob.h:19
long quietflag
Definition: def_glob.h:271
ptr_psi_term input_state
Definition: def_glob.h:199
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 begin_terminal_io()
Definition: token.c:410
#define TRUE
Definition: def_const.h:127
void exit_if_true(long exitflag)
Definition: lib.c:40
#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
long file_date
Definition: lib.c:17
#define load
Definition: def_const.h:288
long rand_array[256]
Definition: def_glob.h:279
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 c_query_level
Definition: def_glob.h:289
GENERIC stack_pointer
Definition: def_glob.h:14
long noisy
Definition: lib.c:16
void init_modules()
Definition: modules.c:30
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 init_interrupt()
Definition: interrupt.c:28
#define assert(N)
Definition: memory.c:104
int WFInput ( char *  query)

Definition at line 210 of file lib.c.

References wl_goal::aaaa_1, assert_clause(), assert_first, assert_ok, c_query_level, c_what_next, choice_stack, DEFRULES, encode_types(), FACT, fail, FALSE, goal_count, goal_stack, ignore_eff, init_parse_state(), main_prove(), wl_goal::next, NULL, parse(), prove, push_choice_point(), push_goal(), QUERY, reset_stacks(), save_parse_state(), stack_copy_psi_term(), start_chrono(), stringinput, stringparse, TRUE, wl_goal::type, undo(), undo_stack, var_occurred, WFmore, WFno, and WFyes.

213 {
214  ptr_psi_term t;
215  long sort;
216  parse_block pb;
217  int result=WFno;
218  ptr_stack save_undo_stack;
219  ptr_choice_point old_choice;
220 
221 
222  save_undo_stack=undo_stack;
223  old_choice=choice_stack;
224 
225 
226  if(!strcmp(query,".")) {
227  reset_stacks();
228  result=WFyes;
229  c_query_level=0;
230  }
231  else {
232  if(!strcmp(query,";")) {
233  sort=QUERY;
235  }
236  else {
237  /* Parse the string in its own state */
238  save_parse_state(&pb);
241  stringinput=query;
242 
243  /* old_var_occurred=var_occurred; */
245  t=stack_copy_psi_term(parse(&sort));
246 
247  /* Main loop of interpreter */
248  if(sort==QUERY) {
250  goal_count=0;
251 
253  c_query_level++;
256  /* reset_step(); */
257  }
258  else if (sort==FACT) {
260  assert_clause(t);
261  if(assert_ok)
262  result=WFyes;
263  undo(save_undo_stack);
265  encode_types();
266  }
267  }
268 
269  if(sort==QUERY) {
270  start_chrono();
271  main_prove();
272 
274 
275  if((long)(goal_stack->aaaa_1)==c_query_level)
276  if(choice_stack==old_choice) {
277  result=WFyes;
278  c_query_level--;
279  }
280  else
281  result=WFmore;
282  else {
283  result=WFno;
284  c_query_level--;
285  }
286 
288  }
289  }
290  }
291 
292  return result;
293 }
#define prove
Definition: def_const.h:273
ptr_psi_term aaaa_1
Definition: def_struct.h:224
void undo(ptr_stack limit)
Definition: login.c:646
long assert_first
Definition: def_glob.h:58
ptr_goal goal_stack
Definition: def_glob.h:50
void push_choice_point(goals t, ptr_psi_term a, ptr_psi_term b, GENERIC c)
Definition: login.c:591
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 save_parse_state(ptr_parse_block pb)
Definition: token.c:350
#define DEFRULES
Definition: def_const.h:138
#define WFmore
Definition: def_const.h:19
#define FACT
Definition: def_const.h:151
#define NULL
Definition: def_const.h:203
#define WFno
Definition: def_const.h:13
long ignore_eff
Definition: def_glob.h:151
#define QUERY
Definition: def_const.h:152
#define WFyes
Definition: def_const.h:16
#define c_what_next
Definition: def_const.h:289
long assert_ok
Definition: def_glob.h:59
ptr_stack undo_stack
Definition: def_glob.h:53
long goal_count
Definition: def_glob.h:152
goals type
Definition: def_struct.h:223
#define TRUE
Definition: def_const.h:127
void start_chrono()
Definition: login.c:330
#define FALSE
Definition: def_const.h:128
long var_occurred
Definition: def_glob.h:189
#define fail
Definition: def_const.h:272
void init_parse_state()
Definition: token.c:381
void reset_stacks()
Definition: login.c:1924
ptr_psi_term stack_copy_psi_term(psi_term t)
Definition: parser.c:183
void encode_types()
Definition: types.c:1015
void main_prove()
Definition: login.c:2205
long c_query_level
Definition: def_glob.h:289
long stringparse
Definition: def_glob.h:202
char * stringinput
Definition: def_glob.h:203
void assert_clause(ptr_psi_term t)
Definition: login.c:267
ptr_choice_point choice_stack
Definition: def_glob.h:51
ptr_goal next
Definition: def_struct.h:227
char* WFType ( ptr_psi_term  psi)

Definition at line 350 of file lib.c.

References deref_ptr, and NULL.

353 {
354  char *result=NULL;
355  if(psi) {
356  deref_ptr(psi);
357  result=psi->type->keyword->combined_name;
358  }
359  return result;
360 }
char * combined_name
Definition: def_struct.h:92
ptr_keyword keyword
Definition: def_struct.h:124
#define NULL
Definition: def_const.h:203
#define deref_ptr(P)
Definition: def_macro.h:95
ptr_definition type
Definition: def_struct.h:165

Variable Documentation

long file_date =3

Definition at line 17 of file lib.c.

float garbage_time =0

Definition at line 20 of file lib.c.

long noisy =TRUE

Definition at line 16 of file lib.c.

long types_done =FALSE

Definition at line 18 of file lib.c.