This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
yap-6.3/library/dialect/swi/os/pl-yap.h

234 lines
6.4 KiB
C
Raw Normal View History

2008-12-22 12:02:22 +00:00
#ifndef PL_YAP_H
#define PL_YAP_H
#ifdef __YAP_PROLOG__
2013-11-16 00:27:02 +00:00
#include "Yatom.h"
#include <libgen.h>
2011-02-10 00:01:19 +00:00
/* depends on tag schema, but 4 should always do */
2016-12-04 18:52:42 +00:00
#define LMASK_BITS 4 /* total # mask bits */
2011-02-10 00:01:19 +00:00
2008-12-22 12:02:22 +00:00
#if HAVE_CTYPE_H
#include <ctype.h>
#endif
2011-02-10 00:01:19 +00:00
#if HAVE_SYS_STAT_H
#include <sys/stat.h>
#endif
2008-12-22 12:02:22 +00:00
#define SIZE_VOIDP SIZEOF_INT_P
2016-12-04 18:52:42 +00:00
#if SIZEOF_LONG_INT == 4
2008-12-22 12:02:22 +00:00
#define INT64_FORMAT "%lld"
#else
#define INT64_FORMAT "%ld"
#endif
2016-12-04 18:52:42 +00:00
#define INTBITSIZE (sizeof(int) * 8)
2008-12-22 12:02:22 +00:00
2016-12-04 18:52:42 +00:00
typedef module_t Module;
typedef Term (*Func)(term_t); /* foreign functions */
2011-02-10 00:01:19 +00:00
2011-02-12 18:42:44 +00:00
extern const char *Yap_GetCurrentPredName(void);
2016-12-04 18:52:42 +00:00
extern Int Yap_GetCurrentPredArity(void);
2013-11-16 00:27:02 +00:00
extern term_t Yap_fetch_module_for_format(term_t args, Term *modp);
2016-12-04 18:52:42 +00:00
extern void Yap_setCurrentSourceLocation(void *rd);
extern void *Yap_GetStreamHandle(Atom at);
extern void Yap_WriteAtom(IOSTREAM *s, Atom atom);
2011-02-10 00:01:19 +00:00
extern atom_t codeToAtom(int chrcode);
2016-12-04 18:52:42 +00:00
#define valTermRef(t) ((Word)Yap_AddressFromSlot(t))
2011-02-10 00:01:19 +00:00
#include "pl-codelist.h"
2016-12-04 18:52:42 +00:00
// move this to SWI
2008-12-22 12:02:22 +00:00
2016-12-04 18:52:42 +00:00
#define GP_CREATE 2 /* create (in this module) */
2011-02-10 00:01:19 +00:00
#ifndef HAVE_MBSCOLL
COMMON(int) mbscoll(const char *s1, const char *s2);
#endif
#ifndef HAVE_MBSCASECOLL
COMMON(int) mbscasecoll(const char *s1, const char *s2);
#endif
2016-12-04 18:52:42 +00:00
COMMON(atom_t) TemporaryFile(const char *id, int *fdp);
COMMON(char *) Getenv(const char *, char *buf, size_t buflen);
2008-12-22 12:02:22 +00:00
/*** memory allocation stuff: SWI wraps around malloc */
#define stopItimer()
2016-12-04 18:52:42 +00:00
COMMON(word) pl_print(term_t term);
COMMON(word) pl_write(term_t term);
COMMON(word) pl_write_canonical(term_t term);
COMMON(word) pl_write_term(term_t term, term_t options);
COMMON(word) pl_writeq(term_t term);
2011-02-10 00:01:19 +00:00
2016-12-04 18:52:42 +00:00
static inline int get_procedure(term_t descr, predicate_t *proc, term_t he,
int f) {
2013-11-16 00:27:02 +00:00
CACHE_REGS
2016-12-04 18:52:42 +00:00
Term t = Yap_GetFromSlot(descr);
2013-11-16 00:27:02 +00:00
2016-12-04 18:52:42 +00:00
if (IsVarTerm(t))
return FALSE;
2015-04-13 13:28:17 +01:00
if (IsAtomTerm(t))
2016-12-04 18:52:42 +00:00
*proc = RepPredProp(Yap_GetPredPropByAtom(AtomOfTerm(t), CurrentModule));
2013-11-16 00:27:02 +00:00
else if (IsApplTerm(t)) {
Functor f = FunctorOfTerm(t);
if (IsExtensionFunctor(f)) {
return FALSE;
2015-04-13 13:28:17 +01:00
}
2013-11-16 00:27:02 +00:00
*proc = RepPredProp(Yap_GetPredPropByFunc(f, CurrentModule));
2011-02-10 00:01:19 +00:00
}
2013-11-16 00:27:02 +00:00
return TRUE;
2011-02-10 00:01:19 +00:00
}
2011-02-10 00:01:19 +00:00
/* TBD */
2010-06-23 11:44:44 +01:00
extern word globalString(size_t size, char *s);
extern word globalWString(size_t size, wchar_t *s);
2016-12-04 18:52:42 +00:00
#define allocHeap(n) allocHeap__LD(n PASS_LD)
2011-03-03 11:41:21 +00:00
#define valHandle(r) valHandle__LD(r PASS_LD)
2010-07-28 17:14:18 +01:00
2016-12-04 18:52:42 +00:00
Int YAP_PLArityOfSWIFunctor(functor_t f);
struct PL_blob_t *YAP_find_blob_type(Atom at);
2011-02-10 00:01:19 +00:00
2011-02-16 00:23:58 +00:00
void PL_license(const char *license, const char *module);
2010-07-28 17:14:18 +01:00
#define arityFunctor(f) YAP_PLArityOfSWIFunctor(f)
2008-12-22 12:02:22 +00:00
2016-12-04 18:52:42 +00:00
#define stringAtom(w) (YAP_AtomFromSWIAtom(w)->StrOfAE)
#define isInteger(A) \
(!IsVarTerm(A) && (IsIntegerTerm((A)) || YAP_IsBigNumTerm((A))))
#define isString(A) (!IsVarTerm(A) && IsStringTerm(A))
#define isAtom(A) (!IsVarTerm(A) && IsAtomTerm((A)))
#define isList(A) (!IsVarTerm(A) && IsPairTerm((A)))
2013-11-16 00:27:02 +00:00
#define isNil(A) ((A) == TermNil)
2016-12-04 18:52:42 +00:00
#define isReal(A) (!IsVarTerm(A) && IsFloatTerm((A)))
#define isFloat(A) (!IsVarTerm(A) && IsFloatTerm((A)))
2013-11-16 00:27:02 +00:00
#define isVar(A) IsVarTerm((A))
#define valReal(w) FloatOfTerm((w))
#define valFloat(w) FloatOfTerm((w))
#define atomValue(atom) AtomOfTerm(atom)
2013-11-16 00:27:02 +00:00
#define atomFromTerm(term) YAP_SWIAtomFromAtom(AtomOfTerm(term))
2011-09-02 23:22:35 +01:00
2016-12-04 18:52:42 +00:00
inline static char *atomName(Atom atom) {
2015-04-13 13:28:17 +01:00
if (IsWideAtom(atom))
2013-11-16 00:27:02 +00:00
return (char *)(atom->WStrOfAE);
return atom->StrOfAE;
2011-09-02 23:22:35 +01:00
}
2013-11-16 00:27:02 +00:00
#define nameOfAtom(atom) nameOfAtom(atom)
2011-02-10 00:01:19 +00:00
#define atomBlobType(at) YAP_find_blob_type(at)
2016-12-04 18:52:42 +00:00
#define argTermP(w, i) ((Word)((YAP_ArgsOfTerm(w) + (i))))
#define deRef(t) \
while (IsVarTerm(*(t)) && !IsUnboundVar(t)) { \
t = (CELL *)(*(t)); \
}
#define canBind(t) FALSE // VSC: to implement
#define _PL_predicate(A, B, C, D) PL_predicate(A, B, C)
2013-11-16 00:27:02 +00:00
#define predicateHasClauses(pe) ((pe)->cs.p_code.NOfClauses != 0)
#define lookupModule(A) Yap_GetModuleEntry(MkAtomTerm(YAP_AtomFromSWIAtom(A)))
Procedure resolveProcedure(functor_t f, Module module);
2016-12-04 18:52:42 +00:00
#define charEscapeWriteOption(A) FALSE // VSC: to implement
2015-04-13 13:28:17 +01:00
#define wordToTermRef(A) Yap_InitSlot(*(A))
2011-03-14 21:03:28 +00:00
#define isTaggedInt(A) IsIntegerTerm(A)
#define valInt(A) IntegerOfTerm(A)
2013-11-13 23:48:54 +00:00
#define MODULE_user Yap_GetModuleEntry(MkAtomTerm(Yap_LookupAtom("user")))
#define MODULE_system Yap_GetModuleEntry(MkAtomTerm(Yap_LookupAtom("system")))
#define MODULE_parse Yap_GetModuleEntry(LOCAL_SourceModule)
2008-12-22 12:02:22 +00:00
extern term_t Yap_CvtTerm(term_t ts);
2008-12-22 12:02:22 +00:00
#define clearNumber(n)
2011-08-12 15:52:47 +01:00
wchar_t *nameOfWideAtom(atom_t atom);
int isWideAtom(atom_t atom);
2016-12-04 18:52:42 +00:00
inline static int charCode(Term w) {
if (IsAtomTerm(w)) {
Atom a = atomValue(w);
if (IsWideAtom(a)) {
if (wcslen(a->WStrOfAE) == 1)
return a->WStrOfAE[0];
2013-11-16 00:27:02 +00:00
return -1;
2011-02-10 00:01:19 +00:00
}
2016-12-04 18:52:42 +00:00
if (strlen(a->StrOfAE) == 1)
return ((unsigned char *)(a->StrOfAE))[0];
return -1;
}
2011-02-10 00:01:19 +00:00
return -1;
}
2016-12-04 18:52:42 +00:00
#define PL_get_atom(t, a) PL_get_atom__LD(t, a PASS_LD)
#define PL_get_atom_ex(t, a) PL_get_atom_ex__LD(t, a PASS_LD)
#define PL_get_text(l, t, f) PL_get_text__LD(l, t, f PASS_LD)
#define PL_is_atom(t) PL_is_atom__LD(t PASS_LD)
#define PL_is_variable(t) PL_is_variable__LD(t PASS_LD)
#define PL_new_term_ref() PL_new_term_ref__LD(PASS_LD1)
#define PL_put_atom(t, a) PL_put_atom__LD(t, a PASS_LD)
#define PL_put_term(t1, t2) PL_put_term__LD(t1, t2 PASS_LD)
#define PL_unify_atom(t, a) PL_unify_atom__LD(t, a PASS_LD)
#define PL_unify_integer(t, i) PL_unify_integer__LD(t, i PASS_LD)
2011-02-10 00:01:19 +00:00
2013-11-15 15:45:55 +00:00
#define _PL_get_arg(i, t, a) _PL_get_arg__LD(i, t, a PASS_LD);
2008-12-22 12:02:22 +00:00
#endif /* __YAP_PROLOG__ */
unsigned int getUnknownModule(module_t m);
2009-06-01 22:56:00 +01:00
#if IN_PL_OS_C
2016-12-04 18:52:42 +00:00
static int stripostfix(const char *s, const char *e) {
size_t ls = strlen(s);
2009-05-29 20:36:49 +01:00
size_t le = strlen(e);
2016-12-04 18:52:42 +00:00
if (ls >= le)
return strcasecmp(&s[ls - le], e) == 0;
2009-05-29 20:36:49 +01:00
return FALSE;
2015-04-13 13:28:17 +01:00
}
2009-06-01 22:56:00 +01:00
#endif
2011-02-15 23:45:47 +00:00
#if HAVE_SIGPROCMASK
#if HAVE_SIGNAL_H
#include <signal.h>
#endif
2016-12-04 18:52:42 +00:00
static inline void unblockSignal(int sig) {
sigset_t set;
2011-02-15 23:45:47 +00:00
sigemptyset(&set);
sigaddset(&set, sig);
sigprocmask(SIG_UNBLOCK, &set, NULL);
// DEBUG(1, Sdprintf("Unblocked signal %d\n", sig));
}
#else
2016-12-04 18:52:42 +00:00
static inline void unblockSignal(int sig) {}
2011-02-15 23:45:47 +00:00
#endif
#define suspendTrace(x)
atom_t ATOM_;
2011-02-16 00:23:58 +00:00
#if THREADS
2015-06-17 23:49:02 +01:00
intptr_t system_thread_id(void);
#endif
2016-12-04 18:52:42 +00:00
extern Term Yap_BufferToTermWithPrioBindings(const char *s, size_t len,
encoding_t enc, int prio,
Term *bindingsp);
2008-12-22 12:02:22 +00:00
#endif /* PL_YAP_H */