18static char SccsId[] =
"%W% %G%";
70#define S_ISDIR(x) (((x)&_S_IFDIR) == _S_IFDIR)
75static Int get_code(USES_REGS1);
76static Int get_byte(USES_REGS1);
78static Int put_code(USES_REGS1);
79static Int put_byte(USES_REGS1);
80static Int skip(USES_REGS1);
81static Int flush_output(USES_REGS1);
93 get_utf8(at->UStrOfAE, 1, &val);
98static int oops_c_from_w(
int sno)
101 fprintf(stderr,
"oops_c_from_w\n" );
106 int Yap_popWide(
int sno)
110 Yap_DefaultStreamOps(s);
115int Yap_peekWide(
int sno) {
118 Int pos = s->charcount;
119 Int line = s->linecount;
120 Int lpos = s->linestart;
123 if (s->file&&fileno(s->file)>=0) {
124 ch = fgetwc(s->file);
127 s->status &= ~Eof_Error_Stream_f;
130 ungetwc(ch, s->file);
135 s->status &= ~Eof_Error_Stream_f;
136 }
else if (s->status & Seekable_Stream_f) {
137 Yap_SetCurInpPos(sno, pos);
152static int oops_w_from_c(
int sno)
155 fprintf(stderr,
"oops_w_from_c\n" );
161int Yap_popChar(
int sno)
165Yap_DefaultStreamOps(s);
170int Yap_peekChar(
int sno) {
177 s->status &= ~Eof_Error_Stream_f;
183 Int pos = s->charcount;
184 Int line = s->linecount;
185 Int lpos = s->linestart;
192 s->status &= ~Eof_Error_Stream_f;
205int Yap_peek(
int sno) {
return GLOBAL_Stream[sno].stream_wpeek(sno); }
207static int dopeek_byte(
int sno) {
return GLOBAL_Stream[sno].stream_peek(sno); }
209bool store_code(
int ch, Term t USES_REGS) {
211 bool rc = Yap_unify_constant(t2, MkIntegerTerm(ch));
212 if (!rc && !IsVarTerm(t2)) {
213 if (!IsIntegerTerm(t2)) {
214 Yap_ThrowError(TYPE_ERROR_INTEGER, t,
"in output argument");
215 }
else if (IntegerOfTerm(t2) < 0) {
216 Yap_ThrowError(REPRESENTATION_ERROR_IN_CHARACTER_CODE, t,
217 "in output argument");
230static Int at_end_of_stream(USES_REGS1) {
232 int sno = Yap_CheckStream(ARG1, Input_Stream_f, NULL);
237 out = GLOBAL_Stream[sno].status & Eof_Stream_f;
239 if (GLOBAL_Stream[sno].status & Binary_Stream_f) {
240 out = (dopeek_byte(sno) < 0);
242 out = (Yap_peek(sno) < 0);
245 UNLOCK(GLOBAL_Stream[sno].streamlock);
257static Int at_end_of_stream_0(USES_REGS1) {
261 int sno = LOCAL_c_input_stream;
262 out = GLOBAL_Stream[sno].status & Eof_Stream_f;
264 out = (Yap_peek(sno) < 0);
266 UNLOCK(GLOBAL_Stream[sno].streamlock);
270static int yap_fflush(
int sno) {
272 Yap_ReadlineFlush(sno);
274 if ((GLOBAL_Stream[sno].status & Output_Stream_f) &&
275 !(GLOBAL_Stream[sno].status &
276 (Null_Stream_f | InMemory_Stream_f | Socket_Stream_f | Pipe_Stream_f |
278 return (fflush(GLOBAL_Stream[sno].file));
292static Int get(USES_REGS1) {
293 int sno = Yap_CheckTextStream(ARG1, Input_Stream_f,
"get/2");
300 while ((ch = GLOBAL_Stream[sno].stream_wgetc(sno)) <= 32 && ch >= 0)
302 UNLOCK(GLOBAL_Stream[sno].streamlock);
303 return store_code(ch, ARG2 PASS_REGS);
312static Int get_char(USES_REGS1) {
313 int sno = Yap_CheckTextStream(ARG1, Input_Stream_f,
"get/2");
320 ch = GLOBAL_Stream[sno].stream_wgetc(sno);
321 UNLOCK(GLOBAL_Stream[sno].streamlock);
322 Term t2 = Deref(ARG2);
323 bool rc = Yap_unify_constant(t2, MkCharTerm(ch));
325 if (!IsAtomTerm(t2)) {
326 Yap_ThrowError(TYPE_ERROR_IN_CHARACTER, ARG2,
"in input argument");
340static Int get_code(USES_REGS1) {
341 int sno = Yap_CheckTextStream(ARG1, Input_Stream_f,
"get0/2");
348 out = GLOBAL_Stream[sno].stream_wgetc(sno);
349 UNLOCK(GLOBAL_Stream[sno].streamlock);
350 return store_code(out, ARG2 PASS_REGS);
364static Int get_1(USES_REGS1) {
365 int sno = LOCAL_c_input_stream;
369 LOCK(GLOBAL_Stream[sno].streamlock);
371 if ((GLOBAL_Stream[sno].status & Binary_Stream_f)) {
372 UNLOCK(GLOBAL_Stream[sno].streamlock);
373 Yap_ThrowError(PERMISSION_ERROR_INPUT_BINARY_STREAM, TermUserIn,
374 "while getting code");
377 while ((ch = GLOBAL_Stream[sno].stream_wgetc(sno)) <= 32 && ch >= 0)
379 UNLOCK(GLOBAL_Stream[sno].streamlock);
380 return store_code(ch, ARG1 PASS_REGS);
392static Int getcode_1(USES_REGS1) {
393 int sno = LOCAL_c_input_stream;
398 LOCK(GLOBAL_Stream[sno].streamlock);
399 if ((GLOBAL_Stream[sno].status & Binary_Stream_f)) {
400 UNLOCK(GLOBAL_Stream[sno].streamlock);
401 Yap_ThrowError(PERMISSION_ERROR_INPUT_BINARY_STREAM, TermUserIn,
402 "while getting code");
405 out = GLOBAL_Stream[sno].stream_wgetc(sno);
406 UNLOCK(GLOBAL_Stream[sno].streamlock);
407 return store_code(out, ARG1 PASS_REGS);
419static Int getchar_1(USES_REGS1) {
420 int sno = LOCAL_c_input_stream;
424 LOCK(GLOBAL_Stream[sno].streamlock);
426 ch = GLOBAL_Stream[sno].stream_wgetc(sno);
427 if ((GLOBAL_Stream[sno].status & Binary_Stream_f)) {
428 UNLOCK(GLOBAL_Stream[sno].streamlock);
429 Yap_ThrowError(PERMISSION_ERROR_INPUT_TEXT_STREAM, TermUserIn,
430 "while getting code");
433 UNLOCK(GLOBAL_Stream[sno].streamlock);
434 bool rc = Yap_unify_constant(ARG1, MkCharTerm(ch));
436 Term t2 = Deref(ARG1);
437 if (!IsAtomTerm(t2)) {
438 Yap_ThrowError(TYPE_ERROR_IN_CHARACTER, ARG1,
"in input argument");
444static Int get0_line_codes(USES_REGS1) {
445 int sno = Yap_CheckTextStream(ARG1, Input_Stream_f,
"get0/2");
455 out = read_line(sno);
456 UNLOCK(GLOBAL_Stream[sno].streamlock);
458 return Yap_unify(MkPairTerm(MkIntegerTerm(ch), out), ARG2);
460 return Yap_unify(out, ARG2);
471static Int get_byte(USES_REGS) {
472 Term out = Deref(ARG2);
474 if (!IsVarTerm(out)) {
475 if (!IsIntegerTerm(out)) Yap_ThrowError(TYPE_ERROR_IN_BYTE, ARG1,
" bad type");
476 Int ch = IntegerOfTerm(out);
477 if (ch < -1 || ch > 255) Yap_ThrowError(TYPE_ERROR_IN_BYTE, ARG1,
" bad type");
480 int sno = Yap_CheckBinaryStream(ARG1, Input_Stream_f,
"get_byte/2");
483 out = MkIntTerm(GLOBAL_Stream[sno].stream_getc(sno));
484 UNLOCK(GLOBAL_Stream[sno].streamlock);
485 return Yap_unify_constant(ARG2, out);
497static Int get_byte_1(USES_REGS1) {
498 int sno = LOCAL_c_input_stream;
500 Term out = Deref(ARG1);
502 if (!IsVarTerm(out)) {
503 if (!IsIntegerTerm(out)) Yap_ThrowError(TYPE_ERROR_IN_BYTE, ARG2,
" bad type");
504 Int ch = IntegerOfTerm(out);
505 if (ch < -1 || ch > 255) Yap_ThrowError(TYPE_ERROR_IN_BYTE, ARG2,
" bad type");
507 LOCK(GLOBAL_Stream[sno].streamlock);
508 status = GLOBAL_Stream[sno].status;
509 if (!(status & Binary_Stream_f)
512 UNLOCK(GLOBAL_Stream[sno].streamlock);
513 Yap_ThrowError(PERMISSION_ERROR_INPUT_TEXT_STREAM, ARG1,
"get_byte/1");
516 out = MkIntTerm(GLOBAL_Stream[sno].stream_getc(sno));
517 UNLOCK(GLOBAL_Stream[sno].streamlock);
518 return Yap_unify_constant(ARG1, out);
530static Int put_code_1(USES_REGS1) {
531 int sno = LOCAL_c_output_stream, ch;
534 if (IsVarTerm(t2 = Deref(ARG1))) {
535 Yap_ThrowError(INSTANTIATION_ERROR, t2,
"put_code/1");
537 }
else if (!IsIntegerTerm(t2)) {
538 Yap_ThrowError(TYPE_ERROR_INTEGER, t2,
"put_code/1");
540 }
else if ((ch = IntegerOfTerm(t2)) < -1) {
541 Yap_ThrowError(DOMAIN_ERROR_OUT_OF_RANGE, t2,
"put_code/1");
544 LOCK(GLOBAL_Stream[sno].streamlock);
545 GLOBAL_Stream[sno].stream_wputc(sno, ch);
550 UNLOCK(GLOBAL_Stream[sno].streamlock);
560static Int put_code(USES_REGS1) {
565 if (IsVarTerm(t2 = Deref(ARG2))) {
566 Yap_ThrowError(INSTANTIATION_ERROR, t2,
"put_code/1");
568 }
else if (!IsIntegerTerm(t2)) {
569 Yap_ThrowError(TYPE_ERROR_INTEGER, t2,
"put_code/1");
571 }
else if ((ch = IntegerOfTerm(t2)) < -1) {
572 Yap_ThrowError(DOMAIN_ERROR_OUT_OF_RANGE, t2,
"put_code/1");
575 sno = Yap_CheckTextStream(ARG1, Output_Stream_f,
"put/2");
578 if (GLOBAL_Stream[sno].status & Binary_Stream_f) {
579 UNLOCK(GLOBAL_Stream[sno].streamlock);
580 Yap_ThrowError(PERMISSION_ERROR_OUTPUT_BINARY_STREAM, ARG1,
"put/2");
584 GLOBAL_Stream[sno].stream_wputc(sno, ch);
589 UNLOCK(GLOBAL_Stream[sno].streamlock);
602static Int put_char_1(USES_REGS1) {
603 int sno = LOCAL_c_output_stream;
607 if (IsVarTerm(t2 = Deref(ARG1))) {
608 Yap_ThrowError(INSTANTIATION_ERROR, t2,
"put_char/1");
610 }
else if (!IsAtomTerm(t2)) {
611 Yap_ThrowError(TYPE_ERROR_INTEGER, t2,
"put_char/1");
613 }
else if ((ch =
CharOfAtom(AtomOfTerm(t2))) < -1) {
614 Yap_ThrowError(DOMAIN_ERROR_OUT_OF_RANGE, t2,
"put_char/1");
617 LOCK(GLOBAL_Stream[sno].streamlock);
618 if (GLOBAL_Stream[sno].status & Binary_Stream_f) {
619 UNLOCK(GLOBAL_Stream[sno].streamlock);
620 Yap_ThrowError(PERMISSION_ERROR_OUTPUT_BINARY_STREAM, ARG1,
"put/2");
623 GLOBAL_Stream[sno].stream_wputc(sno, ch);
628 UNLOCK(GLOBAL_Stream[sno].streamlock);
638static Int put_char(USES_REGS1) {
643 if (IsVarTerm(t2 = Deref(ARG2))) {
644 Yap_ThrowError(INSTANTIATION_ERROR, t2,
"put_char/1");
646 }
else if (!IsAtomTerm(t2)) {
647 Yap_ThrowError(TYPE_ERROR_INTEGER, t2,
"put_char/1");
649 }
else if ((ch =
CharOfAtom(AtomOfTerm(t2))) < -1) {
650 Yap_ThrowError(DOMAIN_ERROR_OUT_OF_RANGE, t2,
"put_char/1");
653 sno = Yap_CheckTextStream(ARG1, Output_Stream_f,
"put/2");
656 if (GLOBAL_Stream[sno].status & Binary_Stream_f) {
657 UNLOCK(GLOBAL_Stream[sno].streamlock);
658 Yap_ThrowError(PERMISSION_ERROR_OUTPUT_BINARY_STREAM, ARG1,
"put/2");
661 GLOBAL_Stream[sno].stream_wputc(sno, (
int)IntegerOfTerm(Deref(ARG2)));
666 UNLOCK(GLOBAL_Stream[sno].streamlock);
674static Int tab_1(USES_REGS1) {
675 int sno = LOCAL_c_output_stream;
678 if (IsVarTerm(t1 = Deref(ARG1))) {
679 Yap_ThrowError(INSTANTIATION_ERROR, t1,
"first argument");
681 }
else if (!IsIntegerTerm(t1)) {
682 Yap_ThrowError(TYPE_ERROR_INTEGER, t1,
"first argument");
684 }
else if ((tabs = IntegerOfTerm(t1)) < 0) {
685 Yap_ThrowError(DOMAIN_ERROR_OUT_OF_RANGE, t1,
"first argument");
689 LOCK(GLOBAL_Stream[sno].streamlock);
690 if (GLOBAL_Stream[sno].status & Binary_Stream_f) {
691 UNLOCK(GLOBAL_Stream[sno].streamlock);
692 Yap_ThrowError(PERMISSION_ERROR_OUTPUT_BINARY_STREAM, ARG1,
"user_output");
696 for (i = 0; i < tabs; i++)
697 GLOBAL_Stream[sno].stream_wputc(sno,
' ');
702 UNLOCK(GLOBAL_Stream[sno].streamlock);
712static Int tab(USES_REGS1) {
716 if (IsVarTerm(t2 = Deref(ARG2))) {
717 Yap_ThrowError(INSTANTIATION_ERROR, t2,
"put_char/1");
719 }
else if (!IsIntegerTerm(t2)) {
720 Yap_ThrowError(TYPE_ERROR_INTEGER, t2,
"put_char/1");
722 }
else if ((tabs = IntegerOfTerm(t2)) < 0) {
723 Yap_ThrowError(DOMAIN_ERROR_OUT_OF_RANGE, t2,
"tab/1");
726 sno = Yap_CheckTextStream(ARG1, Output_Stream_f,
"nl/1");
730 if (GLOBAL_Stream[sno].status & Binary_Stream_f) {
731 UNLOCK(GLOBAL_Stream[sno].streamlock);
732 Yap_ThrowError(PERMISSION_ERROR_OUTPUT_BINARY_STREAM, ARG1,
"nl/0");
736 for (i = 0; i < tabs; i++)
737 GLOBAL_Stream[sno].stream_wputc(sno,
' ');
742 UNLOCK(GLOBAL_Stream[sno].streamlock);
750static Int nl_1(USES_REGS1) {
751 int sno = LOCAL_c_output_stream;
752 LOCK(GLOBAL_Stream[sno].streamlock);
753 if (GLOBAL_Stream[sno].status & Binary_Stream_f) {
754 UNLOCK(GLOBAL_Stream[sno].streamlock);
755 Yap_ThrowError(PERMISSION_ERROR_OUTPUT_BINARY_STREAM, ARG1,
"nl/0");
758 GLOBAL_Stream[sno].stream_wputc(sno, 10);
763 UNLOCK(GLOBAL_Stream[sno].streamlock);
776static Int nl(USES_REGS1) {
777 int sno = Yap_CheckTextStream(ARG1, Output_Stream_f,
"nl/1");
780 if (GLOBAL_Stream[sno].status & Binary_Stream_f) {
781 UNLOCK(GLOBAL_Stream[sno].streamlock);
782 Yap_ThrowError(PERMISSION_ERROR_OUTPUT_BINARY_STREAM, ARG1,
"put/2");
785 GLOBAL_Stream[sno].stream_wputc(sno, 10);
790 UNLOCK(GLOBAL_Stream[sno].streamlock);
800static Int put_byte(USES_REGS1) {
803 if (IsVarTerm(t2 = Deref(ARG2))) {
804 Yap_ThrowError(INSTANTIATION_ERROR, t2,
"put_code/2");
806 }
else if (!IsIntegerTerm(t2)) {
807 Yap_ThrowError(TYPE_ERROR_BYTE, t2,
"put_code/2");
809 }
else if ((ch = IntegerOfTerm(t2)) < -1) {
810 Yap_ThrowError(DOMAIN_ERROR_OUT_OF_RANGE, t2,
"put_code/1");
813 int sno = Yap_CheckBinaryStream(ARG1, Output_Stream_f,
"put/2");
816 GLOBAL_Stream[sno].stream_putc(sno, ch);
821 UNLOCK(GLOBAL_Stream[sno].streamlock);
833static Int put_byte_1(USES_REGS1) {
836 int sno = LOCAL_c_output_stream;
837 if (IsVarTerm(t2 = Deref(ARG1))) {
838 Yap_ThrowError(INSTANTIATION_ERROR, t2,
"put_code/1");
840 }
else if (!IsIntegerTerm(t2)) {
841 Yap_ThrowError(TYPE_ERROR_BYTE, t2,
"put_code/1");
843 }
else if ((ch = IntegerOfTerm(t2)) < -1) {
844 Yap_ThrowError(DOMAIN_ERROR_OUT_OF_RANGE, t2,
"put_code/1");
847 LOCK(GLOBAL_Stream[sno].streamlock);
848 if (!(GLOBAL_Stream[sno].status & Binary_Stream_f)
851 UNLOCK(GLOBAL_Stream[sno].streamlock);
852 Yap_ThrowError(PERMISSION_ERROR_OUTPUT_TEXT_STREAM, ARG1,
"get0/2");
855 GLOBAL_Stream[sno].stream_putc(sno, ch);
856 UNLOCK(GLOBAL_Stream[sno].streamlock);
869static Int skip_1(USES_REGS1) {
872 int sno = LOCAL_c_output_stream;
875 if (IsVarTerm(t1 = Deref(ARG1))) {
876 Yap_ThrowError(INSTANTIATION_ERROR, t1,
"skip/1");
878 }
else if (!IsIntegerTerm(t1)) {
879 Yap_ThrowError(TYPE_ERROR_INTEGER, t1,
"skip/1");
881 }
else if ((n = IntegerOfTerm(t1)) < 0) {
882 Yap_ThrowError(DOMAIN_ERROR_OUT_OF_RANGE, t1,
"skip/1");
885 while ((ch = GLOBAL_Stream[sno].stream_wgetc(sno)) != n && ch != -1)
887 UNLOCK(GLOBAL_Stream[sno].streamlock);
898static Int skip(USES_REGS1) {
901 int sno = Yap_CheckTextStream(ARG1, Input_Stream_f,
"skip/2");
906 if (IsVarTerm(t2 = Deref(ARG2))) {
907 UNLOCK(GLOBAL_Stream[sno].streamlock);
908 Yap_ThrowError(INSTANTIATION_ERROR, t2,
"skip/2");
910 }
else if (!IsIntegerTerm(t2)) {
911 UNLOCK(GLOBAL_Stream[sno].streamlock);
912 Yap_ThrowError(TYPE_ERROR_INTEGER, t2,
"skip/2");
914 }
else if ((n = IntegerOfTerm(t2)) < 0) {
915 UNLOCK(GLOBAL_Stream[sno].streamlock);
916 Yap_ThrowError(DOMAIN_ERROR_OUT_OF_RANGE, t2,
"skip/2");
919 while ((ch = GLOBAL_Stream[sno].stream_wgetc(sno)) != n && ch != -1)
921 UNLOCK(GLOBAL_Stream[sno].streamlock);
934static Int flush_output(USES_REGS1) {
935 int sno = Yap_CheckStream(ARG1, Output_Stream_f,
"flush_output/1");
937 UNLOCK(GLOBAL_Stream[sno].streamlock);
941 UNLOCK(GLOBAL_Stream[sno].streamlock);
954static Int flush_output0(USES_REGS1) {
955 yap_fflush(LOCAL_c_output_stream);
959static Int flush_all_streams(USES_REGS1) {
960#if BROKEN_FFLUSH_NULL
962 for (i = 0; i < MaxStreams; ++i) {
963 LOCK(GLOBAL_Stream[i].streamlock);
965 UNLOCK(GLOBAL_Stream[i].streamlock);
982static Int peek_code(USES_REGS1) {
984 int sno = Yap_CheckTextStream(ARG1, Input_Stream_f,
"peek_code/2");
989 if ((ch = Yap_peek(sno)) < 0) {
991 UNLOCK(GLOBAL_Stream[sno].streamlock);
995 UNLOCK(GLOBAL_Stream[sno].streamlock);
996 return (Yap_unify_constant(ARG2, MkIntTerm(ch)));
1008static Int peek_code_1(USES_REGS1) {
1010 int sno = LOCAL_c_input_stream;
1013 LOCK(GLOBAL_Stream[sno].streamlock);
1014 if (GLOBAL_Stream[sno].status & Binary_Stream_f) {
1015 UNLOCK(GLOBAL_Stream[sno].streamlock);
1016 Yap_ThrowError(PERMISSION_ERROR_INPUT_BINARY_STREAM, ARG1,
"peek_code/2");
1019 if ((ch = Yap_peek(sno)) < 0) {
1021 UNLOCK(GLOBAL_Stream[sno].streamlock);
1025 UNLOCK(GLOBAL_Stream[sno].streamlock);
1026 return (Yap_unify_constant(ARG1, MkIntTerm(ch)));
1036static Int peek_byte(USES_REGS1) {
1038 int sno = Yap_CheckBinaryStream(ARG1, Input_Stream_f,
"peek_byte/2");
1043 if (!(GLOBAL_Stream[sno].status & Binary_Stream_f)) {
1044 UNLOCK(GLOBAL_Stream[sno].streamlock);
1045 Yap_ThrowError(PERMISSION_ERROR_INPUT_TEXT_STREAM, ARG1,
"peek_byte/2");
1048 if ((ch = dopeek_byte(sno)) < 0) {
1050 UNLOCK(GLOBAL_Stream[sno].streamlock);
1054 UNLOCK(GLOBAL_Stream[sno].streamlock);
1055 return (Yap_unify_constant(ARG2, MkIntTerm(ch)));
1065static Int peek_byte_1(USES_REGS1) {
1067 int sno = LOCAL_c_input_stream;
1072 LOCK(GLOBAL_Stream[sno].streamlock);
1073 if (!(GLOBAL_Stream[sno].status & Binary_Stream_f)) {
1074 UNLOCK(GLOBAL_Stream[sno].streamlock);
1075 Yap_ThrowError(PERMISSION_ERROR_INPUT_TEXT_STREAM, ARG1,
"peek_byte/2");
1078 if ((ch = dopeek_byte(sno)) < 0) {
1080 UNLOCK(GLOBAL_Stream[sno].streamlock);
1084 UNLOCK(GLOBAL_Stream[sno].streamlock);
1085 return (Yap_unify_constant(ARG1, MkIntTerm(ch)));
1095static Int peek_char(USES_REGS1) {
1097 int sno = Yap_CheckTextStream(ARG1, Input_Stream_f,
"peek/2");
1098 unsigned char sinp[16];
1105 UNLOCK(GLOBAL_Stream[sno].streamlock);
1106 return Yap_unify_constant(ARG2, MkAtomTerm(AtomEof));
1108 UNLOCK(GLOBAL_Stream[sno].streamlock);
1109 int off = put_utf8(sinp, ch);
1114 return Yap_unify_constant(ARG2, MkAtomTerm(Yap_ULookupAtom(sinp)));
1124static Int peek_char_1(USES_REGS1) {
1126 int sno = LOCAL_c_input_stream;
1127 unsigned char sinp[10];
1130 LOCK(GLOBAL_Stream[sno].streamlock);
1131 if ((ch = Yap_peek(sno)) < 0) {
1132 UNLOCK(GLOBAL_Stream[sno].streamlock);
1133 return Yap_unify_constant(ARG2, MkAtomTerm(AtomEof));
1136 UNLOCK(GLOBAL_Stream[sno].streamlock);
1137 int off = put_utf8(sinp, ch);
1139 return Yap_unify_constant(ARG2, MkAtomTerm(Yap_ULookupAtom(sinp)));
1163void Yap_flush_all(
void) { CACHE_REGS(
void) flush_all_streams(PASS_REGS1); }
1165void Yap_FlushStreams(
void) { CACHE_REGS(
void) flush_all_streams(PASS_REGS1); }
1167void Yap_InitCharsio(
void) {
1168 Yap_InitCPred(
"get", 2, get, SafePredFlag | SyncPredFlag);
1169 Yap_InitCPred(
"get_code", 2, get_code, SafePredFlag | SyncPredFlag);
1170 Yap_InitCPred(
"get_char", 2, get_char, SafePredFlag | SyncPredFlag);
1171 Yap_InitCPred(
"get0", 2, get_code, SafePredFlag | SyncPredFlag);
1172 Yap_InitCPred(
"get", 1, get_1, SafePredFlag | SyncPredFlag);
1173 Yap_InitCPred(
"get_code", 1, getcode_1, SafePredFlag | SyncPredFlag);
1174 Yap_InitCPred(
"get_char", 1, getchar_1, SafePredFlag | SyncPredFlag);
1175 Yap_InitCPred(
"get0", 1, getcode_1, SafePredFlag | SyncPredFlag);
1176 Yap_InitCPred(
"$get0_line_codes", 2, get0_line_codes,
1177 SafePredFlag | SyncPredFlag | HiddenPredFlag);
1178 Yap_InitCPred(
"get_byte", 2, get_byte, SafePredFlag | SyncPredFlag);
1179 Yap_InitCPred(
"get_byte", 1, get_byte_1, SafePredFlag | SyncPredFlag);
1180 Yap_InitCPred(
"put", 1, put_code_1, SafePredFlag | SyncPredFlag);
1181 Yap_InitCPred(
"put", 2, put_code, SafePredFlag | SyncPredFlag);
1182 Yap_InitCPred(
"put_code", 1, put_code_1, SafePredFlag | SyncPredFlag);
1183 Yap_InitCPred(
"put_code", 2, put_code, SafePredFlag | SyncPredFlag);
1184 Yap_InitCPred(
"put_char", 1, put_char_1, SafePredFlag | SyncPredFlag);
1185 Yap_InitCPred(
"put_char", 2, put_char, SafePredFlag | SyncPredFlag);
1186 Yap_InitCPred(
"put_byte", 2, put_byte, SafePredFlag | SyncPredFlag);
1187 Yap_InitCPred(
"put_byte", 1, put_byte_1, SafePredFlag | SyncPredFlag);
1188 Yap_InitCPred(
"put_char", 2, put_char, SafePredFlag | SyncPredFlag);
1189 Yap_InitCPred(
"put_char1", 1, put_char_1, SafePredFlag | SyncPredFlag);
1190 Yap_InitCPred(
"tab", 2, tab, SafePredFlag | SyncPredFlag);
1191 Yap_InitCPred(
"tab", 1, tab_1, SafePredFlag | SyncPredFlag);
1192 Yap_InitCPred(
"nl", 0, nl_1, SafePredFlag | SyncPredFlag);
1193 Yap_InitCPred(
"nl", 1, nl, SafePredFlag | SyncPredFlag);
1195 Yap_InitCPred(
"$flush_all_streams", 0, flush_all_streams,
1196 SafePredFlag | SyncPredFlag | HiddenPredFlag);
1197 Yap_InitCPred(
"flush_output", 1, flush_output, SafePredFlag | SyncPredFlag);
1198 Yap_InitCPred(
"flush_output", 0, flush_output0, SafePredFlag | SyncPredFlag);
1200 Yap_InitCPred(
"at_end_of_stream", 1, at_end_of_stream,
1201 SafePredFlag | SyncPredFlag);
1202 Yap_InitCPred(
"at_end_of_stream_0", 0, at_end_of_stream_0,
1203 SafePredFlag | SyncPredFlag);
1205 Yap_InitCPred(
"peek", 2, peek_code, SafePredFlag | SyncPredFlag);
1206 Yap_InitCPred(
"peek_code", 2, peek_code, SafePredFlag | SyncPredFlag);
1207 Yap_InitCPred(
"peek_char", 2, peek_char, SafePredFlag | SyncPredFlag);
1208 Yap_InitCPred(
"peek_byte", 2, peek_byte, SafePredFlag | SyncPredFlag);
1209 Yap_InitCPred(
"peek", 1, peek_code_1, SafePredFlag | SyncPredFlag);
1210 Yap_InitCPred(
"peek_code", 1, peek_code_1, SafePredFlag | SyncPredFlag);
1211 Yap_InitCPred(
"peek_char", 1, peek_char_1, SafePredFlag | SyncPredFlag);
1212 Yap_InitCPred(
"peek_byte", 1, peek_byte_1, SafePredFlag | SyncPredFlag);
1213 Yap_InitCPred(
"skip", 2, skip, SafePredFlag | SyncPredFlag);
1214 Yap_InitCPred(
"skip", 1, skip_1, SafePredFlag | SyncPredFlag);
1215 Yap_InitCPred(
"tab", 2, tab, SafePredFlag | SyncPredFlag);
1216 Yap_InitCPred(
"tab", 1, tab_1, SafePredFlag | SyncPredFlag);
Int CharOfAtom(Atom at)
CharOfAtom: convert an atom into a single character.
int(* stream_getc)(int)
function the stream uses for writing a character
int(* stream_wgetc)(int)
function the stream uses for reading an octet