From c33a0d72db44269472a0ed215a34df9a3e5d6394 Mon Sep 17 00:00:00 2001 From: Vitor Santos Costa Date: Wed, 14 Mar 2018 00:41:05 +0000 Subject: [PATCH] booting --- C/yap-args.c | 67 +++---- CXX/yapi.cpp | 4 +- CXX/yapq.hh | 4 +- console/yap.c | 3 +- include/YapDefs.h | 2 +- include/YapInterface.h | 4 +- library/dialect/swi/fli/swi.c | 6 +- packages/python/pypreds.c | 4 +- .../yap_ipython/core/interactiveshell.py | 4 +- .../python/yap_kernel/yap_ipython/yapi.py | 16 +- .../python/yap_kernel/yap_kernel/kernelapp.py | 14 +- pl/boot.yap | 3 +- pl/init.yap | 185 ++++++++++++++++++ pl/qly.yap | 154 --------------- pl/top.yap | 92 +-------- 15 files changed, 264 insertions(+), 298 deletions(-) diff --git a/C/yap-args.c b/C/yap-args.c index f7deb5756..3176b95c2 100755 --- a/C/yap-args.c +++ b/C/yap-args.c @@ -125,7 +125,7 @@ static void init_globals(YAP_init_args *yap_init) { has been overwritten .... */ setBooleanGlobalPrologFlag(HALT_AFTER_CONSULT_FLAG, - yap_init->HaltAfterConsult); + yap_init->HaltAfterBoot); } if (yap_init->PrologTopLevelGoal) { Yap_PutValue(AtomTopLevelGoal, @@ -699,7 +699,7 @@ X_API YAP_file_type_t YAP_parse_yap_arguments(int argc, char *argv[], goto GetSize; } iap->QuietMode = TRUE; - iap->HaltAfterConsult = TRUE; + iap->HaltAfterBoot = true; case 'l': p++; if (!*++argv) { @@ -759,6 +759,7 @@ X_API YAP_file_type_t YAP_parse_yap_arguments(int argc, char *argv[], argv++; iap->PrologTopLevelGoal = add_end_dot(*argv); } + iap->HaltAfterBoot = true; break; case 'n': if (!strcmp("nosignals", p)) { @@ -967,10 +968,10 @@ static void init_hw(YAP_init_args *yap_init, struct ssz_t *spt) { #endif } -static YAP_file_type_t end_init(YAP_init_args *yap_init, YAP_file_type_t rc) { +static void end_init(YAP_init_args *iap) { YAP_initialized = true; + if (iap->HaltAfterBoot) Yap_exit(0); LOCAL_PrologMode &= ~BootMode; - return rc; } static void start_modules(void) { @@ -986,14 +987,14 @@ static void start_modules(void) { /* this routine is supposed to be called from an external program that wants to control Yap */ -X_API YAP_file_type_t YAP_Init(YAP_init_args *yap_init) { - YAP_file_type_t restore_result = yap_init->boot_file_type; - bool do_bootstrap = (restore_result & YAP_CONSULT_MODE); +X_API void YAP_Init(YAP_init_args *yap_init) { + bool try_restore = yap_init->boot_file_type == YAP_QLY; + bool do_bootstrap = yap_init->boot_file_type == YAP_BOOT_PL; struct ssz_t minfo; if (YAP_initialized) /* ignore repeated calls to YAP_Init */ - return YAP_FOUND_BOOT_ERROR; + return; if (!LOCAL_TextBuffer) LOCAL_TextBuffer = Yap_InitTextAllocator(); @@ -1007,7 +1008,7 @@ X_API YAP_file_type_t YAP_Init(YAP_init_args *yap_init) { // CACHE_REGS - if (Yap_embedded) + if (yap_init->QuietMode) { setVerbosity(TermSilent); } @@ -1017,41 +1018,42 @@ X_API YAP_file_type_t YAP_Init(YAP_init_args *yap_init) { restore will print out messages .... */ setBooleanGlobalPrologFlag(HALT_AFTER_CONSULT_FLAG, - yap_init->HaltAfterConsult); + yap_init->HaltAfterBoot); } /* tell the system who should cope with interrupts */ Yap_ExecutionMode = yap_init->ExecutionMode; Yap_set_locations(yap_init); - if (!do_bootstrap && Yap_INPUT_STARTUP && - yap_init->boot_file_type != YAP_BOOT_PL && - Yap_SavedInfo(Yap_INPUT_STARTUP, &minfo.Trail, &minfo.Stack, - &minfo.Heap) && - Yap_Restore(Yap_INPUT_STARTUP)) { - setBooleanGlobalPrologFlag(SAVED_PROGRAM_FLAG, true); - CurrentModule = LOCAL_SourceModule = USER_MODULE; - init_globals(yap_init); - YAP_RunGoalOnce(TermInitProlog); - - start_modules(); - return end_init(yap_init, YAP_QLY); - } else { + if (do_bootstrap || + !try_restore || + !Yap_SavedInfo(Yap_INPUT_STARTUP, &minfo.Trail, &minfo.Stack, + &minfo.Heap) ) { init_globals(yap_init); start_modules(); consult(Yap_BOOTSTRAP PASS_REGS); - if (yap_init->install && Yap_OUTPUT_STARTUP) { + setAtomicGlobalPrologFlag(RESOURCE_DATABASE_FLAG, + MkAtomTerm(Yap_LookupAtom(Yap_BOOTFILE))); + setBooleanGlobalPrologFlag(SAVED_PROGRAM_FLAG, false); + } else { + Yap_Restore(Yap_INPUT_STARTUP); + init_globals(yap_init); + + start_modules(); + setAtomicGlobalPrologFlag(RESOURCE_DATABASE_FLAG, + MkAtomTerm(Yap_LookupAtom(Yap_INPUT_STARTUP))); + setBooleanGlobalPrologFlag(SAVED_PROGRAM_FLAG, true); + } + YAP_RunGoalOnce(TermInitProlog); + + if (yap_init->install && Yap_OUTPUT_STARTUP) { Term t = MkAtomTerm(Yap_LookupAtom(Yap_OUTPUT_STARTUP)); Term g = Yap_MkApplTerm(Yap_MkFunctor(Yap_LookupAtom("qsave_program"), 1), 1, &t); YAP_RunGoalOnce(g); - } - setAtomicGlobalPrologFlag(RESOURCE_DATABASE_FLAG, - MkAtomTerm(Yap_LookupAtom(Yap_BOOTFILE))); - setBooleanGlobalPrologFlag(SAVED_PROGRAM_FLAG, false); - return end_init(yap_init, YAP_BOOT_PL); - } + } + end_init(yap_init); } #if (DefTrailSpace < MinTrailSpace) @@ -1073,15 +1075,14 @@ X_API YAP_file_type_t YAP_Init(YAP_init_args *yap_init) { #define DEFAULT_SCHEDULERLOOP 10 #define DEFAULT_DELAYEDRELEASELOAD 3 -X_API YAP_file_type_t YAP_FastInit(char *saved_state, int argc, char *argv[]) { +X_API void YAP_FastInit(char *saved_state, int argc, char *argv[]) { YAP_init_args init_args; YAP_file_type_t out; if ((out = Yap_InitDefaults(&init_args, saved_state, argc, argv)) != YAP_FOUND_BOOT_ERROR) - out = YAP_Init(&init_args); + YAP_Init(&init_args); if (out == YAP_FOUND_BOOT_ERROR) { Yap_Error(init_args.ErrorNo, TermNil, init_args.ErrorCause); } - return out; } diff --git a/CXX/yapi.cpp b/CXX/yapi.cpp index af5736499..39ca33f3c 100644 --- a/CXX/yapi.cpp +++ b/CXX/yapi.cpp @@ -243,6 +243,7 @@ Term &YAPTerm::operator[](arity_t i) { Yap_Error(TYPE_ERROR_COMPOUND, t0, ""); } RECOVER_MACHINE_REGS(); + return (tf); } Term &YAPListTerm::operator[](arity_t i) { @@ -842,11 +843,12 @@ void Yap_displayWithJava(int c) { #endif void YAPEngine::doInit(YAP_file_type_t BootMode, YAPEngineArgs *engineArgs) { - if ((BootMode = YAP_Init(engineArgs)) == YAP_FOUND_BOOT_ERROR) { + if (BootMode == YAP_FOUND_BOOT_ERROR) { std::cerr << "Exception received by " << __func__ << "( " << "while booting" << ").\n Forwarded...\n\n"; return; } + YAP_Init(engineArgs); /* Begin preprocessor code */ /* live */ // yerror = YAPError(); diff --git a/CXX/yapq.hh b/CXX/yapq.hh index dfb02f882..c76bf767f 100644 --- a/CXX/yapq.hh +++ b/CXX/yapq.hh @@ -263,9 +263,9 @@ public: inline const char *getPrologTopLevelGoal() { return PrologTopLevelGoal; }; - inline void setHaltAfterConsult(bool fl) { HaltAfterConsult = fl; }; + inline void setHaltAfterBoot(bool fl) { HaltAfterBoot = fl; }; - inline bool getHaltAfterConsult() { return HaltAfterConsult; }; + inline bool getHaltAfterBoot() { return HaltAfterBoot; }; inline void setFastBoot(bool fl) { FastBoot = fl; }; diff --git a/console/yap.c b/console/yap.c index 15ef5cb95..5c7526c01 100755 --- a/console/yap.c +++ b/console/yap.c @@ -78,7 +78,8 @@ static int init_standard_system(int argc, char *argv[], YAP_init_args *iap) { BootMode = YAP_parse_yap_arguments(argc, argv, iap); iap->Embedded = false; /* init memory */ - iap->boot_file_type = BootMode = YAP_Init(iap); + iap->boot_file_type = BootMode; + YAP_Init(iap); if (iap->ErrorNo) { /* boot failed */ YAP_Error(iap->ErrorNo, 0L, iap->ErrorCause); diff --git a/include/YapDefs.h b/include/YapDefs.h index a0bd4bd5f..525edd6fc 100755 --- a/include/YapDefs.h +++ b/include/YapDefs.h @@ -234,7 +234,7 @@ typedef struct yap_boot_params { //> if NON-NULL, a path to extend file-search-path const char *PrologAddPath; //> if previous NON-NULL and TRUE, halt after consulting that file - bool HaltAfterConsult; + bool HaltAfterBoot; //> ignore .yaprc, .prolog.ini, etc. files. bool FastBoot; //> the next field only interest YAPTAB diff --git a/include/YapInterface.h b/include/YapInterface.h index 2d2183863..c21e7ea7d 100755 --- a/include/YapInterface.h +++ b/include/YapInterface.h @@ -378,10 +378,10 @@ extern X_API int YAP_AssertTuples(YAP_PredEntryPtr pred, const YAP_Term *ts, size_t offset, size_t sz); /* int YAP_Init(YAP_init_args *) */ -extern X_API YAP_file_type_t YAP_Init(YAP_init_args *); +extern X_API void YAP_Init(YAP_init_args *); /* int YAP_FastInit(const char *) */ -extern X_API YAP_file_type_t YAP_FastInit(char saved_state[], int argc, +extern X_API void YAP_FastInit(char saved_state[], int argc, char *argv[]); #ifndef _PL_STREAM_H diff --git a/library/dialect/swi/fli/swi.c b/library/dialect/swi/fli/swi.c index 8a8fa2be3..6937f6154 100755 --- a/library/dialect/swi/fli/swi.c +++ b/library/dialect/swi/fli/swi.c @@ -2200,7 +2200,7 @@ X_API int PL_initialise(int myargc, char **myargv) { #endif init_args.LIBDIR = NULL; init_args.BOOTFILE = NULL; - init_args.HaltAfterConsult = FALSE; + init_args.HaltAfterBoot = true; init_args.FastBoot = FALSE; init_args.MaxTableSpaceSize = 0; init_args.NumberWorkers = 1; @@ -2212,9 +2212,9 @@ X_API int PL_initialise(int myargc, char **myargv) { GLOBAL_PL_Argc = myargc; GLOBAL_PL_Argv = myargv; GLOBAL_InitialisedFromPL = true; - YAP_file_type_t rc = YAP_Init(&init_args) != YAP_FOUND_BOOT_ERROR; ATOM_nil = YAP_SWIAtomFromAtom(AtomNil); - return rc; + YAP_Init(&init_args); + return true; } X_API int PL_is_initialised(int *argcp, char ***argvp) { diff --git a/packages/python/pypreds.c b/packages/python/pypreds.c index e70466bc4..c95896c2d 100644 --- a/packages/python/pypreds.c +++ b/packages/python/pypreds.c @@ -643,16 +643,18 @@ static PyGILState_STATE gstate; // if (_locked > 0) { _locked++ ; } // else gstate = PyGILState_Ensure(); + fprintf(stderr, "+%d\n", (int)gstate); PL_put_integer(curSlot, gstate); pyErrorAndReturn(curSlot, false); } bool python_release_GIL(term_t curBlock) { PyGILState_STATE gstate; - PyErr_Clear(); + if (_threaded) { PL_get_integer(curBlock, &gstate); PyGILState_Release(gstate); + fprintf(stderr, "-%d\n", (int)gstate); } PL_reset_term_refs(curBlock); pyErrorAndReturn(true, false); diff --git a/packages/python/yap_kernel/yap_ipython/core/interactiveshell.py b/packages/python/yap_kernel/yap_ipython/core/interactiveshell.py index 1510c343c..a0231ebd5 100644 --- a/packages/python/yap_kernel/yap_ipython/core/interactiveshell.py +++ b/packages/python/yap_kernel/yap_ipython/core/interactiveshell.py @@ -522,8 +522,7 @@ class InteractiveShell(SingletonConfigurable): # The following was in post_config_initialization self.init_inspector() self.raw_input_original = input - self.input_splitter.engine(self.yapeng) - self.input_transformer_manager.engine(self.yapeng) + #self.input_transformer_manager.engine(self.yapeng) self.init_completer() # TODO: init_io() needs to happen before init_traceback handlers # because the traceback handlers hardcode the stdout/stderr streams. @@ -2671,7 +2670,6 @@ class InteractiveShell(SingletonConfigurable): self.events.trigger('post_execute') if not silent: self.events.trigger('post_run_cell', result) - print("go", result) return result def _run_cell(self, raw_cell, store_history, silent, shell_futures): diff --git a/packages/python/yap_kernel/yap_ipython/yapi.py b/packages/python/yap_kernel/yap_ipython/yapi.py index b7503c7b4..5f07d0c76 100644 --- a/packages/python/yap_kernel/yap_ipython/yapi.py +++ b/packages/python/yap_kernel/yap_ipython/yapi.py @@ -59,11 +59,12 @@ class YAPInputSplitter(InputSplitter): # List with lines of raw input accumulated so far. _buffer_raw = None - def __init__(self, line_input_checker=True, physical_line_transforms=None, + def __init__(self, engine=None, shell=None, line_input_checker=True, physical_line_transforms=None, logical_line_transforms=None): self._buffer_raw = [] self._validate = True - self.yapeng = None + self.yapeng = engine + self.shell = shell if physical_line_transforms is not None: self.physical_line_transforms = physical_line_transforms @@ -102,19 +103,16 @@ class YAPInputSplitter(InputSplitter): [self.assemble_logical_lines] + self.logical_line_transforms return t - def engine(self, engine): - self.yapeng = engine - - def validQuery(self, text, line=None): + def validQuery(self, text, engine, shell, line=None): """Return whether a legal query """ - if text == self.shell.os: + if text == shell.os: return True if not line: line = text.rstrip() (line, _, _, _)=self.shell.clean_end(line) self.errors = [] - self.yapeng.mgoal(errors(self, line),"user") + engine.mgoal(errors(self, line),"user") return self.errors != [] @@ -183,7 +181,7 @@ class YAPInputSplitter(InputSplitter): if self.transformer_accumulating: return True else: - return self,validQuery(self.source) + return self.validQuery(self.source, self.yapeng, self) def transform_cell(self, cell): """Process and translate a cell of input. diff --git a/packages/python/yap_kernel/yap_kernel/kernelapp.py b/packages/python/yap_kernel/yap_kernel/kernelapp.py index a906201cc..cc98ab025 100644 --- a/packages/python/yap_kernel/yap_kernel/kernelapp.py +++ b/packages/python/yap_kernel/yap_kernel/kernelapp.py @@ -472,7 +472,18 @@ class YAPKernelApp(BaseYAPApplication, InteractiveShellApp, return self.subapp.start() if self.poller is not None: self.poller.start() - self.kernel.start() + + import trace + #create a Trace object, telling it what to ignore, and whether to + # do tracing or line-counting or both. + tracer = trace.Trace( + #ignoredirs=[sys.prefix, sys.exec_prefix], + trace=1, + count=0) + + tracer.runfunc(self.kernel.start) + + #self.kernel.start() self.io_loop = ioloop.IOLoop.current() try: self.io_loop.start() @@ -485,6 +496,7 @@ def main(): """Run an IPKernel as an application""" app = YAPKernelApp.instance() app.initialize() + app.start() diff --git a/pl/boot.yap b/pl/boot.yap index d6286f335..94d4b7fbc 100644 --- a/pl/boot.yap +++ b/pl/boot.yap @@ -202,6 +202,7 @@ print_message(L,E) :- :- c_compile('directives.yap'). +:- c_compile('init.yap'). '$command'(C,VL,Pos,Con) :- current_prolog_flag(strict_iso, true), !, /* strict_iso on */ @@ -223,8 +224,6 @@ print_message(L,E) :- :- c_compile('arith.yap'). %:- stop_low_level_trace. -:- '$init_prolog'. - :- compile_expressions. diff --git a/pl/init.yap b/pl/init.yap index 82dd79167..91670911c 100644 --- a/pl/init.yap +++ b/pl/init.yap @@ -15,3 +15,188 @@ * * *************************************************************************/ + +'$init_globals' :- + % set_prolog_flag(break_level, 0), + % '$set_read_error_handler'(error), let the user do that + nb_setval('$chr_toplevel_show_store',false). + +'$init_consult' :- + set_value('$open_expands_filename',true), + nb_setval('$assert_all',off), + nb_setval('$if_level',0), + nb_setval('$endif',off), + nb_setval('$initialization_goals',off), + nb_setval('$included_file',[]), + nb_setval('$loop_streams',[]), + \+ '$undefined'('$init_preds',prolog), + '$init_preds', + fail. +'$init_consult'. + +'$init_win_graphics' :- + '$undefined'(window_title(_,_), system), !. +'$init_win_graphics' :- + load_files([library(win_menu)], [silent(true),if(not_loaded)]), + fail. +'$init_win_graphics'. + +'$init_or_threads' :- + '$c_yapor_workers'(W), !, + '$start_orp_threads'(W). +'$init_or_threads'. + +'$start_orp_threads'(1) :- !. +'$start_orp_threads'(W) :- + thread_create('$c_worker',_,[detached(true)]), + W1 is W-1, + '$start_orp_threads'(W1). + +'$version' :- + current_prolog_flag(verbose, normal), !, + current_prolog_flag(version_git,VersionGit), + current_prolog_flag(compiled_at,AT), + current_prolog_flag(version_data, yap(Mj, Mi, Patch, _) ), + sub_atom( VersionGit, 0, 8, _, VERSIONGIT ), + current_prolog_flag(version_data, yap(Mj, Mi, Patch, _) ), + current_prolog_flag(resource_database, Saved ), + format(user_error, '% YAP ~d.~d.~d-~a (compiled ~a)~n', [Mj,Mi, Patch, VERSIONGIT, AT]), + format(user_error, '% database loaded from ~a~n', [Saved]). +'$version'. + +/** + * Initialise a Prolog engine. + * + * Must be called after restoring. + */ +'$init_prolog' :- + % do catch as early as possible + '$version', + yap_flag(file_name_variables, _OldF, true), + '$init_consult', + %set_prolog_flag(file_name_variables, OldF), + '$init_globals', + set_prolog_flag(fileerrors, true), + set_value('$gc',on), + ('$exit_undefp' -> true ; true), + prompt1(' ?- '), + set_prolog_flag(debug, false), + % simple trick to find out if this is we are booting from Prolog. + % boot from a saved state + '$init_from_saved_state_and_args', %start_low_level_trace, + + '$db_clean_queues'(0), + % this must be executed from C-code. + % '$startup_saved_state', + set_input(user_input), + set_output(user_output), + '$init_or_threads', + '$run_at_thread_start'. + + +% then we can execute the programs. +'$startup_goals' :- + module(user), + fail. +'$startup_goals' :- + recorded('$startup_goal',G,_), + catch(once(user:G),Error,user:'$Error'(Error)), + fail. +'$startup_goals' :- + get_value('$init_goal',GA), + GA \= [], + set_value('$init_goal',[]), + '$run_atom_goal'(GA), + fail. +'$startup_goals' :- + recorded('$restore_flag', goal(Module:GA), R), + erase(R), + catch(once(Module:GA),Error,user:'$Error'(Error)), + fail. +'$startup_goals' :- + get_value('$myddas_goal',GA), GA \= [], + set_value('$myddas_goal',[]), + get_value('$myddas_user',User), User \= [], + set_value('$myddas_user',[]), + get_value('$myddas_db',Db), Db \= [], + set_value('$myddas_db',[]), + get_value('$myddas_host',HostT), + ( HostT \= [] -> + Host = HostT, + set_value('$myddas_host',[]) + ; + Host = localhost + ), + get_value('$myddas_pass',PassT), + ( PassT \= [] -> + Pass = PassT, + set_value('$myddas_pass',[]) + ; + Pass = '' + ), + use_module(library(myddas)), + call(db_open(mysql,myddas,Host/Db,User,Pass)), + '$myddas_import_all', + fail. +'$startup_goals'. + + % + % MYDDAS: Import all the tables from one database + % + + '$myddas_import_all':- + call(db_my_show_tables(myddas,table(Table))), + call(db_import(myddas,Table,Table)), + fail. + '$myddas_import_all'. + +% use if we come from a save_program and we have SWI's shlib +'$init_from_saved_state_and_args' :- + current_prolog_flag(hwnd, _HWND), + load_files(library(win_menu), [silent(true)]), + fail. +'$init_from_saved_state_and_args' :- + recorded('$reload_foreign_libraries',_G,R), + erase(R), + shlib:reload_foreign_libraries, + fail. +% this should be done before -l kicks in. +'$init_from_saved_state_and_args' :- + current_prolog_flag(fast_boot, false), + ( exists('~/.yaprc') -> load_files('~/.yaprc', []) ; true ), + ( exists('~/.prologrc') -> load_files('~/.prologrc', []) ; true ), + ( exists('~/prolog.ini') -> load_files('~/prolog.ini', []) ; true ), + fail. +% use if we come from a save_program and we have a goal to execute +'$init_from_saved_state_and_args' :- + get_value('$consult_on_boot',X), X \= [], + set_value('$consult_on_boot',[]), + '$do_startup_reconsult'(X), + fail. +'$init_from_saved_state_and_args' :- + recorded('$restore_flag', init_file(M:B), R), + erase(R), + '$do_startup_reconsult'(M:B), + fail. +'$init_from_saved_state_and_args' :- + recorded('$restore_flag', unknown(M:B), R), + erase(R), + yap_flag(M:unknown,B), + fail. +'$init_from_saved_state_and_args' :- + '$startup_goals', + fail. +'$init_from_saved_state_and_args' :- + recorded('$restore_goal',G,R), + erase(R), + prompt(_,'| '), + catch(once(user:G),Error,user:'$Error'(Error)), + fail. + +'$init_path_extensions' :- + get_value('$extend_file_search_path',P), !, + P \= [], + set_value('$extend_file_search_path',[]), + '$extend_file_search_path'(P). +'$init_path_extensions'. + diff --git a/pl/qly.yap b/pl/qly.yap index 81add73d3..679760178 100755 --- a/pl/qly.yap +++ b/pl/qly.yap @@ -241,161 +241,7 @@ qend_program :- X \= os_argv, X \= language, X \= encoding. - -'$init_state' :- - ( - recorded('$program_state', _P, R) - -> - erase(R), - '$do_init_state' - ; - true - ). - -'$do_init_state' :- - '$undefp_handler'('$undefp'(_,_), prolog), - fail. -'$do_init_state' :- - set_value('$user_module',user), - '$protect', fail. -'$do_init_state' :- - compile_expressions, - '$init_preds', - fail. -'$do_init_state' :- - recorded('$program_state',L,R), - erase(R), - lists:member(F-V,L), - catch(yap_flag(F,V),Error,user:'$Error'(Error)), - fail. -'$do_init_state' :- - '$reinit_thread0', - fail. -'$do_init_state' :- - '$current_module'(prolog), - module(user), - fail. -'$do_init_state' :- - '$init_from_saved_state_and_args', - fail. -'$do_init_state' :- - stream_property(user_input, tty(true)), - set_prolog_flag(readline, true). -'$do_init_state'. - -% -% first, recover what we need from the saved state... -%' -'$init_from_saved_state_and_args' :- - '$init_path_extensions', - fail. -% use if we come from a save_program and we have SWI's shlib -'$init_from_saved_state_and_args' :- - current_prolog_flag(hwnd, _HWND), - load_files(library(win_menu), [silent(true)]), - fail. -'$init_from_saved_state_and_args' :- - recorded('$reload_foreign_libraries',_G,R), - erase(R), - shlib:reload_foreign_libraries, - fail. -% this should be done before -l kicks in. -'$init_from_saved_state_and_args' :- - current_prolog_flag(fast_boot, false), - ( exists('~/.yaprc') -> load_files('~/.yaprc', []) ; true ), - ( exists('~/.prologrc') -> load_files('~/.prologrc', []) ; true ), - ( exists('~/prolog.ini') -> load_files('~/prolog.ini', []) ; true ), - fail. -% use if we come from a save_program and we have a goal to execute -'$init_from_saved_state_and_args' :- - get_value('$consult_on_boot',X), X \= [], - set_value('$consult_on_boot',[]), - '$do_startup_reconsult'(X), - fail. -'$init_from_saved_state_and_args' :- - recorded('$restore_flag', init_file(M:B), R), - erase(R), - '$do_startup_reconsult'(M:B), - fail. -'$init_from_saved_state_and_args' :- - recorded('$restore_flag', unknown(M:B), R), - erase(R), - yap_flag(M:unknown,B), - fail. -'$init_from_saved_state_and_args' :- - '$startup_goals', - fail. -'$init_from_saved_state_and_args' :- - recorded('$restore_goal',G,R), - erase(R), - prompt(_,'| '), - catch(once(user:G),Error,user:'$Error'(Error)), - fail. -'$init_from_saved_state_and_args'. - -'$init_path_extensions' :- - get_value('$extend_file_search_path',P), !, - P \= [], - set_value('$extend_file_search_path',[]), - '$extend_file_search_path'(P). -'$init_path_extensions'. - -% then we can execute the programs. -'$startup_goals' :- - module(user), - fail. -'$startup_goals' :- - recorded('$startup_goal',G,_), - catch(once(user:G),Error,user:'$Error'(Error)), - fail. -'$startup_goals' :- - get_value('$init_goal',GA), - GA \= [], - set_value('$init_goal',[]), - '$run_atom_goal'(GA), - fail. -'$startup_goals' :- - recorded('$restore_flag', goal(Module:GA), R), - erase(R), - catch(once(Module:GA),Error,user:'$Error'(Error)), - fail. -'$startup_goals' :- - get_value('$myddas_goal',GA), GA \= [], - set_value('$myddas_goal',[]), - get_value('$myddas_user',User), User \= [], - set_value('$myddas_user',[]), - get_value('$myddas_db',Db), Db \= [], - set_value('$myddas_db',[]), - get_value('$myddas_host',HostT), - ( HostT \= [] -> - Host = HostT, - set_value('$myddas_host',[]) - ; - Host = localhost - ), - get_value('$myddas_pass',PassT), - ( PassT \= [] -> - Pass = PassT, - set_value('$myddas_pass',[]) - ; - Pass = '' - ), - use_module(library(myddas)), - call(db_open(mysql,myddas,Host/Db,User,Pass)), - '$myddas_import_all', - fail. -'$startup_goals'. - - % - % MYDDAS: Import all the tables from one database - % - - '$myddas_import_all':- - call(db_my_show_tables(myddas,table(Table))), - call(db_import(myddas,Table,Table)), - fail. - '$myddas_import_all'. qsave_file(F0) :- ensure_loaded( F0 ), diff --git a/pl/top.yap b/pl/top.yap index b00dce43f..f95cd4925 100644 --- a/pl/top.yap +++ b/pl/top.yap @@ -11,84 +11,6 @@ live :- '$live'. ), '$system_catch'('$enter_top_level',Module,Error,'$Error'(Error)). -'$init_globals' :- - % set_prolog_flag(break_level, 0), - % '$set_read_error_handler'(error), let the user do that - nb_setval('$chr_toplevel_show_store',false). - -'$init_consult' :- - set_value('$open_expands_filename',true), - nb_setval('$assert_all',off), - nb_setval('$if_level',0), - nb_setval('$endif',off), - nb_setval('$initialization_goals',off), - nb_setval('$included_file',[]), - nb_setval('$loop_streams',[]), - \+ '$undefined'('$init_preds',prolog), - '$init_preds', - fail. -'$init_consult'. - -'$init_win_graphics' :- - '$undefined'(window_title(_,_), system), !. -'$init_win_graphics' :- - load_files([library(win_menu)], [silent(true),if(not_loaded)]), - fail. -'$init_win_graphics'. - -'$init_or_threads' :- - '$c_yapor_workers'(W), !, - '$start_orp_threads'(W). -'$init_or_threads'. - -'$start_orp_threads'(1) :- !. -'$start_orp_threads'(W) :- - thread_create('$c_worker',_,[detached(true)]), - W1 is W-1, - '$start_orp_threads'(W1). - -'$version' :- - current_prolog_flag(halt_after_consult, false), - current_prolog_flag(verbose, normal), !, - current_prolog_flag(version_git,VersionGit), - current_prolog_flag(compiled_at,AT), - current_prolog_flag(version_data, yap(Mj, Mi, Patch, _) ), - sub_atom( VersionGit, 0, 8, _, VERSIONGIT ), - current_prolog_flag(version_data, yap(Mj, Mi, Patch, _) ), - current_prolog_flag(resource_database, Saved ), - format(user_error, '% YAP ~d.~d.~d-~a (compiled ~a)~n', [Mj,Mi, Patch, VERSIONGIT, AT]), - format(user_error, '% database loaded from ~a~n', [Saved]). - -'$init_prolog' :- - % do catch as early as possible - '$version', - yap_flag(file_name_variables, _OldF, true), - '$init_consult', - %set_prolog_flag(file_name_variables, OldF), - '$init_globals', - set_prolog_flag(fileerrors, true), - set_value('$gc',on), - ('$exit_undefp' -> true ; true), - prompt1(' ?- '), - set_prolog_flag(debug, false), - % simple trick to find out if this is we are booting from Prolog. - % boot from a saved state - ( - current_prolog_flag(saved_program, true) - % use saved state - -> - '$init_state' - ; - true - ), - '$db_clean_queues'(0), - % this must be executed from C-code. - % '$startup_saved_state', - set_input(user_input), - set_output(user_output), - '$init_or_threads', - '$run_at_thread_start'. - % Start file for yap /* I/O predicates */ @@ -135,13 +57,13 @@ live :- '$live'. fail. '$enter_top_level' :- flush_output, -'$run_toplevel_hooks', -prompt1(' ?- '), -'$read_toplevel'(Command,Varnames,Pos), -nb_setval('$spy_gn',1), -% stop at spy-points if debugging is on. -nb_setval('$debug_run',off), -nb_setval('$debug_jump',off), + '$run_toplevel_hooks', + prompt1(' ?- '), + '$read_toplevel'(Command,Varnames,Pos), + nb_setval('$spy_gn',1), + % stop at spy-points if debugging is on. + nb_setval('$debug_run',off), + nb_setval('$debug_jump',off), '$command'(Command,Varnames,Pos,top), current_prolog_flag(break_level, BreakLevel), (