fix calling of Write and Read for new SWI style interface.
This commit is contained in:
parent
eea7f83e09
commit
a16a7d5b1c
@ -465,7 +465,7 @@ X_API IOSTREAM *STD_PROTO(YAP_TermToStream,(Term));
|
|||||||
X_API IOSTREAM *STD_PROTO(YAP_InitConsult,(int, char *));
|
X_API IOSTREAM *STD_PROTO(YAP_InitConsult,(int, char *));
|
||||||
X_API void STD_PROTO(YAP_EndConsult,(IOSTREAM *));
|
X_API void STD_PROTO(YAP_EndConsult,(IOSTREAM *));
|
||||||
X_API Term STD_PROTO(YAP_Read, (IOSTREAM *));
|
X_API Term STD_PROTO(YAP_Read, (IOSTREAM *));
|
||||||
X_API void STD_PROTO(YAP_Write, (Term, int (*)(wchar_t), int));
|
X_API void STD_PROTO(YAP_Write, (Term, IOSTREAM *, int));
|
||||||
X_API Term STD_PROTO(YAP_CopyTerm, (Term));
|
X_API Term STD_PROTO(YAP_CopyTerm, (Term));
|
||||||
X_API Term STD_PROTO(YAP_WriteBuffer, (Term, char *, unsigned int, int));
|
X_API Term STD_PROTO(YAP_WriteBuffer, (Term, char *, unsigned int, int));
|
||||||
X_API char *STD_PROTO(YAP_CompileClause, (Term));
|
X_API char *STD_PROTO(YAP_CompileClause, (Term));
|
||||||
@ -2655,12 +2655,12 @@ YAP_Read(IOSTREAM *inp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
X_API void
|
X_API void
|
||||||
YAP_Write(Term t, int (*myputc)(wchar_t), int flags)
|
YAP_Write(Term t, IOSTREAM *stream, int flags)
|
||||||
{
|
{
|
||||||
BACKUP_MACHINE_REGS();
|
BACKUP_MACHINE_REGS();
|
||||||
|
|
||||||
do_putcf = myputc; /* */
|
do_putcf = myputc; /* */
|
||||||
Yap_plwrite (t, do_yap_putc, flags, 1200);
|
Yap_dowrite (t, stream, flags, 1200);
|
||||||
|
|
||||||
RECOVER_MACHINE_REGS();
|
RECOVER_MACHINE_REGS();
|
||||||
}
|
}
|
||||||
|
@ -67,6 +67,7 @@
|
|||||||
#define YP_FILE FILE
|
#define YP_FILE FILE
|
||||||
|
|
||||||
int STD_PROTO(YP_putc,(int, int));
|
int STD_PROTO(YP_putc,(int, int));
|
||||||
|
void STD_PROTO(Yap_dowrite, (Term, IOSTREAM *, int, int));
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
@ -96,8 +97,6 @@ int STD_PROTO(YP_putc,(int, int));
|
|||||||
#define fclose ERR_fclose
|
#define fclose ERR_fclose
|
||||||
#define fflush ERR_fflush
|
#define fflush ERR_fflush
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* flags for files in IOSTREAM struct */
|
/* flags for files in IOSTREAM struct */
|
||||||
#define _YP_IO_WRITE 1
|
#define _YP_IO_WRITE 1
|
||||||
#define _YP_IO_READ 2
|
#define _YP_IO_READ 2
|
||||||
|
12
docs/yap.tex
12
docs/yap.tex
@ -17320,9 +17320,9 @@ Associate the term @var{value} with the atom @var{at}. The term
|
|||||||
@var{value} must be a constant. This functionality is used by YAP as a
|
@var{value} must be a constant. This functionality is used by YAP as a
|
||||||
simple way for controlling and communicating with the Prolog run-time.
|
simple way for controlling and communicating with the Prolog run-time.
|
||||||
|
|
||||||
@item @code{YAP_Term} YAP_Read(@code{int (*)(void)} @var{GetC})
|
@item @code{YAP_Term} YAP_Read(@code{IOSTREAM *Stream})
|
||||||
@findex YAP_Read/1
|
@findex YAP_Read/1
|
||||||
Parse a Term using the function @var{GetC} to input characters.
|
Parse a @var{Term} from the stream @var{Stream}.
|
||||||
|
|
||||||
@item @code{YAP_Term} YAP_Write(@code{YAP_Term} @var{t})
|
@item @code{YAP_Term} YAP_Write(@code{YAP_Term} @var{t})
|
||||||
@findex YAP_CopyTerm/1
|
@findex YAP_CopyTerm/1
|
||||||
@ -17330,13 +17330,13 @@ Copy a Term @var{t} and all associated constraints. May call the garbage
|
|||||||
collector and returns @code{0L} on error (such as no space being
|
collector and returns @code{0L} on error (such as no space being
|
||||||
available).
|
available).
|
||||||
|
|
||||||
@item @code{void} YAP_Write(@code{YAP_Term} @var{t}, @code{void (*)(int)}
|
@item @code{void} YAP_Write(@code{YAP_Term} @var{t}, @code{IOSTREAM}
|
||||||
@var{PutC}, @code{int} @var{flags})
|
@var{stream}, @code{int} @var{flags})
|
||||||
@findex YAP_Write/3
|
@findex YAP_Write/3
|
||||||
Write a Term @var{t} using the function @var{PutC} to output
|
Write a Term @var{t} using the stream @var{stream} to output
|
||||||
characters. The term is written according to a mask of the following
|
characters. The term is written according to a mask of the following
|
||||||
flags in the @code{flag} argument: @code{YAP_WRITE_QUOTED},
|
flags in the @code{flag} argument: @code{YAP_WRITE_QUOTED},
|
||||||
@code{YAP_WRITE_HANDLE_VARS}, and @code{YAP_WRITE_IGNORE_OPS}.
|
@code{YAP_WRITE_HANDLE_VARS}, @code{YAP_WRITE_USE_PORTRAY}, and @code{YAP_WRITE_IGNORE_OPS}.
|
||||||
|
|
||||||
@item @code{void} YAP_WriteBuffer(@code{YAP_Term} @var{t}, @code{char *}
|
@item @code{void} YAP_WriteBuffer(@code{YAP_Term} @var{t}, @code{char *}
|
||||||
@var{buff}, @code{unsigned int}
|
@var{buff}, @code{unsigned int}
|
||||||
|
@ -101,9 +101,10 @@ typedef double YAP_Float;
|
|||||||
#define YAP_FULL_BOOT_FROM_PROLOG 4
|
#define YAP_FULL_BOOT_FROM_PROLOG 4
|
||||||
#define YAP_BOOT_ERROR -1
|
#define YAP_BOOT_ERROR -1
|
||||||
|
|
||||||
#define YAP_WRITE_QUOTED 0
|
#define YAP_WRITE_QUOTED 1
|
||||||
#define YAP_WRITE_HANDLE_VARS 1
|
|
||||||
#define YAP_WRITE_IGNORE_OPS 2
|
#define YAP_WRITE_IGNORE_OPS 2
|
||||||
|
#define YAP_WRITE_HANDLE_VARS 2
|
||||||
|
#define YAP_WRITE_USE_PORTRAY 8
|
||||||
|
|
||||||
#define YAP_CONSULT_MODE 0
|
#define YAP_CONSULT_MODE 0
|
||||||
#define YAP_RECONSULT_MODE 1
|
#define YAP_RECONSULT_MODE 1
|
||||||
|
@ -142,12 +142,6 @@ p2c_putc(const int c) {
|
|||||||
/*
|
/*
|
||||||
* Function used by YAP to read a char from a string
|
* Function used by YAP to read a char from a string
|
||||||
*/
|
*/
|
||||||
static int
|
|
||||||
p2c_getc(void) {
|
|
||||||
if( BUFFER_POS < BUFFER_LEN )
|
|
||||||
return BUFFER_PTR[BUFFER_POS++];
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
/*
|
/*
|
||||||
* Writes a term to a stream.
|
* Writes a term to a stream.
|
||||||
*/
|
*/
|
||||||
@ -177,7 +171,7 @@ read_term_from_stream(const int fd) {
|
|||||||
if ( size> BUFFER_SIZE)
|
if ( size> BUFFER_SIZE)
|
||||||
expand_buffer(size-BUFFER_SIZE);
|
expand_buffer(size-BUFFER_SIZE);
|
||||||
read(fd,BUFFER_PTR,size); // read term from stream
|
read(fd,BUFFER_PTR,size); // read term from stream
|
||||||
return YAP_Read( p2c_getc );
|
return YAP_ReadBuffer( BUFFER_PTR , NULL);
|
||||||
}
|
}
|
||||||
/*********************************************************************************************
|
/*********************************************************************************************
|
||||||
* Conversion: Prolog Term->char[] and char[]->Prolog Term
|
* Conversion: Prolog Term->char[] and char[]->Prolog Term
|
||||||
@ -229,7 +223,7 @@ string2term(char *const ptr,const size_t *size) {
|
|||||||
}
|
}
|
||||||
BUFFER_POS=0;
|
BUFFER_POS=0;
|
||||||
LOCAL_ErrorMessage=NULL;
|
LOCAL_ErrorMessage=NULL;
|
||||||
t = YAP_Read(p2c_getc);
|
t = YAP_ReadBuffer( BUFFER_PTR , NULL );
|
||||||
if ( t==FALSE ) {
|
if ( t==FALSE ) {
|
||||||
write_msg(__FUNCTION__,__FILE__,__LINE__,"FAILED string2term>>>>size:%d %d %s\n",BUFFER_SIZE,strlen(BUFFER_PTR),LOCAL_ErrorMessage);
|
write_msg(__FUNCTION__,__FILE__,__LINE__,"FAILED string2term>>>>size:%d %d %s\n",BUFFER_SIZE,strlen(BUFFER_PTR),LOCAL_ErrorMessage);
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -30,7 +30,6 @@ static char *rcsid = "$Header: /Users/vitor/Yap/yap-cvsbackup/library/mpi/mpi.c,
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <mpi.h>
|
#include <mpi.h>
|
||||||
|
|
||||||
Term STD_PROTO(YAP_Read, (int (*)(void)));
|
|
||||||
void STD_PROTO(YAP_Write, (Term, void (*)(int), int));
|
void STD_PROTO(YAP_Write, (Term, void (*)(int), int));
|
||||||
|
|
||||||
STATIC_PROTO (Int p_mpi_open, (void));
|
STATIC_PROTO (Int p_mpi_open, (void));
|
||||||
@ -105,15 +104,6 @@ mpi_putc(Int ch)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static Int
|
|
||||||
mpi_getc(void)
|
|
||||||
{
|
|
||||||
if( bufptr < bufsize ) return buf[bufptr++];
|
|
||||||
else return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* C Predicates
|
* C Predicates
|
||||||
@ -301,7 +291,7 @@ p_mpi_receive() /* mpi_receive(-data, ?orig, ?tag) */
|
|||||||
/* parse received string into a Prolog term */
|
/* parse received string into a Prolog term */
|
||||||
|
|
||||||
bufptr = 0;
|
bufptr = 0;
|
||||||
t = YAP_Read( mpi_getc );
|
t = YAP_ReadBuffer( buf, NULL );
|
||||||
|
|
||||||
if( t == TermNil ) {
|
if( t == TermNil ) {
|
||||||
retv = FALSE;
|
retv = FALSE;
|
||||||
@ -384,7 +374,7 @@ p_mpi_bcast3() /* mpi_bcast( ?data, +root, +max_size ) */
|
|||||||
bufptr = 0;
|
bufptr = 0;
|
||||||
|
|
||||||
/* parse received string into a Prolog term */
|
/* parse received string into a Prolog term */
|
||||||
return Yap_unify( YAP_Read(mpi_getc), ARG1 );
|
return Yap_unify( YAP_ReadBuffer( buf, NULL ), ARG1 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -464,7 +454,7 @@ p_mpi_bcast2() /* mpi_bcast( ?data, +root ) */
|
|||||||
bufstrlen = strlen(buf);
|
bufstrlen = strlen(buf);
|
||||||
bufptr = 0;
|
bufptr = 0;
|
||||||
|
|
||||||
return Yap_unify(YAP_Read( mpi_getc ), ARG1);
|
return Yap_unify(YAP_ReadBuffer( buf, NULL ), ARG1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1121,6 +1121,9 @@ Yap_StreamPosition(IOSTREAM *st)
|
|||||||
return StreamPosition(st);
|
return StreamPosition(st);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IOSTREAM *STD_PROTO(Yap_Scurin, (void));
|
||||||
|
int STD_PROTO(Yap_dowrite, (Term, IOSTREAM *, int, int));
|
||||||
|
|
||||||
IOSTREAM *
|
IOSTREAM *
|
||||||
Yap_Scurin(void)
|
Yap_Scurin(void)
|
||||||
{
|
{
|
||||||
@ -1128,6 +1131,32 @@ Yap_Scurin(void)
|
|||||||
return Scurin;
|
return Scurin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
Yap_dowrite(Term t, IOSTREAM *stream, int flags, int priority)
|
||||||
|
/* term to be written */
|
||||||
|
/* consumer */
|
||||||
|
/* write options */
|
||||||
|
{
|
||||||
|
CACHE_REGS
|
||||||
|
int swi_flags;
|
||||||
|
int res;
|
||||||
|
Int slot = Yap_InitSlot(t PASS_REGS);
|
||||||
|
|
||||||
|
swi_flags = 0;
|
||||||
|
if (flags & Quote_illegal_f)
|
||||||
|
swi_flags |= PL_WRT_QUOTED;
|
||||||
|
if (flags & Handle_vars_f)
|
||||||
|
swi_flags |= PL_WRT_NUMBERVARS;
|
||||||
|
if (flags & Use_portray_f)
|
||||||
|
swi_flags |= PL_WRT_PORTRAY;
|
||||||
|
if (flags & Ignore_ops_f)
|
||||||
|
swi_flags |= PL_WRT_IGNOREOPS;
|
||||||
|
|
||||||
|
res = PL_write_term(stream, slot, priority, swi_flags);
|
||||||
|
Yap_RecoverSlots(1 PASS_REGS);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#if THREADS
|
#if THREADS
|
||||||
|
|
||||||
@ -1178,6 +1207,7 @@ error:
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
recursiveMutexInit(recursiveMutex *m)
|
recursiveMutexInit(recursiveMutex *m)
|
||||||
{
|
{
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 9a96f8ebb751b169132aef0591cb1863ebcf4e26
|
Subproject commit e3c7eb9a9a54d6a9069396ecd1c3b537a8f6165a
|
@ -1050,6 +1050,8 @@ make :-
|
|||||||
fail.
|
fail.
|
||||||
make.
|
make.
|
||||||
|
|
||||||
|
make_library_index(_Directory).
|
||||||
|
|
||||||
'$file_name'(Stream,F) :-
|
'$file_name'(Stream,F) :-
|
||||||
stream_property(Stream, file_name(F)), !.
|
stream_property(Stream, file_name(F)), !.
|
||||||
'$file_name'(user_input,user_output).
|
'$file_name'(user_input,user_output).
|
||||||
|
Reference in New Issue
Block a user