17static char SccsId[] =
"%W% %G%";
65 bool Quote_illegal, Ignore_ops, Handle_vars, Handle_old_vars, Use_portray, Portray_delays;
70 UInt MaxDepth, MaxArgs;
77#define last_minus wglb->last_atom_minus
79static bool callPortray(Term t,
int sno USES_REGS) {
81 Int b0 = LCL0 - (CELL *)B;
83 UNLOCK(GLOBAL_Stream[sno].streamlock);
84 if ((pe = RepPredProp(Yap_GetPredPropByFunc(FunctorPortray, USER_MODULE))) &&
85 pe->OpcodeOfPred != FAIL_OPCODE && pe->OpcodeOfPred != UNDEF_OPCODE &&
86 Yap_execute_pred(pe, &t,
true PASS_REGS)) {
88 Yap_fail_all(B0 PASS_REGS);
89 LOCK(GLOBAL_Stream[sno].streamlock);
92 LOCK(GLOBAL_Stream[sno].streamlock);
97#define PROTECT(t, F) \
99 yhandle_t yt = Yap_InitHandle(t); \
101 t = Yap_PopHandle(yt); \
108static void wrputref(
void *,
int,
struct write_globs *);
109static int legalAtom(
unsigned char *);
112static wtype AtomIsSymbols(
unsigned char *);
114static void writeTerm(Term,
int,
int,
int,
struct write_globs *);
116#define wrputc(WF, X) \
117 (X)->stream_wputc(X - GLOBAL_Stream, WF)
123static void wropen_bracket(
struct write_globs *wglb,
int protect) {
126 if (lastw != separator && protect)
132static void wrclose_bracket(
struct write_globs *wglb,
int protect) {
133 wrf stream = wglb->stream;
139static int protect_open_number(
struct write_globs *wglb,
int lm,
140 int minus_required) {
141 wrf stream = wglb->stream;
143 if (lastw == symbol && lm && !minus_required) {
144 wropen_bracket(wglb, TRUE);
146 }
else if (lastw == alphanum || (lastw == symbol && minus_required)) {
152static void protect_close_number(
struct write_globs *wglb,
int used_bracket) {
154 wrclose_bracket(wglb, TRUE);
161static void wrputn(Int n,
164 wrf stream = wglb->stream;
165 char s[256], *s1 = s;
166 int has_minus = (n < 0);
169 ob = protect_open_number(wglb, last_minus, has_minus);
171 snprintf(s, 256, Int_FORMAT, n);
173 sprintf(s, Int_FORMAT, n);
176 wrputc(*s1++, stream);
177 protect_close_number(wglb, ob);
180inline static void wrputs(
char *s,
StreamDesc *stream) {
188static char *ensure_space(
size_t sz) {
192 s = (
char *)Yap_PreAllocCodeSpace();
193 while (s + sz >= (
char *)AuxSp) {
196 if (!Yap_ExpandPreAllocCodeSpace(sz, NULL, TRUE)) {
200 s = (
char *)Yap_PreAllocCodeSpace();
207 while (s + sz >= LOCAL_TrailTop) {
208 if (!Yap_growtrail(sz /
sizeof(CELL), FALSE)) {
217 if (s + sz >= (
char *)ASP) {
218 Yap_Error(RESOURCE_ERROR_STACK, TermNil,
219 "not enough space to write bignum: it requires %d bytes", sz);
228 int has_minus = mpz_sgn(big);
231 s = ensure_space(3 + mpz_sizeinbase(big, 10));
232 ob = protect_open_number(wglb, last_minus, has_minus);
234 s = mpz_get_str(NULL, 10, big);
237 wrputs(s, wglb->stream);
240 mpz_get_str(s, 10, big);
241 wrputs(s, wglb->stream);
243 protect_close_number(wglb, ob);
248static void writebig(Term t,
int p,
int depth,
int rinfixarg,
250 CELL *pt = RepAppl(t) + 1;
251 CELL big_tag = pt[0];
253 if (big_tag == ARRAY_INT || big_tag == ARRAY_FLOAT) {
254 wrputc(
'{', wglb->stream);
255 wrputs(
"...", wglb->stream);
256 wrputc(
'}', wglb->stream);
260 }
else if (big_tag == BIG_INT) {
261 MP_INT *big = Yap_BigIntOfTerm(t);
262 write_mpint(big, wglb);
264 }
else if (big_tag == BIG_RATIONAL) {
265 Term trat = Yap_RatTermToApplTerm(t);
266 writeTerm(trat, p, depth, rinfixarg, wglb);
269 }
else if (big_tag >= USER_BLOB_START && big_tag < USER_BLOB_END) {
270 YAP_Opaque_CallOnWrite f;
274 if (GLOBAL_OpaqueHandlers &&
275 (f = GLOBAL_OpaqueHandlers[blob_info].write_handler)) {
276 (f)(wglb->stream->file, big_tag, ExternalBlobFromTerm(t), 0);
280 wrputs(
"0", wglb->stream);
283static void wrputf(Float f,
struct write_globs *wglb)
289 wrf stream = wglb->stream;
293#if HAVE_ISNAN || defined(__WIN32)
295 wrputs(
"(nan)", stream);
301#if HAVE_ISINF || defined(_WIN32)
304 wrputs(
"(-inf)", stream);
306 wrputs(
"(+inf)", stream);
312 ob = protect_open_number(wglb, last_minus, sgn);
315 int found_dot = FALSE;
320 const unsigned char *decimalpoint =
321 (
unsigned char *)localeconv()->decimal_point;
322 size_t l1 = strlen((
const char *)decimalpoint + 1);
324 const unsigned char decimalpoint[2] =
".";
328 if (lastw == symbol || lastw == alphanum) {
333 sprintf(s, floatFormat(), f);
340 while ((ch = *pt) !=
'\0') {
342 if (ch == decimalpoint[0] &&
343 !strncmp(pt + 1, (
char *)decimalpoint + 1, l1)) {
348 if (ch ==
'e' || ch ==
'E') {
351 wrputs(
".0", stream);
359 wrputs(
".0", stream);
364 if (lastw == symbol || lastw == alphanum) {
368 snprintf(buf,
sizeof(buf)-1, RepAtom(AtomOfTerm(getAtomicGlobalPrologFlag(FLOAT_FORMAT_FLAG)))->StrOfAE,f);
373 protect_close_number(wglb, ob);
376int Yap_FormatFloat(Float f,
char **s,
size_t sz) {
381 sno = Yap_open_buf_write_stream(GLOBAL_Stream[LOCAL_c_output_stream].
encoding,
386 wglb.stream = GLOBAL_Stream + sno;
388 *s = Yap_MemExportStreamPtr(sno);
389 Yap_CloseStream(sno);
394static void wrputref(
void *ref,
int Quote_illegal,
struct write_globs *wglb) {
396 wrf stream = wglb->stream;
398 putAtom(AtomDBref, Quote_illegal, wglb);
399#if defined(__linux__) || defined(__APPLE__)
401 snprintf(s, 255,
"(%p)", ref);
403 sprintf(s,
"(%p," UInt_FORMAT
")", ref, ((
LogUpdClause *)ref)->ClRefCount);
407 snprintf(s, 255,
"(0x%p)", ref);
409 sprintf(s,
"(0x%p," UInt_FORMAT
")", ref, ((
LogUpdClause *)ref)->ClRefCount);
417static int wrputblob(
AtomEntry *ref,
int Quote_illegal,
419 wrf stream = wglb->stream;
423 if ((rc = Yap_write_blob(ref, stream))) {
430static int legalAtom(
unsigned char *s)
436 if (Yap_chtype[ch] != LC) {
438 return (s[1] ==
']' && !s[2]);
439 }
else if (ch ==
'{') {
440 return (s[1] ==
'}' && !s[2]);
441 }
else if (Yap_chtype[ch] == SL) {
443 }
else if (ch ==
'`') {
445 }
else if ((ch ==
',' || ch ==
'.') && !s[1]) {
453 if (Yap_chtype[ch] != SY) {
461 while ((ch = *++s) != 0)
462 if (Yap_chtype[ch] > NU)
468AtomIsSymbols(
unsigned char *s)
471 if (Yap_chtype[(
int)s[0]] == SL && s[1] ==
'\0')
473 while ((ch = *s++) !=
'\0') {
474 if (Yap_chtype[ch] != SY)
480static void write_quoted(
wchar_t ch,
wchar_t quote,
wrf stream) {
482 if (!(Yap_GetModuleEntry(CurrentModule)->flags & M_CHARESCAPE)) {
485 wrputc(
'\'', stream);
488 if (!(ch < 0xff && chtype(ch) == BS) && ch !=
'\'' && ch !=
'\\' &&
494 wrputc(
'\\', stream);
495 wrputc(
'\\', stream);
499 wrputc(
'\\', stream);
504 wrputc(
'\\', stream);
513 wrputc(
'\\', stream);
517 wrputc(
'\\', stream);
521 wrputc(
'\\', stream);
529 wrputc(
'\\', stream);
533 wrputc(
'\\', stream);
537 wrputc(
'\\', stream);
541 wrputc(
'\\', stream);
549 sprintf(esc,
"\\%03o\\", ch);
556static void write_string(
const unsigned char *s,
560 utf8proc_int32_t chr, qt;
561 unsigned char *ptr = (
unsigned char *)s;
563 if (wglb->Write_strings)
570 ptr += (delta = get_utf8(ptr, -1, &chr));
578 write_quoted(chr, qt, stream);
584static void putAtom(
Atom atom,
int Quote_illegal,
struct write_globs *wglb) {
586 wtype atom_or_symbol;
587 wrf stream = wglb->stream;
590 s = RepAtom(atom)->UStrOfAE;
593 wrputc(
'\'', stream);
594 wrputc(
'\'', stream);
599 wrputblob(RepAtom(atom), Quote_illegal, wglb);
603#ifdef CRYPT_FOR_STEVE
604 if (Yap_GetValue(AtomCryptAtoms) != TermNil &&
605 Yap_GetAProp(atom, OpProperty) == NIL) {
607 sprintf(s,
"x%x", (CELL)s);
614 atom_or_symbol = AtomIsSymbols(s);
615 if (lastw == atom_or_symbol && atom_or_symbol != separator )
617 lastw = atom_or_symbol;
618 if (Quote_illegal && !legalAtom(s)) {
619 wrputc(
'\'', stream);
622 s += get_utf8(s, -1, &ch);
623 write_quoted(ch,
'\'', stream);
625 wrputc(
'\'', stream);
627 wrputs((
char *)s, stream);
634 wglb.Quote_illegal = FALSE;
635 putAtom(atom, 0, &wglb);
638static int IsCodesTerm(Term
string)
640 if (IsVarTerm(
string))
646 if (!IsPairTerm(
string))
648 hd = HeadOfTerm(
string);
653 ch = IntOfTerm(HeadOfTerm(
string));
654 if ((ch < ' ' || ch > MAX_ISO_LATIN1) && ch !=
'\n' && ch !=
'\t')
656 string = TailOfTerm(
string);
657 if (IsVarTerm(
string))
659 }
while (
string != TermNil);
664static void putString(Term
string,
struct write_globs *wglb)
667 wrf stream = wglb->stream;
669 while (
string != TermNil) {
670 wchar_t ch = IntOfTerm(HeadOfTerm(
string));
671 write_quoted(ch,
'"', stream);
672 string = TailOfTerm(
string);
679static void putUnquotedString(Term
string,
struct write_globs *wglb)
682 wrf stream = wglb->stream;
683 while (
string != TermNil) {
684 int ch = IntOfTerm(HeadOfTerm(
string));
686 string = TailOfTerm(
string);
691static void write_var(CELL *t,
int depth,
struct write_globs *wglb) {
693 if (lastw == alphanum) {
694 wrputc(
' ', wglb->stream);
696 wrputc(
'_', wglb->stream);
700 Int vcount = (t - H0);
701 if (wglb->Portray_delays) {
702 exts ext = ExtFromCell(t);
704 wglb->Portray_delays = FALSE;
705 if (ext == attvars_ext) {
707 CELL *l = &attv->Future;
709 wrputs(
"$AT(", wglb->stream);
710 write_var(t, depth, wglb);
711 wrputc(
',', wglb->stream);
712 PROTECT(*t, writeTerm(*l, 999, depth-1, FALSE, wglb));
714 wrputc(
',', wglb->stream);
716 writeTerm(*l, 999, depth-1, FALSE, wglb);
717 wrclose_bracket(wglb, TRUE);
719 wglb->Portray_delays = TRUE;
722 wrputc(
'D', wglb->stream);
723 wrputn(vcount, wglb);
725 wrputn(((Int)(t - H0)), wglb);
729static void write_list(Term t,
int direction,
int depth,
737 if (lastw == symbol || lastw == separator) {
738 wrputc(
' ', wglb->stream);
740 wrputc(
'|', wglb->stream);
741 putAtom(Atom3Dots, wglb->Quote_illegal, wglb);
745 PROTECT(t, writeTerm(HeadOfTerm(t), 999, depth, FALSE, wglb));
748 putAtom(Atom3Dots, wglb->Quote_illegal, wglb);
757 wrputc(
',', wglb->stream);
760 if (IsPairTerm(ti)) {
763 wrputc(
',', wglb->stream);
764 write_list(ti, direction, depth-1, wglb);
765 }
else if (ti != MkAtomTerm(AtomNil)) {
766 if (lastw == symbol || lastw == separator) {
767 wrputc(
' ', wglb->stream);
769 wrputc(
'|', wglb->stream);
771 writeTerm(ti, 999, depth-1, FALSE, wglb);
775static void writeTerm(Term t,
int p,
int depth,
int rinfixarg,
783 putAtom(Atom3Dots, wglb->Quote_illegal, wglb);
788 write_var((CELL *)t, depth, wglb);
789 }
else if (IsIntTerm(t)) {
791 wrputn((Int)IntOfTerm(t), wglb);
792 }
else if (IsAtomTerm(t)) {
793 putAtom(AtomOfTerm(t), wglb->Quote_illegal, wglb);
794 }
else if (IsPairTerm(t)) {
795 if (wglb->Ignore_ops &&
false) {
796 wrputs(
"'.'(", wglb->stream);
799 PROTECT(t, writeTerm(HeadOfTerm(t), 999, depth-1, FALSE, wglb));
800 wrputs(
",", wglb->stream);
801 writeTerm(TailOfTerm(t), 999, depth-1, FALSE, wglb);
802 wrclose_bracket(wglb, TRUE);
805 if (wglb->Use_portray)
806 if (callPortray(t, wglb->stream - GLOBAL_Stream PASS_REGS)) {
809 if (trueGlobalPrologFlag(WRITE_STRINGS_FLAG) && IsCodesTerm(t)) {
812 wrputc(
'[', wglb->stream);
815 write_list(t, 0, LOCAL_max_depth, wglb);
816 wrputc(
']', wglb->stream);
820 Functor functor = FunctorOfTerm(t);
825 if (IsExtensionFunctor(functor)) {
826 switch ((CELL)functor) {
827 case (CELL)FunctorDouble:
828 wrputf(FloatOfTerm(t), wglb);
830 case (CELL)FunctorString:
831 write_string(UStringOfTerm(t), wglb);
833 case (CELL)FunctorDBRef:
834 wrputref(RefOfTerm(t), wglb->Quote_illegal, wglb);
836 case (CELL)FunctorLongInt:
837 wrputn(LongIntOfTerm(t), wglb);
841 writebig(t, p, depth, rinfixarg, wglb);
845 Arity = ArityOfFunctor(functor);
846 atom = NameOfFunctor(functor);
848 if (Arity == SFArity) {
850 CELL *p = ArgsOfSFTerm(t);
851 putAtom(atom, wglb->Quote_illegal, wglb);
852 wropen_bracket(wglb, FALSE);
858 wrputc(
'_', wglb->stream), wrputc(
',', wglb->stream);
864 PROTECT(t, writeTerm(*p, 999, depth-1, FALSE, wglb));
866 wrputc(
',', wglb->stream);
869 wrclose_bracket(wglb, TRUE);
873 if (wglb->Use_portray) {
874 if (callPortray(t, wglb->stream - GLOBAL_Stream PASS_REGS)) {
878 if (!wglb->Ignore_ops && Arity == 1 && Yap_IsPrefixOp(atom, &op, &rp)) {
879 Term tright = ArgOfTerm(1, t);
880 int bracket_right = !IsVarTerm(tright) && IsAtomTerm(tright) &&
881 Yap_IsOp(AtomOfTerm(tright));
883 wropen_bracket(wglb, TRUE);
885 putAtom(atom, wglb->Quote_illegal, wglb);
888 wropen_bracket(wglb, TRUE);
889 }
else if (atom == AtomMinus) {
892 writeTerm(tright, rp, depth-1, TRUE, wglb);
894 wrclose_bracket(wglb, TRUE);
897 wrclose_bracket(wglb, TRUE);
899 }
else if (!wglb->Ignore_ops &&
901 ((atom == AtomEmptyBrackets || atom == AtomCurly ||
902 atom == AtomEmptySquareBrackets) &&
903 Yap_IsListTerm(ArgOfTerm(1, t)))) &&
904 Yap_IsPosfixOp(atom, &op, &lp)) {
905 Term tleft = ArgOfTerm(1, t);
907 int bracket_left, offset;
910 tleft = ArgOfTerm(1, t);
913 tleft = ArgOfTerm(1, t);
917 !IsVarTerm(tleft) && IsAtomTerm(tleft) && Yap_IsOp(AtomOfTerm(tleft));
920 wropen_bracket(wglb, TRUE);
923 wropen_bracket(wglb, TRUE);
925 writeTerm(ArgOfTerm(offset, t), lp, depth-1, rinfixarg, wglb);
927 wrclose_bracket(wglb, TRUE);
930 if (atom == AtomEmptyBrackets) {
931 wrputc(
'(', wglb->stream);
932 }
else if (atom == AtomEmptySquareBrackets) {
933 wrputc(
'[', wglb->stream);
934 }
else if (atom == AtomCurly) {
935 wrputc(
'{', wglb->stream);
938 write_list(tleft, 0, depth-1, wglb);
939 if (atom == AtomEmptyBrackets) {
940 wrputc(
')', wglb->stream);
941 }
else if (atom == AtomEmptySquareBrackets) {
942 wrputc(
']', wglb->stream);
943 }
else if (atom == AtomCurly) {
944 wrputc(
'}', wglb->stream);
948 putAtom(atom, wglb->Quote_illegal, wglb);
951 wrclose_bracket(wglb, TRUE);
953 }
else if (!wglb->Ignore_ops && Arity == 2 &&
954 Yap_IsInfixOp(atom, &op, &lp, &rp)) {
955 Term tleft = ArgOfTerm(1, t);
956 Term tright = ArgOfTerm(2, t);
958 !IsVarTerm(tleft) && IsAtomTerm(tleft) && Yap_IsOp(AtomOfTerm(tleft));
959 int bracket_right = !IsVarTerm(tright) && IsAtomTerm(tright) &&
960 Yap_IsOp(AtomOfTerm(tright));
964 wropen_bracket(wglb, TRUE);
968 wropen_bracket(wglb, TRUE);
970 PROTECT(t, writeTerm(ArgOfTerm(1, t), lp, depth-1, rinfixarg, wglb));
972 wrclose_bracket(wglb, TRUE);
975 if (!strcmp((
char *)RepAtom(atom)->StrOfAE,
",")) {
976 wrputc(
',', wglb->stream);
978 }
else if (!strcmp((
char *)RepAtom(atom)->StrOfAE,
"|")) {
979 if (lastw == symbol || lastw == separator) {
980 wrputc(
' ', wglb->stream);
982 wrputc(
'|', wglb->stream);
985 putAtom(atom, wglb->Quote_illegal, wglb);
987 wropen_bracket(wglb, TRUE);
989 writeTerm(ArgOfTerm(2, t), rp, depth-1, TRUE, wglb);
991 wrclose_bracket(wglb, TRUE);
994 wrclose_bracket(wglb, TRUE);
997 functor == wglb->FunctorNumberVars &&
999 (wglb->hbase > RepAppl(t) && wglb->Handle_old_vars))){
1000 Term ti = ArgOfTerm(1, t);
1001 if (lastw == alphanum) {
1002 wrputc(
' ', wglb->stream);
1004 if ( !IsVarTerm(ti) &&
1005 (IsIntTerm(ti) || IsCodesTerm(ti) || IsAtomTerm(ti) ||
1006 IsStringTerm(ti))) {
1007 if (IsIntTerm(ti)) {
1008 Int k = IntOfTerm(ti);
1010 wrputc(
'S', wglb->stream);
1011 wrputc(
'_', wglb->stream);
1016 wrputc((k % 26) +
'A', wglb->stream);
1020 wrputn(k / 26, wglb);
1024 }
else if (IsAtomTerm(ti)) {
1025 putAtom(AtomOfTerm(ti), FALSE, wglb);
1026 }
else if (IsStringTerm(ti)) {
1027 putString(ti, wglb);
1029 putUnquotedString(ti, wglb);
1032 wrputs(
"'$VAR'(", wglb->stream);
1034 writeTerm(ArgOfTerm(1, t), 999, depth-1, FALSE, wglb);
1035 wrclose_bracket(wglb, TRUE);
1037 }
else if (!wglb->Ignore_ops && functor == FunctorBraces) {
1038 wrputc(
'{', wglb->stream);
1040 writeTerm(ArgOfTerm(1, t), GLOBAL_MaxPriority, depth-1,FALSE, wglb);
1041 wrputc(
'}', wglb->stream);
1043 }
else if (atom == AtomArray) {
1044 wrputc(
'{', wglb->stream);
1046 for (op = 1; op <= Arity; ++op) {
1047 if (op == wglb->MaxArgs) {
1048 wrputs(
"...", wglb->stream);
1051 writeTerm(ArgOfTerm(op, t), 999, depth-1, FALSE, wglb);
1053 PROTECT(t, writeTerm(ArgOfTerm(op, t), 999, depth-1, FALSE, wglb));
1054 wrputc(
',', wglb->stream);
1058 writeTerm(ArgOfTerm(op, t), 999, depth-1, FALSE, wglb);
1059 wrputc(
'}', wglb->stream);
1062 if (!wglb->Ignore_ops && atom == AtomHeapData) {
1063 Arity = 3 + 2 * IntegerOfTerm(ArgOfTerm(1, t));
1065 putAtom(atom, wglb->Quote_illegal, wglb);
1067 wropen_bracket(wglb, FALSE);
1068 for (op = 1; op < Arity; ++op) {
1069 if (op == wglb->MaxArgs) {
1070 wrputc(
'.', wglb->stream);
1071 wrputc(
'.', wglb->stream);
1072 wrputc(
'.', wglb->stream);
1075 PROTECT(t, writeTerm(ArgOfTerm(op, t), 999, depth-1, FALSE, wglb));
1076 wrputc(
',', wglb->stream);
1079 writeTerm(ArgOfTerm(op, t), 999, depth-1, FALSE, wglb);
1080 wrclose_bracket(wglb, TRUE);
1084void Yap_plwrite(Term t,
StreamDesc *mywrite,
int max_depth, CELL * hbase,
int flags,
1092 yhandle_t lvl = push_text_stack();
1093 int priority = GLOBAL_MaxPriority;
1095 Term cm = CurrentModule;
1099 wglb.hbase = (hbase);
1100 if (args && args[WRITE_PRIORITY].used) {
1101 priority = IntegerOfTerm(args[WRITE_PRIORITY].tvalue);
1103 if (args && args[WRITE_MODULE].used) {
1104 CurrentModule = args[WRITE_MODULE].tvalue;
1106 if (args && args[WRITE_PRIORITY].used) {
1107 priority = IntegerOfTerm(args[WRITE_PRIORITY].tvalue);
1109 if (args && args[WRITE_MODULE].used) {
1110 CurrentModule = args[WRITE_MODULE].tvalue;
1112 if (args && args[WRITE_NUMBERVARS].used) {
1113 if (IsIntTerm( args[WRITE_NUMBERVARS].tvalue))
1114 flags |= (Handle_vars_f);
1117 if (args && args[WRITE_VARIABLE_NAMES].used) {
1118 flags = args[WRITE_VARIABLE_NAMES].tvalue == TermTrue ? Named_vars_f|flags : Named_vars_f& ~flags ;
1121 if (args && args[WRITE_SINGLETONS].used) {
1122 flags = args[WRITE_SINGLETONS].tvalue == TermTrue ? flags | Singleton_vars_f
1123 : flags & ~Singleton_vars_f;
1125if (args && args[WRITE_CYCLES].used) {
1126 if (args[WRITE_CYCLES].tvalue == TermTrue) {
1127 flags |= Handle_cyclics_f;
1129 if (args[WRITE_CYCLES].tvalue == TermFalse) {
1130 flags &= ~Handle_cyclics_f;
1134 wglb.stream = mywrite;
1135 wglb.Ignore_ops = flags & Ignore_ops_f;
1136 wglb.Write_strings = flags & BackQuote_String_f;
1137 wglb.Use_portray = flags & Use_portray_f;
1138 wglb.Handle_old_vars = flags & (Named_vars_f|Singleton_vars_f);
1139 wglb.Handle_vars = flags & (Handle_vars_f);
1140 wglb.Portray_delays = flags & AttVar_Portray_f;
1141 wglb.Keep_terms = flags & To_heap_f;
1142 wglb.Write_Loops = flags & Handle_cyclics_f;
1143 wglb.Quote_illegal = flags & Quote_illegal_f;
1144 wglb.MaxArgs = max_depth*4;
1145 wglb.lw = separator;
1146 wglb.FunctorNumberVars = Yap_MkFunctor(AtomOfTerm( getAtomicLocalPrologFlag(NUMBERVARS_FUNCTOR_FLAG) ),1);
1149 writeTerm(t, priority, LOCAL_max_depth-1,
false, &wglb);
1150 if (flags & New_Line_f) {
1151 if (flags & Fullstop_f) {
1152 wrputc(
'.', wglb.stream);
1153 wrputc(
'\n', wglb.stream);
1155 wrputc(
'\n', wglb.stream);
1158 if (flags & Fullstop_f) {
1159 wrputc(
'.', wglb.stream);
1160 wrputc(
' ', wglb.stream);
1165 pop_text_stack(lvl);
@ encoding
support for coding systens, YAP relies on UTF-8 internally
Attributed variales are controlled by the attvar_record.