Yap_WriteBuffer
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1067 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
@@ -10,8 +10,11 @@
|
||||
* File: c_interface.c *
|
||||
* comments: c_interface primitives definition *
|
||||
* *
|
||||
* Last rev: $Date: 2004-05-14 17:11:30 $,$Author: vsc $ *
|
||||
* Last rev: $Date: 2004-05-14 17:56:45 $,$Author: vsc $ *
|
||||
* $Log: not supported by cvs2svn $
|
||||
* Revision 1.45 2004/05/14 17:11:30 vsc
|
||||
* support BigNums in interface
|
||||
*
|
||||
* Revision 1.44 2004/05/14 16:33:44 vsc
|
||||
* add Yap_ReadBuffer
|
||||
* *
|
||||
@@ -104,6 +107,7 @@ X_API void STD_PROTO(YAP_InitConsult,(int, char *));
|
||||
X_API void STD_PROTO(YAP_EndConsult,(void));
|
||||
X_API Term STD_PROTO(YAP_Read, (int (*)(void)));
|
||||
X_API void STD_PROTO(YAP_Write, (Term, void (*)(int), int));
|
||||
X_API Term STD_PROTO(YAP_WriteBuffer, (Term, char *, unsigned int, int));
|
||||
X_API char *STD_PROTO(YAP_CompileClause, (Term));
|
||||
X_API void STD_PROTO(YAP_PutValue, (Atom,Term));
|
||||
X_API Term STD_PROTO(YAP_GetValue, (Atom));
|
||||
@@ -893,6 +897,15 @@ YAP_Write(Term t, void (*myputc)(int), int flags)
|
||||
RECOVER_MACHINE_REGS();
|
||||
}
|
||||
|
||||
X_API Term
|
||||
YAP_WriteBuffer(Term t, char *buf, unsigned int sze, int flags)
|
||||
{
|
||||
BACKUP_MACHINE_REGS();
|
||||
t = Yap_TermToString(t, buf, sze, flags);
|
||||
RECOVER_MACHINE_REGS();
|
||||
return t;
|
||||
}
|
||||
|
||||
X_API char *
|
||||
YAP_CompileClause(Term t)
|
||||
{
|
||||
|
57
C/iopreds.c
57
C/iopreds.c
@@ -2058,26 +2058,17 @@ p_open_mem_read_stream (void) /* $open_mem_read_stream(+List,-Stream) */
|
||||
return (Yap_unify (ARG2, t));
|
||||
}
|
||||
|
||||
static Int
|
||||
p_open_mem_write_stream (void) /* $open_mem_write_stream(-Stream) */
|
||||
static int
|
||||
open_buf_write_stream(char *nbuf, UInt sz)
|
||||
{
|
||||
Term t;
|
||||
StreamDesc *st;
|
||||
int sno;
|
||||
char *nbuf;
|
||||
extern int Yap_page_size;
|
||||
StreamDesc *st;
|
||||
|
||||
while ((nbuf = (char *)Yap_AllocAtomSpace(Yap_page_size*sizeof(char))) == NULL) {
|
||||
if (!Yap_growheap(FALSE, Yap_page_size*sizeof(char), NULL)) {
|
||||
Yap_Error(SYSTEM_ERROR, TermNil, Yap_ErrorMessage);
|
||||
return(FALSE);
|
||||
}
|
||||
}
|
||||
for (sno = 0; sno < MaxStreams; ++sno)
|
||||
if (Stream[sno].status & Free_Stream_f)
|
||||
break;
|
||||
if (sno == MaxStreams)
|
||||
return (PlIOError (SYSTEM_ERROR,TermNil, "new stream not available for open_mem_read_stream/1"));
|
||||
return -1;
|
||||
st = &Stream[sno];
|
||||
/* currently these streams are not seekable */
|
||||
st->status = Output_Stream_f | InMemory_Stream_f;
|
||||
@@ -2092,7 +2083,27 @@ p_open_mem_write_stream (void) /* $open_mem_write_stream(-Stream) */
|
||||
st->stream_getc_for_read = MemGetc;
|
||||
st->u.mem_string.pos = 0;
|
||||
st->u.mem_string.buf = nbuf;
|
||||
st->u.mem_string.max_size = Yap_page_size;
|
||||
st->u.mem_string.max_size = sz;
|
||||
return sno;
|
||||
}
|
||||
|
||||
static Int
|
||||
p_open_mem_write_stream (void) /* $open_mem_write_stream(-Stream) */
|
||||
{
|
||||
Term t;
|
||||
int sno;
|
||||
char *nbuf;
|
||||
extern int Yap_page_size;
|
||||
|
||||
while ((nbuf = (char *)Yap_AllocAtomSpace(Yap_page_size*sizeof(char))) == NULL) {
|
||||
if (!Yap_growheap(FALSE, Yap_page_size*sizeof(char), NULL)) {
|
||||
Yap_Error(SYSTEM_ERROR, TermNil, Yap_ErrorMessage);
|
||||
return(FALSE);
|
||||
}
|
||||
}
|
||||
sno = open_buf_write_stream(nbuf, Yap_page_size);
|
||||
if (sno == -1)
|
||||
return (PlIOError (SYSTEM_ERROR,TermNil, "new stream not available for open_mem_read_stream/1"));
|
||||
t = MkStream (sno);
|
||||
return (Yap_unify (ARG1, t));
|
||||
}
|
||||
@@ -4672,6 +4683,24 @@ Yap_StringToTerm(char *s,Term *tp)
|
||||
return t;
|
||||
}
|
||||
|
||||
Term
|
||||
Yap_TermToString(Term t, char *s, unsigned int sz, int flags)
|
||||
{
|
||||
int sno = open_buf_write_stream(s, sz);
|
||||
int old_output_stream = Yap_c_output_stream;
|
||||
|
||||
if (sno < 0)
|
||||
return FALSE;
|
||||
*--ASP = MkIntTerm(0);
|
||||
Yap_c_output_stream = sno;
|
||||
Yap_plwrite (t, Stream[sno].stream_putc, flags);
|
||||
s[Stream[sno].u.mem_string.pos] = '\0';
|
||||
Stream[sno].status = Free_Stream_f;
|
||||
Yap_c_output_stream = old_output_stream;
|
||||
++ASP;
|
||||
return EX;
|
||||
}
|
||||
|
||||
void
|
||||
Yap_InitBackIO (void)
|
||||
{
|
||||
|
Reference in New Issue
Block a user