/************************************************************************* * * * YAP Prolog %W% %G% * * * Yap Prolog was developed at NCCUP - Universidade do Porto * * * * Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-2003 * * * ************************************************************************** * * * File: yapio.h * * Last rev: 22/1/03 * * mods: * * comments: Input/Output information * * * *************************************************************************/ #ifndef YAPIO_H #define YAPIO_H 1 #ifdef SIMICS #undef HAVE_LIBREADLINE #endif #include #include #include #include "os/YapIOConfig.h" #ifndef _PL_WRITE_ /* Character types for tokenizer and write.c */ #define UC 1 /* Upper case */ #define UL 2 /* Underline */ #define LC 3 /* Lower case */ #define NU 4 /* digit */ #define QT 5 /* single quote */ #define DC 6 /* double quote */ #define SY 7 /* Symbol character */ #define SL 8 /* Solo character */ #define BK 9 /* Brackets & friends */ #define BS 10 /* Blank */ #define EF 11 /* End of File marker */ #define CC 12 /* comment char % */ #define EOFCHAR EOF #endif /* info on aliases */ typedef struct AliasDescS { Atom name; int alias_stream; } * AliasDesc; #define MAX_ISO_LATIN1 255 /****************** character definition table **************************/ #define NUMBER_OF_CHARS 256 extern char *Yap_chtype; #include "inline-only.h" INLINE_ONLY EXTERN inline int chtype(Int); int Yap_wide_chtype(Int); INLINE_ONLY EXTERN inline int chtype(Int ch) { if (ch < NUMBER_OF_CHARS) return Yap_chtype[ch]; return Yap_wide_chtype(ch); } /* parser stack, used to be AuxSp, now is ASP */ #define ParserAuxSp LOCAL_ScannerStack /* routines in parser.c */ VarEntry *Yap_LookupVar(char *); Term Yap_VarNames(VarEntry *,Term); Term Yap_Variables(VarEntry *,Term); Term Yap_Singletons(VarEntry *,Term); /* routines in scanner.c */ TokEntry *Yap_tokenizer( struct stream_desc *, bool, Term *d); void Yap_clean_tokenizer(TokEntry *, VarEntry *, VarEntry *); char *Yap_AllocScannerMemory(unsigned int); /* routines in iopreds.c */ FILE *Yap_FileDescriptorFromStream(Term); Int Yap_FirstLineInParse(void); int Yap_CheckIOStream(Term, char *); #if defined(YAPOR) || defined(THREADS) void Yap_LockStream(void *); void Yap_UnLockStream(void *); #else #define Yap_LockStream(X) #define Yap_UnLockStream(X) #endif Int Yap_GetStreamFd(int); void Yap_CloseStreams(int); void Yap_FlushStreams(void); void Yap_ReleaseStream(int); void Yap_CloseStream(int); int Yap_PlGetchar(void); int Yap_PlGetWchar(void); int Yap_PlFGetchar(void); int Yap_GetCharForSIGINT(void); Int Yap_StreamToFileNo(Term); int Yap_OpenStream(FILE *,char *,Term,int); char *Yap_TermToString(Term t, char *s, size_t sz, size_t *length, encoding_t encoding, int flags); char *Yap_HandleToString(yhandle_t l, size_t sz, size_t *length, encoding_t encoding, int flags); int Yap_GetFreeStreamD(void); int Yap_GetFreeStreamDForReading(void); Term Yap_WStringToList(wchar_t *); Term Yap_WStringToListOfAtoms(wchar_t *); Atom Yap_LookupWideAtom( const wchar_t * ); #define Quote_illegal_f 0x01 #define Ignore_ops_f 0x02 #define Handle_vars_f 0x04 #define Use_portray_f 0x08 #define To_heap_f 0x10 #define Unfold_cyclics_f 0x20 #define Use_SWI_Stream_f 0x40 #define BackQuote_String_f 0x80 #define AttVar_None_f 0x100 #define AttVar_Dots_f 0x200 #define AttVar_Portray_f 0x400 #define Blob_Portray_f 0x800 #define No_Escapes_f 0x1000 #define No_Brace_Terms_f 0x2000 #define Fullstop_f 0x4000 #define New_Line_f 0x8000 /* grow.c */ int Yap_growheap_in_parser(tr_fr_ptr *, TokEntry **, VarEntry **); int Yap_growstack_in_parser(tr_fr_ptr *, TokEntry **, VarEntry **); int Yap_growtrail_in_parser(tr_fr_ptr *, TokEntry **, VarEntry **); bool Yap_IsAbsolutePath(const char *p); Atom Yap_TemporaryFile( const char *prefix, int *fd); char *Yap_AbsoluteFile(const char *spec, char *tmp); typedef enum mem_buf_source { MEM_BUF_CODE=1, MEM_BUF_MALLOC=2, MEM_BUF_USER=4 } memBufSource; struct mem_desc *Yap_MemExportStreamPtrs( int sno ); extern Term Yap_StringToTerm(const char *s, size_t len, encoding_t enc, int prio, Term *bindings_p); extern Term Yap_StringToNumberTerm(char *s, encoding_t encp); int Yap_FormatFloat(Float f, const char *s, size_t sz); int Yap_open_buf_read_stream(const char *nbuf, size_t nchars, encoding_t enc, memBufSource src); Term Yap_ReadFromAtom(Atom a, Term opts); int Yap_open_buf_write_stream(char **nbufp, size_t * szp); FILE *Yap_GetInputStream(Term t, const char *m); FILE *Yap_GetOutputStream(Term t,const char *m); char * Yap_guessFileName(int f, int sno, char *nameb, size_t max); void Yap_plwrite(Term t, struct stream_desc *mywrite, int max_depth, int flags, int priority); int Yap_CheckSocketStream(Term stream, const char * error); void Yap_init_socks(char *host, long interface_port); #ifdef HAVE_ERRNO_H #include #else extern int errno; #endif INLINE_ONLY EXTERN UInt inline HashFunction(unsigned char *); INLINE_ONLY EXTERN UInt inline WideHashFunction(wchar_t *); INLINE_ONLY EXTERN inline UInt HashFunction(unsigned char *CHP) { /* djb2 */ UInt hash = 5381; UInt c; while ((c = *CHP++) != '\0') { /* hash = ((hash << 5) + hash) + c; hash * 33 + c */ hash = hash * 33 ^ c; } return hash; /* UInt OUT=0, i = 1; while(*CHP != '\0') { OUT += (UInt)(*CHP++); } return OUT; */ } INLINE_ONLY EXTERN UInt inline WideHashFunction(wchar_t *CHP) { UInt hash = 5381; UInt c; while ((c = *CHP++) != '\0') { hash = hash * 33 ^ c; } return hash; } #endif