peek_
This commit is contained in:
parent
6469a0d464
commit
85a7e7b9b0
102
C/iopreds.c
102
C/iopreds.c
@ -109,7 +109,6 @@ STATIC_PROTO (Int p_write2, (void));
|
|||||||
STATIC_PROTO (Int p_set_read_error_handler, (void));
|
STATIC_PROTO (Int p_set_read_error_handler, (void));
|
||||||
STATIC_PROTO (Int p_get_read_error_handler, (void));
|
STATIC_PROTO (Int p_get_read_error_handler, (void));
|
||||||
STATIC_PROTO (Int p_read, (void));
|
STATIC_PROTO (Int p_read, (void));
|
||||||
STATIC_PROTO (Int p_peek, (void));
|
|
||||||
STATIC_PROTO (Int p_past_eof, (void));
|
STATIC_PROTO (Int p_past_eof, (void));
|
||||||
STATIC_PROTO (Int p_put, (void));
|
STATIC_PROTO (Int p_put, (void));
|
||||||
STATIC_PROTO (Int p_put_byte, (void));
|
STATIC_PROTO (Int p_put_byte, (void));
|
||||||
@ -1712,105 +1711,6 @@ p_past_eof (void)
|
|||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Int
|
|
||||||
p_peek_byte (void)
|
|
||||||
{ /* at_end_of_stream */
|
|
||||||
/* the next character is a EOF */
|
|
||||||
int sno = CheckStream (ARG1, Input_Stream_f, "peek/2");
|
|
||||||
StreamDesc *s;
|
|
||||||
Int ocharcount, olinecount, olinepos;
|
|
||||||
Int status;
|
|
||||||
Int ch;
|
|
||||||
|
|
||||||
if (sno < 0)
|
|
||||||
return(FALSE);
|
|
||||||
status = Stream[sno].status;
|
|
||||||
if (!(status & Binary_Stream_f)) {
|
|
||||||
UNLOCK(Stream[sno].streamlock);
|
|
||||||
Yap_Error(PERMISSION_ERROR_INPUT_TEXT_STREAM, ARG1, "peek/2");
|
|
||||||
return(FALSE);
|
|
||||||
}
|
|
||||||
UNLOCK(Stream[sno].streamlock);
|
|
||||||
if (Stream[sno].stream_getc == PlUnGetc) {
|
|
||||||
ch = MkIntTerm(Stream[sno].och);
|
|
||||||
/* sequence of peeks */
|
|
||||||
return Yap_unify_constant(ARG2,ch);
|
|
||||||
}
|
|
||||||
if (status & Eof_Stream_f) {
|
|
||||||
Yap_Error(PERMISSION_ERROR_INPUT_PAST_END_OF_STREAM, ARG1, "peek/2");
|
|
||||||
return(FALSE);
|
|
||||||
}
|
|
||||||
s = Stream+sno;
|
|
||||||
ocharcount = s->charcount;
|
|
||||||
olinecount = s->linecount;
|
|
||||||
olinepos = s->linepos;
|
|
||||||
ch = Stream[sno].stream_getc(sno);
|
|
||||||
s->charcount = ocharcount;
|
|
||||||
s->linecount = olinecount;
|
|
||||||
s->linepos = olinepos;
|
|
||||||
/* buffer the character */
|
|
||||||
s->och = ch;
|
|
||||||
/* mark a special function to recover this character */
|
|
||||||
s->stream_getc = PlUnGetc;
|
|
||||||
s->stream_wgetc = get_wchar;
|
|
||||||
s->stream_gets = DefaultGets;
|
|
||||||
if (CharConversionTable != NULL)
|
|
||||||
s->stream_wgetc_for_read = ISOWGetc;
|
|
||||||
else
|
|
||||||
s->stream_wgetc_for_read = s->stream_wgetc;
|
|
||||||
UNLOCK(s->streamlock);
|
|
||||||
return(Yap_unify_constant(ARG2,MkIntTerm(ch)));
|
|
||||||
}
|
|
||||||
|
|
||||||
static Int
|
|
||||||
p_peek (void)
|
|
||||||
{ /* at_end_of_stream */
|
|
||||||
/* the next character is a EOF */
|
|
||||||
int sno = CheckStream (ARG1, Input_Stream_f, "peek/2");
|
|
||||||
StreamDesc *s;
|
|
||||||
Int ocharcount, olinecount, olinepos;
|
|
||||||
Int status;
|
|
||||||
Int ch;
|
|
||||||
|
|
||||||
if (sno < 0)
|
|
||||||
return(FALSE);
|
|
||||||
status = Stream[sno].status;
|
|
||||||
if (status & Binary_Stream_f) {
|
|
||||||
UNLOCK(Stream[sno].streamlock);
|
|
||||||
Yap_Error(PERMISSION_ERROR_INPUT_BINARY_STREAM, ARG1, "peek/2");
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
UNLOCK(Stream[sno].streamlock);
|
|
||||||
if (Stream[sno].stream_getc == PlUnGetc) {
|
|
||||||
ch = MkIntTerm(Stream[sno].och);
|
|
||||||
/* sequence of peeks */
|
|
||||||
return Yap_unify_constant(ARG2,ch);
|
|
||||||
}
|
|
||||||
LOCK(Stream[sno].streamlock);
|
|
||||||
s = Stream+sno;
|
|
||||||
ocharcount = s->charcount;
|
|
||||||
olinecount = s->linecount;
|
|
||||||
olinepos = s->linepos;
|
|
||||||
UNLOCK(Stream[sno].streamlock);
|
|
||||||
ch = get_wchar(sno);
|
|
||||||
LOCK(Stream[sno].streamlock);
|
|
||||||
s->charcount = ocharcount;
|
|
||||||
s->linecount = olinecount;
|
|
||||||
s->linepos = olinepos;
|
|
||||||
/* buffer the character */
|
|
||||||
s->och = ch;
|
|
||||||
/* mark a special function to recover this character */
|
|
||||||
s->stream_getc = PlUnGetc;
|
|
||||||
s->stream_wgetc = get_wchar;
|
|
||||||
s->stream_gets = DefaultGets;
|
|
||||||
if (CharConversionTable != NULL)
|
|
||||||
s->stream_wgetc_for_read = ISOWGetc;
|
|
||||||
else
|
|
||||||
s->stream_wgetc_for_read = s->stream_wgetc;
|
|
||||||
UNLOCK(Stream[sno].streamlock);
|
|
||||||
return(Yap_unify_constant(ARG2,MkIntTerm(ch)));
|
|
||||||
}
|
|
||||||
|
|
||||||
static Int
|
static Int
|
||||||
p_has_bom (void)
|
p_has_bom (void)
|
||||||
{ /* '$set_output'(+Stream,-ErrorMessage) */
|
{ /* '$set_output'(+Stream,-ErrorMessage) */
|
||||||
@ -4192,8 +4092,6 @@ Yap_InitIOPreds(void)
|
|||||||
Yap_InitCPred ("$set_stream_position", 2, p_set_stream_position, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
Yap_InitCPred ("$set_stream_position", 2, p_set_stream_position, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
||||||
Yap_InitCPred ("$user_file_name", 2, p_user_file_name, SafePredFlag|SyncPredFlag),
|
Yap_InitCPred ("$user_file_name", 2, p_user_file_name, SafePredFlag|SyncPredFlag),
|
||||||
Yap_InitCPred ("$past_eof", 1, p_past_eof, SafePredFlag|SyncPredFlag),
|
Yap_InitCPred ("$past_eof", 1, p_past_eof, SafePredFlag|SyncPredFlag),
|
||||||
Yap_InitCPred ("$peek", 2, p_peek, SafePredFlag|SyncPredFlag),
|
|
||||||
Yap_InitCPred ("$peek_byte", 2, p_peek_byte, SafePredFlag|SyncPredFlag),
|
|
||||||
Yap_InitCPred ("$has_bom", 1, p_has_bom, SafePredFlag);
|
Yap_InitCPred ("$has_bom", 1, p_has_bom, SafePredFlag);
|
||||||
Yap_InitCPred ("$stream_representation_error", 2, p_representation_error, SafePredFlag|SyncPredFlag);
|
Yap_InitCPred ("$stream_representation_error", 2, p_representation_error, SafePredFlag|SyncPredFlag);
|
||||||
Yap_InitCPred ("$is_same_tty", 2, p_is_same_tty, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
Yap_InitCPred ("$is_same_tty", 2, p_is_same_tty, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
||||||
|
13
pl/boot.yap
13
pl/boot.yap
@ -1468,3 +1468,16 @@ get_code(C) :-
|
|||||||
swi_get_code(C).
|
swi_get_code(C).
|
||||||
get_code(Stream, C) :-
|
get_code(Stream, C) :-
|
||||||
swi_get_code(Stream, C).
|
swi_get_code(Stream, C).
|
||||||
|
|
||||||
|
peek_byte(C) :-
|
||||||
|
swi_peek_byte(C).
|
||||||
|
peek_byte(Stream, C) :-
|
||||||
|
swi_peek_byte(Stream, C).
|
||||||
|
peek_char(C) :-
|
||||||
|
swi_peek_char(C).
|
||||||
|
peek_char(Stream, C) :-
|
||||||
|
swi_peek_char(Stream, C).
|
||||||
|
peek_code(C) :-
|
||||||
|
swi_peek_code(C).
|
||||||
|
peek_code(Stream, C) :-
|
||||||
|
swi_peek_code(Stream, C).
|
||||||
|
49
pl/yio.yap
49
pl/yio.yap
@ -124,12 +124,6 @@
|
|||||||
'$check_priority_arg'(X,G) :-
|
'$check_priority_arg'(X,G) :-
|
||||||
'$do_error'(domain_error(write_option,priority(X)),G).
|
'$do_error'(domain_error(write_option,priority(X)),G).
|
||||||
|
|
||||||
set_input(Stream) :-
|
|
||||||
'$set_input'(Stream).
|
|
||||||
|
|
||||||
set_output(Stream) :-
|
|
||||||
'$set_output'(Stream).
|
|
||||||
|
|
||||||
open_pipe_streams(Read, Write) :-
|
open_pipe_streams(Read, Write) :-
|
||||||
(
|
(
|
||||||
'$undefined'(pipe(_,_),unix)
|
'$undefined'(pipe(_,_),unix)
|
||||||
@ -416,49 +410,6 @@ format(T) :-
|
|||||||
|
|
||||||
/* character I/O */
|
/* character I/O */
|
||||||
|
|
||||||
peek_byte(V) :-
|
|
||||||
\+ var(V), (\+ integer(V) ; V < -1 ; V > 256), !,
|
|
||||||
'$do_error'(type_error(in_byte,V),get_byte(V)).
|
|
||||||
peek_byte(V) :-
|
|
||||||
current_input(S),
|
|
||||||
'$peek_byte'(S,V).
|
|
||||||
|
|
||||||
peek_byte(S,V) :-
|
|
||||||
\+ var(V), (\+ integer(V) ; V < -1 ; V > 256), !,
|
|
||||||
'$do_error'(type_error(in_byte,V),get_byte(S,V)).
|
|
||||||
peek_byte(S,V) :-
|
|
||||||
'$peek_byte'(S,V).
|
|
||||||
|
|
||||||
peek_char(V) :-
|
|
||||||
\+ var(V),
|
|
||||||
( atom(V) -> atom_codes(V,[_,_|_]), V \= end_of_file ; true ), !,
|
|
||||||
'$do_error'(type_error(in_character,V),get_char(V)).
|
|
||||||
peek_char(V) :-
|
|
||||||
current_input(S),
|
|
||||||
'$peek'(S,I),
|
|
||||||
( I = -1 -> V = end_of_file ; atom_codes(V,[I])).
|
|
||||||
|
|
||||||
peek_char(S,V) :-
|
|
||||||
\+ var(V),
|
|
||||||
( atom(V) -> atom_codes(V,[_,_|_]), V \= end_of_file ; true ), !,
|
|
||||||
'$do_error'(type_error(in_character,V),get_char(S,V)).
|
|
||||||
peek_char(S,V) :-
|
|
||||||
'$peek'(S,I),
|
|
||||||
( I = -1 -> V = end_of_file ; atom_codes(V,[I])).
|
|
||||||
|
|
||||||
peek_code(S,V) :-
|
|
||||||
\+ var(V), (\+ integer(V)), !,
|
|
||||||
'$do_error'(type_error(in_character_code,V),get_code(S,V)).
|
|
||||||
peek_code(S,V) :-
|
|
||||||
'$peek'(S,V).
|
|
||||||
|
|
||||||
peek_code(V) :-
|
|
||||||
\+ var(V), (\+ integer(V)), !,
|
|
||||||
'$do_error'(type_error(in_character_code,V),get_code(V)).
|
|
||||||
peek_code(V) :-
|
|
||||||
current_input(S),
|
|
||||||
'$peek'(S,V).
|
|
||||||
|
|
||||||
put_byte(V) :- var(V), !,
|
put_byte(V) :- var(V), !,
|
||||||
'$do_error'(instantiation_error,put_byte(V)).
|
'$do_error'(instantiation_error,put_byte(V)).
|
||||||
put_byte(V) :-
|
put_byte(V) :-
|
||||||
|
Reference in New Issue
Block a user