diff --git a/C/iopreds.c b/C/iopreds.c index c01b52907..c40145f7d 100644 --- a/C/iopreds.c +++ b/C/iopreds.c @@ -5953,10 +5953,9 @@ p_format(void) return res; } - static Int -p_format2(void) -{ /* 'format'(Stream,Control,Args) */ +format2(UInt stream_flag) +{ int old_c_stream = Yap_c_output_stream; int mem_stream = FALSE, codes_stream = FALSE; Int out; @@ -5975,7 +5974,7 @@ p_format2(void) mem_stream = TRUE; } else { /* needs to change Yap_c_output_stream for write */ - Yap_c_output_stream = CheckStream (ARG1, Output_Stream_f, "format/3"); + Yap_c_output_stream = CheckStream (ARG1, Output_Stream_f|stream_flag, "format/3"); } UNLOCK(Stream[Yap_c_output_stream].streamlock); if (Yap_c_output_stream == -1) { @@ -6007,6 +6006,18 @@ p_format2(void) return out; } +static Int +p_format2(void) +{ /* 'format'(Stream,Control,Args) */ + return format2(0); +} + +static Int +p_swi_format(void) +{ /* 'format'(Stream,Control,Args) */ + return format2(SWI_Stream_f); +} + static Int p_skip (void) @@ -6804,6 +6815,10 @@ Yap_InitIOPreds(void) Yap_InitCPred ("$tolower", 2, p_tolower, SafePredFlag|HiddenPredFlag); Yap_InitCPred ("file_base_name", 2, p_file_base_name, SafePredFlag|HiddenPredFlag); + CurrentModule = SYSTEM_MODULE; + Yap_InitCPred ("swi_format", 3, p_swi_format, SyncPredFlag); + CurrentModule = cm; + Yap_InitReadUtil (); #if USE_SOCKET Yap_InitSockets (); diff --git a/library/dialect/swi.yap b/library/dialect/swi.yap index 159acaa5a..b460203dd 100755 --- a/library/dialect/swi.yap +++ b/library/dialect/swi.yap @@ -242,6 +242,9 @@ goal_expansion(print(A),write_term(user_output,A,[swi(true),portray(true),number goal_expansion(print(S,A),write_term(S,A,[swi(true),portray(true),numbervars(true)])) :- swi_io. goal_expansion(write_term(A,Opts),write_term(user_output,A,Opts,[swi(true)|Opts])) :- swi_io. goal_expansion(write_term(S,A,Opts),write_term(S,A,[swi(true)|Opts])) :- swi_io, \+ member(swi(_), Opts). +goal_expansion(format(A),system:swi_format(user_output,A,[])) :- swi_io. +goal_expansion(format(A,Args),system:swi_format(user_output,A,Args)) :- swi_io. +goal_expansion(format(S,A,Args),system:swi_format(S,A,Args)) :- swi_io. % make sure we also use