diff --git a/C/iopreds.c b/C/iopreds.c index eab0b40b6..622138d2d 100644 --- a/C/iopreds.c +++ b/C/iopreds.c @@ -1199,27 +1199,29 @@ p_float_format(void) return TRUE; } +extern IOENC Yap_DefaultEncoding(void); +extern void Yap_SetDefaultEncoding(IOENC); +extern int PL_get_stream_handle(Int, IOSTREAM **); + static Int p_get_default_encoding(void) { - Term out = TermNil; // VSC MkIntegerTerm(DefaultEncoding()); + Term out = MkIntegerTerm(Yap_DefaultEncoding()); return Yap_unify(ARG1, out); } static Int p_encoding (void) { /* '$encoding'(Stream,N) */ - int sno = 0; - // int sno = CheckStream (ARG1, Input_Stream_f|Output_Stream_f, "encoding/2"); + IOSTREAM *st; Term t = Deref(ARG2); - if (sno < 0) + if (!PL_get_stream_handle(Yap_InitSlot(Deref(ARG1)), &st)) { return FALSE; - if (IsVarTerm(t)) { - UNLOCK(Stream[sno].streamlock); - return Yap_unify(ARG2, MkIntegerTerm(Stream[sno].encoding)); } - Stream[sno].encoding = IntegerOfTerm(Deref(ARG2)); - UNLOCK(Stream[sno].streamlock); + if (IsVarTerm(t)) { + return Yap_unify(ARG2, MkIntegerTerm(st->encoding)); + } + st->encoding = IntegerOfTerm(Deref(ARG2)); return TRUE; } diff --git a/packages/PLStream/pl-yap.c b/packages/PLStream/pl-yap.c index e6224db27..71635cd0f 100755 --- a/packages/PLStream/pl-yap.c +++ b/packages/PLStream/pl-yap.c @@ -157,6 +157,17 @@ Yap_Eval(YAP_Term t) return Yap_InnerEval(t); } +IOENC +Yap_DefaultEncoding(void) +{ + return LD->encoding; +} + +void +Yap_SetDefaultEncoding(IOENC new_encoding) +{ + LD->encoding = new_encoding; +} int valueExpression(term_t t, Number r ARG_LD) diff --git a/packages/PLStream/pl-yap.h b/packages/PLStream/pl-yap.h index 86ea5b3c3..3a9d812e2 100644 --- a/packages/PLStream/pl-yap.h +++ b/packages/PLStream/pl-yap.h @@ -34,6 +34,8 @@ extern YAP_Int Yap_GetCurrentPredArity(void); extern int Yap_read_term(term_t t, IOSTREAM *st, term_t vs); extern int Yap_LookupSWIStream(void *swi_s); extern term_t Yap_fetch_module_for_format(term_t args, YAP_Term *modp); +extern IOENC Yap_DefaultEncoding(void); +extern void Yap_SetDefaultEncoding(IOENC); extern atom_t codeToAtom(int chrcode);