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

lib for calling wild_life from C More...

Go to the source code of this file.

Functions

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

Variables

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

Detailed Description

lib for calling wild_life from C

VERSION of Wild-LIFE for calling from C

Definition in file lib.c.

Function Documentation

void exit_if_true ( long  exitflag)

exit_if_true

Parameters
longexitflag

Definition at line 55 of file lib.c.

56 {
57  if (exitflag) {
58  printf("\n\n*** Execution is not allowed to continue.\n");
59  /*exit_life(TRUE);*/
60  exit(EXIT_FAILURE);
61  }
62 }
char** group_features ( char **  f,
ptr_node  n 
)

group_features

Parameters
char**f
ptr_noden

Definition at line 34 of file lib.c.

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

35 {
36  *f=NULL;
37  if(n) {
38  if(n->left)
39  f=group_features(f,n->left);
40  *f=n->key;
41  f++;
42  if(n->right)
43  f=group_features(f,n->right);
44  }
45 
46  return f;
47 }
#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)
group_features
Definition: lib.c:34
ptr_node right
Definition: def_struct.h:184
void init_io ( )

void init_io

I/O initialization

Definition at line 69 of file lib.c.

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

70 {
71 #ifdef DJD_PORT_FALSE
72  struct stat buffer_loc;
73 
74  fstat(fileno(stdin), &buffer_loc);
75  /* True iff stdin is from a terminal */
76  stdin_terminal=(S_IFCHR & buffer.st_mode)!=0;
79  output_stream=stdout;
80 #else
84  output_stream=stdout;
85 #endif
86 }
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 ( )

init_system

Initial state of system to begin a query

Definition at line 94 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.

95 {
96 #ifdef X11
98 #endif
102  undo_stack=NULL; /* 7.8 */
103  var_tree=NULL;
104 
105  /* RM: Oct 13 1993 */
107  prompt=PROMPT;
108  else {
111  }
112 
113  resid_aim=NULL;
115 
116 #ifdef X11
117  /* RM: Dec 15 1992 */
119 #endif
120 
121  init_global_vars(); /* RM: Feb 15 1993 */
122 }
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)
exit_if_true
Definition: lib.c:55
void init_global_vars()
init_global_vars
Definition: lefun.c:1484
#define FALSE
Definition: def_const.h:128
GENERIC mem_base
Definition: def_glob.h:11
ptr_psi_term stack_nil()
stack_nil
Definition: built_ins.c:26
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()
memory_check
Definition: memory.c:1723
ptr_choice_point choice_stack
Definition: def_glob.h:51
int WFfeature_count_loop ( ptr_node  n)

WFfeature_count_loop.

Parameters
ptr_noden

Definition at line 336 of file lib.c.

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

337 {
338  int result=0;
339 
340  if(n) {
341  if(n->left)
342  result+=WFfeature_count_loop(n->left);
343  result++;
344  if(n->right)
345  result+=WFfeature_count_loop(n->right);
346  }
347 
348  return result;
349 }
ptr_node left
Definition: def_struct.h:183
int WFfeature_count_loop(ptr_node n)
WFfeature_count_loop.
Definition: lib.c:336
ptr_node right
Definition: def_struct.h:184
int WFFeatureCount ( ptr_psi_term  psi)

WFFeatureCount.

Parameters
ptr_psi_termpsi

Definition at line 357 of file lib.c.

References wl_psi_term::attr_list, deref_ptr, and WFfeature_count_loop().

358 {
359  int result=0;
360 
361  if(psi) {
362  deref_ptr(psi);
363  result=WFfeature_count_loop(psi->attr_list);
364  }
365 
366  return result;
367 }
#define deref_ptr(P)
Definition: def_macro.h:95
int WFfeature_count_loop(ptr_node n)
WFfeature_count_loop.
Definition: lib.c:336
ptr_node attr_list
Definition: def_struct.h:171
char** WFFeatures ( ptr_psi_term  psi)

WFFeatures.

Parameters
ptr_psi_termpsi

Definition at line 391 of file lib.c.

References wl_psi_term::attr_list, deref_ptr, group_features(), NULL, and WFfeature_count_loop().

392 {
393  char **features_loc=NULL;
394  int n;
395 
396  if(psi) {
397  deref_ptr(psi);
398 
400  if(n) {
401  features_loc=(char **)malloc((n+1)*sizeof(char *));
402  (void)group_features(features_loc,psi->attr_list);
403  }
404  }
405 
406  return features_loc;
407 }
#define NULL
Definition: def_const.h:203
#define deref_ptr(P)
Definition: def_macro.h:95
char ** group_features(char **f, ptr_node n)
group_features
Definition: lib.c:34
int WFfeature_count_loop(ptr_node n)
WFfeature_count_loop.
Definition: lib.c:336
ptr_node attr_list
Definition: def_struct.h:171
double WFGetDouble ( ptr_psi_term  psi,
int *  ok 
)

WFGetDouble.

Parameters
ptr_psi_termpsi
int*ok

Definition at line 416 of file lib.c.

References deref_ptr, FALSE, real, sub_type(), TRUE, wl_psi_term::type, and wl_psi_term::value_3.

417 {
418  double value=0.0;
419 
420  if(ok)
421  *ok=FALSE;
422 
423  if(psi) {
424  deref_ptr(psi);
425 
426  if(sub_type(psi->type,real) && psi->value_3) {
427  value= *((double *)psi->value_3);
428  if(ok)
429  *ok=TRUE;
430  }
431  }
432  return value;
433 }
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 
)

WFGetFeature.

Parameters
ptr_psi_termpsi
char*feature

Definition at line 468 of file lib.c.

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

469 {
470  ptr_psi_term result=NULL;
471  ptr_node n;
472 
473  if(psi && feature) {
474  deref_ptr(psi);
475  n=find(FEATCMP,feature,psi->attr_list);
476  if(n)
477  result=(PsiTerm)n->data;
478  }
479 
480  return result;
481 }
#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 
)

WFGetString.

Parameters
ptr_psi_termpsi
int*ok

Definition at line 442 of file lib.c.

References deref_ptr, FALSE, NULL, quoted_string, sub_type(), TRUE, wl_psi_term::type, and wl_psi_term::value_3.

443 {
444  char *value=NULL;
445 
446  if(ok)
447  *ok=FALSE;
448 
449  if(psi) {
450  deref_ptr(psi);
451 
452  if(sub_type(psi->type,quoted_string) && psi->value_3) {
453  value=(char *)psi->value_3;
454  if(ok)
455  *ok=TRUE;
456  }
457  }
458  return value;
459 }
#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)

WFGetVar.

Parameters
char*name

Definition at line 315 of file lib.c.

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

316 {
317  ptr_psi_term result=NULL;
318  ptr_node n;
319 
321  if(n) {
322  result=(ptr_psi_term)n->data;
323  if(result)
324  deref_ptr(result);
325  }
326 
327  return result;
328 }
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,
char *  argv[] 
)

WFInit.

Parameters
longargc
char*argv[]

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

Definition at line 133 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.

134 {
135  ptr_stack save_undo_stack;
136 
137  int i;
138 #ifdef SOLARIS
139  for(i=0;i<256;i++)
140  rand_array[i]=rand_r(&libseed);
141 #else
142  for(i=0;i<256;i++)
143  rand_array[i]=random();
144 #endif
145 
146  if (argc < 10)
147  {
148  arg_c=argc;
149  for (i = 0; i < argc; i++) {
150  arg_v[i]=argv[i];
151  }
152  }
153  else
154  {
155  Errorline("Too many command line arguments\n");
156  }
157 
158  quietflag = TRUE; /* RM: Mar 31 1993 */
159 
160  init_io();
161  init_memory();
163  assert(stack_pointer==mem_base); /* 8.10 */
164  init_copy();
165  assert(stack_pointer==mem_base); /* 8.10 */
166  init_print();
167  assert(stack_pointer==mem_base); /* 8.10 */
168 
169  /* Timekeeping initialization */
170  tzset();
171  (void)times(&life_start);
172  assert(stack_pointer==mem_base); /* 8.10 */
173 
174  init_modules(); /* RM: Jan 8 1993 */
175 
177  assert(stack_pointer==mem_base); /* 8.10 */
178 #ifdef X11
179  x_setup_builtins();
180  assert(stack_pointer==mem_base); /* 8.10 */
181 #endif
182  init_interrupt();
183  assert(stack_pointer==mem_base); /* 8.10 */
184  title();
185  assert(stack_pointer==mem_base); /* 8.10 */
186  init_trace();
187  noisy=FALSE;
188 
189  assert(stack_pointer==mem_base); /* 8.10 */
190 
191 
192  (void)set_current_module(user_module); /* RM: Jan 27 1993 */
193 
194  /* Read in the .set_up file */
195  init_system();
196 
197 #ifdef ARITY /* RM: Mar 29 1993 */
198  arity_init();
199 #endif
200 
201 
202  (void)open_input_file("+SETUP+");
204  file_date+=2;
205  main_prove();
206 
207 
208  (void)setjmp(env);
209  /* printf("%ld\n",(long)(stack_pointer-mem_base)); */ /* 8.10 */
210  init_system();
211  init_trace();
214  save_undo_stack=undo_stack;
215  stdin_cleareof();
216 
217  c_query_level=0;
218 }
void init_trace()
Definition: error.c:587
void push_goal(goals t, ptr_psi_term a, ptr_psi_term b, GENERIC c)
push_goal
Definition: login.c:600
void init_system()
init_system
Definition: lib.c:94
void init_io()
void init_io
Definition: lib.c:69
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)
exit_if_true
Definition: lib.c:55
#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
long file_date
Definition: lib.c:22
#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()
main_prove
Definition: login.c:2335
void init_built_in_types()
init_built_in_types
Definition: built_ins.c:6150
long c_query_level
Definition: def_glob.h:289
GENERIC stack_pointer
Definition: def_glob.h:14
long noisy
Definition: lib.c:21
void init_modules()
Definition: modules.c:30
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 init_interrupt()
INIT_INTERRUPT.
Definition: interrupt.c:36
#define assert(N)
Definition: memory.c:113
int WFInput ( char *  query)

WFInput.

Parameters
char*query

Definition at line 226 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.

227 {
228  ptr_psi_term t;
229  long sort;
230  parse_block pb;
231  int result=WFno;
232  ptr_stack save_undo_stack;
233  ptr_choice_point old_choice;
234 
235 
236  save_undo_stack=undo_stack;
237  old_choice=choice_stack;
238 
239 
240  if(!strcmp(query,".")) {
241  reset_stacks();
242  result=WFyes;
243  c_query_level=0;
244  }
245  else {
246  if(!strcmp(query,";")) {
247  sort=QUERY;
249  }
250  else {
251  /* Parse the string in its own state */
252  save_parse_state(&pb);
255  stringinput=query;
256 
257  /* old_var_occurred=var_occurred; */
259  t=stack_copy_psi_term(parse(&sort));
260 
261  /* Main loop of interpreter */
262  if(sort==QUERY) {
264  goal_count=0;
265 
267  c_query_level++;
270  /* reset_step(); */
271  }
272  else if (sort==FACT) {
274  assert_clause(t);
275  if(assert_ok)
276  result=WFyes;
277  undo(save_undo_stack);
279  encode_types();
280  }
281  }
282 
283  if(sort==QUERY) {
284  start_chrono();
285  main_prove();
286 
288 
289  if((long)(goal_stack->aaaa_1)==c_query_level)
290  if(choice_stack==old_choice) {
291  result=WFyes;
292  c_query_level--;
293  }
294  else
295  result=WFmore;
296  else {
297  result=WFno;
298  c_query_level--;
299  }
300 
302  }
303  }
304  }
305 
306  return result;
307 }
#define prove
Definition: def_const.h:273
ptr_psi_term aaaa_1
Definition: def_struct.h:224
void undo(ptr_stack limit)
undo
Definition: login.c:691
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)
push_choice_point
Definition: login.c:638
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 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()
start_chrono
Definition: login.c:349
#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()
reset_stacks
Definition: login.c:2047
ptr_psi_term stack_copy_psi_term(psi_term t)
Definition: parser.c:183
void encode_types()
Definition: types.c:1015
void main_prove()
main_prove
Definition: login.c:2335
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)
assert_clause
Definition: login.c:287
ptr_choice_point choice_stack
Definition: def_glob.h:51
ptr_goal next
Definition: def_struct.h:227
char* WFType ( ptr_psi_term  psi)

WFType.

Parameters
ptr_psi_termpsi

Definition at line 375 of file lib.c.

References wl_keyword::combined_name, deref_ptr, wl_definition::keyword, NULL, and wl_psi_term::type.

376 {
377  char *result=NULL;
378  if(psi) {
379  deref_ptr(psi);
380  result=psi->type->keyword->combined_name;
381  }
382  return result;
383 }
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 22 of file lib.c.

float garbage_time =0

Definition at line 25 of file lib.c.

long noisy =TRUE

Definition at line 21 of file lib.c.

long types_done =FALSE

Definition at line 23 of file lib.c.