From 719089b96bd95ffd983d1378bf95d0971583597a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa=20II?= Date: Tue, 13 Apr 2010 00:31:48 +0100 Subject: [PATCH] make PL_is_initialised honest :) --- H/dglobals.h | 5 +++++ H/hglobals.h | 5 +++++ H/iglobals.h | 5 +++++ H/rglobals.h | 5 +++++ library/yap2swi/yap2swi.c | 15 +++++++++++++-- misc/GLOBALS | 6 ++++++ packages/jpl | 2 +- pl/yio.yap | 9 +++++++++ 8 files changed, 49 insertions(+), 3 deletions(-) diff --git a/H/dglobals.h b/H/dglobals.h index 925af1fec..1850fcaf3 100644 --- a/H/dglobals.h +++ b/H/dglobals.h @@ -182,3 +182,8 @@ #define REMOTE Yap_global->remote #endif +#define Yap_Initialised Yap_global->initialised +#define Yap_InitialisedFromPL Yap_global->initialised_from_pl +#define Yap_PL_Argc Yap_global->pl_argc +#define Yap_PL_Argv Yap_global->pl_argv + diff --git a/H/hglobals.h b/H/hglobals.h index 7d6d56bcf..ba03e9a7a 100644 --- a/H/hglobals.h +++ b/H/hglobals.h @@ -183,4 +183,9 @@ typedef struct worker_shared { struct global_data global; struct local_data remote[MAX_WORKERS]; #endif + + int initialised; + int initialised_from_pl; + int pl_argc; + char **pl_argv; } w_shared; diff --git a/H/iglobals.h b/H/iglobals.h index 9da323926..0078329d6 100644 --- a/H/iglobals.h +++ b/H/iglobals.h @@ -181,4 +181,9 @@ static void InitGlobal(void) { #endif + + Yap_global->initialised = FALSE; + Yap_global->initialised_from_pl = FALSE; + Yap_global->pl_argc = 0; + Yap_global->pl_argv = NULL; } diff --git a/H/rglobals.h b/H/rglobals.h index 884dba19a..375a0fb0d 100644 --- a/H/rglobals.h +++ b/H/rglobals.h @@ -181,4 +181,9 @@ static void RestoreGlobal(void) { #endif + + + + + } diff --git a/library/yap2swi/yap2swi.c b/library/yap2swi/yap2swi.c index 394442b5e..0dba9ac33 100755 --- a/library/yap2swi/yap2swi.c +++ b/library/yap2swi/yap2swi.c @@ -1984,13 +1984,24 @@ PL_initialise(int myargc, char **myargv) init_args.NumberWorkers = 1; init_args.SchedulerLoop = 10; init_args.DelayedReleaseLoad = 3; + + Yap_PL_Argc = myargc; + Yap_PL_Argv = myargv; + Yap_InitialisedFromPL = TRUE; + return YAP_Init(&init_args); } X_API int -PL_is_initialised(int *argc, char ***argv) +PL_is_initialised(int *argcp, char ***argvp) { - return TRUE; + if (Yap_InitialisedFromPL) { + if (argcp) + *argcp = Yap_PL_Argc; + if (argvp) + *argvp = Yap_PL_Argv; + } + return Yap_InitialisedFromPL; } X_API module_t diff --git a/misc/GLOBALS b/misc/GLOBALS index 9ff56d363..e4ab5028f 100644 --- a/misc/GLOBALS +++ b/misc/GLOBALS @@ -205,5 +205,11 @@ struct global_data global GLOBAL void struct local_data remote[MAX_WORKERS] REMOTE void #endif +// initialization: tell whether the system has been initialised and by whom. +int initialised Yap_Initialised =FALSE +int initialised_from_pl Yap_InitialisedFromPL =FALSE +int pl_argc Yap_PL_Argc =0 +char **pl_argv Yap_PL_Argv =NULL + END_WORKER_SHARED diff --git a/packages/jpl b/packages/jpl index cb4b29949..fde4e853d 160000 --- a/packages/jpl +++ b/packages/jpl @@ -1 +1 @@ -Subproject commit cb4b299493f80d424dcd19f1928ebb2e0203bdb2 +Subproject commit fde4e853dc29532a0360cc7ac7200dff28ad606e diff --git a/pl/yio.yap b/pl/yio.yap index 25c6f5b95..aab5382cb 100644 --- a/pl/yio.yap +++ b/pl/yio.yap @@ -1107,6 +1107,13 @@ current_stream(File, Opts, Stream) :- close(Stream), fail. +sformat(String, Form, Args) :- + charsio:open_mem_write_stream(Stream), + format(Stream, Form, Args), + charsio:peek_mem_write_stream(Stream, [], String), + close(Stream). + + '$handle_exception'(Exception, Stream, SO) :- set_output(SO), close(Stream), @@ -1144,3 +1151,5 @@ prolog_file_name(File, PrologFileName) :- system:true_file_name(File, PrologFileName). prolog_file_name(File, PrologFileName) :- '$do_error'(type_error(atom,T), prolog_file_name(File, PrologFileName)). + +s \ No newline at end of file