diff --git a/H/YapText.h b/H/YapText.h index 4f80f6f46..33091b20c 100644 --- a/H/YapText.h +++ b/H/YapText.h @@ -28,7 +28,7 @@ * mirroring */ -#include "../utf8proc/utf8proc.h" +#include "utf8proc.h" #include "Yap.h" /// allocate a temporary text block @@ -51,15 +51,15 @@ extern void *export_block(void *blk); /* Character types for tokenizer and write.c */ extern int AllocLevel(void); -#define push_text_stack() \ - (/* fprintf(stderr, "^ %*c %s:%s:%d\n", AllocLevel(), AllocLevel()+'0', \ - __FILE__, __FUNCTION__, __LINE__), */ \ +#define push_text_stack() \ + (/* fprintf(stderr, "^ %*c %s:%s:%d\n", AllocLevel(), AllocLevel()+'0', \ + __FILE__, __FUNCTION__, __LINE__), */ \ push_text_stack__(PASS_REGS1)) extern int push_text_stack__(USES_REGS1); -#define pop_text_stack(lvl) \ - (/*fprintf(stderr, "v %*c %s:%s:%d\n", AllocLevel(), ' ', __FILE__, \ - __FUNCTION__, __LINE__),*/ \ +#define pop_text_stack(lvl) \ + (/*fprintf(stderr, "v %*c %s:%s:%d\n", AllocLevel(), ' ', __FILE__, \ + __FUNCTION__, __LINE__),*/ \ pop_text_stack__(lvl)) extern int pop_text_stack__(int lvl USES_REGS); diff --git a/H/Yatom.h b/H/Yatom.h index 916c774e4..3b0c8b4ed 100755 --- a/H/Yatom.h +++ b/H/Yatom.h @@ -1,19 +1,19 @@ /************************************************************************* -* * -* YAP Prolog %W% %G% -* * -* Yap Prolog was developed at NCCUP - Universidade do Porto * -* * -* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 * -* * -************************************************************************** -* * -* File: YAtom.h.m4 * -* Last rev: 19/2/88 * -* mods: * -* comments: atom properties header file for YAP * -* * -*************************************************************************/ + * * + * YAP Prolog %W% %G% + * * + * Yap Prolog was developed at NCCUP - Universidade do Porto * + * * + * Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 * + * * + ************************************************************************** + * * + * File: YAtom.h.m4 * + * Last rev: 19/2/88 * + * mods: * + * comments: atom properties header file for YAP * + * * + *************************************************************************/ /* This code can only be defined *after* including Regs.h!!! */ @@ -106,73 +106,73 @@ INLINE_ONLY inline EXTERN Prop AbsFunctorProp(FunctorEntry *p) { #endif - INLINE_ONLY inline EXTERN arity_t ArityOfFunctor(Functor); +INLINE_ONLY inline EXTERN arity_t ArityOfFunctor(Functor); - INLINE_ONLY inline EXTERN arity_t ArityOfFunctor(Functor Fun) { - return (arity_t)(((FunctorEntry *)Fun)->ArityOfFE); - } +INLINE_ONLY inline EXTERN arity_t ArityOfFunctor(Functor Fun) { + return (arity_t)(((FunctorEntry *)Fun)->ArityOfFE); +} - INLINE_ONLY inline EXTERN Atom NameOfFunctor(Functor); +INLINE_ONLY inline EXTERN Atom NameOfFunctor(Functor); - INLINE_ONLY inline EXTERN Atom NameOfFunctor(Functor Fun) { - return (Atom)(((FunctorEntry *)Fun)->NameOfFE); - } +INLINE_ONLY inline EXTERN Atom NameOfFunctor(Functor Fun) { + return (Atom)(((FunctorEntry *)Fun)->NameOfFE); +} - INLINE_ONLY inline EXTERN PropFlags IsFunctorProperty(int); +INLINE_ONLY inline EXTERN PropFlags IsFunctorProperty(int); - INLINE_ONLY inline EXTERN PropFlags IsFunctorProperty(int flags) { - return (PropFlags)((flags == FunctorProperty)); - } +INLINE_ONLY inline EXTERN PropFlags IsFunctorProperty(int flags) { + return (PropFlags)((flags == FunctorProperty)); +} - /* summary of property codes used +/* summary of property codes used - 00 00 predicate entry - 80 00 db property - bb 00 functor entry - ff df sparse functor - ff ex arithmetic property - ff f4 translation - ff f5 blob - ff f6 hold - ff f7 array - ff f8 wide atom - ff fa module property - ff fb blackboard property - ff fc value property - ff fd global property - ff fe flag property - ff ff op property - */ + 00 00 predicate entry + 80 00 db property + bb 00 functor entry + ff df sparse functor + ff ex arithmetic property + ff f4 translation + ff f5 blob + ff f6 hold + ff f7 array + ff f8 wide atom + ff fa module property + ff fb blackboard property + ff fc value property + ff fd global property + ff fe flag property + ff ff op property +*/ - /* Global Variable property */ - typedef struct global_entry { - Prop NextOfPE; /* used to chain properties */ - PropFlags KindOfPE; /* kind of property */ +/* Global Variable property */ +typedef struct global_entry { + Prop NextOfPE; /* used to chain properties */ + PropFlags KindOfPE; /* kind of property */ #if defined(YAPOR) || defined(THREADS) - rwlock_t GRWLock; /* a simple lock to protect this entry */ + rwlock_t GRWLock; /* a simple lock to protect this entry */ #if THREADS - unsigned int owner_id; /* owner thread */ + unsigned int owner_id; /* owner thread */ #endif #endif - struct AtomEntryStruct *AtomOfGE; /* parent atom for deletion */ - struct global_entry *NextGE; /* linked list of global entries */ - Term global; /* index in module table */ - Term AttChain; /* index in module table */ - } GlobalEntry; + struct AtomEntryStruct *AtomOfGE; /* parent atom for deletion */ + struct global_entry *NextGE; /* linked list of global entries */ + Term global; /* index in module table */ + Term AttChain; /* index in module table */ +} GlobalEntry; #if USE_OFFSETS_IN_PROPS - INLINE_ONLY inline EXTERN GlobalEntry *RepGlobalProp(Prop p); +INLINE_ONLY inline EXTERN GlobalEntry *RepGlobalProp(Prop p); - INLINE_ONLY inline EXTERN GlobalEntry *RepGlobalProp(Prop p) { - return (GlobalEntry *)(AtomBase + Unsigned(p)); - } +INLINE_ONLY inline EXTERN GlobalEntry *RepGlobalProp(Prop p) { + return (GlobalEntry *)(AtomBase + Unsigned(p)); +} - INLINE_ONLY inline EXTERN Prop AbsGlobalProp(GlobalEntry *p); +INLINE_ONLY inline EXTERN Prop AbsGlobalProp(GlobalEntry *p); - INLINE_ONLY inline EXTERN Prop AbsGlobalProp(GlobalEntry *p) { - return (Prop)(Addr(p) - AtomBase); - } +INLINE_ONLY inline EXTERN Prop AbsGlobalProp(GlobalEntry *p) { + return (Prop)(Addr(p) - AtomBase); +} #else @@ -443,40 +443,53 @@ don't forget to also add in qly.h */ /// Different predicate flags typedef uint64_t pred_flags_t; -#define UndefPredFlag ((pred_flags_t)0x4000000000) //< Predicate not explicitely defined. -#define ProfiledPredFlag ((pred_flags_t)0x2000000000) //< pred is being profiled -#define DiscontiguousPredFlag ((pred_flags_t)0x1000000000) //< predicates whose clauses may be all-over the place.. -#define SysExportPredFlag ((pred_flags_t)0x800000000) //< reuse export list to prolog module. -#define NoTracePredFlag ((pred_flags_t)0x400000000) //< cannot trace this predicate -#define NoSpyPredFlag ((pred_flags_t)0x200000000) //< cannot spy this predicate -#define QuasiQuotationPredFlag ((pred_flags_t)0x100000000) //< SWI-like quasi quotations -#define MegaClausePredFlag ((pred_flags_t)0x80000000) //< predicate is implemented as a mega-clause +#define UndefPredFlag \ + ((pred_flags_t)0x4000000000) //< Predicate not explicitely defined. +#define ProfiledPredFlag ((pred_flags_t)0x2000000000) //< pred is being profiled +#define DiscontiguousPredFlag \ + ((pred_flags_t)0x1000000000) //< predicates whose clauses may be all-over the + // place.. +#define SysExportPredFlag \ + ((pred_flags_t)0x800000000) //< reuse export list to prolog module. +#define NoTracePredFlag \ + ((pred_flags_t)0x400000000) //< cannot trace this predicate +#define NoSpyPredFlag ((pred_flags_t)0x200000000) //< cannot spy this predicate +#define QuasiQuotationPredFlag \ + ((pred_flags_t)0x100000000) //< SWI-like quasi quotations +#define MegaClausePredFlag \ + ((pred_flags_t)0x80000000) //< predicate is implemented as a mega-clause #define ThreadLocalPredFlag ((pred_flags_t)0x40000000) //< local to a thread #define MultiFileFlag ((pred_flags_t)0x20000000) //< is multi-file #define UserCPredFlag ((pred_flags_t)0x10000000) //< CPred defined by the user -#define LogUpdatePredFlag ((pred_flags_t)0x08000000) //< dynamic predicate with log. upd. sem. +#define LogUpdatePredFlag \ + ((pred_flags_t)0x08000000) //< dynamic predicate with log. upd. sem. #define InUsePredFlag ((pred_flags_t)0x04000000) //< count calls to pred #define CountPredFlag ((pred_flags_t)0x02000000) //< count calls to pred #define HiddenPredFlag ((pred_flags_t)0x01000000) //< invisible predicate -#define CArgsPredFlag ((pred_flags_t)0x00800000) //< SWI-like C-interface pred. -#define SourcePredFlag ((pred_flags_t)0x00400000) //< static predicate with source declaration -#define MetaPredFlag ((pred_flags_t)0x00200000) //< predicate subject to a meta declaration -#define SyncPredFlag ((pred_flags_t)0x00100000) //< has to synch before it can execute -#define NumberDBPredFlag ((pred_flags_t)0x00080000) //< entry for an atom key -#define AtomDBPredFlag ((pred_flags_t)0x00040000) //< entry for a number key -// #define GoalExPredFlag ((pred_flags_t)0x00020000) /// predicate that is called by goal_expand -#define TestPredFlag ((pred_flags_t)0x00010000) //< is a test (optim. comit) -#define AsmPredFlag ((pred_flags_t)0x00008000) //< inline +#define CArgsPredFlag ((pred_flags_t)0x00800000) //< SWI-like C-interface pred. +#define SourcePredFlag \ + ((pred_flags_t)0x00400000) //< static predicate with source declaration +#define MetaPredFlag \ + ((pred_flags_t)0x00200000) //< predicate subject to a meta declaration +#define SyncPredFlag \ + ((pred_flags_t)0x00100000) //< has to synch before it can execute +#define NumberDBPredFlag ((pred_flags_t)0x00080000) //< entry for an atom key +#define AtomDBPredFlag ((pred_flags_t)0x00040000) //< entry for a number key +// #define GoalExPredFlag ((pred_flags_t)0x00020000) /// predicate that is +// called by goal_expand +#define TestPredFlag ((pred_flags_t)0x00010000) //< is a test (optim. comit) +#define AsmPredFlag ((pred_flags_t)0x00008000) //< inline #define StandardPredFlag ((pred_flags_t)0x00004000) //< system predicate #define DynamicPredFlag ((pred_flags_t)0x00002000) //< dynamic predicate #define CPredFlag ((pred_flags_t)0x00001000) //< written in C -#define SafePredFlag ((pred_flags_t)0x00000800) //< does not alter arguments +#define SafePredFlag ((pred_flags_t)0x00000800) //< does not alter arguments #define CompiledPredFlag ((pred_flags_t)0x00000400) //< is static #define IndexedPredFlag ((pred_flags_t)0x00000200) //< has indexing code #define SpiedPredFlag ((pred_flags_t)0x00000100) //< is a spy point #define BinaryPredFlag ((pred_flags_t)0x00000080) //< test predicate #define TabledPredFlag ((pred_flags_t)0x00000040) //< is tabled -#define SequentialPredFlag ((pred_flags_t)0x00000020) //< may not create parallel choice points! +#define SequentialPredFlag \ + ((pred_flags_t)0x00000020) //< may not create parallel choice points! #define BackCPredFlag ((pred_flags_t)0x00000008) //< Myddas Imported pred #define ModuleTransparentPredFlag ((pred_flags_t)0x00000004) #define SWIEnvPredFlag ((pred_flags_t)0x00000002) //< new SWI interface @@ -487,9 +500,9 @@ typedef uint64_t pred_flags_t; #define ForeignPredFlags \ (AsmPredFlag | SWIEnvPredFlag | CPredFlag | BinaryPredFlag | UDIPredFlag | \ CArgsPredFlag | UserCPredFlag | SafePredFlag | BackCPredFlag) -#define LivePredFlags \ - (LogUpdatePredFlag|MultiFileFlag|TabledPredFlag|ForeignPredFlags) - +#define LivePredFlags \ + (LogUpdatePredFlag | MultiFileFlag | TabledPredFlag | ForeignPredFlags) + #define StatePredFlags \ (InUsePredFlag | CountPredFlag | SpiedPredFlag | IndexedPredFlag) #define is_system(pe) (pe->PredFlags & SystemPredFlags) @@ -705,8 +718,8 @@ typedef struct DB_STRUCT { struct DB_STRUCT *p, *n; /* entry's age, negative if from recorda, positive if it was recordz */ CELL Mask; /* parts that should be cleared */ - CELL Key; /* A mask that can be used to check before - you unify */ + CELL Key; /* A mask that can be used to check before + you unify */ DBTerm DBT; } DBStruct; @@ -1178,7 +1191,7 @@ INLINE_ONLY inline EXTERN bool IsArrayProperty(PropFlags flags) { typedef struct YAP_blob_prop_entry { Prop NextOfPE; /* used to chain properties */ PropFlags KindOfPE; /* kind of property */ - struct YAP_blob_t *blob_type; /* type of blob */ + struct _PL_blob_t *blob_type; /* type of blob */ } YAP_BlobPropEntry; #if USE_OFFSETS_IN_PROPS @@ -1501,7 +1514,8 @@ INLINE_ONLY EXTERN inline Prop PredPropByAtomAndMod(Atom at, Term cur_mod) p0 = ae->PropsOfAE; while (p0) { PredEntry *pe = RepPredProp(p0); - if (pe->KindOfPE == PEProp && (pe->ModuleOfPred == cur_mod || pe->ModuleOfPred == 0)) { + if (pe->KindOfPE == PEProp && + (pe->ModuleOfPred == cur_mod || pe->ModuleOfPred == 0)) { #ifdef THREADS /* Thread Local Predicates */ if (pe->PredFlags & ThreadLocalPredFlag) { @@ -1539,8 +1553,8 @@ INLINE_ONLY EXTERN inline void AddPropToAtom(AtomEntry *, PropEntry *p); INLINE_ONLY EXTERN inline void AddPropToAtom(AtomEntry *ae, PropEntry *p) { /* old properties should be always last, and wide atom properties should always be first */ - p->NextOfPE = ae->PropsOfAE; - ae->PropsOfAE = AbsProp(p); + p->NextOfPE = ae->PropsOfAE; + ae->PropsOfAE = AbsProp(p); } // auxiliary functions diff --git a/H/blobs.h b/H/blobs.h deleted file mode 100644 index 0e0f73803..000000000 --- a/H/blobs.h +++ /dev/null @@ -1,81 +0,0 @@ -// -// blobs.h -// yap -// -// Created by VITOR SANTOS COSTA on 09/05/15. -// Copyright (c) 2015 VITOR SANTOS COSTA. All rights reserved. -// - -// based on the SWI Blob implementation, an extension of atoms for SWI-Prolog - -#ifndef BLOBS_H -#define BLOBS_H - -#if !defined(X_API) && !defined(SWIGYAP) -#if (defined(_MSC_VER) || defined(__MINGW32__)) && defined(PL_KERNEL) -#define X_API __declspec(dllexport) -#else -#define X_API -#endif -#endif - -/******************************* - * BLOBS * - *******************************/ - -#define YAP_BLOB_MAGIC_B 0x75293a00 /* Magic to validate a blob-type */ -#define PL_BLOB_VERSION (YAP_BLOB_MAGIC_B|PL_BLOB_VERSION) - -#define PL_BLOB_UNIQUE 0x01 /* Blob content is unique */ -#define PL_BLOB_TEXT 0x02 /* blob contains text */ -#define PL_BLOB_NOCOPY 0x04 /* do not copy the data */ -#define PL_BLOB_WCHAR 0x08 /* wide character string */ - -typedef struct YAP_blob_t -{ uintptr_t magic; /* YAP_BLOB_MAGIC */ - uintptr_t flags; /* YAP_BLOB_* */ - char * name; /* name of the type */ - int (*release)(Atom a); - int (*compare)(Atom a, Atom b); -#ifdef SIO_MAGIC - int (*write)(FILE *s, Atom a, int flags); -#else - int (*write)(void *s, Atom a, int flags); -#endif - void (*acquire)(Atom a); -#ifdef SIO_MAGIC - int (*save)(Atom a, FILE *s); - Atom (*load)(FILE *s); -#else - int (*save)(Atom a, void*); - Atom (*load)(void *s); -#endif - /* private */ - void * reserved[10]; /* for future extension */ - int registered; /* Already registered? */ - int rank; /* Rank for ordering atoms */ - struct YAP_blob_t * next; /* next in registered type-chain */ - Atom atom_name; /* Name as atom */ -} blob_type_t; - -int Yap_write_blob(AtomEntry *ref, FILE *stream); -char * Yap_blob_to_string(AtomEntry *ref, const char *s, size_t sz); -X_API bool YAP_is_blob(YAP_Term t, blob_type_t **type); -X_API bool YAP_unify_blob(YAP_Term *t, void *blob, size_t len, - blob_type_t *type); -X_API bool YAP_put_blob(YAP_Term *t, void *blob, size_t len, - blob_type_t *type); -X_API bool YAP_get_blob(YAP_Term t, void **blob, size_t *len, - blob_type_t **type); - -X_API void* YAP_blob_data(Atom a, - size_t *len, - struct YAP_blob_t **type); - -X_API void YAP_register_blob_type(blob_type_t *type); -X_API blob_type_t* YAP_find_blob_type(const char* name); -//YAP_blob_type_t* YAP_find_blob_type(Atom at); -X_API bool YAP_unregister_blob_type(blob_type_t *type); - - -#endif diff --git a/include/SWI-Prolog.h b/include/SWI-Prolog.h index 69735c8e1..d66d34a2a 100755 --- a/include/SWI-Prolog.h +++ b/include/SWI-Prolog.h @@ -6,7 +6,7 @@ * Date: 21 January 2002 * Copyright (c) 2002 Steve Moyle and Vitor Santos Costa. All rights reserved. - + */ @@ -18,14 +18,13 @@ extern "C" { #endif //=== includes =============================================================== -#ifdef YAP_KERNEL -#include "config.h" +#ifdef YAP_KERNEL +#include "config.h" #ifdef __cplusplus } #endif - #if USE_GMP #if defined(__cplusplus) #include @@ -38,19 +37,19 @@ extern "C" { extern "C" { #endif -#include "YapInterface.h" +#include "YapInterface.h" #else #if _YAP_NOT_INSTALLED_ -#include -#include +#include +#include #else -#include -#include +#include +#include #endif #endif -#include -#include -#include +#include +#include +#include #if HAVE_TIME_H #include #endif @@ -76,28 +75,24 @@ typedef int _Bool; #endif #endif - #include "pl-types.h" - - - - /******************************* - * EXPORT * - *******************************/ +/******************************* + * EXPORT * + *******************************/ /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - See SWI-Prolog.h, containing the same code for an explanation on this stuff. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ -#define PL_EXPORT(type) extern X_API type -#define PL_EXPORT_DATA(type) extern X_API type -#define install_t O_API void +#define PL_EXPORT(type) extern X_API type +#define PL_EXPORT_DATA(type) extern X_API type +#define install_t O_API void - /******************************* - * GCC ATTRIBUTES * - *******************************/ +/******************************* + * GCC ATTRIBUTES * + *******************************/ #if __GNUC__ >= 4 #define WUNUSED __attribute__((warn_unused_result)) @@ -105,182 +100,180 @@ stuff. #define WUNUSED #endif - #include "pl-types.h" -typedef struct _PL_extension -{ const char *predicate_name; /* Name of the predicate */ - short arity; /* Arity of the predicate */ - pl_function_t function; /* Implementing functions */ - short flags; /* Or of PL_FA_... */ +typedef struct _PL_extension { + const char *predicate_name; /* Name of the predicate */ + short arity; /* Arity of the predicate */ + pl_function_t function; /* Implementing functions */ + short flags; /* Or of PL_FA_... */ } PL_extension; -#define PL_THREAD_NO_DEBUG 0x01 /* Start thread in nodebug mode */ +#define PL_THREAD_NO_DEBUG 0x01 /* Start thread in nodebug mode */ -typedef struct -{ unsigned long local_size; /* Stack sizes */ - unsigned long global_size; - unsigned long trail_size; - unsigned long argument_size; - char * alias; /* alias name */ - int (*cancel)(int id); /* cancel function */ - intptr_t flags; /* PL_THREAD_* flags */ - void * reserved[5]; /* reserved for extensions */ +typedef struct { + unsigned long local_size; /* Stack sizes */ + unsigned long global_size; + unsigned long trail_size; + unsigned long argument_size; + char *alias; /* alias name */ + int (*cancel)(int id); /* cancel function */ + intptr_t flags; /* PL_THREAD_* flags */ + void *reserved[5]; /* reserved for extensions */ } PL_thread_attr_t; typedef void *PL_engine_t; - -#define PL_FA_NOTRACE (0x01) /* foreign cannot be traced */ -#define PL_FA_TRANSPARENT (0x02) /* foreign is module transparent */ -#define PL_FA_NONDETERMINISTIC (0x04) /* foreign is non-deterministic */ -#define PL_FA_VARARGS (0x08) /* call using t0, ac, ctx */ -#define PL_FA_CREF (0x10) /* Internal: has clause-reference */ -#define PL_FA_ISO (0x20) /* Internal: ISO core predicate */ +#define PL_FA_NOTRACE (0x01) /* foreign cannot be traced */ +#define PL_FA_TRANSPARENT (0x02) /* foreign is module transparent */ +#define PL_FA_NONDETERMINISTIC (0x04) /* foreign is non-deterministic */ +#define PL_FA_VARARGS (0x08) /* call using t0, ac, ctx */ +#define PL_FA_CREF (0x10) /* Internal: has clause-reference */ +#define PL_FA_ISO (0x20) /* Internal: ISO core predicate */ /* begin from pl-itf.h */ -#define PL_VARIABLE (1) /* nothing */ -#define PL_ATOM (2) /* const char * */ -#define PL_INTEGER (3) /* int */ -#define PL_FLOAT (4) /* double */ -#define PL_STRING (5) /* const char * */ -#define PL_TERM (6) +#define PL_VARIABLE (1) /* nothing */ +#define PL_ATOM (2) /* const char * */ +#define PL_INTEGER (3) /* int */ +#define PL_FLOAT (4) /* double */ +#define PL_STRING (5) /* const char * */ +#define PL_TERM (6) - /* PL_unify_term() */ -#define PL_FUNCTOR (10) /* functor_t, arg ... */ -#define PL_LIST (11) /* length, arg ... */ -#define PL_CHARS (12) /* const char * */ -#define PL_POINTER (13) /* void * */ - /* PlArg::PlArg(text, type) */ -#define PL_CODE_LIST (14) /* [ascii...] */ -#define PL_CHAR_LIST (15) /* [h,e,l,l,o] */ -#define PL_BOOL (16) /* PL_set_feature() */ -#define PL_FUNCTOR_CHARS (17) /* PL_unify_term() */ -#define PL_PREDICATE_INDICATOR (18) /* predicate_t (Procedure) */ -#define PL_SHORT (19) /* short */ -#define PL_INT (20) /* int */ -#define PL_LONG (21) /* long */ -#define PL_DOUBLE (22) /* double */ -#define PL_NCHARS (23) /* unsigned, const char * */ -#define PL_UTF8_CHARS (24) /* const char * */ -#define PL_UTF8_STRING (25) /* const char * */ -#define PL_INT64 (26) /* int64_t */ -#define PL_NUTF8_CHARS (27) /* unsigned, const char * */ -#define PL_NUTF8_CODES (29) /* unsigned, const char * */ -#define PL_NUTF8_STRING (30) /* unsigned, const char * */ -#define PL_NWCHARS (31) /* unsigned, const wchar_t * */ -#define PL_NWCODES (32) /* unsigned, const wchar_t * */ -#define PL_NWSTRING (33) /* unsigned, const wchar_t * */ -#define PL_MBCHARS (34) /* const char * */ -#define PL_MBCODES (35) /* const char * */ -#define PL_MBSTRING (36) /* const char * */ -#define PL_INTPTR (37) /* intptr_t */ -#define PL_CHAR (38) /* int */ -#define PL_CODE (39) /* int */ -#define PL_BYTE (40) /* int */ - /* PL_skip_list() */ -#define PL_PARTIAL_LIST (41) /* a partial list */ -#define PL_CYCLIC_TERM (42) /* a cyclic list/term */ -#define PL_NOT_A_LIST (43) /* Object is not a list */ +/* PL_unify_term() */ +#define PL_FUNCTOR (10) /* functor_t, arg ... */ +#define PL_LIST (11) /* length, arg ... */ +#define PL_CHARS (12) /* const char * */ +#define PL_POINTER (13) /* void * */ + /* PlArg::PlArg(text, type) */ +#define PL_CODE_LIST (14) /* [ascii...] */ +#define PL_CHAR_LIST (15) /* [h,e,l,l,o] */ +#define PL_BOOL (16) /* PL_set_feature() */ +#define PL_FUNCTOR_CHARS (17) /* PL_unify_term() */ +#define PL_PREDICATE_INDICATOR (18) /* predicate_t (Procedure) */ +#define PL_SHORT (19) /* short */ +#define PL_INT (20) /* int */ +#define PL_LONG (21) /* long */ +#define PL_DOUBLE (22) /* double */ +#define PL_NCHARS (23) /* unsigned, const char * */ +#define PL_UTF8_CHARS (24) /* const char * */ +#define PL_UTF8_STRING (25) /* const char * */ +#define PL_INT64 (26) /* int64_t */ +#define PL_NUTF8_CHARS (27) /* unsigned, const char * */ +#define PL_NUTF8_CODES (29) /* unsigned, const char * */ +#define PL_NUTF8_STRING (30) /* unsigned, const char * */ +#define PL_NWCHARS (31) /* unsigned, const wchar_t * */ +#define PL_NWCODES (32) /* unsigned, const wchar_t * */ +#define PL_NWSTRING (33) /* unsigned, const wchar_t * */ +#define PL_MBCHARS (34) /* const char * */ +#define PL_MBCODES (35) /* const char * */ +#define PL_MBSTRING (36) /* const char * */ +#define PL_INTPTR (37) /* intptr_t */ +#define PL_CHAR (38) /* int */ +#define PL_CODE (39) /* int */ +#define PL_BYTE (40) /* int */ + /* PL_skip_list() */ +#define PL_PARTIAL_LIST (41) /* a partial list */ +#define PL_CYCLIC_TERM (42) /* a cyclic list/term */ +#define PL_NOT_A_LIST (43) /* Object is not a list */ /* Or'ed flags for PL_set_prolog_flag() */ /* MUST fit in a short int! */ -#define FF_READONLY 0x1000 /* Read-only prolog flag */ -#define FF_KEEP 0x2000 /* keep prolog flag if already se +#define FF_READONLY 0x1000 /* Read-only prolog flag */ +#define FF_KEEP \ + 0x2000 /* keep prolog flag if already se \ t */ -#define FF_NOCREATE 0x4000 /* Fail if flag is non-existent */ -#define FF_MASK 0xf000 +#define FF_NOCREATE 0x4000 /* Fail if flag is non-existent */ +#define FF_MASK 0xf000 +#define CVT_ATOM 0x0001 +#define CVT_STRING 0x0002 +#define CVT_LIST 0x0004 +#define CVT_INTEGER 0x0008 +#define CVT_FLOAT 0x0010 +#define CVT_VARIABLE 0x0020 +#define CVT_NUMBER (CVT_INTEGER | CVT_FLOAT) +#define CVT_ATOMIC (CVT_NUMBER | CVT_ATOM | CVT_STRING) +#define CVT_WRITE 0x0040 /* as of version 3.2.10 */ +#define CVT_WRITE_CANONICAL 0x0080 /* as of version 3.2.10 */ +#define CVT_WRITEQ 0x00C0 +#define CVT_ALL (CVT_ATOMIC | CVT_LIST) +#define CVT_MASK 0x00ff -#define CVT_ATOM 0x0001 -#define CVT_STRING 0x0002 -#define CVT_LIST 0x0004 -#define CVT_INTEGER 0x0008 -#define CVT_FLOAT 0x0010 -#define CVT_VARIABLE 0x0020 -#define CVT_NUMBER (CVT_INTEGER|CVT_FLOAT) -#define CVT_ATOMIC (CVT_NUMBER|CVT_ATOM|CVT_STRING) -#define CVT_WRITE 0x0040 /* as of version 3.2.10 */ -#define CVT_WRITE_CANONICAL 0x0080 /* as of version 3.2.10 */ -#define CVT_WRITEQ 0x00C0 -#define CVT_ALL (CVT_ATOMIC|CVT_LIST) -#define CVT_MASK 0x00ff +#define CVT_EXCEPTION 0x10000 +#define CVT_VARNOFAIL 0x20000 /* return 2 if argument is unbound */ -#define CVT_EXCEPTION 0x10000 -#define CVT_VARNOFAIL 0x20000 /* return 2 if argument is unbound */ +#define BUF_DISCARDABLE 0x0000 +#define BUF_RING 0x0100 +#define BUF_MALLOC 0x0200 -#define BUF_DISCARDABLE 0x0000 -#define BUF_RING 0x0100 -#define BUF_MALLOC 0x0200 +#define PL_ENGINE_MAIN ((PL_engine_t)0x1) +#define PL_ENGINE_CURRENT ((PL_engine_t)0x2) -#define PL_ENGINE_MAIN ((PL_engine_t)0x1) -#define PL_ENGINE_CURRENT ((PL_engine_t)0x2) +#define PL_ENGINE_SET 0 /* engine set successfully */ +#define PL_ENGINE_INVAL 2 /* engine doesn't exist */ +#define PL_ENGINE_INUSE 3 /* engine is in use */ -#define PL_ENGINE_SET 0 /* engine set successfully */ -#define PL_ENGINE_INVAL 2 /* engine doesn't exist */ -#define PL_ENGINE_INUSE 3 /* engine is in use */ +#define PL_ACTION_TRACE 1 /* switch to trace mode */ +#define PL_ACTION_DEBUG 2 /* switch to debug mode */ +#define PL_ACTION_BACKTRACE 3 /* show a backtrace (stack dump) */ +#define PL_ACTION_BREAK 4 /* create a break environment */ +#define PL_ACTION_HALT 5 /* halt Prolog execution */ +#define PL_ACTION_ABORT 6 /* generate a Prolog abort */ + /* 7: Obsolete PL_ACTION_SYMBOLFILE */ +#define PL_ACTION_WRITE 8 /* write via Prolog i/o buffer */ +#define PL_ACTION_FLUSH 9 /* Flush Prolog i/o buffer */ +#define PL_ACTION_GUIAPP 10 /* Win32: set when this is a gui */ +#define PL_ACTION_ATTACH_CONSOLE 11 /* MT: Attach a console */ -#define PL_ACTION_TRACE 1 /* switch to trace mode */ -#define PL_ACTION_DEBUG 2 /* switch to debug mode */ -#define PL_ACTION_BACKTRACE 3 /* show a backtrace (stack dump) */ -#define PL_ACTION_BREAK 4 /* create a break environment */ -#define PL_ACTION_HALT 5 /* halt Prolog execution */ -#define PL_ACTION_ABORT 6 /* generate a Prolog abort */ - /* 7: Obsolete PL_ACTION_SYMBOLFILE */ -#define PL_ACTION_WRITE 8 /* write via Prolog i/o buffer */ -#define PL_ACTION_FLUSH 9 /* Flush Prolog i/o buffer */ -#define PL_ACTION_GUIAPP 10 /* Win32: set when this is a gui */ -#define PL_ACTION_ATTACH_CONSOLE 11 /* MT: Attach a console */ - - -typedef enum -{ FRG_FIRST_CALL = 0, /* Initial call */ - FRG_CUTTED = 1, /* Context was cutted */ - FRG_REDO = 2 /* Normal redo */ +typedef enum { + FRG_FIRST_CALL = 0, /* Initial call */ + FRG_CUTTED = 1, /* Context was cutted */ + FRG_REDO = 2 /* Normal redo */ } frg_code; -struct foreign_context -{ uintptr_t context; /* context value */ - frg_code control; /* FRG_* action */ - struct PL_local_data *engine; /* invoking engine */ +struct foreign_context { + uintptr_t context; /* context value */ + frg_code control; /* FRG_* action */ + struct PL_local_data *engine; /* invoking engine */ }; typedef struct foreign_context *control_t; -#define PRED_IMPL(name, arity, fname, flags) \ - foreign_t \ - pl_ ## fname ## arity ## _va(term_t PL__t0, int PL__ac, control_t PL__ctx) +#define PRED_IMPL(name, arity, fname, flags) \ + foreign_t pl_##fname##arity##_va(term_t PL__t0, int PL__ac, control_t PL__ctx) #define CTX_CNTRL ForeignControl(PL__ctx) -#define CTX_PTR ForeignContextPtr(PL__ctx) -#define CTX_INT ForeignContextInt(PL__ctx) +#define CTX_PTR ForeignContextPtr(PL__ctx) +#define CTX_INT ForeignContextInt(PL__ctx) #define CTX_ARITY PL__ac -#define BeginPredDefs(id) \ - const PL_extension PL_predicates_from_ ## id[] = { -#define PRED_DEF(name, arity, fname, flags) \ - { name, arity, pl_ ## fname ## arity ## _va, (flags)|PL_FA_VARARGS }, -#define EndPredDefs \ - { NULL, 0, NULL, 0 } \ - }; +#define BeginPredDefs(id) const PL_extension PL_predicates_from_##id[] = { +#define PRED_DEF(name, arity, fname, flags) \ + {name, arity, pl_##fname##arity##_va, (flags) | PL_FA_VARARGS}, +#define EndPredDefs \ + { NULL, 0, NULL, 0 } \ + } \ + ; -#define FRG_REDO_MASK 0x00000003L -#define FRG_REDO_BITS 2 -#define REDO_INT 0x02 /* Returned an integer */ -#define REDO_PTR 0x03 /* returned a pointer */ +#define FRG_REDO_MASK 0x00000003L +#define FRG_REDO_BITS 2 +#define REDO_INT 0x02 /* Returned an integer */ +#define REDO_PTR 0x03 /* returned a pointer */ -#define ForeignRedoIntVal(v) (((uintptr_t)(v)<control) -#define ForeignContextInt(h) ((intptr_t)(h)->context) -#define ForeignContextPtr(h) ((void *)(h)->context) -#define ForeignEngine(h) ((h)->engine) +#define ForeignControl(h) ((h)->control) +#define ForeignContextInt(h) ((intptr_t)(h)->context) +#define ForeignContextPtr(h) ((void *)(h)->context) +#define ForeignEngine(h) ((h)->engine) -#define FRG(n, a, f, flags) { n, a, f, flags } -#define LFRG(n, a, f, flags) { n, a, f, flags } +#define FRG(n, a, f, flags) \ + { n, a, f, flags } +#define LFRG(n, a, f, flags) \ + { n, a, f, flags } /* end from pl-itf.h */ @@ -291,318 +284,312 @@ Windows we use UTF-8 which is translated by the `XOS' layer to Windows UNICODE file functions. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ -#define REP_ISO_LATIN_1 0x0000 /* output representation */ -#define REP_UTF8 0x1000 -#define REP_MB 0x2000 +#define REP_ISO_LATIN_1 0x0000 /* output representation */ +#define REP_UTF8 0x1000 +#define REP_MB 0x2000 #ifdef __WINDOWS__ -#define REP_FN REP_UTF8 +#define REP_FN REP_UTF8 #else -#define REP_FN REP_MB +#define REP_FN REP_MB #endif -#define PL_DIFF_LIST 0x20000 /* PL_unify_chars() */ +#define PL_DIFF_LIST 0x20000 /* PL_unify_chars() */ -#ifdef SIO_MAGIC /* defined from */ +#ifdef SIO_MAGIC /* defined from */ - /******************************* - * STREAM SUPPORT * - *******************************/ +/******************************* + * STREAM SUPPORT * + *******************************/ /* Make IOSTREAM known to Prolog */ -#define PL_open_stream PL_unify_stream /* compatibility */ -PL_EXPORT(int) PL_unify_stream(term_t t, IOSTREAM *s); -PL_EXPORT(int) PL_get_stream_handle(term_t t, IOSTREAM **s); -PL_EXPORT(int) PL_release_stream(IOSTREAM *s); -PL_EXPORT(IOSTREAM *) PL_open_resource(module_t m, - const char *name, - const char *rc_class, - const char *mode); +#define PL_open_stream PL_unify_stream /* compatibility */ +PL_EXPORT(int) PL_unify_stream(term_t t, IOSTREAM *s); +PL_EXPORT(int) PL_get_stream_handle(term_t t, IOSTREAM **s); +PL_EXPORT(int) PL_release_stream(IOSTREAM *s); +PL_EXPORT(IOSTREAM *) +PL_open_resource(module_t m, const char *name, const char *rc_class, + const char *mode); -PL_EXPORT(IOSTREAM *)*_PL_streams(void); /* base of streams */ +PL_EXPORT(IOSTREAM *) * _PL_streams(void); /* base of streams */ #ifndef PL_KERNEL -#define Suser_input (_PL_streams()[0]) +#define Suser_input (_PL_streams()[0]) #define Suser_output (_PL_streams()[1]) -#define Suser_error (_PL_streams()[2]) +#define Suser_error (_PL_streams()[2]) #endif -#define PL_WRT_QUOTED 0x01 /* quote atoms */ -#define PL_WRT_IGNOREOPS 0x02 /* ignore list/operators */ -#define PL_WRT_NUMBERVARS 0x04 /* print $VAR(N) as a variable */ -#define PL_WRT_PORTRAY 0x08 /* call portray */ -#define PL_WRT_CHARESCAPES 0x10 /* Output ISO escape sequences */ -#define PL_WRT_BACKQUOTED_STRING 0x20 /* Write strings as `...` */ - /* Write attributed variables */ -#define PL_WRT_ATTVAR_IGNORE 0x040 /* Default: just write the var */ -#define PL_WRT_ATTVAR_DOTS 0x080 /* Write as Var{...} */ -#define PL_WRT_ATTVAR_WRITE 0x100 /* Write as Var{Attributes} */ -#define PL_WRT_ATTVAR_PORTRAY 0x200 /* Use Module:portray_attrs/2 */ -#define PL_WRT_ATTVAR_MASK \ - (PL_WRT_ATTVAR_IGNORE | \ - PL_WRT_ATTVAR_DOTS | \ - PL_WRT_ATTVAR_WRITE | \ - PL_WRT_ATTVAR_PORTRAY) -#define PL_WRT_BLOB_PORTRAY 0x400 /* Use portray to emit non-text blobs */ -#define PL_WRT_NO_CYCLES 0x800 /* Never emit @(Template,Subst) */ -#define PL_WRT_LIST 0x1000 /* Write [...], even with ignoreops */ -#define PL_WRT_NEWLINE 0x2000 /* Add a newline */ -#define PL_WRT_VARNAMES 0x4000 /* Internal: variable_names(List) */ +#define PL_WRT_QUOTED 0x01 /* quote atoms */ +#define PL_WRT_IGNOREOPS 0x02 /* ignore list/operators */ +#define PL_WRT_NUMBERVARS 0x04 /* print $VAR(N) as a variable */ +#define PL_WRT_PORTRAY 0x08 /* call portray */ +#define PL_WRT_CHARESCAPES 0x10 /* Output ISO escape sequences */ +#define PL_WRT_BACKQUOTED_STRING 0x20 /* Write strings as `...` */ + /* Write attributed variables */ +#define PL_WRT_ATTVAR_IGNORE 0x040 /* Default: just write the var */ +#define PL_WRT_ATTVAR_DOTS 0x080 /* Write as Var{...} */ +#define PL_WRT_ATTVAR_WRITE 0x100 /* Write as Var{Attributes} */ +#define PL_WRT_ATTVAR_PORTRAY 0x200 /* Use Module:portray_attrs/2 */ +#define PL_WRT_ATTVAR_MASK \ + (PL_WRT_ATTVAR_IGNORE | PL_WRT_ATTVAR_DOTS | PL_WRT_ATTVAR_WRITE | \ + PL_WRT_ATTVAR_PORTRAY) +#define PL_WRT_BLOB_PORTRAY 0x400 /* Use portray to emit non-text blobs */ +#define PL_WRT_NO_CYCLES 0x800 /* Never emit @(Template,Subst) */ +#define PL_WRT_LIST 0x1000 /* Write [...], even with ignoreops */ +#define PL_WRT_NEWLINE 0x2000 /* Add a newline */ +#define PL_WRT_VARNAMES 0x4000 /* Internal: variable_names(List) */ -PL_EXPORT(int) PL_write_term(IOSTREAM *s, - term_t term, - int precedence, - int flags); +PL_EXPORT(int) +PL_write_term(IOSTREAM *s, term_t term, int precedence, int flags); - /* PL_ttymode() results */ -#define PL_NOTTY 0 /* -tty in effect */ -#define PL_RAWTTY 1 /* get_single_char/1 */ -#define PL_COOKEDTTY 2 /* normal input */ +/* PL_ttymode() results */ +#define PL_NOTTY 0 /* -tty in effect */ +#define PL_RAWTTY 1 /* get_single_char/1 */ +#define PL_COOKEDTTY 2 /* normal input */ -PL_EXPORT(int) PL_ttymode(IOSTREAM *s); +PL_EXPORT(int) PL_ttymode(IOSTREAM *s); #endif /*SIO_MAGIC*/ -PL_EXPORT(int) PL_chars_to_term(const char *chars, - term_t term); +PL_EXPORT(int) PL_chars_to_term(const char *chars, term_t term); - - /******************************* - * CALL-BACK * - *******************************/ +/******************************* + * CALL-BACK * + *******************************/ #ifdef PL_KERNEL -#define PL_Q_DEBUG 0x01 /* = TRUE for backward compatibility */ +#define PL_Q_DEBUG 0x01 /* = TRUE for backward compatibility */ #endif -#define PL_Q_NORMAL 0x02 /* normal usage */ -#define PL_Q_NODEBUG 0x04 /* use this one */ -#define PL_Q_CATCH_EXCEPTION 0x08 /* handle exceptions in C */ -#define PL_Q_PASS_EXCEPTION 0x10 /* pass to parent environment */ +#define PL_Q_NORMAL 0x02 /* normal usage */ +#define PL_Q_NODEBUG 0x04 /* use this one */ +#define PL_Q_CATCH_EXCEPTION 0x08 /* handle exceptions in C */ +#define PL_Q_PASS_EXCEPTION 0x10 /* pass to parent environment */ #ifdef PL_KERNEL -#define PL_Q_DETERMINISTIC 0x20 /* call was deterministic */ +#define PL_Q_DETERMINISTIC 0x20 /* call was deterministic */ #endif -#define PL_fail return FALSE /* fail */ -#define PL_succeed return TRUE /* success */ +#define PL_fail return FALSE /* fail */ +#define PL_succeed return TRUE /* success */ - PL_EXPORT( PL_agc_hook_t ) PL_agc_hook(PL_agc_hook_t); - PL_EXPORT( char* ) PL_atom_chars(atom_t); - PL_EXPORT( char* ) PL_atom_nchars(atom_t, size_t *); - PL_EXPORT( term_t ) PL_copy_term_ref(term_t); - PL_EXPORT( term_t ) PL_new_term_ref(void); - PL_EXPORT( term_t ) PL_new_term_refs(int); - PL_EXPORT( void ) PL_reset_term_refs(term_t); +PL_EXPORT(PL_agc_hook_t) PL_agc_hook(PL_agc_hook_t); +PL_EXPORT(char *) PL_atom_chars(atom_t); +PL_EXPORT(char *) PL_atom_nchars(atom_t, size_t *); +PL_EXPORT(term_t) PL_copy_term_ref(term_t); +PL_EXPORT(term_t) PL_new_term_ref(void); +PL_EXPORT(term_t) PL_new_term_refs(int); +PL_EXPORT(void) PL_reset_term_refs(term_t); /* begin PL_get_* functions =============================*/ - PL_EXPORT( int ) PL_get_arg(int, term_t, term_t); - PL_EXPORT( int ) PL_get_atom(term_t, atom_t *); - PL_EXPORT( int ) PL_get_atom_chars(term_t, char **); - PL_EXPORT( int ) PL_get_atom_nchars(term_t, size_t *, char **); - PL_EXPORT( int ) PL_get_bool(term_t, int *); - PL_EXPORT( int ) PL_get_chars(term_t, char **, unsigned); - PL_EXPORT( int ) PL_get_nchars(term_t, size_t *, char **, unsigned); - PL_EXPORT( int ) PL_get_wchars(term_t, size_t *, wchar_t **, unsigned); - PL_EXPORT( int ) PL_get_functor(term_t, functor_t *); - PL_EXPORT( int ) PL_get_compound_name_arity(term_t t, atom_t *ap, int *ip); - PL_EXPORT( int ) PL_get_float(term_t, double *); - PL_EXPORT( int ) PL_get_head(term_t, term_t); - PL_EXPORT( int ) PL_get_int64(term_t, int64_t *); - PL_EXPORT( int ) PL_get_integer(term_t, int *); - PL_EXPORT( int ) PL_get_list(term_t, term_t, term_t); - PL_EXPORT( int ) PL_get_long(term_t, long *); - PL_EXPORT( int ) PL_get_list_chars(term_t, char **, unsigned); - PL_EXPORT( int ) PL_get_list_nchars(term_t, size_t *, char **, unsigned); - PL_EXPORT( int ) PL_get_module(term_t, module_t *); - PL_EXPORT( module_t ) PL_context(void); - PL_EXPORT( int ) PL_strip_module(term_t, module_t *, term_t); - PL_EXPORT( atom_t ) PL_module_name(module_t); - PL_EXPORT( module_t ) PL_new_module(atom_t); - PL_EXPORT( int ) PL_get_name_arity(term_t, atom_t *, int *); - PL_EXPORT( int ) PL_get_nil(term_t); - PL_EXPORT( int ) PL_get_pointer(term_t, void **); - PL_EXPORT( int ) PL_get_intptr(term_t, intptr_t *); - PL_EXPORT( int ) PL_get_uintptr(term_t, uintptr_t *); - PL_EXPORT( int ) PL_get_tail(term_t, term_t); +PL_EXPORT(int) PL_get_arg(int, term_t, term_t); +PL_EXPORT(int) PL_get_atom(term_t, atom_t *); +PL_EXPORT(int) PL_get_atom_chars(term_t, char **); +PL_EXPORT(int) PL_get_atom_nchars(term_t, size_t *, char **); +PL_EXPORT(int) PL_get_bool(term_t, int *); +PL_EXPORT(int) PL_get_chars(term_t, char **, unsigned); +PL_EXPORT(int) PL_get_nchars(term_t, size_t *, char **, unsigned); +PL_EXPORT(int) PL_get_wchars(term_t, size_t *, wchar_t **, unsigned); +PL_EXPORT(int) PL_get_functor(term_t, functor_t *); +PL_EXPORT(int) PL_get_compound_name_arity(term_t t, atom_t *ap, int *ip); +PL_EXPORT(int) PL_get_float(term_t, double *); +PL_EXPORT(int) PL_get_head(term_t, term_t); +PL_EXPORT(int) PL_get_int64(term_t, int64_t *); +PL_EXPORT(int) PL_get_integer(term_t, int *); +PL_EXPORT(int) PL_get_list(term_t, term_t, term_t); +PL_EXPORT(int) PL_get_long(term_t, long *); +PL_EXPORT(int) PL_get_list_chars(term_t, char **, unsigned); +PL_EXPORT(int) PL_get_list_nchars(term_t, size_t *, char **, unsigned); +PL_EXPORT(int) PL_get_module(term_t, module_t *); +PL_EXPORT(module_t) PL_context(void); +PL_EXPORT(int) PL_strip_module(term_t, module_t *, term_t); +PL_EXPORT(atom_t) PL_module_name(module_t); +PL_EXPORT(module_t) PL_new_module(atom_t); +PL_EXPORT(int) PL_get_name_arity(term_t, atom_t *, int *); +PL_EXPORT(int) PL_get_nil(term_t); +PL_EXPORT(int) PL_get_pointer(term_t, void **); +PL_EXPORT(int) PL_get_intptr(term_t, intptr_t *); +PL_EXPORT(int) PL_get_uintptr(term_t, uintptr_t *); +PL_EXPORT(int) PL_get_tail(term_t, term_t); /* end PL_get_* functions =============================*/ /* begin PL_new_* functions =============================*/ - PL_EXPORT( atom_t ) PL_new_atom(const char *); - PL_EXPORT( atom_t ) PL_new_atom_nchars(size_t, const char *); - PL_EXPORT( atom_t ) PL_new_atom_wchars(size_t, const pl_wchar_t *); - PL_EXPORT( char *) PL_atom_nchars(atom_t, size_t *); - PL_EXPORT( pl_wchar_t *) PL_atom_wchars(atom_t, size_t *); - PL_EXPORT( functor_t ) PL_new_functor(atom_t, int); - PL_EXPORT( atom_t ) PL_functor_name(functor_t); - PL_EXPORT( int ) PL_functor_arity(functor_t); +PL_EXPORT(atom_t) PL_new_atom(const char *); +PL_EXPORT(atom_t) PL_new_atom_nchars(size_t, const char *); +PL_EXPORT(atom_t) PL_new_atom_wchars(size_t, const pl_wchar_t *); +PL_EXPORT(char *) PL_atom_nchars(atom_t, size_t *); +PL_EXPORT(pl_wchar_t *) PL_atom_wchars(atom_t, size_t *); +PL_EXPORT(functor_t) PL_new_functor(atom_t, int); +PL_EXPORT(atom_t) PL_functor_name(functor_t); +PL_EXPORT(int) PL_functor_arity(functor_t); /* end PL_new_* functions =============================*/ /* begin PL_put_* functions =============================*/ - PL_EXPORT( int ) PL_cons_functor(term_t, functor_t,...); - PL_EXPORT( int ) PL_cons_functor_v(term_t, functor_t,term_t); - PL_EXPORT( int ) PL_cons_list(term_t, term_t, term_t); - PL_EXPORT( int ) PL_put_atom(term_t, atom_t); - PL_EXPORT( int ) PL_put_atom_chars(term_t, const char *); - PL_EXPORT( int ) PL_put_atom_nchars(term_t, size_t ,const char *); - PL_EXPORT( int ) PL_put_boolean(term_t, uintptr_t); - PL_EXPORT( int ) PL_put_float(term_t, double); - PL_EXPORT( int ) PL_put_functor(term_t, functor_t t); - PL_EXPORT( int ) PL_put_int64(term_t, int64_t); - PL_EXPORT( int ) PL_put_integer(term_t, long); - PL_EXPORT( int ) PL_put_list(term_t); - PL_EXPORT( int ) PL_put_list_chars(term_t, const char *); - PL_EXPORT( void ) PL_put_nil(term_t); - PL_EXPORT( int ) PL_put_pointer(term_t, void *); - PL_EXPORT( int ) PL_put_string_chars(term_t, const char *); - PL_EXPORT( int ) PL_put_string_nchars(term_t, size_t, const char *); - PL_EXPORT( int ) PL_put_term(term_t, term_t); - PL_EXPORT( int ) PL_put_variable(term_t); - PL_EXPORT( int ) PL_put_intptr(term_t t, intptr_t n); - PL_EXPORT( int ) PL_put_uintptr(term_t t, uintptr_t n); - PL_EXPORT( int ) PL_compare(term_t, term_t); +PL_EXPORT(int) PL_cons_functor(term_t, functor_t, ...); +PL_EXPORT(int) PL_cons_functor_v(term_t, functor_t, term_t); +PL_EXPORT(int) PL_cons_list(term_t, term_t, term_t); +PL_EXPORT(int) PL_put_atom(term_t, atom_t); +PL_EXPORT(int) PL_put_atom_chars(term_t, const char *); +PL_EXPORT(int) PL_put_atom_nchars(term_t, size_t, const char *); +PL_EXPORT(int) PL_put_boolean(term_t, uintptr_t); +PL_EXPORT(int) PL_put_float(term_t, double); +PL_EXPORT(int) PL_put_functor(term_t, functor_t t); +PL_EXPORT(int) PL_put_int64(term_t, int64_t); +PL_EXPORT(int) PL_put_integer(term_t, long); +PL_EXPORT(int) PL_put_list(term_t); +PL_EXPORT(int) PL_put_list_chars(term_t, const char *); +PL_EXPORT(void) PL_put_nil(term_t); +PL_EXPORT(int) PL_put_pointer(term_t, void *); +PL_EXPORT(int) PL_put_string_chars(term_t, const char *); +PL_EXPORT(int) PL_put_string_nchars(term_t, size_t, const char *); +PL_EXPORT(int) PL_put_term(term_t, term_t); +PL_EXPORT(int) PL_put_variable(term_t); +PL_EXPORT(int) PL_put_intptr(term_t t, intptr_t n); +PL_EXPORT(int) PL_put_uintptr(term_t t, uintptr_t n); +PL_EXPORT(int) PL_compare(term_t, term_t); /* end PL_put_* functions =============================*/ /* begin PL_unify_* functions =============================*/ - PL_EXPORT( int ) PL_unify(term_t, term_t); - PL_EXPORT( int ) PL_unify_atom(term_t, atom_t); - PL_EXPORT( int ) PL_unify_arg(int, term_t, term_t); - PL_EXPORT( int ) PL_unify_atom_chars(term_t, const char *); - PL_EXPORT( int ) PL_unify_atom_nchars(term_t, size_t len, const char *); - PL_EXPORT( int ) PL_unify_float(term_t, double); - PL_EXPORT( int ) PL_unify_functor(term_t, functor_t); - PL_EXPORT( int ) PL_unify_int64(term_t, int64_t); - PL_EXPORT( int ) PL_unify_intptr(term_t, intptr_t); - PL_EXPORT( int ) PL_unify_uintptr(term_t, uintptr_t); - PL_EXPORT( int ) PL_unify_integer(term_t, long); - PL_EXPORT( int ) PL_unify_list(term_t, term_t, term_t); - PL_EXPORT( int ) PL_unify_list_chars(term_t, const char *); - PL_EXPORT( int ) PL_unify_list_ncodes(term_t, size_t, const char *); - PL_EXPORT( int ) PL_unify_nil(term_t); - PL_EXPORT( int ) PL_unify_pointer(term_t, void *); - PL_EXPORT( int ) PL_unify_bool(term_t, int); - PL_EXPORT( int ) PL_unify_string_chars(term_t, const char *); - PL_EXPORT( int ) PL_unify_string_nchars(term_t, size_t, const char *); - PL_EXPORT( int ) PL_unify_term(term_t,...); - PL_EXPORT( int ) PL_unify_chars(term_t, int, size_t, const char *); - PL_EXPORT( int ) PL_unify_chars_diff(term_t, term_t, int, size_t, const char *); - /******************************* - * LISTS * - *******************************/ +PL_EXPORT(int) PL_unify(term_t, term_t); +PL_EXPORT(int) PL_unify_atom(term_t, atom_t); +PL_EXPORT(int) PL_unify_arg(int, term_t, term_t); +PL_EXPORT(int) PL_unify_atom_chars(term_t, const char *); +PL_EXPORT(int) PL_unify_atom_nchars(term_t, size_t len, const char *); +PL_EXPORT(int) PL_unify_float(term_t, double); +PL_EXPORT(int) PL_unify_functor(term_t, functor_t); +PL_EXPORT(int) PL_unify_int64(term_t, int64_t); +PL_EXPORT(int) PL_unify_intptr(term_t, intptr_t); +PL_EXPORT(int) PL_unify_uintptr(term_t, uintptr_t); +PL_EXPORT(int) PL_unify_integer(term_t, long); +PL_EXPORT(int) PL_unify_list(term_t, term_t, term_t); +PL_EXPORT(int) PL_unify_list_chars(term_t, const char *); +PL_EXPORT(int) PL_unify_list_ncodes(term_t, size_t, const char *); +PL_EXPORT(int) PL_unify_nil(term_t); +PL_EXPORT(int) PL_unify_pointer(term_t, void *); +PL_EXPORT(int) PL_unify_bool(term_t, int); +PL_EXPORT(int) PL_unify_string_chars(term_t, const char *); +PL_EXPORT(int) PL_unify_string_nchars(term_t, size_t, const char *); +PL_EXPORT(int) PL_unify_term(term_t, ...); +PL_EXPORT(int) PL_unify_chars(term_t, int, size_t, const char *); +PL_EXPORT(int) PL_unify_chars_diff(term_t, term_t, int, size_t, const char *); +/******************************* + * LISTS * + *******************************/ -PL_EXPORT(int) PL_skip_list(term_t list, term_t tail, size_t *len); +PL_EXPORT(int) PL_skip_list(term_t list, term_t tail, size_t *len); - - PL_EXPORT( int ) PL_unify_wchars(term_t, int, size_t, const pl_wchar_t *); - PL_EXPORT( int ) PL_unify_wchars_diff(term_t, term_t, int, size_t, const pl_wchar_t *); - PL_EXPORT( int ) PL_chars_to_term(const char *,term_t); +PL_EXPORT(int) PL_unify_wchars(term_t, int, size_t, const pl_wchar_t *); +PL_EXPORT(int) +PL_unify_wchars_diff(term_t, term_t, int, size_t, const pl_wchar_t *); +PL_EXPORT(int) PL_chars_to_term(const char *, term_t); /* begin PL_is_* functions =============================*/ - PL_EXPORT( int ) PL_is_atom(term_t); - PL_EXPORT( int ) PL_is_atomic(term_t); - PL_EXPORT( int ) PL_is_compound(term_t); - PL_EXPORT( int ) PL_is_float(term_t); - PL_EXPORT( int ) PL_is_functor(term_t, functor_t); - PL_EXPORT( int ) PL_is_ground(term_t); - PL_EXPORT( int ) PL_is_callable(term_t); - PL_EXPORT( int ) PL_is_integer(term_t); - PL_EXPORT( int ) PL_is_pair(term_t); - PL_EXPORT( int ) PL_is_list(term_t); - PL_EXPORT( int ) PL_is_pair(term_t); - PL_EXPORT( int ) PL_is_number(term_t); - PL_EXPORT( int ) PL_is_string(term_t); - PL_EXPORT( int ) PL_is_variable(term_t); - PL_EXPORT( int ) PL_term_type(term_t); - PL_EXPORT( int ) PL_is_inf(term_t); - PL_EXPORT( int ) PL_is_acyclic(term_t t); +PL_EXPORT(int) PL_is_atom(term_t); +PL_EXPORT(int) PL_is_atomic(term_t); +PL_EXPORT(int) PL_is_compound(term_t); +PL_EXPORT(int) PL_is_float(term_t); +PL_EXPORT(int) PL_is_functor(term_t, functor_t); +PL_EXPORT(int) PL_is_ground(term_t); +PL_EXPORT(int) PL_is_callable(term_t); +PL_EXPORT(int) PL_is_integer(term_t); +PL_EXPORT(int) PL_is_pair(term_t); +PL_EXPORT(int) PL_is_list(term_t); +PL_EXPORT(int) PL_is_pair(term_t); +PL_EXPORT(int) PL_is_number(term_t); +PL_EXPORT(int) PL_is_string(term_t); +PL_EXPORT(int) PL_is_variable(term_t); +PL_EXPORT(int) PL_term_type(term_t); +PL_EXPORT(int) PL_is_inf(term_t); +PL_EXPORT(int) PL_is_acyclic(term_t t); /* end PL_is_* functions =============================*/ - PL_EXPORT( void ) PL_halt(int); - PL_EXPORT( int ) PL_initialise(int, char **); - PL_EXPORT( int ) PL_is_initialised(int *, char ***); - PL_EXPORT( void ) PL_close_foreign_frame(fid_t); - PL_EXPORT( void ) PL_discard_foreign_frame(fid_t); - PL_EXPORT( void ) PL_rewind_foreign_frame(fid_t); - PL_EXPORT( fid_t ) PL_open_foreign_frame(void); - PL_EXPORT( int ) PL_raise_exception(term_t); - PL_EXPORT( int ) PL_throw(term_t); - PL_EXPORT( void ) PL_clear_exception(void); - PL_EXPORT( void ) PL_register_atom(atom_t); - PL_EXPORT( void ) PL_unregister_atom(atom_t); - PL_EXPORT( predicate_t ) PL_pred(functor_t, module_t); - PL_EXPORT( predicate_t ) PL_predicate(const char *, int, const char *); -#define GP_NAMEARITY 0x100 /* or'ed mask */ - PL_EXPORT( int ) PL_unify_predicate(term_t head, predicate_t pred, int how); - PL_EXPORT( void ) PL_predicate_info(predicate_t, atom_t *, int *, module_t *); - PL_EXPORT( qid_t ) PL_open_query(module_t, int, predicate_t, term_t); - PL_EXPORT( int ) PL_next_solution(qid_t); - PL_EXPORT( void ) PL_cut_query(qid_t); - PL_EXPORT( void ) PL_close_query(qid_t); - PL_EXPORT( int ) PL_toplevel(void); - PL_EXPORT( term_t ) PL_exception(qid_t); - PL_EXPORT( term_t ) PL_exception(qid_t); - PL_EXPORT( int ) PL_call_predicate(module_t, int, predicate_t, term_t); - PL_EXPORT( int ) PL_call(term_t, module_t); - PL_EXPORT( void ) PL_register_foreign(const char *, int, pl_function_t, int); - PL_EXPORT( void ) PL_register_foreign_in_module(const char *, const char *, int, pl_function_t, int); - PL_EXPORT( void ) PL_register_extensions(const PL_extension *); - PL_EXPORT( void ) PL_register_extensions_in_module(const char *module, const PL_extension *); - PL_EXPORT( void ) PL_load_extensions(const PL_extension *); - PL_EXPORT( int ) PL_handle_signals(void); - PL_EXPORT( int ) PL_thread_self(void); - PL_EXPORT( int ) PL_unify_thread_id(term_t, int); - PL_EXPORT( int ) PL_thread_attach_engine(const PL_thread_attr_t *); - PL_EXPORT( int ) PL_thread_destroy_engine(void); - PL_EXPORT( int ) PL_thread_at_exit(void (*)(void *), void *, int); - PL_EXPORT( int ) PL_thread_raise(int tid, int sig); - PL_EXPORT( PL_engine_t ) PL_create_engine(const PL_thread_attr_t *); - PL_EXPORT( int ) PL_destroy_engine(PL_engine_t); - PL_EXPORT( int ) PL_set_engine(PL_engine_t,PL_engine_t *); - PL_EXPORT( int ) PL_get_string(term_t, char **, size_t *); - PL_EXPORT( int ) PL_get_string_chars(term_t, char **, size_t *); - PL_EXPORT( record_t ) PL_record(term_t); - PL_EXPORT( int ) PL_recorded(record_t, term_t); - PL_EXPORT( record_t ) PL_duplicate_record(record_t); - PL_EXPORT( void ) PL_erase(record_t); -/* only partial implementation, does not guarantee export between different architectures and versions of YAP */ - PL_EXPORT( char *) PL_record_external(term_t, size_t *); - PL_EXPORT( int ) PL_recorded_external(const char *, term_t); - PL_EXPORT( int ) PL_erase_external(char *); - PL_EXPORT( int ) PL_action(int,...); - PL_EXPORT( void ) PL_on_halt(int (*)(int, void *), void *); - PL_EXPORT( void *) PL_malloc(size_t); - PL_EXPORT( void *) PL_malloc_uncollectable(size_t s); - PL_EXPORT( void *) PL_realloc(void*,size_t); - PL_EXPORT( void ) PL_free(void *); - PL_EXPORT( int ) PL_eval_expression_to_int64_ex(term_t t, int64_t *val); - PL_EXPORT( void ) PL_cleanup_fork(void); - PL_EXPORT( int ) PL_get_signum_ex(term_t sig, int *n); +PL_EXPORT(void) PL_halt(int); +PL_EXPORT(int) PL_initialise(int, char **); +PL_EXPORT(int) PL_is_initialised(int *, char ***); +PL_EXPORT(void) PL_close_foreign_frame(fid_t); +PL_EXPORT(void) PL_discard_foreign_frame(fid_t); +PL_EXPORT(void) PL_rewind_foreign_frame(fid_t); +PL_EXPORT(fid_t) PL_open_foreign_frame(void); +PL_EXPORT(int) PL_raise_exception(term_t); +PL_EXPORT(int) PL_throw(term_t); +PL_EXPORT(void) PL_clear_exception(void); +PL_EXPORT(void) PL_register_atom(atom_t); +PL_EXPORT(void) PL_unregister_atom(atom_t); +PL_EXPORT(predicate_t) PL_pred(functor_t, module_t); +PL_EXPORT(predicate_t) PL_predicate(const char *, int, const char *); +#define GP_NAMEARITY 0x100 /* or'ed mask */ +PL_EXPORT(int) PL_unify_predicate(term_t head, predicate_t pred, int how); +PL_EXPORT(void) PL_predicate_info(predicate_t, atom_t *, int *, module_t *); +PL_EXPORT(qid_t) PL_open_query(module_t, int, predicate_t, term_t); +PL_EXPORT(int) PL_next_solution(qid_t); +PL_EXPORT(void) PL_cut_query(qid_t); +PL_EXPORT(void) PL_close_query(qid_t); +PL_EXPORT(int) PL_toplevel(void); +PL_EXPORT(term_t) PL_exception(qid_t); +PL_EXPORT(term_t) PL_exception(qid_t); +PL_EXPORT(int) PL_call_predicate(module_t, int, predicate_t, term_t); +PL_EXPORT(int) PL_call(term_t, module_t); +PL_EXPORT(void) PL_register_foreign(const char *, int, pl_function_t, int); +PL_EXPORT(void) +PL_register_foreign_in_module(const char *, const char *, int, pl_function_t, + int); +PL_EXPORT(void) PL_register_extensions(const PL_extension *); +PL_EXPORT(void) +PL_register_extensions_in_module(const char *module, const PL_extension *); +PL_EXPORT(void) PL_load_extensions(const PL_extension *); +PL_EXPORT(int) PL_handle_signals(void); +PL_EXPORT(int) PL_thread_self(void); +PL_EXPORT(int) PL_unify_thread_id(term_t, int); +PL_EXPORT(int) PL_thread_attach_engine(const PL_thread_attr_t *); +PL_EXPORT(int) PL_thread_destroy_engine(void); +PL_EXPORT(int) PL_thread_at_exit(void (*)(void *), void *, int); +PL_EXPORT(int) PL_thread_raise(int tid, int sig); +PL_EXPORT(PL_engine_t) PL_create_engine(const PL_thread_attr_t *); +PL_EXPORT(int) PL_destroy_engine(PL_engine_t); +PL_EXPORT(int) PL_set_engine(PL_engine_t, PL_engine_t *); +PL_EXPORT(int) PL_get_string(term_t, char **, size_t *); +PL_EXPORT(int) PL_get_string_chars(term_t, char **, size_t *); +PL_EXPORT(record_t) PL_record(term_t); +PL_EXPORT(int) PL_recorded(record_t, term_t); +PL_EXPORT(record_t) PL_duplicate_record(record_t); +PL_EXPORT(void) PL_erase(record_t); +/* only partial implementation, does not guarantee export between different + * architectures and versions of YAP */ +PL_EXPORT(char *) PL_record_external(term_t, size_t *); +PL_EXPORT(int) PL_recorded_external(const char *, term_t); +PL_EXPORT(int) PL_erase_external(char *); +PL_EXPORT(int) PL_action(int, ...); +PL_EXPORT(void) PL_on_halt(int (*)(int, void *), void *); +PL_EXPORT(void *) PL_malloc(size_t); +PL_EXPORT(void *) PL_malloc_uncollectable(size_t s); +PL_EXPORT(void *) PL_realloc(void *, size_t); +PL_EXPORT(void) PL_free(void *); +PL_EXPORT(int) PL_eval_expression_to_int64_ex(term_t t, int64_t *val); +PL_EXPORT(void) PL_cleanup_fork(void); +PL_EXPORT(int) PL_get_signum_ex(term_t sig, int *n); - PL_EXPORT( size_t ) PL_utf8_strlen(const char *s, size_t len); +PL_EXPORT(size_t) PL_utf8_strlen(const char *s, size_t len); - PL_EXPORT( int ) PL_unify_list_codes(term_t l, const char *chas); +PL_EXPORT(int) PL_unify_list_codes(term_t l, const char *chas); +PL_EXPORT(void) PL_add_to_protocol(const char *buf, size_t count); - - -PL_EXPORT(void) PL_add_to_protocol(const char *buf, size_t count); - -#define PL_SIGSYNC 0x00010000 /* call handler synchronously */ -#define PL_SIGNOFRAME 0x00020000 /* Do not create a Prolog frame */ +#define PL_SIGSYNC 0x00010000 /* call handler synchronously */ +#define PL_SIGNOFRAME 0x00020000 /* Do not create a Prolog frame */ extern X_API void (*PL_signal(int sig, void (*func)(int)))(int); -extern X_API void PL_fatal_error(const char *msg); +extern X_API void PL_fatal_error(const char *msg); -extern X_API int Sprintf(const char * fm,...); -extern X_API int Sdprintf(const char *,...); +extern X_API int Sprintf(const char *fm, ...); +extern X_API int Sdprintf(const char *, ...); - /******************************* - * FILENAME SUPPORT * - *******************************/ +/******************************* + * FILENAME SUPPORT * + *******************************/ -#define PL_FILE_ABSOLUTE 0x01 /* return absolute path */ -#define PL_FILE_OSPATH 0x02 /* return path in OS notation */ -#define PL_FILE_SEARCH 0x04 /* use file_search_path */ -#define PL_FILE_EXIST 0x08 /* demand file to exist */ -#define PL_FILE_READ 0x10 /* demand read-access */ -#define PL_FILE_WRITE 0x20 /* demand write-access */ -#define PL_FILE_EXECUTE 0x40 /* demand execute-access */ -#define PL_FILE_NOERRORS 0x80 /* do not raise exceptions */ +#define PL_FILE_ABSOLUTE 0x01 /* return absolute path */ +#define PL_FILE_OSPATH 0x02 /* return path in OS notation */ +#define PL_FILE_SEARCH 0x04 /* use file_search_path */ +#define PL_FILE_EXIST 0x08 /* demand file to exist */ +#define PL_FILE_READ 0x10 /* demand read-access */ +#define PL_FILE_WRITE 0x20 /* demand write-access */ +#define PL_FILE_EXECUTE 0x40 /* demand execute-access */ +#define PL_FILE_NOERRORS 0x80 /* do not raise exceptions */ -PL_EXPORT(int) PL_get_file_name(term_t n, char **name, int flags); -PL_EXPORT(int) PL_get_file_nameW(term_t n, wchar_t **name, int flags); -PL_EXPORT(void) PL_changed_cwd(void); /* foreign code changed CWD */ -PL_EXPORT(char *) PL_cwd(char *buf, size_t buflen); +PL_EXPORT(int) PL_get_file_name(term_t n, char **name, int flags); +PL_EXPORT(int) PL_get_file_nameW(term_t n, wchar_t **name, int flags); +PL_EXPORT(void) PL_changed_cwd(void); /* foreign code changed CWD */ +PL_EXPORT(char *) PL_cwd(char *buf, size_t buflen); /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NOTE: the functions in this section are not documented, as as yet not @@ -611,28 +598,27 @@ interface for the GNU readline interface as defined in pl-rl.c. This abstract interface is necessary to make an embeddable system without the readline overhead. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ - /* PL_dispatch() modes */ -#define PL_DISPATCH_NOWAIT 0 /* Dispatch only once */ -#define PL_DISPATCH_WAIT 1 /* Dispatch till input available */ -#define PL_DISPATCH_INSTALLED 2 /* dispatch function installed? */ +/* PL_dispatch() modes */ +#define PL_DISPATCH_NOWAIT 0 /* Dispatch only once */ +#define PL_DISPATCH_WAIT 1 /* Dispatch till input available */ +#define PL_DISPATCH_INSTALLED 2 /* dispatch function installed? */ PL_EXPORT(int) PL_dispatch(int fd, int wait); -PL_EXPORT(PL_dispatch_hook_t) PL_dispatch_hook(PL_dispatch_hook_t); -PL_EXPORT(void) PL_add_to_protocol(const char *buf, size_t count); -PL_EXPORT(char *) PL_prompt_string(int fd); -PL_EXPORT(void) PL_write_prompt(int dowrite); -PL_EXPORT(void) PL_prompt_next(int fd); -PL_EXPORT(char *) PL_atom_generator(const char *prefix, int state); -PL_EXPORT(pl_wchar_t*) PL_atom_generator_w(const pl_wchar_t *pref, - pl_wchar_t *buffer, - size_t buflen, - int state); +PL_EXPORT(PL_dispatch_hook_t) PL_dispatch_hook(PL_dispatch_hook_t); +PL_EXPORT(void) PL_add_to_protocol(const char *buf, size_t count); +PL_EXPORT(char *) PL_prompt_string(int fd); +PL_EXPORT(void) PL_write_prompt(int dowrite); +PL_EXPORT(void) PL_prompt_next(int fd); +PL_EXPORT(char *) PL_atom_generator(const char *prefix, int state); +PL_EXPORT(pl_wchar_t *) +PL_atom_generator_w(const pl_wchar_t *pref, pl_wchar_t *buffer, size_t buflen, + int state); - /******************************* - * WINDOWS MESSAGES * - *******************************/ +/******************************* + * WINDOWS MESSAGES * + *******************************/ -#if defined(_MSC_VER) || defined(__MINGW32__) /* is included */ +#if defined(_MSC_VER) || defined(__MINGW32__) /* is included */ #define PL_MSG_EXCEPTION_RAISED -1 #define PL_MSG_IGNORED 0 #define PL_MSG_HANDLED 1 @@ -642,153 +628,92 @@ PL_EXPORT(pl_wchar_t*) PL_atom_generator_w(const pl_wchar_t *pref, #endif #include -PL_EXPORT(LRESULT) PL_win_message_proc(HWND hwnd, - UINT message, - // WPARAM wParam, - LPARAM lParam); +PL_EXPORT(LRESULT) +PL_win_message_proc(HWND hwnd, UINT message, + // WPARAM wParam, + LPARAM lParam); #endif /*_WINDOWS_*/ +/******************************** + * QUERY PROLOG * + *********************************/ - /******************************** - * QUERY PROLOG * - *********************************/ +#define PL_QUERY_ARGC 1 /* return main() argc */ +#define PL_QUERY_ARGV 2 /* return main() argv */ + /* 3: Obsolete PL_QUERY_SYMBOLFILE */ + /* 4: Obsolete PL_QUERY_ORGSYMBOLFILE*/ +#define PL_QUERY_GETC 5 /* Read character from terminal */ +#define PL_QUERY_MAX_INTEGER 6 /* largest integer */ +#define PL_QUERY_MIN_INTEGER 7 /* smallest integer */ +#define PL_QUERY_MAX_TAGGED_INT 8 /* largest tagged integer */ +#define PL_QUERY_MIN_TAGGED_INT 9 /* smallest tagged integer */ +#define PL_QUERY_VERSION 10 /* 207006 = 2.7.6 */ +#define PL_QUE_MAX_THREADS 11 /* maximum thread count */ +#define PL_QUERY_ENCODING 12 /* I/O encoding */ +#define PL_QUERY_USER_CPU 13 /* User CPU in milliseconds */ +#define PL_QUERY_HALTING 14 /* If TRUE, we are in PL_cleanup() */ -#define PL_QUERY_ARGC 1 /* return main() argc */ -#define PL_QUERY_ARGV 2 /* return main() argv */ - /* 3: Obsolete PL_QUERY_SYMBOLFILE */ - /* 4: Obsolete PL_QUERY_ORGSYMBOLFILE*/ -#define PL_QUERY_GETC 5 /* Read character from terminal */ -#define PL_QUERY_MAX_INTEGER 6 /* largest integer */ -#define PL_QUERY_MIN_INTEGER 7 /* smallest integer */ -#define PL_QUERY_MAX_TAGGED_INT 8 /* largest tagged integer */ -#define PL_QUERY_MIN_TAGGED_INT 9 /* smallest tagged integer */ -#define PL_QUERY_VERSION 10 /* 207006 = 2.7.6 */ -#define PL_QUE_MAX_THREADS 11 /* maximum thread count */ -#define PL_QUERY_ENCODING 12 /* I/O encoding */ -#define PL_QUERY_USER_CPU 13 /* User CPU in milliseconds */ -#define PL_QUERY_HALTING 14 /* If TRUE, we are in PL_cleanup() */ +X_API intptr_t PL_query(int); /* get information from Prolog */ -X_API intptr_t PL_query(int); /* get information from Prolog */ +/******************************* + * ERRORS * + *******************************/ - /******************************* - * ERRORS * - *******************************/ +PL_EXPORT(int) PL_get_atom_ex(term_t t, atom_t *a); +PL_EXPORT(int) PL_get_integer_ex(term_t t, int *i); +PL_EXPORT(int) PL_get_long_ex(term_t t, long *i); +PL_EXPORT(int) PL_get_int64_ex(term_t t, int64_t *i); +PL_EXPORT(int) PL_get_intptr_ex(term_t t, intptr_t *i); +PL_EXPORT(int) PL_get_size_ex(term_t t, size_t *i); +PL_EXPORT(int) PL_get_bool_ex(term_t t, int *i); +PL_EXPORT(int) PL_get_float_ex(term_t t, double *f); +PL_EXPORT(int) PL_get_char_ex(term_t t, int *p, int eof); +PL_EXPORT(int) PL_unify_bool_ex(term_t t, int val); +PL_EXPORT(int) PL_get_pointer_ex(term_t t, void **addrp); +PL_EXPORT(int) PL_unify_list_ex(term_t l, term_t h, term_t t); +PL_EXPORT(int) PL_unify_nil_ex(term_t l); +PL_EXPORT(int) PL_get_list_ex(term_t l, term_t h, term_t t); +PL_EXPORT(int) PL_get_nil_ex(term_t l); -PL_EXPORT(int) PL_get_atom_ex(term_t t, atom_t *a); -PL_EXPORT(int) PL_get_integer_ex(term_t t, int *i); -PL_EXPORT(int) PL_get_long_ex(term_t t, long *i); -PL_EXPORT(int) PL_get_int64_ex(term_t t, int64_t *i); -PL_EXPORT(int) PL_get_intptr_ex(term_t t, intptr_t *i); -PL_EXPORT(int) PL_get_size_ex(term_t t, size_t *i); -PL_EXPORT(int) PL_get_bool_ex(term_t t, int *i); -PL_EXPORT(int) PL_get_float_ex(term_t t, double *f); -PL_EXPORT(int) PL_get_char_ex(term_t t, int *p, int eof); -PL_EXPORT(int) PL_unify_bool_ex(term_t t, int val); -PL_EXPORT(int) PL_get_pointer_ex(term_t t, void **addrp); -PL_EXPORT(int) PL_unify_list_ex(term_t l, term_t h, term_t t); -PL_EXPORT(int) PL_unify_nil_ex(term_t l); -PL_EXPORT(int) PL_get_list_ex(term_t l, term_t h, term_t t); -PL_EXPORT(int) PL_get_nil_ex(term_t l); +PL_EXPORT(int) PL_instantiation_error(term_t culprit); +PL_EXPORT(int) PL_uninstantiation_error(term_t culprit); +PL_EXPORT(int) PL_representation_error(const char *resource); +PL_EXPORT(int) PL_type_error(const char *expected, term_t culprit); +PL_EXPORT(int) PL_domain_error(const char *expected, term_t culprit); +PL_EXPORT(int) PL_existence_error(const char *type, term_t culprit); +PL_EXPORT(int) +PL_permission_error(const char *operation, const char *type, term_t culprit); +PL_EXPORT(int) PL_resource_error(const char *resource); -PL_EXPORT(int) PL_instantiation_error(term_t culprit); -PL_EXPORT(int) PL_uninstantiation_error(term_t culprit); -PL_EXPORT(int) PL_representation_error(const char *resource); -PL_EXPORT(int) PL_type_error(const char *expected, term_t culprit); -PL_EXPORT(int) PL_domain_error(const char *expected, term_t culprit); -PL_EXPORT(int) PL_existence_error(const char *type, term_t culprit); -PL_EXPORT(int) PL_permission_error(const char *operation, - const char *type, term_t culprit); -PL_EXPORT(int) PL_resource_error(const char *resource); +/******************************* + * PROLOG FLAGS * + *******************************/ +#define PL_set_feature PL_set_prolog_flag /* compatibility */ +PL_EXPORT(int) PL_set_prolog_flag(const char *name, int type, ...); - /******************************* - * PROLOG FLAGS * - *******************************/ +#include -#define PL_set_feature PL_set_prolog_flag /* compatibility */ -PL_EXPORT(int) PL_set_prolog_flag(const char *name, int type, ...); - - - /******************************* - * BLOBS * - *******************************/ -#ifndef BLOBS_H -#define PL_BLOB_MAGIC_B 0x75293a00 /* Magic to validate a blob-type */ -#define PL_BLOB_VERSION 1 /* Current version */ -#define PL_BLOB_MAGIC (PL_BLOB_MAGIC_B|PL_BLOB_VERSION) - -#define PL_BLOB_UNIQUE 0x01 /* Blob content is unique */ -#define PL_BLOB_TEXT 0x02 /* blob contains text */ -#define PL_BLOB_NOCOPY 0x04 /* do not copy the data */ -#define PL_BLOB_WCHAR 0x08 /* wide character string */ - -typedef struct PL_blob_t -{ uintptr_t magic; /* PL_BLOB_MAGIC */ - uintptr_t flags; /* PL_BLOB_* */ - char * name; /* name of the type */ - int (*release)(atom_t a); - int (*compare)(atom_t a, atom_t b); -#ifdef SIO_MAGIC - int (*write)(IOSTREAM *s, atom_t a, int flags); -#else - int (*write)(void *s, atom_t a, int flags); -#endif - void (*acquire)(atom_t a); -#ifdef SIO_MAGIC - int (*save)(atom_t a, IOSTREAM *s); - atom_t (*load)(IOSTREAM *s); -#else - int (*save)(atom_t a, void*); - atom_t (*load)(void *s); -#endif - /* private */ - void * reserved[10]; /* for future extension */ - int registered; /* Already registered? */ - int rank; /* Rank for ordering atoms */ - struct PL_blob_t * next; /* next in registered type-chain */ - atom_t atom_name; /* Name as atom */ -} PL_blob_t; - -PL_EXPORT(int) PL_is_blob(term_t t, PL_blob_t **type); -PL_EXPORT(int) PL_unify_blob(term_t t, void *blob, size_t len, - PL_blob_t *type); -PL_EXPORT(int) PL_put_blob(term_t t, void *blob, size_t len, - PL_blob_t *type); -PL_EXPORT(int) PL_get_blob(term_t t, void **blob, size_t *len, - PL_blob_t **type); - -PL_EXPORT(void*) PL_blob_data(atom_t a, - size_t *len, - struct PL_blob_t **type); - -PL_EXPORT(void) PL_register_blob_type(PL_blob_t *type); -PL_EXPORT(PL_blob_t*) PL_find_blob_type(const char* name); -PL_EXPORT(PL_blob_t*) YAP_find_blob_type(YAP_Atom at); -PL_EXPORT(int) PL_unr1egister_blob_type(PL_blob_t *type); -PL_EXPORT(int) PL_raise(int sig); - -#endif -#if USE_GMP && !defined(__cplusplus) +#if USE_GMP && !defined(__cplusplus) #include -PL_EXPORT(int) PL_get_mpz(term_t t, mpz_t mpz); -PL_EXPORT(int) PL_unify_mpz(term_t t, mpz_t mpz); -PL_EXPORT(int) PL_get_mpq(term_t t, mpq_t mpz); -PL_EXPORT(int) PL_unify_mpq(term_t t, mpq_t mpz); +PL_EXPORT(int) PL_get_mpz(term_t t, mpz_t mpz); +PL_EXPORT(int) PL_unify_mpz(term_t t, mpz_t mpz); +PL_EXPORT(int) PL_get_mpq(term_t t, mpq_t mpz); +PL_EXPORT(int) PL_unify_mpq(term_t t, mpq_t mpz); #endif -PL_EXPORT(int) PL_current_prolog_flag(atom_t name, int type, void *ptr); +PL_EXPORT(int) PL_current_prolog_flag(atom_t name, int type, void *ptr); void swi_install(void); X_API int PL_warning(const char *msg, ...); - - /******************************** - * NON-DETERMINISTIC CALL/RETURN * - *********************************/ +/******************************** + * NON-DETERMINISTIC CALL/RETURN * + *********************************/ /* Note 1: Non-deterministic foreign functions may also use the deterministic return methods PL_succeed and PL_fail. @@ -797,22 +722,22 @@ X_API int PL_warning(const char *msg, ...); integer (use type intptr_t). */ -#define PL_FIRST_CALL (0) -#define PL_CUTTED (1) /* deprecated */ -#define PL_PRUNED (1) -#define PL_REDO (2) +#define PL_FIRST_CALL (0) +#define PL_CUTTED (1) /* deprecated */ +#define PL_PRUNED (1) +#define PL_REDO (2) -#define PL_retry(n) return _PL_retry(n) -#define PL_retry_address(a) return _PL_retry_address(a) +#define PL_retry(n) return _PL_retry(n) +#define PL_retry_address(a) return _PL_retry_address(a) -PL_EXPORT(foreign_t) _PL_retry(intptr_t); -PL_EXPORT(foreign_t) _PL_retry_address(void *); -PL_EXPORT(int) PL_foreign_control(control_t); -PL_EXPORT(intptr_t) PL_foreign_context(control_t); -PL_EXPORT(void *) PL_foreign_context_address(control_t); +PL_EXPORT(foreign_t) _PL_retry(intptr_t); +PL_EXPORT(foreign_t) _PL_retry_address(void *); +PL_EXPORT(int) PL_foreign_control(control_t); +PL_EXPORT(intptr_t) PL_foreign_context(control_t); +PL_EXPORT(void *) PL_foreign_context_address(control_t); typedef struct SWI_IO { - functor_t f; + functor_t f; void *get_c; void *put_c; void *get_w; @@ -824,7 +749,7 @@ typedef struct SWI_IO { } swi_io_struct; /* SWI stream info */ -PL_EXPORT(void) PL_YAP_InitSWIIO(struct SWI_IO *swio); +PL_EXPORT(void) PL_YAP_InitSWIIO(struct SWI_IO *swio); #ifdef __cplusplus } diff --git a/include/blobs.h b/include/blobs.h new file mode 100644 index 000000000..496224639 --- /dev/null +++ b/include/blobs.h @@ -0,0 +1,95 @@ +// +// blobs.h +// yap +// +// Created by VITOR SANTOS COSTA on 09/05/15. +// Copyright (c) 2015 VITOR SANTOS COSTA. All rights reserved. +// + +// based on the SWI Blob implementation, an extension of atoms for SWI-Prolog + +#ifndef BLOBS_H +#define BLOBS_H + +/******************************* + * BLOBS * + *******************************/ + +#define PL_BLOB_MAGIC_B 0x75293a00 /* Magic to validate a blob-type */ +#define PL_BLOB_VERSION 1 +#define PL_BLOB_MAGIC (PL_BLOB_MAGIC_B | PL_BLOB_VERSION) + +#define PL_BLOB_UNIQUE 0x01 /* Blob content is unique */ +#define PL_BLOB_TEXT 0x02 /* blob contains text */ +#define PL_BLOB_NOCOPY 0x04 /* do not copy the data */ +#define PL_BLOB_WCHAR 0x08 /* wide character string */ + +typedef struct _PL_blob_t { + uintptr_t magic; /* YAP_BLOB_MAGIC */ + uintptr_t flags; /* YAP_BLOB_* */ + char *name; /* name of the type */ + int (*release)(YAP_Atom a); + int (*compare)(YAP_Atom a, YAP_Atom b); +#ifdef SIO_MAGIC + int (*write)(FILE *s, YAP_Atom a, int flags); +#else + int (*write)(void *s, YAP_Atom a, int flags); +#endif + void (*acquire)(YAP_Atom a); +#ifdef SIO_MAGIC + int (*save)(YAP_Atom a, FILE *s); + YAP_Atom (*load)(FILE *s); +#else + int (*save)(YAP_Atom a, void *); + YAP_Atom (*load)(void *s); +#endif + /* private */ + void *reserved[10]; /* for future extension */ + int registered; /* Already registered? */ + int rank; /* Rank for ordering atoms */ + struct _PL_blob_t *next; /* next in registered type-chain */ + YAP_Atom atom_name; /* Name as atom */ +} blob_type_t; + +// typedef struct _PL_blob_t PL_blob_t; +#define YAP_BLOB_MAGIC_B PL_BLOB_MAGIC_B +#define YAP_blob_t blob_type_t +#define PL_blob_t blob_type_t + +#ifdef SWI_PROLOG_H + +PL_EXPORT(int) PL_is_blob(term_t t, PL_blob_t **type); +PL_EXPORT(int) PL_unify_blob(term_t t, void *blob, size_t len, PL_blob_t *type); +PL_EXPORT(int) PL_put_blob(term_t t, void *blob, size_t len, PL_blob_t *type); +PL_EXPORT(int) +PL_get_blob(term_t t, void **blob, size_t *len, PL_blob_t **type); + +PL_EXPORT(void *) PL_blob_data(atom_t a, size_t *len, PL_blob_t **type); + +PL_EXPORT(void) PL_register_blob_type(PL_blob_t *type); +PL_EXPORT(PL_blob_t *) PL_find_blob_type(const char *name); +PL_EXPORT(int) PL_unregister_blob_type(PL_blob_t *type); +PL_EXPORT(int) PL_raise(int sig); + +#endif + +#ifdef YATOM_H +extern int Yap_write_blob(AtomEntry *ref, FILE *stream); +extern char *Yap_blob_to_string(AtomEntry *ref, const char *s, size_t sz); +#endif +extern X_API bool YAP_is_blob(YAP_Term t, YAP_blob_t **type); +extern X_API bool YAP_unify_blob(YAP_Term *t, void *blob, size_t len, + YAP_blob_t *type); +extern X_API bool YAP_put_blob(YAP_Term *t, void *blob, size_t len, + YAP_blob_t *type); +extern X_API bool YAP_get_blob(YAP_Term t, void **blob, size_t *len, + YAP_blob_t **type); + +extern X_API void *YAP_blob_data(YAP_Atom a, size_t *len, YAP_blob_t **type); + +extern X_API void YAP_register_blob_type(YAP_blob_t *type); +extern X_API YAP_blob_t *YAP_find_blob_type(const char *name); +// extern X_API YAP_blob_t *YAP_find_blob_type(YAP_Atom at); +extern X_API bool YAP_unregister_blob_type(YAP_blob_t *type); + +#endif diff --git a/library/dialect/swi/fli/blobs.c b/library/dialect/swi/fli/blobs.c index 363868bc2..f5c69e856 100644 --- a/library/dialect/swi/fli/blobs.c +++ b/library/dialect/swi/fli/blobs.c @@ -1,23 +1,23 @@ /************************************************************************* -* * -* YAP Prolog * -* Yap Prolog was developed at NCCUP - Universidade do Porto * -* * -* Copyright V.Santos Costa and Universidade do Porto 1985-- * -* * -************************************************************************** -* * -* File: blobs.c * -* comments: support blobs in YAP definition * -* * -* Last rev: $Date: $,$Author: vsc $ * -* * -* * -*************************************************************************/ + * * + * YAP Prolog * + * Yap Prolog was developed at NCCUP - Universidade do Porto * + * * + * Copyright V.Santos Costa and Universidade do Porto 1985-- * + * * + ************************************************************************** + * * + * File: blobs.c * + * comments: support blobs in YAP definition * + * * + * Last rev: $Date: $,$Author: vsc $ * + * * + * * + *************************************************************************/ /** * * @{ -* @file swi/fli/blobs.c + * @file swi/fli/blobs.c * * @addtogroup swi-c-interface * @@ -59,7 +59,7 @@ X_API int PL_is_blob(term_t t, PL_blob_t **type) { if (!IsBlob(a)) return FALSE; b = RepBlobProp(a->PropsOfAE); - *type = (struct PL_blob_t *)b->blob_type; + *type = (PL_blob_t *)b->blob_type; return TRUE; } @@ -77,7 +77,7 @@ PL_unify_blob(term_t t, void *blob, size_t len, PL_blob_t *type) { return FALSE; } if (type->acquire) { - type->acquire(AtomToSWIAtom(AbsAtom(ae))); + type->acquire((AbsAtom(ae))); } return Yap_unify(Yap_GetFromSlot(t), MkAtomTerm(AbsAtom(ae))); } @@ -95,7 +95,7 @@ PL_put_blob(term_t t, void *blob, size_t len, PL_blob_t *type) { return FALSE; } if (type->acquire) { - type->acquire(AtomToSWIAtom(AbsAtom(ae))); + type->acquire((AbsAtom(ae))); } Yap_PutInSlot(t, MkAtomTerm(AbsAtom(ae))); return ret; @@ -118,7 +118,7 @@ PL_get_blob(term_t t, void **blob, size_t *len, PL_blob_t **type) { return FALSE; ae = RepAtom(a); if (type) - *type = (struct PL_blob_t *)RepBlobProp(ae->PropsOfAE)->blob_type; + *type = (PL_blob_t *)RepBlobProp(ae->PropsOfAE)->blob_type; if (len) *len = ae->rep.blob[0].length; if (blob) @@ -127,7 +127,7 @@ PL_get_blob(term_t t, void **blob, size_t *len, PL_blob_t **type) { } PL_EXPORT(void *) -PL_blob_data(atom_t a, size_t *len, struct PL_blob_t **type) { +PL_blob_data(atom_t a, size_t *len, PL_blob_t **type) { Atom x = SWIAtomToAtom(a); if (!IsBlob(x)) { @@ -140,22 +140,22 @@ PL_blob_data(atom_t a, size_t *len, struct PL_blob_t **type) { if (len) *len = x->rep.blob[0].length; if (type) - *type = (struct PL_blob_t *)RepBlobProp(x->PropsOfAE)->blob_type; + *type = (PL_blob_t *)RepBlobProp(x->PropsOfAE)->blob_type; return x->rep.blob[0].data; } PL_EXPORT(void) PL_register_blob_type(PL_blob_t *type) { - type->next = (PL_blob_t *)BlobTypes; - BlobTypes = (struct YAP_blob_t *)type; + type->next = BlobTypes; + BlobTypes = type; } PL_EXPORT(PL_blob_t *) PL_find_blob_type(const char *name) { Atom at = Yap_LookupAtom((char *)name); - return YAP_find_blob_type((YAP_Atom)at); + return YAP_find_blob_type(RepAtom(at)->StrOfAE); } PL_EXPORT(int) diff --git a/packages/python/swig/CMakeLists.txt b/packages/python/swig/CMakeLists.txt index 0c482dcfa..6d79e6cc1 100644 --- a/packages/python/swig/CMakeLists.txt +++ b/packages/python/swig/CMakeLists.txt @@ -48,18 +48,20 @@ else() # ) -file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/yap4py) -file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog) -file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog/os) -file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog/pl) + file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/yap4y) + file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/yap4py/include) + file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog) + file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog/os) + file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog/pl) -add_custom_target( YAP4PY ALL -# COMMAND ${CMAKE_COMMAND} -E copy ${YAP_DLLS} ${CMAKE_BINARY_DIR}/startup.yss ${CMAKE_CURRENT_BINARY_DIR}/yap4py + + add_custom_target( YAP4PY ALL + # COMMAND ${CMAKE_COMMAND} -E copy ${YAP_DLLS} ${CMAKE_BINARY_DIR}/startup.yss ${CMAKE_CURRENT_BINARY_DIR}/yap4py COMMAND ${PYTHON_EXECUTABLE} setup.py sdist bdist_wheel - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} -DEPENDS STARTUP ${PYTHON_SOURCES} ${PROLOG_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/setup.py ${SWIG_MODULE_Py2YAP_REAL_NAME} ) + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + DEPENDS STARTUP ${PYTHON_SOURCES} ${PROLOG_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/setup.py ${SWIG_MODULE_Py2YAP_REAL_NAME} ) -function(f_copy filename output ) + function(f_copy filename output ) get_filename_component(base ${filename} NAME_WE) set(outfile ${output}/${base}) file (COPY ${filename} DESTiNATION ${output}) @@ -69,34 +71,33 @@ function(f_copy filename output ) DEPENDS ${filename} ) set_source_files_properties(${outfile} PROPERTIES GENERATED TRUE) -endfunction() + endfunction() - - install(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} -m pip install --no-index -f dist yap4py + install(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} -m pip install . WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})" - DEPENDS Py4YAP ${CMAKE_BINARY_DIR}/${YAP_STARTUP} ${dlls} ) + DEPENDS Py4YAP ${CMAKE_BINARY_DIR}/${YAP_STARTUP} ${dlls} ) - if (WITH_DOCS AND DOXYGEN_FOUND) + if (WITH_DOCS AND DOXYGEN_FOUND) - set(CMAKE_SWIG_FLAGS -DDOXYGEN=${DOXYGEN_FOUND}) + set(CMAKE_SWIG_FLAGS -DDOXYGEN=${DOXYGEN_FOUND}) - # Run doxygen to only generate the xml - add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/doc/xml/ftdi_8c.xml - COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/doc - COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_BINARY_DIR}/Doxyfile.xml - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - DEPENDS ${c_headers};${c_sources};${cpp_sources};${cpp_headers} - ) + # Run doxygen to only generate the xml + add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/doc/xml/ftdi_8c.xml + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/doc + COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_BINARY_DIR}/Doxyfile.xml + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + DEPENDS ${c_headers};${c_sources};${cpp_sources};${cpp_headers} + ) - # generate .i from doxygen .xml - add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/ftdi1_doc.i - COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/doxy2swig.py -n - ${CMAKE_BINARY_DIR}/doc/xm11l/ftdi_8c.xml - ${CMAKE_CURRENT_BINARY_DIR}/ftdi1_doc.i - DEPENDS ${CMAKE_BINARY_DIR}/doc/xml/ftdi_8c.xml - ) - add_custom_target(doc_i DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/ftdi1_doc.i) - add_dependencies(${SWIG_MODULE_ftdi1_REAL_NAME} doc_i) + # generate .i from doxygen .xml + add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/ftdi1_doc.i + COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/doxy2swig.py -n + ${CMAKE_BINARY_DIR}/doc/xm11l/ftdi_8c.xml + ${CMAKE_CURRENT_BINARY_DIR}/ftdi1_doc.i + DEPENDS ${CMAKE_BINARY_DIR}/doc/xml/ftdi_8c.xml + ) + add_custom_target(doc_i DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/ftdi1_doc.i) + add_dependencies(${SWIG_MODULE_ftdi1_REAL_NAME} doc_i) - ENDIF () + ENDIF () diff --git a/packages/python/swig/setup.py.in b/packages/python/swig/setup.py.in index b75143fb3..bd626db22 100644 --- a/packages/python/swig/setup.py.in +++ b/packages/python/swig/setup.py.in @@ -11,6 +11,7 @@ from setuptools.extension import Extension from codecs import open from os import path, makedirs, walk from shutil import copytree, rmtree, copy2, move +import sysconfig from glob import glob from pathlib import Path import platform @@ -42,15 +43,16 @@ from shutil import copytree, rmtree, copy2, move from glob import glob from pathlib import Path import platform -import os.path +from os.path import dirname, join,abspath import os import shutil from distutils.core import setup -pjoin = os.path.join -here = os.path.abspath(os.path.dirname(__file__)) -#pkg_root = pjoin(here, name) +here = abspath(dirname(__file__)) +libpydir = abspath(dirname(os.path.dirname('stdlib'))) +libpyauxdir = abspath(os.path.dirname('stdlib')) +#pkg_root = join(here, name) sys.path.insert(0, "${CMAKE_CURRENT_SOURCE_DIR}") @@ -61,15 +63,15 @@ if platform.system() == 'Windows': my_extra_link_args = ['-Wl,-export-all-symbols'] else: # if platform.system() == 'Darwin': - my_extra_link_args = ['-Wl,-rpath', '-Wl,${_ABS_PYTHON_MODULE_PATH}'] + my_extra_link_args = ['-Wl,-rpath', '-Wl,'+libpydir,'-Wl,-rpath', '-Wl,'+libpyauxdir, ] win_libs = [] - local_libs = ['YAP++','Py4YAP'] + local_libs = ['Py4YAP'] # or dll in glob('yap/dlls/*'): # move( dll ,'lib' ) -native_sources = ["yap.i"] +native_sources = ["yap.i",'yapi.cpp'] -for i in '${PYTHON_SOURCES}'.split(";"): +for i in '${PYTHON_SOURCES}'.split(";"): copy2(i, 'yap4py') for i in '${pl_library}'.split(";") + '${pl_swi_library}'.split(";") : copy2(i, 'yap4py/prolog') @@ -83,7 +85,16 @@ for i in my_libs0: my_libs = glob(i) + my_libs for i in my_libs: copy2(i, 'yap4py') -bpy2yap = [] +my_includes = ['${CMAKE_SOURCE_DIR}/CXX', '${CMAKE_SOURCE_DIR}/include', + '${CMAKE_SOURCE_DIR}/H', '${CMAKE_SOURCE_DIR}/H/generated', + '${CMAKE_SOURCE_DIR}/os', '${CMAKE_SOURCE_DIR}/OPTYap', + '${CMAKE_SOURCE_DIR}/utf8proc', + '${CMAKE_SOURCE_DIR}/packages/python', + '${CMAKE_BINARY_DIR}'] +for i in my_includes: + includes = glob(i+"/*.??h") + for j in includes: + copy2(j, 'yap4py/include') here = path.abspath(path.dirname(__file__)) #gmp_dir = path.abspath(path.dirname("${GMP_LIBRARIES}")) #python_libdir = path.abspath(path.dirname("${PYTHON_LIBRARIES}") @@ -99,25 +110,14 @@ extensions = [Extension('_yap', native_sources, ('_GNU_SOURCE', '1')], runtime_library_dirs=['yap4py', '${libdir}', '${bindir}', '${gmp_dir}', '${python_libdir}'], swig_opts=['-modern', '-c++', '-py3', - '-DX_API', '-I${CMAKE_SOURCE_DIR}/CXX', '-I${CMAKE_SOURCE_DIR}/include', - '-I${CMAKE_SOURCE_DIR}/H', '-I${CMAKE_SOURCE_DIR}/H/generated', - '-I${CMAKE_SOURCE_DIR}/os', '-I${CMAKE_SOURCE_DIR}/OPTYap', - '-I${CMAKE_SOURCE_DIR}/packages/python'], - library_dirs=['../../..', '../../../CXX', '..', "${bindir}"], + '-DX_API', '-Iyap4py/include' ], + library_dirs=['../../..', '../../../CXX', 'yap4py/include', '..', "${bindir}"], extra_link_args=my_extra_link_args, libraries=['Yap','gmp']+win_libs+local_libs, - include_dirs=['../../..', - '${GMP_INCLUDE_DIRS}', - '${CMAKE_SOURCE_DIR}/H', - '${CMAKE_SOURCE_DIR}/H/generated', - '${CMAKE_SOURCE_DIR}/OPTYap', - '${CMAKE_SOURCE_DIR}/os', - '${CMAKE_SOURCE_DIR}/packages/python', - '${CMAKE_SOURCE_DIR}/include', - '${CMAKE_SOURCE_DIR}/CXX', '.'] - )]# + include_dirs=['yap4py/include'] + )] -packages = packages = setuptools.find_packages('${CMAKE_CURRENT_SOURCE_DIR}') +packages = setuptools.find_packages('${CMAKE_CURRENT_SOURCE_DIR}') @@ -131,21 +131,21 @@ version_ns = {'__version__': '6.3.5', 'minor-version': '6', 'minor-version': '3' setup_args = dict( name=name, version=version_ns['__version__'], - scripts=glob(pjoin('scripts', '*')), + scripts=glob(join('scripts', '*')), packages=packages, py_modules=['yap','yap4py'], package_data=package_data, include_package_data=True, - requirements=[ - 'm2w64-gmp', - 'm2-msys2-keyring', - 'm2-msys2-launcher-git', - 'm2-msys2-runtime', - ], + # requirements=[ + # 'm2w64-gmp', + # 'm2-msys2-keyring', + # 'm2-msys2-launcher-git', + # 'm2-msys2-runtime', + # ], description="YAP in Python", author='YAP Development Team', - author_email='ipython-dev@scipy.org', - url='http://ipython.org', + author_email='vsc@dcc.fc.up.pt', + url='http://www.dcc.fc.up/~vsc/yap', license='BSD', ext_modules=extensions, platforms="Linux, Mac OS X, Windows", diff --git a/packages/swig/yap.i b/packages/swig/yap.i index fce3277ee..3bd39b175 100644 --- a/packages/swig/yap.i +++ b/packages/swig/yap.i @@ -659,8 +659,9 @@ class YAPEngine; //%template(YAPTermVector) vector; //%feature("novaluewrapper") vector; + + }; - - %init %{ - %} +%init %{ + %}