From 56c767f2b7da1ee6adc15322dc0ec08112056421 Mon Sep 17 00:00:00 2001 From: Vitor Santos Costa Date: Tue, 30 Nov 2010 22:12:30 +0000 Subject: [PATCH 1/3] fix bad free --- library/yap2swi/yap2swi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/yap2swi/yap2swi.c b/library/yap2swi/yap2swi.c index 88480979d..5946702b4 100755 --- a/library/yap2swi/yap2swi.c +++ b/library/yap2swi/yap2swi.c @@ -1546,7 +1546,7 @@ X_API int PL_unify_atom_nchars(term_t t, size_t len, const char *s) { Atom catom; YAP_Term cterm; - char *buf = (char *)YAP_AllocSpaceFromYap(len+1); + char *buf = (char *)malloc(len+1); if (!buf) return FALSE; From cb1307ded7ac02f8ac3bc34f3e79bf67b5c0c13d Mon Sep 17 00:00:00 2001 From: Vitor Santos Costa Date: Tue, 30 Nov 2010 22:33:12 +0000 Subject: [PATCH 2/3] hack to fix differences in SWI compatibility. --- packages/semweb/rdf_db.pl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/semweb/rdf_db.pl b/packages/semweb/rdf_db.pl index 9ad5671e2..b715e4342 100644 --- a/packages/semweb/rdf_db.pl +++ b/packages/semweb/rdf_db.pl @@ -1215,8 +1215,8 @@ rdf_load_stream(triples, Stream, Options) :- !, %% report_loaded(+Action, +Source, +DB, +Triples, +StartCPU, +Options) report_loaded(none, _, _, _, _, _) :- !. -report_loaded(Action, Source, DB, Triples, T0, Options) :- - statistics(cputime, T1), +report_loaded(Action, Source, DB, Triples, T0._, Options) :- + statistics(cputime, T1._), Time is T1 - T0, ( option(silent(true), Options) -> Level = silent @@ -1302,7 +1302,7 @@ modified_graph(SourceURL, Graph) :- % Save triples belonging to DB in the file Cache. save_cache(DB, Cache) :- - catch(open(Cache, write, CacheStream, [type(binary)]), _, fail), !, + catch(system:swi_open(Cache, write, CacheStream, [type(binary)]), _, fail), !, call_cleanup(rdf_save_db_(CacheStream, DB), close(CacheStream)). From aead0674766421dc6104679c4d190d668ae1cd83 Mon Sep 17 00:00:00 2001 From: Vitor Santos Costa Date: Tue, 30 Nov 2010 22:33:33 +0000 Subject: [PATCH 3/3] mv swi compatibility stuff to library/dialect --- C/tracer.c | 2 + Makefile.in | 15 +- configure | 4 - configure.in | 2 - library/{yap2swi => dialect/swi/fli}/blobs.c | 0 .../yap2swi.c => dialect/swi/fli/swi.c} | 0 .../yap2swi.def => dialect/swi/fli/swi.def} | 0 library/{yap2swi => dialect/swi/fli}/swi.h | 0 library/yap2swi/Makefile.in | 61 ---- library/yap2swi/yap2swi.h | 270 ------------------ 10 files changed, 10 insertions(+), 344 deletions(-) rename library/{yap2swi => dialect/swi/fli}/blobs.c (100%) rename library/{yap2swi/yap2swi.c => dialect/swi/fli/swi.c} (100%) rename library/{yap2swi/yap2swi.def => dialect/swi/fli/swi.def} (100%) rename library/{yap2swi => dialect/swi/fli}/swi.h (100%) delete mode 100644 library/yap2swi/Makefile.in delete mode 100644 library/yap2swi/yap2swi.h diff --git a/C/tracer.c b/C/tracer.c index e98c81b8e..75d007daa 100755 --- a/C/tracer.c +++ b/C/tracer.c @@ -172,6 +172,8 @@ low_level_trace(yap_low_level_port port, PredEntry *pred, CELL *args) LOCK(Yap_heap_regs->low_level_trace_lock); sc = Yap_heap_regs; vsc_count++; + if (vsc_count < 264000) + return; #ifdef THREADS MY_ThreadHandle.thread_inst_count++; #endif diff --git a/Makefile.in b/Makefile.in index 3ba111384..5fbf66261 100755 --- a/Makefile.in +++ b/Makefile.in @@ -171,6 +171,7 @@ HEADERS = \ $(srcdir)/OPTYap/locks_pthread.h \ $(srcdir)/H/cut_c.h \ $(srcdir)/H/iatoms.h $(srcdir)/H/ratoms.h $(srcdir)/H/tatoms.h \ + $(srcdir)/library/dialect/swi/fli/swi.h \ $(srcdir)/MYDDAS/myddas.h $(srcdir)/MYDDAS/myddas_structs.h \ $(srcdir)/MYDDAS/myddas_statistics.h \ $(srcdir)/MYDDAS/myddas_statistics_structs.h \ @@ -223,8 +224,8 @@ C_SOURCES= \ $(srcdir)/library/mpi/mpi.c $(srcdir)/library/mpi/mpe.c \ $(srcdir)/library/lammpi/yap_mpi.c $(srcdir)/library/lammpi/hash.c $(srcdir)/library/lammpi/prologterms2c.c \ $(srcdir)/C/cut_c.c \ - $(srcdir)/library/yap2swi/yap2swi.c \ - $(srcdir)/library/yap2swi/blobs.c \ + $(srcdir)/library/dialect/swi/fli/swi.c \ + $(srcdir)/library/dialect/swi/fli/blobs.c \ $(srcdir)/MYDDAS/myddas_mysql.c \ $(srcdir)/MYDDAS/myddas_odbc.c \ $(srcdir)/MYDDAS/myddas_util.c \ @@ -293,7 +294,7 @@ ENGINE_OBJECTS = \ udi.o rtree.o rtree_udi.o\ unify.o userpreds.o utilpreds.o \ write.o \ - blobs.o yap2swi.o ypsocks.o ypstdio.o @MPI_OBJS@ + blobs.o swi.o ypsocks.o ypstdio.o @MPI_OBJS@ C_INTERFACE_OBJECTS = \ load_foreign.o load_dl.o load_dld.o load_dyld.o \ @@ -457,11 +458,11 @@ eamindex.o: $(srcdir)/BEAM/eamindex.c config.h sys.o: $(srcdir)/library/system/sys.c config.h $(CC) -c $(CFLAGS) -I$(srcdir)/include $(srcdir)/library/system/sys.c -o $@ -yap2swi.o: $(srcdir)/library/yap2swi/yap2swi.c $(srcdir)/library/yap2swi/swi.h $(srcdir)/include/SWI-Prolog.h $(srcdir)/include/SWI-Stream.h config.h - $(CC) -c $(CFLAGS) -I$(srcdir)/include -I$(srcdir)/library/yap2swi $(srcdir)/library/yap2swi/yap2swi.c -o $@ +swi.o: $(srcdir)/library/dialect/swi/fli/swi.c $(srcdir)/library/dialect/swi/fli/swi.h $(srcdir)/include/SWI-Prolog.h $(srcdir)/include/SWI-Stream.h config.h + $(CC) -c $(CFLAGS) -I$(srcdir)/include -I$(srcdir)/library/dialect/swi/fli $(srcdir)/library/dialect/swi/fli/swi.c -o $@ -blobs.o: $(srcdir)/library/yap2swi/blobs.c $(srcdir)/library/yap2swi/swi.h $(srcdir)/include/SWI-Prolog.h config.h - $(CC) -c $(CFLAGS) -I$(srcdir)/include -I$(srcdir)/library/yap2swi $(srcdir)/library/yap2swi/blobs.c -o $@ +blobs.o: $(srcdir)/library/dialect/swi/fli/blobs.c $(srcdir)/library/dialect/swi/fli/swi.h $(srcdir)/include/SWI-Prolog.h config.h + $(CC) -c $(CFLAGS) -I$(srcdir)/include -I$(srcdir)/library/dialect/swi/fli $(srcdir)/library/dialect/swi/fli/blobs.c -o $@ yap_random.o: $(srcdir)/library/random/yap_random.c config.h $(CC) -c $(CFLAGS) -I$(srcdir)/include $(srcdir)/library/random/yap_random.c -o $@ diff --git a/configure b/configure index 7985b2f98..761242e54 100755 --- a/configure +++ b/configure @@ -9562,7 +9562,6 @@ mkdir -p library/regex mkdir -p library/system mkdir -p library/tries mkdir -p library/rltree -mkdir -p library/yap2swi mkdir -p LGPL/clp mkdir -p LGPL/swi_console mkdir -p GPL @@ -9620,8 +9619,6 @@ ac_config_files="$ac_config_files library/system/Makefile" ac_config_files="$ac_config_files library/tries/Makefile" -ac_config_files="$ac_config_files library/yap2swi/Makefile" - ac_config_files="$ac_config_files LGPL/Makefile" ac_config_files="$ac_config_files LGPL/clp/Makefile" @@ -10404,7 +10401,6 @@ do "library/rltree/Makefile") CONFIG_FILES="$CONFIG_FILES library/rltree/Makefile" ;; "library/system/Makefile") CONFIG_FILES="$CONFIG_FILES library/system/Makefile" ;; "library/tries/Makefile") CONFIG_FILES="$CONFIG_FILES library/tries/Makefile" ;; - "library/yap2swi/Makefile") CONFIG_FILES="$CONFIG_FILES library/yap2swi/Makefile" ;; "LGPL/Makefile") CONFIG_FILES="$CONFIG_FILES LGPL/Makefile" ;; "LGPL/clp/Makefile") CONFIG_FILES="$CONFIG_FILES LGPL/clp/Makefile" ;; "LGPL/swi_console/Makefile") CONFIG_FILES="$CONFIG_FILES LGPL/swi_console/Makefile" ;; diff --git a/configure.in b/configure.in index 3bc0c1d36..e36e748ab 100755 --- a/configure.in +++ b/configure.in @@ -1929,7 +1929,6 @@ mkdir -p library/regex mkdir -p library/system mkdir -p library/tries mkdir -p library/rltree -mkdir -p library/yap2swi mkdir -p LGPL/clp mkdir -p LGPL/swi_console mkdir -p GPL @@ -1975,7 +1974,6 @@ AC_CONFIG_FILES([library/regex/Makefile]) AC_CONFIG_FILES([library/rltree/Makefile]) AC_CONFIG_FILES([library/system/Makefile]) AC_CONFIG_FILES([library/tries/Makefile]) -AC_CONFIG_FILES([library/yap2swi/Makefile]) AC_CONFIG_FILES([LGPL/Makefile]) AC_CONFIG_FILES([LGPL/clp/Makefile]) AC_CONFIG_FILES([LGPL/swi_console/Makefile]) diff --git a/library/yap2swi/blobs.c b/library/dialect/swi/fli/blobs.c similarity index 100% rename from library/yap2swi/blobs.c rename to library/dialect/swi/fli/blobs.c diff --git a/library/yap2swi/yap2swi.c b/library/dialect/swi/fli/swi.c similarity index 100% rename from library/yap2swi/yap2swi.c rename to library/dialect/swi/fli/swi.c diff --git a/library/yap2swi/yap2swi.def b/library/dialect/swi/fli/swi.def similarity index 100% rename from library/yap2swi/yap2swi.def rename to library/dialect/swi/fli/swi.def diff --git a/library/yap2swi/swi.h b/library/dialect/swi/fli/swi.h similarity index 100% rename from library/yap2swi/swi.h rename to library/dialect/swi/fli/swi.h diff --git a/library/yap2swi/Makefile.in b/library/yap2swi/Makefile.in deleted file mode 100644 index ba15ad62c..000000000 --- a/library/yap2swi/Makefile.in +++ /dev/null @@ -1,61 +0,0 @@ -# -# default base directory for YAP installation -# (EROOT for architecture-dependent files) -# -prefix = @prefix@ -ROOTDIR = $(prefix) -EROOTDIR = @exec_prefix@ -abs_top_builddir = @abs_top_builddir@ -# -# where the binary should be -# -BINDIR = $(EROOTDIR)/bin -# -# where YAP should look for libraries -# -LIBDIR=@libdir@/Yap -# -# -CC=@CC@ -CFLAGS= @CFLAGS@ $(YAP_EXTRAS) $(DEFS) -I$(srcdir) -I../.. -I$(srcdir)/../../include -# -# -# You shouldn't need to change what follows. -# -INSTALL=@INSTALL@ -INSTALL_DATA=@INSTALL_DATA@ -INSTALL_PROGRAM=@INSTALL_PROGRAM@ -SHELL=/bin/sh -RANLIB=@RANLIB@ -srcdir=@srcdir@ -SHLIB_CFLAGS=@SHLIB_CFLAGS@ -SO=@SO@ -#4.1VPATH=@srcdir@:@srcdir@/OPTYap -CWD=$(PWD) -# - -OBJS=yap2swi.o -SOBJS=yap2swi.@SO@ - -#in some systems we just create a single object, in others we need to -# create a libray - -# compile yap2swi as part of the main YAP - -all: - -yap2swi.o: $(srcdir)/yap2swi.c $(srcdir)/yap2swi.h - $(CC) -c $(CFLAGS) $(SHLIB_CFLAGS) $(srcdir)/yap2swi.c -o yap2swi.o - -@DO_SECOND_LD@@DO_SECOND_LD@%.@SO@: %.o -@DO_SECOND_LD@ @SHLIB_LD@ -o $@ $< - -@DO_SECOND_LD@yap2swi.@SO@: yap2swi.o -@DO_SECOND_LD@ @SHLIB_LD@ -o yap2swi.@SO@ yap2swi.o @ - -install: - $(INSTALL_PROGRAM) $(SOBJS) $(DESTDIR)$(LIBDIR) - -clean: - rm -f *.o *~ $(OBJS) $(SOBJS) *.BAK - diff --git a/library/yap2swi/yap2swi.h b/library/yap2swi/yap2swi.h deleted file mode 100644 index 3eca2d2fd..000000000 --- a/library/yap2swi/yap2swi.h +++ /dev/null @@ -1,270 +0,0 @@ -/* yap2swi.h */ -/* - * Project: jpl for Yap Prolog - * Author: Steve Moyle and Vitor Santos Costa - * Email: steve.moyle@comlab.ox.ac.uk - * Date: 21 January 2002 - - * Copyright (c) 2002 Steve Moyle and Vitor Santos Costa. All rights reserved. - - -*/ - -#ifndef _FLI_H_INCLUDED -#define _FLI_H_INCLUDED - -#ifndef __SWI_PROLOG__ /* use this to switch on Prolog dialect */ -#define __SWI_PROLOG__ /* normally defined by the plld compiler driver */ -#endif - - -//=== includes =============================================================== -#include "config.h" -#include -#include -#include -#if HAVE_TIME_H -#include -#endif -#if USE_GMP -#include -#endif - -#if defined(_MSC_VER) && defined(YAP_EXPORTS) -#define X_API __declspec(dllexport) -#else -#define X_API -#endif - -typedef unsigned long fid_t; -typedef unsigned long term_t; -typedef void *module_t; -typedef unsigned long atom_t; -typedef YAP_Term *predicate_t; -typedef struct open_query_struct *qid_t; -typedef long functor_t; -typedef int (*PL_agc_hook_t)(atom_t); -typedef unsigned long foreign_t; /* return type of foreign functions */ -#ifdef WIN32 -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; -#else -#include /* more portable than stdint.h */ -#endif - -typedef void *function_t; - -typedef struct _PL_extension -{ char *predicate_name; /* Name of the predicate */ - short arity; /* Arity of the predicate */ - function_t function; /* Implementing functions */ - short flags; /* Or of PL_FA_... */ -} PL_extension; - -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 */ - 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 */ - -/* 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) - - /* 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 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_ALL (CVT_ATOMIC|CVT_LIST) -#define CVT_MASK 0x00ff - -#define BUF_DISCARDABLE 0x0000 -#define BUF_RING 0x0100 -#define BUF_MALLOC 0x0200 - -#define PL_ENGINE_CURRENT ((PL_engine_t)-1) - -#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 */ - -/* end from pl-itf.h */ - -/* copied from old SICStus/SWI interface */ -typedef void install_t; - -extern X_API PL_agc_hook_t PL_agc_hook(PL_agc_hook_t); -extern X_API void PL_free(void *); -extern X_API char* PL_atom_chars(atom_t); -extern X_API term_t PL_copy_term_ref(term_t); -extern X_API term_t PL_new_term_ref(void); -extern X_API term_t PL_new_term_refs(int); -extern X_API void PL_reset_term_refs(term_t); -/* begin PL_get_* functions =============================*/ -extern X_API int PL_get_arg(int, term_t, term_t); -extern X_API int PL_get_atom(term_t, atom_t *); -extern X_API int PL_get_atom_chars(term_t, char **); -extern X_API int PL_get_chars(term_t, char **, unsigned); -extern X_API int PL_get_nchars(term_t, size_t *, char **, unsigned); -extern X_API int PL_get_wchars(term_t, size_t *, wchar_t **, unsigned); -extern X_API int PL_get_functor(term_t, functor_t *); -extern X_API int PL_get_float(term_t, double *); -extern X_API int PL_get_head(term_t, term_t); -extern X_API int PL_get_int64(term_t, int64_t *); -extern X_API int PL_get_integer(term_t, int *); -extern X_API int PL_get_list(term_t, term_t, term_t); -extern X_API int PL_get_long(term_t, long *); -extern X_API int PL_get_list_chars(term_t, char **, unsigned); -extern X_API int PL_get_module(term_t, module_t *); -extern X_API atom_t PL_module_name(module_t); -extern X_API module_t PL_new_module(atom_t); -extern X_API int PL_get_name_arity(term_t, atom_t *, int *); -extern X_API int PL_get_nil(term_t); -extern X_API int PL_get_pointer(term_t, void **); -extern X_API int PL_get_string(term_t, char **, int *); -extern X_API int PL_get_tail(term_t, term_t); -/* end PL_get_* functions =============================*/ -/* begin PL_new_* functions =============================*/ -extern X_API atom_t PL_new_atom(const char *); -extern X_API atom_t PL_new_atom_wchars(int, const wchar_t *); -extern X_API char *PL_atom_nchars(atom_t, size_t *); -extern X_API wchar_t *PL_atom_wchars(atom_t, size_t *); -extern X_API functor_t PL_new_functor(atom_t, int); -extern X_API atom_t PL_functor_name(functor_t); -extern X_API int PL_functor_arity(functor_t); -/* end PL_new_* functions =============================*/ -/* begin PL_put_* functions =============================*/ -extern X_API void PL_cons_functor(term_t, functor_t,...); -extern X_API void PL_cons_functor_v(term_t, functor_t,term_t); -extern X_API void PL_cons_list(term_t, term_t, term_t); -extern X_API void PL_put_atom(term_t, atom_t); -extern X_API void PL_put_atom_chars(term_t, const char *); -extern X_API void PL_put_float(term_t, double); -extern X_API void PL_put_functor(term_t, functor_t t); -extern X_API void PL_put_int64(term_t, int64_t); -extern X_API void PL_put_integer(term_t, long); -extern X_API void PL_put_list(term_t); -extern X_API void PL_put_list_chars(term_t, const char *); -extern X_API void PL_put_nil(term_t); -extern X_API void PL_put_pointer(term_t, void *); -extern X_API void PL_put_string_chars(term_t, const char *); -extern X_API void PL_put_term(term_t, term_t); -extern X_API void PL_put_variable(term_t); -extern X_API int PL_compare(term_t, term_t); -/* end PL_put_* functions =============================*/ -/* begin PL_unify_* functions =============================*/ -extern X_API int PL_unify(term_t, term_t); -extern X_API int PL_unify_atom(term_t, atom_t); -extern X_API int PL_unify_atom_chars(term_t, const char *); -extern X_API int PL_unify_float(term_t, double); -extern X_API int PL_unify_int64(term_t, int64_t); -extern X_API int PL_unify_integer(term_t, long); -extern X_API int PL_unify_list(term_t, term_t, term_t); -extern X_API int PL_unify_list_chars(term_t, const char *); -extern X_API int PL_unify_nil(term_t); -extern X_API int PL_unify_pointer(term_t, void *); -extern X_API int PL_unify_string_chars(term_t, const char *); -extern X_API int PL_unify_term(term_t,...); -/* end PL_unify_* functions =============================*/ -/* begin PL_is_* functions =============================*/ -extern X_API int PL_is_atom(term_t); -extern X_API int PL_is_atomic(term_t); -extern X_API int PL_is_compound(term_t); -extern X_API int PL_is_float(term_t); -extern X_API int PL_is_functor(term_t, functor_t); -extern X_API int PL_is_integer(term_t); -extern X_API int PL_is_list(term_t); -extern X_API int PL_is_number(term_t); -extern X_API int PL_is_string(term_t); -extern X_API int PL_is_variable(term_t); -extern X_API int PL_term_type(term_t); -/* end PL_is_* functions =============================*/ -extern X_API void PL_halt(int); -extern X_API int PL_initialise(int, char **); -extern X_API int PL_is_initialised(int *, char ***); -extern X_API void PL_close_foreign_frame(fid_t); -extern X_API void PL_discard_foreign_frame(fid_t); -extern X_API fid_t PL_open_foreign_frame(void); -extern X_API int PL_raise_exception(term_t); -extern X_API void PL_register_atom(atom_t); -extern X_API void PL_unregister_atom(atom_t); -extern X_API predicate_t PL_pred(functor_t, module_t); -extern X_API predicate_t PL_predicate(const char *, int, const char *); -extern X_API void PL_predicate_info(predicate_t, atom_t *, int *, module_t *); -extern X_API qid_t PL_open_query(module_t, int, predicate_t, term_t); -extern X_API int PL_next_solution(qid_t); -extern X_API void PL_cut_query(qid_t); -extern X_API void PL_close_query(qid_t); -extern X_API term_t PL_exception(qid_t); -extern X_API int PL_call_predicate(module_t, int, predicate_t, term_t); -extern X_API int PL_call(term_t, module_t); -extern X_API void PL_register_extensions(PL_extension *); -extern X_API void PL_load_extensions(PL_extension *); -extern X_API int PL_thread_self(void); -extern X_API int PL_thread_attach_engine(const PL_thread_attr_t *); -extern X_API int PL_thread_destroy_engine(void); -extern X_API int PL_thread_at_exit(void (*)(void *), void *, int); -extern X_API PL_engine_t PL_create_engine(const PL_thread_attr_t *); -extern X_API int PL_destroy_engine(PL_engine_t); -extern X_API int PL_set_engine(PL_engine_t,PL_engine_t *); -extern X_API int PL_get_string_chars(term_t, char **, int *); -extern X_API int PL_action(int,...); - -#define IOSTREAM void - -extern X_API int PL_get_stream_handle(term_t,IOSTREAM *); - -extern X_API int Sprintf(char *,...); -extern X_API int Sdprintf(char *,...); - -void swi_install(void); -