2021-08-30 10:24:51 -04:00
|
|
|
#ifndef __STDIO_H
|
|
|
|
#define __STDIO_H 1
|
|
|
|
|
|
|
|
#define EOF (-1)
|
|
|
|
|
|
|
|
#ifndef BUFSIZ
|
|
|
|
#define BUFSIZ 1024L
|
|
|
|
#endif
|
|
|
|
#define FOPEN_MAX 1024 /* Does not really matter */
|
|
|
|
|
|
|
|
#define _IOFBF 1L
|
|
|
|
#define _IOLBF 2L
|
|
|
|
#define _IONBF 3L
|
|
|
|
|
|
|
|
#define HASBUF 1L
|
|
|
|
#define NOBUFMEM 2L
|
|
|
|
|
|
|
|
#define SEEK_SET 0
|
|
|
|
#define SEEK_CUR 1
|
|
|
|
#define SEEK_END 2
|
|
|
|
|
|
|
|
#define _READ 1
|
|
|
|
#define _WRITE 2
|
|
|
|
#define _UNBUF 4
|
|
|
|
#define _EOF 8
|
|
|
|
#define _ERR 16
|
|
|
|
#define _READABLE 32
|
|
|
|
#define _WRITEABLE 64
|
|
|
|
#define _LINEBUF 128
|
|
|
|
#define _NOTMYBUF 256
|
|
|
|
#define _ISTTY 512
|
|
|
|
/* Define this for CRLF-conversion in text-mode
|
|
|
|
#define _CLE 16384
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifdef __BUILD_LIB
|
|
|
|
#define HAVE_TTYS 1
|
|
|
|
#include "libsys.h"
|
|
|
|
#ifdef HAVE_TTYS
|
|
|
|
extern int __isatty(int);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef __VCLIB_SIMPLEIO
|
|
|
|
typedef struct _iobuf
|
|
|
|
{
|
|
|
|
unsigned char filehandle;
|
|
|
|
unsigned char flags;
|
|
|
|
unsigned int count;
|
|
|
|
unsigned int bufsize;
|
|
|
|
char *pointer;
|
|
|
|
char *base; /* buffer address */
|
|
|
|
struct _iobuf *next;
|
|
|
|
} FILE;
|
|
|
|
#else
|
|
|
|
typedef struct _iobuf
|
|
|
|
{
|
|
|
|
int filehandle; /* filehandle */
|
|
|
|
char *pointer;
|
|
|
|
char *base; /* buffer address */
|
|
|
|
struct _iobuf *next;
|
|
|
|
struct _iobuf *prev;
|
|
|
|
int count;
|
|
|
|
int flags;
|
|
|
|
int bufsize;
|
|
|
|
#ifdef _CLE
|
|
|
|
int clebuf; /* buffered char during CRLF conversion */
|
|
|
|
#endif
|
|
|
|
} FILE;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* Have to be initialized in _main(). */
|
|
|
|
extern FILE *stdin, *stdout, *stderr;
|
|
|
|
|
|
|
|
int _fillbuf(FILE *),_putbuf(int,FILE *),_flushbuf(FILE *);
|
|
|
|
void _ttyflush(void);
|
|
|
|
|
|
|
|
#define L_tmpnam 30
|
|
|
|
#define TMP_MAX FOPEN_MAX
|
|
|
|
|
|
|
|
#define FILENAME_MAX 107
|
|
|
|
|
|
|
|
/*
|
|
|
|
Adapt corresponding to stddef.h
|
|
|
|
*/
|
|
|
|
#ifndef __SIZE_T
|
|
|
|
#define __SIZE_T 1
|
|
|
|
#ifdef __SIZE_T_INT
|
|
|
|
typedef unsigned int size_t;
|
|
|
|
#else
|
|
|
|
typedef unsigned long size_t;
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/*
|
|
|
|
Adapt as needed.
|
|
|
|
*/
|
|
|
|
#ifndef __FPOS_T
|
|
|
|
#define __FPOS_T 1
|
|
|
|
typedef long fpos_t;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef __STDARG_H
|
|
|
|
#include <stdarg.h>
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#undef NULL
|
|
|
|
#define NULL ((void*)0)
|
|
|
|
|
|
|
|
FILE *fopen(const char *,const char *);
|
|
|
|
FILE *freopen(const char *,const char *,FILE *);
|
|
|
|
int fflush(FILE *);
|
|
|
|
int fclose(FILE *);
|
|
|
|
int rename(const char *,const char *);
|
|
|
|
int remove(const char *);
|
|
|
|
FILE *tmpfile(void);
|
|
|
|
char *tmpnam(char *);
|
|
|
|
int setvbuf(FILE *,char *,int,size_t);
|
|
|
|
void setbuf(FILE *,char *);
|
|
|
|
int fprintf(FILE *, const char *, ...);
|
|
|
|
int printf(const char *, ...);
|
|
|
|
int sprintf(char *, const char *,...);
|
|
|
|
int snprintf(char *,size_t,const char *,...);
|
|
|
|
/*
|
|
|
|
Simple versions of IO functions (see vbcc documentation).
|
|
|
|
If versions with __v1 or __v2 are declared they are also used.
|
|
|
|
*/
|
2023-03-24 17:53:09 -04:00
|
|
|
/*
|
2021-08-30 10:24:51 -04:00
|
|
|
int __v0fprintf(FILE *, const char *);
|
|
|
|
int __v0printf(const char *);
|
|
|
|
int __v0sprintf(char *, const char *);
|
2023-03-24 17:53:09 -04:00
|
|
|
*/
|
2021-08-30 10:24:51 -04:00
|
|
|
int vprintf(const char *,va_list);
|
|
|
|
int vfprintf(FILE *,const char *,va_list);
|
|
|
|
int vsprintf(char *,const char *,va_list);
|
|
|
|
int vsnprintf(char *,size_t,const char *,va_list);
|
|
|
|
int fscanf(FILE *, const char *, ...);
|
|
|
|
int scanf(const char *, ...);
|
|
|
|
int sscanf(const char *, const char *, ...);
|
|
|
|
int vscanf(const char *,va_list);
|
|
|
|
int vfscanf(FILE *,const char *,va_list);
|
|
|
|
int vsscanf(const char *,const char *,va_list);
|
|
|
|
char *fgets(char *, int, FILE *);
|
|
|
|
int fputs(const char *, FILE *);
|
|
|
|
char *gets(char *);
|
|
|
|
int puts(const char *);
|
|
|
|
int ungetc(int,FILE *);
|
|
|
|
size_t fread(void *,size_t,size_t,FILE *);
|
|
|
|
size_t fwrite(void *,size_t,size_t,FILE *);
|
|
|
|
int fseek(FILE *,long,int);
|
|
|
|
void rewind(FILE *);
|
|
|
|
long ftell(FILE *);
|
|
|
|
int fgetpos(FILE *,fpos_t *);
|
|
|
|
int fsetpos(FILE *,const fpos_t *);
|
|
|
|
void perror(const char *);
|
|
|
|
int fgetc(FILE *);
|
|
|
|
int fputc(int,FILE *);
|
|
|
|
int getchar(void);
|
|
|
|
int putchar(int);
|
|
|
|
#ifndef __VCLIB_SIMPLEIO
|
|
|
|
#if defined(_CLE)
|
|
|
|
int __putc(int,FILE *);
|
|
|
|
int __getc(FILE *);
|
|
|
|
#else
|
|
|
|
#define __putc(x,f) __rawputc((x),(f))
|
|
|
|
#define __getc(f) __rawgetc(f)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define __check(arg,type) (volatile)sizeof((arg)==(type)0)
|
|
|
|
|
|
|
|
#define __rawputc(x,p) (((p)->flags|=_WRITE),((--((FILE*)(p))->count>=0&&((x)!='\n'||!(((FILE*)(p))->flags&_LINEBUF)))?(unsigned char)(*((FILE*)(p))->pointer++=(x)):_putbuf((x),p)))
|
|
|
|
#define putc(x,f) __putc((x),(f))
|
|
|
|
#define putchar(x) __putc((x),stdout)
|
|
|
|
#define __rawgetc(p) (__check((p),FILE*),((p)->flags|=_READ),--((FILE*)(p))->count>=0?(unsigned char)*((FILE*)(p))->pointer++:_fillbuf(p))
|
|
|
|
#define getc(f) __getc(f)
|
|
|
|
#define getchar() __getc(stdin)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define feof(p) (__check((p),FILE*),((FILE*)(p))->flags&_EOF)
|
|
|
|
#define ferror(p) (__check((p),FILE*),((FILE*)(p))->flags&_ERR)
|
|
|
|
#define clearerr(p) (__check((p),FILE*),((FILE*)(p))->flags&=~(_ERR|_EOF))
|
|
|
|
|
|
|
|
#define fsetpos(f,ptr) fseek((f),*(ptr),SEEK_SET)
|
|
|
|
|
|
|
|
#ifdef __VBCC__
|
|
|
|
#pragma printflike printf
|
|
|
|
#pragma printflike fprintf
|
|
|
|
#pragma printflike sprintf
|
|
|
|
#pragma printflike snprintf
|
|
|
|
#pragma scanflike scanf
|
|
|
|
#pragma scanflike fscanf
|
|
|
|
#pragma scanflike sscanf
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif
|