add PIC_USE_PORT
This commit is contained in:
@@ -14,6 +14,7 @@
|
||||
*/
|
||||
|
||||
/* #define PIC_USE_CALLCC 1 */
|
||||
/* #define PIC_USE_PORT 1 */
|
||||
/* #define PIC_USE_READ 1 */
|
||||
/* #define PIC_USE_WRITE 1 */
|
||||
/* #define PIC_USE_EVAL 1 */
|
||||
|
||||
@@ -243,55 +243,6 @@ pic_value pic_apply(pic_state *, pic_value proc, int n, pic_value *argv);
|
||||
pic_value pic_applyk(pic_state *, pic_value proc, int n, pic_value *argv);
|
||||
|
||||
|
||||
/*
|
||||
* port
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
int (*read)(pic_state *, void *, char *, int);
|
||||
int (*write)(pic_state *, void *, const char *, int);
|
||||
long (*seek)(pic_state *, void *, long, int);
|
||||
int (*close)(pic_state *, void *);
|
||||
} pic_port_type;
|
||||
|
||||
#define PIC_SEEK_CUR 0
|
||||
#define PIC_SEEK_END 1
|
||||
#define PIC_SEEK_SET 2
|
||||
|
||||
#define PIC_IONBF 0
|
||||
#define PIC_IOLBF 1
|
||||
#define PIC_IOFBF 2
|
||||
|
||||
#define pic_stdin(pic) pic_funcall(pic, "current-input-port", 0)
|
||||
#define pic_stdout(pic) pic_funcall(pic, "current-output-port", 0)
|
||||
#define pic_stderr(pic) pic_funcall(pic, "current-error-port", 0)
|
||||
bool pic_eof_p(pic_state *, pic_value);
|
||||
pic_value pic_eof_object(pic_state *);
|
||||
bool pic_port_p(pic_state *, pic_value, const pic_port_type *type);
|
||||
/* basic methods */
|
||||
pic_value pic_funopen(pic_state *, void *cookie, const pic_port_type *type);
|
||||
size_t pic_fread(pic_state *, void *ptr, size_t size, size_t count, pic_value port);
|
||||
size_t pic_fwrite(pic_state *, const void *ptr, size_t size, size_t count, pic_value port);
|
||||
long pic_fseek(pic_state *, pic_value port, long offset, int whence);
|
||||
int pic_fclose(pic_state *, pic_value port);
|
||||
/* error handling */
|
||||
void pic_clearerr(pic_state *, pic_value port);
|
||||
int pic_feof(pic_state *, pic_value port);
|
||||
int pic_ferror(pic_state *, pic_value port);
|
||||
/* character I/O */
|
||||
int pic_fputc(pic_state *, int c, pic_value port);
|
||||
int pic_fgetc(pic_state *, pic_value port);
|
||||
int pic_fputs(pic_state *, const char *s, pic_value port);
|
||||
char *pic_fgets(pic_state *, char *s, int size, pic_value port);
|
||||
int pic_ungetc(pic_state *, int c, pic_value port);
|
||||
int pic_fflush(pic_state *, pic_value port);
|
||||
int pic_setvbuf(pic_state *, pic_value port, char *buf, int mode, size_t size);
|
||||
/* formatted output */
|
||||
int pic_printf(pic_state *, const char *fmt, ...);
|
||||
int pic_fprintf(pic_state *, pic_value port, const char *fmt, ...);
|
||||
int pic_vfprintf(pic_state *, pic_value port, const char *fmt, va_list ap);
|
||||
|
||||
|
||||
/*
|
||||
* core language features
|
||||
*/
|
||||
|
||||
@@ -14,6 +14,56 @@ void *pic_default_allocf(void *, void *, size_t);
|
||||
void pic_default_panicf(pic_state *, const char *, int, pic_value *);
|
||||
#endif
|
||||
|
||||
#if PIC_USE_PORT
|
||||
typedef struct {
|
||||
int (*read)(pic_state *, void *, char *, int);
|
||||
int (*write)(pic_state *, void *, const char *, int);
|
||||
long (*seek)(pic_state *, void *, long, int);
|
||||
int (*close)(pic_state *, void *);
|
||||
} pic_port_type;
|
||||
|
||||
#ifndef EOF
|
||||
# define EOF (-1)
|
||||
#endif
|
||||
|
||||
#define PIC_SEEK_CUR 0
|
||||
#define PIC_SEEK_END 1
|
||||
#define PIC_SEEK_SET 2
|
||||
|
||||
#define PIC_IONBF 0
|
||||
#define PIC_IOLBF 1
|
||||
#define PIC_IOFBF 2
|
||||
|
||||
#define pic_stdin(pic) pic_funcall(pic, "current-input-port", 0)
|
||||
#define pic_stdout(pic) pic_funcall(pic, "current-output-port", 0)
|
||||
#define pic_stderr(pic) pic_funcall(pic, "current-error-port", 0)
|
||||
bool pic_eof_p(pic_state *, pic_value);
|
||||
pic_value pic_eof_object(pic_state *);
|
||||
bool pic_port_p(pic_state *, pic_value, const pic_port_type *type);
|
||||
/* basic methods */
|
||||
pic_value pic_funopen(pic_state *, void *cookie, const pic_port_type *type);
|
||||
size_t pic_fread(pic_state *, void *ptr, size_t size, size_t count, pic_value port);
|
||||
size_t pic_fwrite(pic_state *, const void *ptr, size_t size, size_t count, pic_value port);
|
||||
long pic_fseek(pic_state *, pic_value port, long offset, int whence);
|
||||
int pic_fclose(pic_state *, pic_value port);
|
||||
/* error handling */
|
||||
void pic_clearerr(pic_state *, pic_value port);
|
||||
int pic_feof(pic_state *, pic_value port);
|
||||
int pic_ferror(pic_state *, pic_value port);
|
||||
/* character I/O */
|
||||
int pic_fputc(pic_state *, int c, pic_value port);
|
||||
int pic_fgetc(pic_state *, pic_value port);
|
||||
int pic_fputs(pic_state *, const char *s, pic_value port);
|
||||
char *pic_fgets(pic_state *, char *s, int size, pic_value port);
|
||||
int pic_ungetc(pic_state *, int c, pic_value port);
|
||||
int pic_fflush(pic_state *, pic_value port);
|
||||
int pic_setvbuf(pic_state *, pic_value port, char *buf, int mode, size_t size);
|
||||
/* formatted output */
|
||||
int pic_printf(pic_state *, const char *fmt, ...);
|
||||
int pic_fprintf(pic_state *, pic_value port, const char *fmt, ...);
|
||||
int pic_vfprintf(pic_state *, pic_value port, const char *fmt, va_list ap);
|
||||
#endif
|
||||
|
||||
#if PIC_USE_FILE
|
||||
pic_value pic_fopen(pic_state *, FILE *, const char *mode);
|
||||
#endif
|
||||
|
||||
@@ -8,6 +8,10 @@
|
||||
# define PIC_USE_LIBC 1
|
||||
#endif
|
||||
|
||||
#ifndef PIC_USE_PORT
|
||||
# define PIC_USE_PORT 1
|
||||
#endif
|
||||
|
||||
#ifndef PIC_USE_CALLCC
|
||||
# define PIC_USE_CALLCC 1
|
||||
#endif
|
||||
@@ -32,6 +36,15 @@
|
||||
# define PIC_USE_ERROR 1
|
||||
#endif
|
||||
|
||||
#if !PIC_USE_PORT && PIC_USE_READ
|
||||
# error PIC_USE_READ requires PIC_USE_PORT
|
||||
#endif
|
||||
#if !PIC_USE_PORT && PIC_USE_WRITE
|
||||
# error PIC_USE_WRITE requires PIC_USE_PORT
|
||||
#endif
|
||||
#if !PIC_USE_PORT && PIC_USE_FILE
|
||||
# error PIC_USE_FILE requires PIC_USE_PORT
|
||||
#endif
|
||||
#if !PIC_USE_LIBC && PIC_USE_FILE
|
||||
# error PIC_USE_FILE requires PIC_USE_LIBC
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user