This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
yap-6.3/os/yapio.h

208 lines
6.1 KiB
C
Raw Permalink Normal View History

2016-04-10 14:21:17 +01:00
/*************************************************************************
2017-09-23 02:17:55 +01:00
* *
* 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 *
* *
*************************************************************************/
2016-04-10 14:21:17 +01:00
#ifndef YAPIO_H
#define YAPIO_H 1
#ifdef SIMICS
#undef HAVE_LIBREADLINE
#endif
#include <stdio.h>
#include <wchar.h>
2017-10-06 13:05:12 +01:00
#include "YapIOConfig.h"
2017-11-27 13:36:19 +00:00
#include <VFS.h>
2018-10-16 14:31:16 +01:00
#include <Yatom.h>
2016-04-10 14:21:17 +01:00
#ifndef _PL_WRITE_
#define EOFCHAR EOF
#endif
/* info on aliases */
typedef struct AliasDescS {
Atom name;
int alias_stream;
} * AliasDesc;
#define MAX_ISO_LATIN1 255
/* parser stack, used to be AuxSp, now is ASP */
#define ParserAuxSp LOCAL_ScannerStack
2019-05-17 17:49:30 +01:00
typedef struct scanner_extra_params {
2019-05-18 09:47:17 +01:00
Term tposINPUT, tposOUTPUT;
2019-05-17 17:49:30 +01:00
Term backquotes, singlequotes, doublequotes;
bool ce, vprefix, vn_asfl;
Term tcomms; /// Access to comments
Term cmod; /// Access to commen
bool store_comments; //
bool get_eot_blank;
} scanner_params;
2017-11-27 13:36:19 +00:00
/**
*
* @return a new VFS that will support /assets
*/
2018-10-16 14:31:16 +01:00
extern struct vfs *Yap_InitAssetManager(void);
2017-11-27 13:36:19 +00:00
2016-04-10 14:21:17 +01:00
/* routines in parser.c */
2016-08-05 22:35:50 +01:00
extern VarEntry *Yap_LookupVar(const char *);
extern Term Yap_VarNames(VarEntry *, Term);
extern Term Yap_Variables(VarEntry *, Term);
extern Term Yap_Singletons(VarEntry *, Term);
2016-04-10 14:21:17 +01:00
/* routines in scanner.c */
2019-05-17 17:49:30 +01:00
extern TokEntry *Yap_tokenizer(struct stream_desc *, scanner_params *sp);
2016-08-05 22:35:50 +01:00
extern void Yap_clean_tokenizer(TokEntry *, VarEntry *, VarEntry *);
extern char *Yap_AllocScannerMemory(unsigned int);
2016-04-10 14:21:17 +01:00
/* routines in iopreds.c */
2016-08-05 22:35:50 +01:00
extern FILE *Yap_FileDescriptorFromStream(Term);
extern Int Yap_FirstLineInParse(void);
extern int Yap_CheckIOStream(Term, char *);
2016-04-10 14:21:17 +01:00
#if defined(YAPOR) || defined(THREADS)
2016-08-05 22:35:50 +01:00
extern void Yap_LockStream(void *);
extern void Yap_UnLockStream(void *);
2016-04-10 14:21:17 +01:00
#else
#define Yap_LockStream(X)
#define Yap_UnLockStream(X)
#endif
2016-08-05 22:35:50 +01:00
extern Int Yap_GetStreamFd(int);
2018-05-14 16:03:02 +01:00
extern void Yap_CloseStreams(void);
extern void Yap_CloseTemporaryStreams(void);
2016-08-05 22:35:50 +01:00
extern void Yap_FlushStreams(void);
extern void Yap_ReleaseStream(int);
extern int Yap_PlGetchar(void);
extern int Yap_PlGetWchar(void);
extern int Yap_PlFGetchar(void);
extern int Yap_GetCharForSIGINT(void);
extern Int Yap_StreamToFileNo(Term);
2018-10-16 14:31:16 +01:00
extern int Yap_OpenStream(Term tin, const char *io_mode, Term user_name,
encoding_t enc);
extern int Yap_FileStream(FILE *, Atom, Term, int, VFS_t *);
2018-07-10 23:21:19 +01:00
extern char *Yap_TermToBuffer(Term t, int flags);
2016-08-05 22:35:50 +01:00
extern char *Yap_HandleToString(yhandle_t l, size_t sz, size_t *length,
encoding_t *encoding, int flags);
extern int Yap_GetFreeStreamD(void);
extern int Yap_GetFreeStreamDForReading(void);
2018-04-02 14:49:45 +01:00
extern Term Yap_BufferToTerm(const char *s, Term opts);
extern Term Yap_UBufferToTerm(const unsigned char *s, Term opts);
2016-08-05 22:35:50 +01:00
extern Term Yap_WStringToList(wchar_t *);
extern Term Yap_WStringToListOfAtoms(wchar_t *);
extern Atom Yap_LookupWideAtom(const wchar_t *);
2016-04-10 14:21:17 +01:00
/* grow.c */
2016-08-05 22:35:50 +01:00
extern int Yap_growheap_in_parser(tr_fr_ptr *, TokEntry **, VarEntry **);
extern int Yap_growstack_in_parser(tr_fr_ptr *, TokEntry **, VarEntry **);
extern int Yap_growtrail_in_parser(tr_fr_ptr *, TokEntry **, VarEntry **);
2016-04-10 14:21:17 +01:00
typedef enum mem_buf_source {
2016-07-31 15:55:50 +01:00
MEM_BUF_MALLOC = 1,
MEM_BUF_USER = 2
2016-04-10 14:21:17 +01:00
} memBufSource;
2016-08-05 22:35:50 +01:00
extern char *Yap_MemStreamBuf(int sno);
2016-04-10 14:21:17 +01:00
2018-10-16 14:31:16 +01:00
extern char *Yap_StrPrefix(const char *buf, size_t n);
2018-07-03 00:08:19 +01:00
2016-11-24 04:35:39 +00:00
extern Term Yap_StringToNumberTerm(const char *s, encoding_t *encp,
bool error_on);
2016-07-31 15:55:50 +01:00
extern int Yap_FormatFloat(Float f, char **s, size_t sz);
2016-08-05 22:35:50 +01:00
extern int Yap_open_buf_read_stream(const char *buf, size_t nchars,
2018-10-16 14:31:16 +01:00
encoding_t *encp, memBufSource src,
Atom name, Term uname);
2016-07-31 15:55:50 +01:00
extern int Yap_open_buf_write_stream(encoding_t enc, memBufSource src);
2018-10-16 14:31:16 +01:00
extern Term Yap_BufferToTerm(const char *s, Term opts);
2019-05-17 17:49:30 +01:00
2018-10-16 14:31:16 +01:00
extern X_API Term Yap_BufferToTermWithPrioBindings(const char *s, Term opts,
Term bindings, size_t sz,
int prio);
2016-07-31 15:55:50 +01:00
extern FILE *Yap_GetInputStream(Term t, const char *m);
extern FILE *Yap_GetOutputStream(Term t, const char *m);
2018-10-08 13:51:17 +01:00
extern Atom Yap_guessFileName(FILE *f, int sno, size_t max);
2016-08-05 22:35:50 +01:00
extern void Yap_plwrite(Term t, struct stream_desc *mywrite, int max_depth,
int flags, int priority);
2016-04-10 14:21:17 +01:00
2016-07-31 15:55:50 +01:00
extern int Yap_CheckSocketStream(Term stream, const char *error);
extern void Yap_init_socks(char *host, long interface_port);
2016-04-10 14:21:17 +01:00
extern bool Yap_flush(int sno);
2016-07-31 15:55:50 +01:00
extern uint64_t HashFunction(const unsigned char *);
extern uint64_t WideHashFunction(wchar_t *);
2016-04-10 14:21:17 +01:00
2018-06-18 12:16:36 +01:00
INLINE_ONLY Term MkCharTerm(Int c);
2016-04-10 14:21:17 +01:00
/**
* MkCharTerm: convert a character into a single atom.
*
* @param c the character code
*
* @return the term.
*/
2018-06-18 12:16:36 +01:00
INLINE_ONLY Term MkCharTerm(Int c) {
unsigned char cs[10];
2016-04-10 14:21:17 +01:00
if (c < 0)
return TermEof;
2016-11-24 04:35:39 +00:00
size_t n = put_utf8(cs, c);
cs[n] = '\0';
return MkAtomTerm(Yap_ULookupAtom(cs));
2016-04-10 14:21:17 +01:00
}
2018-02-22 08:18:45 +00:00
extern char *GLOBAL_cwd;
2017-12-01 10:42:10 +00:00
2018-10-16 14:31:16 +01:00
INLINE_ONLY char *Yap_VF(const char *path) {
char *out;
out = (char *)malloc(YAP_FILENAME_MAX + 1);
if (GLOBAL_cwd == NULL || GLOBAL_cwd[0] == 0 ||
!Yap_IsAbsolutePath(path, false)) {
return (char *)path;
}
strcpy(out, GLOBAL_cwd);
strcat(out, "/");
strcat(out, path);
return out;
2017-12-01 10:42:10 +00:00
}
2018-10-16 14:31:16 +01:00
INLINE_ONLY char *Yap_VFAlloc(const char *path) {
char *out;
out = (char *)malloc(YAP_FILENAME_MAX + 1);
if (GLOBAL_cwd == NULL || GLOBAL_cwd[0] == 0 ||
!Yap_IsAbsolutePath(path, false)) {
return (char *)path;
}
strcpy(out, GLOBAL_cwd);
strcat(out, "/");
strcat(out, path);
return out;
2017-12-01 10:42:10 +00:00
}
2016-04-10 14:21:17 +01:00
/// UT when yap started
2016-07-31 15:55:50 +01:00
extern uint64_t Yap_StartOfWTimes;
2016-11-24 04:35:39 +00:00
extern bool Yap_HandleSIGINT(void);
2017-11-21 15:44:43 +00:00
2016-04-10 14:21:17 +01:00
#endif