30#ifndef _yap_c_interface_h
32#define _yap_c_interface_h 1
36#define __YAP_PROLOG__ 1
39#define YAPVERSION YAP_NUMERIC_VERSION
62#define __BEGIN_DECLS extern "C" {
86#define YAP_Deref(t) (t)
89extern YAP_Term YAP_A(
int);
90#define YAP_ARG1 YAP_A(1)
91#define YAP_ARG2 YAP_A(2)
92#define YAP_ARG3 YAP_A(3)
93#define YAP_ARG4 YAP_A(4)
94#define YAP_ARG5 YAP_A(5)
95#define YAP_ARG6 YAP_A(6)
96#define YAP_ARG7 YAP_A(7)
97#define YAP_ARG8 YAP_A(8)
98#define YAP_ARG9 YAP_A(9)
99#define YAP_ARG10 YAP_A(10)
100#define YAP_ARG11 YAP_A(11)
101#define YAP_ARG12 YAP_A(12)
102#define YAP_ARG13 YAP_A(13)
103#define YAP_ARG14 YAP_A(14)
104#define YAP_ARG15 YAP_A(15)
105#define YAP_ARG16 YAP_A(16)
108extern YAP_Term YAP_SetA(
int, YAP_Term);
111extern X_API YAP_Bool YAP_IsVarTerm(YAP_Term);
114extern X_API YAP_Bool YAP_IsNonVarTerm(YAP_Term);
117extern X_API YAP_Term YAP_MkVarTerm(
void);
120extern X_API YAP_Bool YAP_IsIntTerm(YAP_Term);
123extern X_API YAP_Bool YAP_IsLongIntTerm(YAP_Term);
126extern X_API YAP_Bool YAP_IsBigNumTerm(YAP_Term);
129extern X_API YAP_Bool YAP_IsRationalTerm(YAP_Term);
132extern X_API YAP_Bool YAP_IsFloatTerm(YAP_Term);
135extern X_API YAP_Bool YAP_IsNumberTerm(YAP_Term);
138extern X_API YAP_Bool YAP_IsDbRefTerm(YAP_Term);
141extern X_API YAP_Bool YAP_IsAtomTerm(YAP_Term);
144extern X_API YAP_Bool YAP_IsStringTerm(YAP_Term);
147extern X_API YAP_Bool YAP_IsPairTerm(YAP_Term);
150extern X_API YAP_Bool YAP_IsApplTerm(YAP_Term);
153extern X_API YAP_Bool YAP_IsCompoundTerm(YAP_Term);
156extern X_API YAP_Term YAP_MkIntTerm(YAP_Int);
159extern X_API YAP_Term YAP_MkStringTerm(
const char *);
162extern X_API YAP_Term YAP_MkUnsignedStringTerm(
const unsigned char *);
165extern X_API YAP_Term YAP_MkBigNumTerm(
void *);
168extern X_API YAP_Term YAP_MkRationalTerm(
void *);
171extern X_API
const unsigned char *YAP_UnsignedStringOfTerm(YAP_Term);
174extern X_API
const char *YAP_StringOfTerm(YAP_Term);
177extern X_API YAP_Int YAP_IntOfTerm(YAP_Term);
180extern X_API YAP_Bool YAP_BigNumOfTerm(YAP_Term t,
void *b);
183extern X_API YAP_Bool YAP_RationalOfTerm(YAP_Term,
void *);
186extern X_API YAP_Term YAP_MkFloatTerm(YAP_Float);
191extern X_API YAP_Float YAP_FloatOfTerm(YAP_Term);
194extern X_API YAP_Term YAP_MkAtomTerm(YAP_Atom);
197extern X_API YAP_Atom YAP_AtomOfTerm(YAP_Term);
199extern X_API YAP_Atom YAP_LookupAtom(
const char *c);
201extern X_API YAP_Atom YAP_LookupWideAtom(
const wchar_t *c);
203extern X_API YAP_Atom YAP_FullLookupAtom(
const char *c);
206extern X_API
size_t YAP_AtomNameLength(YAP_Atom);
208extern X_API YAP_Bool YAP_IsWideAtom(YAP_Atom a);
210extern X_API
const char *YAP_AtomName(YAP_Atom a);
212extern X_API
const wchar_t *YAP_WideAtomName(YAP_Atom a);
215extern X_API YAP_Term YAP_MkPairTerm(YAP_Term, YAP_Term);
217extern X_API YAP_Term YAP_MkListFromTerms(YAP_Term *, YAP_Int);
220extern X_API YAP_Term YAP_MkNewPairTerm(
void);
223extern X_API YAP_Term YAP_HeadOfTerm(YAP_Term);
226extern X_API YAP_Term YAP_TailOfTerm(YAP_Term);
229extern X_API YAP_Int YAP_SkipList(YAP_Term *, YAP_Term **);
232extern X_API YAP_Term YAP_TermNil(
void);
234extern X_API
int YAP_IsTermNil(YAP_Term);
236extern X_API YAP_Term YAP_MkApplTerm(YAP_Functor functor, YAP_UInt arity,
239extern X_API YAP_Term YAP_MkNewApplTerm(YAP_Functor f, YAP_UInt arity);
241extern X_API YAP_Functor YAP_FunctorOfTerm(YAP_Term t);
243extern X_API YAP_Term YAP_ArgOfTerm(YAP_UInt n, YAP_Term t);
245extern X_API YAP_Term *YAP_ArgsOfTerm(YAP_Term t);
247extern X_API YAP_Functor YAP_MkFunctor(YAP_Atom a, YAP_UInt n);
249extern X_API YAP_Atom YAP_NameOfFunctor(YAP_Functor g);
251extern X_API YAP_UInt YAP_ArityOfFunctor(YAP_Functor f);
254extern X_API
void *YAP_ExtraSpace(
void);
255extern X_API
void *YAP_ExtraSpaceCut(
void);
257#define YAP_PRESERVE_DATA(ptr, type) (ptr = (type *)YAP_ExtraSpace())
258#define YAP_PRESERVED_DATA(ptr, type) (ptr = (type *)YAP_ExtraSpace())
259#define YAP_PRESERVED_DATA_CUT(ptr, type) (ptr = (type *)YAP_ExtraSpaceCut())
261extern X_API YAP_Bool YAP_Unify(YAP_Term t1, YAP_Term t2);
263extern X_API
void YAP_UserCPredicate(
const char *, YAP_UserCPred,
268extern X_API
void YAP_UserCPredicateWithArgs(
const char *, YAP_UserCPred,
269 YAP_Arity, YAP_Term);
273extern X_API
void YAP_UserBackCPredicate(
const char *, YAP_UserCPred,
274 YAP_UserCPred, YAP_Arity, YAP_Arity);
279extern X_API
void YAP_UserBackCutCPredicate(
const char *name, YAP_UserCPred,
280 YAP_UserCPred, YAP_UserCPred,
281 YAP_Arity, YAP_Arity);
284extern X_API YAP_Int YAP_ListLength(YAP_Term);
289extern X_API YAP_Int YAP_CallProlog(YAP_Term t);
292extern X_API
void YAP_cut_up(
void);
294#define YAP_cut_succeed() \
300#define YAP_cut_fail() \
307extern X_API
void *YAP_AllocSpaceFromYap(
size_t);
310extern X_API
void *YAP_ReallocSpaceFromYap(
void *,
size_t);
313extern X_API
void YAP_FreeSpaceFromYap(
void *);
316extern X_API YAP_Int YAP_RunGoal(YAP_Term);
321extern X_API YAP_Int YAP_RunGoalOnce(YAP_Term);
324extern X_API YAP_Bool YAP_RestartGoal(
void);
327extern X_API YAP_Bool YAP_ShutdownGoal(
int);
330extern X_API YAP_Bool YAP_ContinueGoal(
void);
336extern X_API YAP_PredEntryPtr YAP_FunctorToPred(YAP_Functor);
339extern X_API YAP_PredEntryPtr YAP_AtomToPred(YAP_Atom);
341extern X_API YAP_PredEntryPtr YAP_FunctorToPredInModule(YAP_Functor,
345extern X_API YAP_PredEntryPtr YAP_AtomToPredInModule(YAP_Atom, YAP_Module);
348extern X_API YAP_Bool YAP_EnterGoal(YAP_PredEntryPtr, YAP_Term *,
358extern X_API YAP_Bool YAP_GoalHasException(YAP_Term *);
361extern X_API
void YAP_ClearExceptions(
void);
363extern X_API
int YAP_Reset(yap_reset_t reset,
bool reset_global);
365#define YAP_Error(id, inp, ...) \
366 YAP_Error__( __FILE__, __FUNCTION__, __LINE__, id, inp, __VA_ARGS__)
367extern X_API
void YAP_Error__(
const char *f,
const char *fn,
int pos,
int myerrno, YAP_Term t,
const char *buf, ...);
369extern X_API
char *YAP_WriteBuffer(YAP_Term,
char *,
size_t,
int);
375extern X_API YAP_Term YAP_CopyTerm(YAP_Term t);
380extern X_API
bool YAP_CompileClause(YAP_Term Cl);
382extern X_API
int YAP_NewExo(YAP_PredEntryPtr ap,
size_t data,
void *user_di);
384extern X_API
int YAP_AssertTuples(YAP_PredEntryPtr pred,
const YAP_Term *ts,
385 size_t offset,
size_t sz);
391extern X_API
void YAP_FastInit(
char saved_state[],
int argc,
char *
argv[]);
400extern X_API YAP_Term
YAP_Read(FILE *s);
412extern X_API
void YAP_Write(YAP_Term t, FILE *s,
int);
414extern X_API FILE *YAP_TermToStream(YAP_Term t);
416extern X_API
int YAP_InitConsult(
int mode,
const char *filename,
char *buf,
419extern X_API
void YAP_EndConsult(
int s,
int *previous_sno,
420 const char *previous_cwd);
422extern X_API
void YAP_Exit(
int);
425extern X_API
void YAP_PutValue(YAP_Atom, YAP_Term);
428extern X_API YAP_Term YAP_GetValue(YAP_Atom);
430extern X_API YAP_Term YAP_FloatsToList(YAP_Float *,
size_t);
431extern X_API YAP_Int YAP_ListToFloats(YAP_Term, YAP_Float *,
size_t);
433extern X_API YAP_Term YAP_IntsToList(YAP_Int *,
size_t);
434extern X_API YAP_Int YAP_ListToInts(YAP_Term, YAP_Int *,
size_t);
439extern X_API YAP_Term YAP_BufferToString(
const char *s);
441extern X_API YAP_Term YAP_NBufferToString(
const char *s,
size_t len);
444extern X_API YAP_Term YAP_WideBufferToString(
const wchar_t *);
446extern X_API YAP_Term YAP_NWideBufferToString(
const wchar_t *s,
size_t len);
448extern X_API YAP_Term YAP_BufferToAtomList(
const char *s);
450extern X_API YAP_Term YAP_NBufferToAtomList(
const char *s,
size_t len);
452extern X_API YAP_Term YAP_WideBufferToAtomList(
const wchar_t *s);
454extern X_API YAP_Term YAP_NWideBufferToAtomList(
const wchar_t *s,
size_t len);
456extern X_API YAP_Term YAP_NWideBufferToAtomDiffList(
const wchar_t *s,
457 YAP_Term t0,
size_t len);
459extern X_API YAP_Term YAP_BufferToDiffList(
const char *s, YAP_Term t0);
461extern X_API YAP_Term YAP_NBufferToDiffList(
const char *s, YAP_Term t0,
464extern X_API YAP_Term YAP_WideBufferToDiffList(
const wchar_t *s, YAP_Term t0);
466extern X_API YAP_Term YAP_NWideBufferToDiffList(
const wchar_t *s, YAP_Term t0,
469extern X_API YAP_Term YAP_ReadBuffer(
const char *s, YAP_Term *tp);
471extern X_API
int YAP_InitSocks(
const char *host,
long port);
476extern X_API YAP_Term *ArgsOfSFTerm();
478extern X_API YAP_Term MkSFTerm();
482extern X_API
void YAP_SetOutputMessage(
void);
484extern X_API
int YAP_StreamToFileNo(YAP_Term);
494extern X_API
void YAP_CloseAllOpenStreams(
void);
496extern X_API
void YAP_FlushAllStreams(
void);
505extern X_API YAP_handle_t YAP_NewSlots(
int);
532extern X_API
void YAP_Throw(YAP_Term);
535extern X_API
void YAP_AsyncThrow(YAP_Term);
538#define YAP_LookupModule(T) (T)
540#define YAP_ModuleName(mod) (mod)
543extern X_API
void YAP_Halt(
int);
546extern X_API YAP_Term *YAP_TopOfLocalStack(
void);
549extern X_API
void *YAP_Predicate(YAP_Atom, YAP_Arity, YAP_Term);
552extern X_API
void YAP_PredicateInfo(
void *, YAP_Atom *, YAP_Arity *,
556extern X_API YAP_Module YAP_CurrentModule(
void);
559extern X_API YAP_Module YAP_SetCurrentModule(YAP_Module);
562extern X_API YAP_Module YAP_CreateModule(YAP_Atom);
565extern X_API YAP_Term YAP_StripModule(YAP_Term, YAP_Module *);
568extern X_API
int YAP_AtomGetHold(YAP_Atom);
571extern X_API
int YAP_AtomReleaseHold(YAP_Atom);
574extern X_API YAP_agc_hook YAP_AGCRegisterHook(YAP_agc_hook hook);
577extern X_API
int YAP_HaltRegisterHook(YAP_halt_hook,
void *);
580extern X_API
char *YAP_cwd(
void);
583extern X_API
int YAP_ThreadSelf(
void);
585extern X_API
int YAP_ThreadAttachEngine(
int);
586extern X_API
int YAP_ThreadDetachEngine(
int);
587extern X_API
int YAP_ThreadDestroyEngine(
int);
590extern X_API YAP_Term YAP_MkBlobTerm(
unsigned int);
591extern X_API
void *YAP_BlobOfTerm(YAP_Term);
594extern X_API
int YAP_CompareTerms(YAP_Term, YAP_Term);
597extern X_API YAP_Term YAP_OpenList(
int);
598extern X_API YAP_Term YAP_ExtendList(YAP_Term, YAP_Term);
599extern X_API
int YAP_CloseList(YAP_Term, YAP_Term);
602extern X_API
int YAP_IsAttVar(YAP_Term);
603extern X_API YAP_Term YAP_AttsOfVar(YAP_Term);
606extern X_API
void *YAP_FileDescriptorFromStream(YAP_Term);
607extern X_API
int YAP_FileNoFromStream(YAP_Term);
610extern X_API
void *YAP_Record(YAP_Term);
611extern X_API YAP_Term YAP_Recorded(
void *);
612extern X_API
int YAP_Erase(
void *);
615extern X_API
int YAP_Variant(YAP_Term, YAP_Term);
616extern X_API YAP_Int YAP_NumberVars(YAP_Term, YAP_Int);
617extern X_API YAP_Term YAP_UnNumberVars(YAP_Term);
618extern X_API
int YAP_IsNumberedVariable(YAP_Term);
619extern X_API
int YAP_Unifiable(YAP_Term, YAP_Term);
620extern X_API
int YAP_ExactlyEqual(YAP_Term, YAP_Term);
621extern X_API YAP_Int YAP_TermHash(YAP_Term, YAP_Int, YAP_Int,
int);
623extern X_API
void YAP_signal(
int);
626extern X_API YAP_Term YAP_GetYAPFlag(YAP_Term flag);
627extern X_API
int YAP_SetYAPFlag(YAP_Term flag, YAP_Term set);
630extern X_API YAP_Int YAP_VarSlotToNumber(YAP_Int);
633extern X_API YAP_Term YAP_ModuleUser(
void);
636extern X_API YAP_Int YAP_NumberOfClausesForPredicate(YAP_PredEntryPtr);
639extern X_API
int YAP_MaxOpPriority(YAP_Atom, YAP_Term);
642extern X_API
int YAP_OpInfo(YAP_Atom, YAP_Term,
int,
int *,
int *);
644extern X_API YAP_Bool YAP_IsExternalDataInStackTerm(YAP_Term);
646extern X_API YAP_Term YAP_AllocExternalDataInStack(
size_t bytes);
648extern X_API
void *YAP_ExternalDataInStackFromTerm(YAP_Term t);
650extern X_API YAP_Bool YAP_IsExternalDataInStackTerm(YAP_Term t);
652extern X_API YAP_opaque_tag_t
655extern X_API YAP_Bool YAP_IsOpaqueObjectTerm(YAP_Term t, YAP_opaque_tag_t tag);
657extern X_API YAP_Term YAP_NewOpaqueObject(YAP_opaque_tag_t tag,
size_t bytes);
659extern X_API
void *YAP_OpaqueObjectFromTerm(YAP_Term t);
661extern X_API YAP_CELL *YAP_HeapStoreOpaqueTerm(YAP_Term t);
663extern X_API
int YAP_Argv(
char ***);
665extern X_API
bool YAP_DelayInit(YAP_ModInit_t f,
const char s[]);
667extern X_API YAP_tag_t YAP_TagOfTerm(YAP_Term);
669extern X_API
size_t YAP_ExportTerm(YAP_Term,
char *,
size_t);
671extern X_API
size_t YAP_SizeOfExportedTerm(
char *);
673extern X_API YAP_Term YAP_ImportTerm(
char *);
675extern X_API
int YAP_RequiresExtraStack(
size_t);
701extern X_API
void *YAP_foreign_stream(
int sno);
703extern X_API YAP_Int YAP_AtomToInt(YAP_Atom At);
705extern X_API YAP_Atom YAP_IntToAtom(YAP_Int i);
707extern X_API YAP_Int YAP_FunctorToInt(YAP_Functor At);
709extern X_API YAP_Functor YAP_IntToFunctor(YAP_Int i);
711extern X_API YAP_PredEntryPtr YAP_TopGoal(
void);
715#define YAP_InitCPred(N, A, F) YAP_UserCPredicate(N, F, A)
717extern X_API
void * YAP_PointerOfTerm(YAP_Term t);
719#define YAP_MkPointerTerm(ptr) YAP_MkIntTerm((YAP_Int)(ptr))
722extern X_API
void * YAP_FetchArray(YAP_Term t1, intptr_t *sz,
int *type);
X_API void * YAP_GetStreamFromId(int no)
given a stream descriptor or stream alias (see open/3 ), return YAP's internal handle
X_API YAP_handle_t YAP_ArgsToSlots(int)
copies the first new n YAAM registers to slots
X_API YAP_Term * YAP_AddressFromSlot(YAP_handle_t)
get the memory address of a slot
X_API void YAP_StartSlots(void)
initialize the slot data-structure: all existing slots will be discarded
X_API YAP_Term YAP_Read(FILE *s)
read a Prolog term from an operating system stream $s$
X_API void YAP_EndSlots(void)
discard all existing slots: operates as
X_API YAP_Term * YAP_AddressOfTermInSlot(YAP_handle_t)
get the memory address of the term actually stored in a slot
X_API YAP_file_type_t YAP_parse_yap_arguments(int argc, char *argv[], YAP_init_args *iap)
YAP_parse_yap_arguments(int argc, char *argv[], YAP_init_args *iap)
X_API YAP_Term YAP_ReadClauseFromStream(int s, YAP_Term varNames, YAP_Term)
read a Prolog clause from a Prolog opened stream $s$
X_API void * YAP_RepStreamFromId(int sno)
Utility routine to Obtain a pointer to the YAP representation of a stream.
X_API YAP_Term YAP_GetFromSlot(YAP_handle_t)
read from a slot
X_API YAP_Term YAP_ReadFromStream(int s)
read a Prolog term from a Prolog opened stream $s$
X_API bool YAP_DelayInit(YAP_ModInit_t f, const char s[])
YAP_DelayInit()
X_API char * YAP_WriteDynamicBuffer(YAP_Term t, YAP_encoding_t enc, int flags)
write a a term to n user-provided buffer: make sure not tp overflow the buffer even if the text is mu...
X_API int YAP_RecoverSlots(int n, YAP_handle_t top_slot)
Succeeds if it recovers the space allocated for $n$ contiguous slots starting at topSlot.
X_API YAP_handle_t YAP_CurrentSlot(void)
report the current position of the slots, assuming that they occupy the top of the stack
@ argv
read-only atom, it describes the list with all arguments received by YAP at boot
X_API size_t YAP_UTF8_TextLength(Term t)
Output the number of bytes needed to represent a string in UTF-8 Note that the terminating zero is no...
X_API void YAP_PutInSlot(YAP_handle_t slot, YAP_Term t)
store term in a slot
X_API void YAP_SlotsToArgs(int HowMany, YAP_handle_t slot)
copies n slots such that sl is copied to the last abstract ,achine register
X_API char * YAP_StringToBuffer(Term t, char *buf, unsigned int bufsize)
copy a string to a buffer, the buffer must have been malloced
X_API yhandle_t YAP_InitSlot(YAP_Term t)
allocate n empty new slots
opaque variables can interact with the system