encoding support.

This commit is contained in:
Vitor Santos Costa 2011-02-15 22:44:06 +00:00
parent 145b9c1b4a
commit 842f80e928
3 changed files with 24 additions and 9 deletions

View File

@ -1199,27 +1199,29 @@ p_float_format(void)
return TRUE; return TRUE;
} }
extern IOENC Yap_DefaultEncoding(void);
extern void Yap_SetDefaultEncoding(IOENC);
extern int PL_get_stream_handle(Int, IOSTREAM **);
static Int static Int
p_get_default_encoding(void) p_get_default_encoding(void)
{ {
Term out = TermNil; // VSC MkIntegerTerm(DefaultEncoding()); Term out = MkIntegerTerm(Yap_DefaultEncoding());
return Yap_unify(ARG1, out); return Yap_unify(ARG1, out);
} }
static Int static Int
p_encoding (void) p_encoding (void)
{ /* '$encoding'(Stream,N) */ { /* '$encoding'(Stream,N) */
int sno = 0; IOSTREAM *st;
// int sno = CheckStream (ARG1, Input_Stream_f|Output_Stream_f, "encoding/2");
Term t = Deref(ARG2); Term t = Deref(ARG2);
if (sno < 0) if (!PL_get_stream_handle(Yap_InitSlot(Deref(ARG1)), &st)) {
return FALSE; return FALSE;
if (IsVarTerm(t)) {
UNLOCK(Stream[sno].streamlock);
return Yap_unify(ARG2, MkIntegerTerm(Stream[sno].encoding));
} }
Stream[sno].encoding = IntegerOfTerm(Deref(ARG2)); if (IsVarTerm(t)) {
UNLOCK(Stream[sno].streamlock); return Yap_unify(ARG2, MkIntegerTerm(st->encoding));
}
st->encoding = IntegerOfTerm(Deref(ARG2));
return TRUE; return TRUE;
} }

View File

@ -157,6 +157,17 @@ Yap_Eval(YAP_Term t)
return Yap_InnerEval(t); return Yap_InnerEval(t);
} }
IOENC
Yap_DefaultEncoding(void)
{
return LD->encoding;
}
void
Yap_SetDefaultEncoding(IOENC new_encoding)
{
LD->encoding = new_encoding;
}
int int
valueExpression(term_t t, Number r ARG_LD) valueExpression(term_t t, Number r ARG_LD)

View File

@ -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_read_term(term_t t, IOSTREAM *st, term_t vs);
extern int Yap_LookupSWIStream(void *swi_s); extern int Yap_LookupSWIStream(void *swi_s);
extern term_t Yap_fetch_module_for_format(term_t args, YAP_Term *modp); 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); extern atom_t codeToAtom(int chrcode);