/*-------------------------------------------------------------------------* * CTRL_C_MANAGER * * * *-------------------------------------------------------------------------*/ static PlLong Ctrl_C_Manager(int from_callback) { StmInf *pstm = pl_stm_tbl[pl_stm_top_level_output]; PredInf *pred; int c; CodePtr to_execute; // Pl_Reset_Prolog_In_Signal(); Restore_Machine_Regs(buff_save_machine_regs); start: Pl_Stream_Printf(pstm, "\nProlog interruption (h for help) ? "); Pl_Stream_Flush(pstm); c = Pl_Stream_Get_Key(pl_stm_tbl[pl_stm_top_level_input], TRUE, FALSE); Pl_Stream_Putc('\n', pstm); switch (c) { case 'a': /* abort */ to_execute = Prolog_Predicate(ABORT, 0); if (from_callback) return (PlLong) to_execute; Pl_Execute_A_Continuation(to_execute); break; case 'b': /* break */ Pl_Call_Prolog(Prolog_Predicate(BREAK, 0)); goto start; break; case 'c': /* continue */ break; case 'e': /* exit */ Pl_Exit_With_Value(0); case 't': /* trace */ case 'd': /* debug */ if (SYS_VAR_DEBUGGER) { pred = Pl_Lookup_Pred(Pl_Create_Atom((c == 't') ? "trace" : "debug"), 0); if (pred == NULL) Pl_Fatal_Error(ERR_DEBUGGER_NOT_FOUND); /* should not occur */ Pl_Call_Prolog((CodePtr) pred->codep); break; } default: /* help */ Pl_Stream_Printf(pstm, " a abort b break\n"); Pl_Stream_Printf(pstm, " c continue e exit\n"); if (SYS_VAR_DEBUGGER) Pl_Stream_Printf(pstm, " d debug t trace\n"); Pl_Stream_Printf(pstm, " h/? help\n"); goto start; } return 0; }
/*-------------------------------------------------------------------------* * PL_QUERY_CALL * * * *-------------------------------------------------------------------------*/ int Pl_Query_Call(int func, int arity, WamWord *arg_adr) { *query_stack_top++ = pl_query_top_b = B; pl_query_exception = pl_atom_void; return Pl_Call_Prolog(Prepare_Call(func, arity, arg_adr)); }
void Call_Pl(void (*code) (), int must_succeed) { int ok = Pl_Call_Prolog(code); if (ok != must_succeed) error(); }
/*-------------------------------------------------------------------------* * TRY_PORTRAY * * * *-------------------------------------------------------------------------*/ static Bool Try_Portray(WamWord word) { #ifdef FOR_EXTERNAL_USE return FALSE; #else PredInf *pred; StmInf *print_pstm_o; Bool print_quoted; Bool print_ignore_op; Bool print_number_vars; Bool print_name_vars; Bool print_space_args; Bool print_portrayed; Bool print_ok; static CodePtr try_portray_code = NULL; if (!portrayed) return FALSE; if (try_portray_code == NULL) { pred = Pl_Lookup_Pred(Pl_Create_Atom("$try_portray"), 1); if (pred == NULL || pred->codep == NULL) Pl_Err_Resource(pl_resource_print_object_not_linked); try_portray_code = (CodePtr) (pred->codep); } print_pstm_o = pstm_o; print_quoted = quoted; print_ignore_op = ignore_op; print_number_vars = number_vars; print_name_vars = name_vars; print_space_args = space_args; print_portrayed = portrayed; A(0) = word; print_ok = Pl_Call_Prolog(try_portray_code); pstm_o = print_pstm_o; quoted = print_quoted; ignore_op = print_ignore_op; number_vars = print_number_vars; name_vars = print_name_vars; space_args = print_space_args; portrayed = print_portrayed; return print_ok; #endif }
/*-------------------------------------------------------------------------* * PL_EXECUTE_DIRECTIVE * * * * Called by compiled prolog code. * *-------------------------------------------------------------------------*/ void Pl_Execute_Directive(int pl_file, int pl_line, Bool is_system, CodePtr proc) { Pl_Reset_Prolog(); if (!is_system) nb_user_directives++; if (!Pl_Call_Prolog(proc)) fprintf(stderr, ERR_DIRECTIVE_FAILED, pl_atom_tbl[pl_file].name, pl_line, (is_system) ? "system" : "user"); Pl_Reset_Prolog(); }
/*-------------------------------------------------------------------------* * PL_TRY_EXECUTE_TOP_LEVEL * * * *-------------------------------------------------------------------------*/ Bool Pl_Try_Execute_Top_Level(void) { PredInf *pred; Pl_Reset_Prolog(); pred = Pl_Lookup_Pred(Pl_Create_Atom("top_level"), 0); if (pred != NULL) { Pl_Call_Prolog((CodePtr) (pred->codep)); return TRUE; } Pl_Reset_Prolog(); return FALSE; }