80 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /**************************************************************************
 | |
|  *									 *
 | |
|  * File:		stream.h *
 | |
|  * Last rev:	5/2/88							 *
 | |
|  * mods: *
 | |
|  * comments:	Stream core routunes			 *
 | |
|  *									 *
 | |
|  *************************************************************************/
 | |
| #ifdef SCCS
 | |
| static char SccsId[] = "%W% %G%";
 | |
| #endif
 | |
| 
 | |
| #if __ANDROID__
 | |
| #undef HAVE_FMEMOPEN
 | |
| #undef HAVE_OPEN_MEMSTREAM
 | |
| #endif
 | |
| 
 | |
| #if _WIN32
 | |
| #undef MAY_WRITE
 | |
| #undef MAY_READ
 | |
| #endif
 | |
| 
 | |
| typedef struct mem_desc {
 | |
|   char *buf;    /* where the file is being read from/written to */
 | |
|   int src;      /* where the space comes from, 0 code space, 1 malloc */
 | |
|   Int max_size; /* maximum buffer size (may be changed dynamically) */
 | |
|   UInt pos;     /* cursor */
 | |
|   volatile void *error_handler;
 | |
| } memHandle;
 | |
| 
 | |
| typedef struct stream_desc {
 | |
|   Atom name;
 | |
|   Term user_name;
 | |
|   FILE *file;
 | |
|   // useful in memory streams
 | |
|   char *nbuf;
 | |
|   size_t nsize;
 | |
|   union {
 | |
|     struct {
 | |
| #define PLGETC_BUF_SIZE 4096
 | |
|       unsigned char *buf, *ptr;
 | |
|       int left;
 | |
|     } file;
 | |
|     memHandle mem_string;
 | |
|     struct {
 | |
|       int fd;
 | |
|     } pipe;
 | |
| #if HAVE_SOCKET
 | |
|     struct {
 | |
|       socket_domain domain;
 | |
|       socket_info flags;
 | |
|       int fd;
 | |
|     } socket;
 | |
| #endif
 | |
|     struct {
 | |
|       const unsigned char *buf, *ptr;
 | |
|     } irl;
 | |
|   } u;
 | |
| 
 | |
|   Int charcount, linecount, linepos;
 | |
|   stream_flags_t status;
 | |
| #if defined(YAPOR) || defined(THREADS)
 | |
|   lockvar streamlock; /* protect stream access */
 | |
| #endif
 | |
|   int (*stream_putc)(
 | |
|       int, int); /** function the stream uses for writing a single octet */
 | |
|   int (*stream_wputc)(
 | |
|       int, wchar_t); /** function the stream uses for writing a character */
 | |
|   int (*stream_getc)(int); /** function the stream uses for reading an octet. */
 | |
|   int (*stream_wgetc)(
 | |
|       int);         /** function the stream uses for reading a character. */
 | |
|   struct vfs *vfs;  /** stream belongs to a space */
 | |
|   void *vfs_handle; /** direct handle to stream in that space. */
 | |
|   int (*stream_wgetc_for_read)(
 | |
|       int); /* function the stream uses for parser. It may be different
 | |
|                from above if the ISO  character conversion is on */
 | |
|   encoding_t encoding; /** current encoding for stream */
 | |
| } StreamDesc;
 | |
| 
 |