181 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			181 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								#include "pl-incl.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void			outOfCore(void) {}
							 | 
						||
| 
								 | 
							
								void			fatalError(const char *fm, ...) {exit(1);}
							 | 
						||
| 
								 | 
							
								void			printMessage(int type, ...) {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										 /*******************************
							 | 
						||
| 
								 | 
							
										 *    ERROR-CHECKING *_get()	*
							 | 
						||
| 
								 | 
							
										 *******************************/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int
							 | 
						||
| 
								 | 
							
								PL_get_nchars_ex(term_t t, size_t *len, char **s, unsigned int flags)
							 | 
						||
| 
								 | 
							
								{ return PL_get_nchars(t, len, s, flags|CVT_EXCEPTION);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int
							 | 
						||
| 
								 | 
							
								PL_get_chars_ex(term_t t, char **s, unsigned int flags)
							 | 
						||
| 
								 | 
							
								{ return PL_get_nchars(t, NULL, s, flags|CVT_EXCEPTION);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int
							 | 
						||
| 
								 | 
							
								PL_get_atom_ex(term_t t, atom_t *a)
							 | 
						||
| 
								 | 
							
								{ if ( PL_get_atom(t, a) )
							 | 
						||
| 
								 | 
							
								    succeed;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return PL_error(NULL, 0, NULL, ERR_TYPE, ATOM_atom, t);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int
							 | 
						||
| 
								 | 
							
								PL_get_integer_ex(term_t t, int *i)
							 | 
						||
| 
								 | 
							
								{ if ( PL_get_integer(t, i) )
							 | 
						||
| 
								 | 
							
								    succeed;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if ( PL_is_integer(t) )
							 | 
						||
| 
								 | 
							
								    return PL_error(NULL, 0, NULL, ERR_REPRESENTATION, ATOM_int);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return PL_error(NULL, 0, NULL, ERR_TYPE, ATOM_integer, t);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int
							 | 
						||
| 
								 | 
							
								PL_get_long_ex(term_t t, long *i)
							 | 
						||
| 
								 | 
							
								{ if ( PL_get_long(t, i) )
							 | 
						||
| 
								 | 
							
								    succeed;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if ( PL_is_integer(t) )
							 | 
						||
| 
								 | 
							
								    return PL_error(NULL, 0, NULL, ERR_REPRESENTATION, ATOM_long);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return PL_error(NULL, 0, NULL, ERR_TYPE, ATOM_integer, t);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int
							 | 
						||
| 
								 | 
							
								PL_get_int64_ex(term_t t, int64_t *i)
							 | 
						||
| 
								 | 
							
								{ if ( PL_get_int64(t, i) )
							 | 
						||
| 
								 | 
							
								    succeed;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if ( PL_is_integer(t) )
							 | 
						||
| 
								 | 
							
								    return PL_error(NULL, 0, NULL, ERR_REPRESENTATION, ATOM_int64_t);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return PL_error(NULL, 0, NULL, ERR_TYPE, ATOM_integer, t);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int
							 | 
						||
| 
								 | 
							
								PL_get_intptr_ex(term_t t, intptr_t *i)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								#if SIZEOF_LONG != SIZEOF_VOIDP && SIZEOF_VOIDP == 8
							 | 
						||
| 
								 | 
							
								   return PL_get_int64_ex(t, i);
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								   return PL_get_long_ex(t, (long*)i);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int
							 | 
						||
| 
								 | 
							
								PL_get_bool_ex(term_t t, int *i)
							 | 
						||
| 
								 | 
							
								{ if ( PL_get_bool(t, i) )
							 | 
						||
| 
								 | 
							
								    succeed;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return PL_error(NULL, 0, NULL, ERR_TYPE, ATOM_bool, t);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int
							 | 
						||
| 
								 | 
							
								PL_get_float_ex(term_t t, double *f)
							 | 
						||
| 
								 | 
							
								{ if ( PL_get_float(t, f) )
							 | 
						||
| 
								 | 
							
								    succeed;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return PL_error(NULL, 0, NULL, ERR_TYPE, ATOM_float, t);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int
							 | 
						||
| 
								 | 
							
								PL_get_char_ex(term_t t, int *p, int eof)
							 | 
						||
| 
								 | 
							
								{ if ( PL_get_char(t, p, eof) )
							 | 
						||
| 
								 | 
							
								    succeed;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return PL_error(NULL, 0, NULL, ERR_TYPE, ATOM_character, t);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int
							 | 
						||
| 
								 | 
							
								PL_unify_list_ex(term_t l, term_t h, term_t t)
							 | 
						||
| 
								 | 
							
								{ if ( PL_unify_list(l, h, t) )
							 | 
						||
| 
								 | 
							
								    succeed;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if ( PL_get_nil(l) )
							 | 
						||
| 
								 | 
							
								    fail;
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  return PL_error(NULL, 0, NULL, ERR_TYPE, ATOM_list, l);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int
							 | 
						||
| 
								 | 
							
								PL_unify_nil_ex(term_t l)
							 | 
						||
| 
								 | 
							
								{ if ( PL_unify_nil(l) )
							 | 
						||
| 
								 | 
							
								    succeed;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if ( PL_is_list(l) )
							 | 
						||
| 
								 | 
							
								    fail;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return PL_error(NULL, 0, NULL, ERR_TYPE, ATOM_list, l);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int
							 | 
						||
| 
								 | 
							
								PL_get_list_ex(term_t l, term_t h, term_t t)
							 | 
						||
| 
								 | 
							
								{ if ( PL_get_list(l, h, t) )
							 | 
						||
| 
								 | 
							
								    succeed;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if ( PL_get_nil(l) )
							 | 
						||
| 
								 | 
							
								    fail;
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  return PL_error(NULL, 0, NULL, ERR_TYPE, ATOM_list, l);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int
							 | 
						||
| 
								 | 
							
								PL_get_nil_ex(term_t l)
							 | 
						||
| 
								 | 
							
								{ if ( PL_get_nil(l) )
							 | 
						||
| 
								 | 
							
								    succeed;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if ( PL_is_list(l) )
							 | 
						||
| 
								 | 
							
								    fail;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return PL_error(NULL, 0, NULL, ERR_TYPE, ATOM_list, l);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int
							 | 
						||
| 
								 | 
							
								PL_get_module_ex(term_t name, module_t *m)
							 | 
						||
| 
								 | 
							
								{ if ( !PL_get_module(name, m) )
							 | 
						||
| 
								 | 
							
								    return PL_error(NULL, 0, NULL, ERR_TYPE, ATOM_atom, name);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  succeed;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int
							 | 
						||
| 
								 | 
							
								PL_unify_bool_ex(term_t t, bool val)
							 | 
						||
| 
								 | 
							
								{ bool v;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if ( PL_is_variable(t) )
							 | 
						||
| 
								 | 
							
								    return PL_unify_atom(t, val ? ATOM_true : ATOM_false);
							 | 
						||
| 
								 | 
							
								  if ( PL_get_bool(t, &v) )
							 | 
						||
| 
								 | 
							
								  { if ( (!val && !v) || (val && v) )
							 | 
						||
| 
								 | 
							
								      succeed;
							 | 
						||
| 
								 | 
							
								    fail;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return PL_error(NULL, 0, NULL, ERR_TYPE, ATOM_bool, t);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								word
							 | 
						||
| 
								 | 
							
								notImplemented(char *name, int arity)
							 | 
						||
| 
								 | 
							
								{ return (word)PL_error(NULL, 0, NULL, ERR_NOT_IMPLEMENTED_PROC, name, arity);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 |