MINERVA superseeded IF/Prolog.
Please see
http://www.ifcomputer.co.jp/MINERVA
for details.
We discontinued to sell IF/Prolog Dec 31. 2003.
For current customers, we continue to provide
professional support for IF/Prolog until Dec 31, 2008.
/*
# (c) Copyright InterFace Computer GmbH, Munich, West Germany
# %Z% %M% v%I% %E% %U%
# cpro.h
*/
#include "cpred.h"
/* int QuMaxNum = N; must be defined by user */
int InitProlog(), ParseProlog(), RunProlog(), EndProlog(), ResetQueries(), InitParms();
#define INITProlog(argc,argv) InitProlog(argc,argv,stdin,stdout,stderr)
#define RESTARTED 2
#define RETMSGLEN 128
#define QuLOCInt(descr,i,addr) descr->var[i-1].type = Q_INTEGER; \
descr->var[i-1].loc.ivalue = addr
#define QuLOCDbl(descr,i,addr) descr->var[i-1].type = Q_DOUBLE; \
descr->var[i-1].loc.dvalue = addr
#define QuLOCStr(descr,i,addr) descr->var[i-1].type = Q_STRING; \
descr->var[i-1].loc.string = addr
#define QuUse(desc,i,mode) \
if (mode==FOR_INPUT) desc->var[i-1].type|=4; \
else desc->var[i-1].type&=3
#define QuIntPC(descr,i) IntPC(*descr->var[i-1].loc.term)
#define QuDblPC(descr,i) DblPC(*descr->var[i-1].loc.term)
#define QuAtStr(descr,i) AtStr(*descr->var[i-1].loc.term)
#define QuTerm(descr,i) *descr->var[i-1].loc.term
int QuType(); /* returns one of: */
#define Q_TERM (0)
#define Q_INTEGER (1)
#define Q_DOUBLE (2)
#define Q_STRING (3)
#define FOR_OUTPUT (0)
#define FOR_INPUT (4)
typedef struct {
int type;
char *name;
union {
TERM *term;
long *ivalue;
double *dvalue;
char **string;
} /* location */ loc;
} VarDescr;
typedef struct {
int qu_id;
TERM qu_goal;
int ret_code;
double cpu_time;
int parse_pos;
int exit_code;
char *ret_msg;
int no_vars;
VarDescr *var;
} QueryDescr;
|