24#include "prologterms2c.h"
43#ifndef Quote_illegal_f
44#define Quote_illegal_f 1
46#define Handle_vars_f 4
47#define Use_portray_f 8
64void write_msg(
const char *fun,
const char *file,
int line,
const char *format, ...);
66size_t write_term_to_stream(
const int fd,
const YAP_Term term);
67YAP_Term read_term_from_stream(
const int fd);
73write_msg(
const char *fun,
const char *file,
int line,
74 const char *format, ...) {
80 "[%d:%s in %s at line %d] ", getpid(),fun, file, line);
81 vfprintf(stderr, format, ap);
91expand_buffer(
const size_t space ) {
93 if( BUFFER_PTR == NULL ) {
94 YAP_Error(0,0,
"Prolog2Term: Out of memory.\n");
105void change_buffer_size(
const size_t newsize) {
107 if ( BUFFER_PTR == NULL )
111 YAP_Error(0,0,
"Prolog2Term: Out of memory.\n");
118 else if ((BUFFER_SIZE>=BLOCK_SIZE &&
119 BUFFER_SIZE>=newsize) )
125 YAP_Error(0,0,
"Prolog2Term: Out of memory.\n");
140p2c_putt(
const YAP_Term t) {
143 while ((BUFFER_LEN=YAP_ExportTerm(t, BUFFER_PTR, BUFFER_SIZE)) <= 0) {
145 write_msg(__FUNCTION__,__FILE__,__LINE__,
"p2c_putc:buffer expanded: size=%u pos=%u len=%u\n",BUFFER_SIZE,BUFFER_POS,BUFFER_LEN);
147 expand_buffer( BLOCK_SIZE );
157write_term_to_stream(
const int fd,
const YAP_Term term) {
160 printf(
"BUFFER_PTR=%p\n", BUFFER_PTR);
162 if (write(fd,(
void*)BUFFER_PTR,BUFFER_LEN) < 0) {
163 YAP_Error(0,0,
"Prolog2Term: IO error in write.\n");
173read_term_from_stream(
const int fd) {
177 if (!read(fd,(
void*)&size,
sizeof(
size_t))) {
178 YAP_Error(0,0,
"Prolog2Term: IO error in read.\n");
181 write_msg(__FUNCTION__,__FILE__,__LINE__,
"read_term_from_stream>>>>size:%d\n",size);
183 if ( size> BUFFER_SIZE)
184 expand_buffer(size-BUFFER_SIZE);
185 if (!read(fd,BUFFER_PTR,size)) {
186 YAP_Error(0,0,
"Prolog2Term: IO error in read.\n");
188 return YAP_ImportTerm( BUFFER_PTR);
199term2string(
const YAP_Term t) {
209string2term(
char *
const ptr,
const size_t *size) {
211 t = YAP_ReadBuffer( ptr, NULL );
214 write_msg(__FUNCTION__,__FILE__,__LINE__,
"FAILED string2term>>>>size:%lx %d\n",t,*size);
X_API char * YAP_WriteDynamicBuffer(YAP_Term t, encoding_t enc, int flags)
write a a term to n user-provided buffer: make sure not tp overflow the buffer even if the text is mu...