20:- system_module( '$_signals', [
alarm/3,
26:-
'$meta_call'/2
use_system_module(
'$_boot', []).
28:-
'$trace'/1
use_system_module(
'$_debug', []).
30:-
'$thread_gfetch'/1
use_system_module(
'$_threads', []).
145:-
meta_predicate on_signal(
0,?,:),
alarm(+,
0,-).
147:-
dynamic prolog:'$signal_handler'/1.
150 '$signal_handler'(
Sig).
152'$signal_handler'(sig_creep)
:-
153 '$disable_debugging'.
155'$signal_handler'(sig_int)
:-
157 '$clear_input'(user_input),
158 prompt1(
'Action (h for help)'),
161'$signal_handler'(sig_iti)
:-
162 '$thread_gfetch'(
Goal),
164 '$current_module'(
M0),
165 '$execute0'(
Goal,
M0).
166'$signal_handler'(sig_trace)
:-
168'$signal_handler'(sig_debug)
:-
170'$signal_handler'(sig_alarm)
:-
172'$signal_handler'(sig_vtalarm)
:-
174'$signal_handler'(sig_hup)
:-
176'$signal_handler'(sig_debug )
:-
178'$signal_handler'(sig_trace )
:-
180'$signal_handler'(sig_vtalarm)
:-
182'$signal_handler'(sig_usr1)
:-
183 throw(error(signal(usr1,[]),true)).
184'$signal_handler'(sig_usr2)
:-
185 throw(error(signal(usr2,[]),true)).
186'$signal_handler'(sig_pipe)
:-
187 throw(error(signal(pipe,[]),true)).
188'$signal_handler'(sig_fpe)
:-
189 throw(error(signal(fpe,[]),true)).
198'$start_creep'(
Mod:G)
:-
200 '$trace_goal'(
G,
Mod, outer ,
_,
CP).
202'$no_creep_call'(
'$execute_clause'(
G,
Mod,
Ref,
CP),
_)
:- '$no_creep_call',
204 '$execute_clause'(
G,
Mod,
Ref,
CP).
205'$no_creep_call'(
'$execute_nonstop'(
G,
M),
_)
:- '$no_creep_call',
207 '$execute_nonstop'(
G,
M).
208'$no_creep_call'(
G,
M)
:-
210 '$execute_nonstop'(
G,
M).
219 ((
exists(
'~/.yaprc')
-> [
-'~/.yaprc']
; ),
220 (
exists(
'~/.prologrc')
-> [
-'~/.prologrc']
; ),
221 (
exists(
'~/prolog.ini')
-> [
-'~/prolog.ini']
; )).
231 '$reset_signal'(
Signal,
OldAction).
234 throw(error(
'SYSTEM_ERROR_INTERNAL',
'Somehow the meta_predicate declarations of on_signal are subverted!')).
238 clause(
'$signal_handler'(
Signal),
OldAction).
240 (
Action = _M:Goal -> true
; on_signal/3throw(error(type_error(callable,
Action),)) ),
247 assert((
'$signal_handler'(
Signal)
:- Action)).
250alarm(
Interval,
Goal,
Left)
:-
251 Interval == 0,
alarm,
252 alarm(
0,
0,
Left0,
_),
255alarm(
Interval,
Goal,
Left)
:-
258 '$alarm'(
Interval,
0,
Left,
_).
259alarm(
Number,
Goal,
Left)
:-
260 float(
Number),
float,
262 USecs is integer((
Number-Secs)
*1000000)
mod 1000000,
264 alarm(
Secs,
USecs,
Left,
_).
265alarm([
Interval|USecs],
Goal, [
Left|LUSecs])
:-
267 alarm(
Interval,
USecs,
Left,
LUSecs).
269raise_exception(
Ball)
:- throw(
Ball).
271on_exception(
Pat,
G,
H)
:- catch(
G,
Pat,
H).
282:- '$set_no_trace'(current_choice_point(
_DCP), prolog).
283:-
'$set_no_trace'(cut_by(
_DCP), prolog).
284:-
'$set_no_trace'(true, prolog).
285:-
'$set_no_trace'(
'$call'(
_,
_,
_,
_), prolog).
286:-
'$set_no_trace'(
'$execute_nonstop'(
_,
_), prolog).
287:-
'$set_no_trace'(
'$execute_clause'(
_,
_,
_,
_), prolog).
288:-
'$set_no_trace'(
'$restore_regs'(
_,
_), prolog).
289:-
'$set_no_trace'(
'$undefp'(
_), prolog).
290:-
'$set_no_trace'(
'$Error'(
_), prolog).
291:-
'$set_no_trace'(
'$LoopError'(
_,
_), prolog).
297alarm(+ Seconds,+ Callable,+ OldAlarm)
catch( : Goal,+ Exception,+ Action)
on_signal(+ Signal,? OldAction,+ Callable)
current_choice_point( -CP )