|
|
/*** stdio20.h - linker I/O package
* * Copyright <C> 1985, Microsoft Corporation * * Purpose: * This is optimized stdio package for linker. Advantages over standard * C run-time stdio are: * - smaller size * - greater speed * This package is not general nature and is tailored to linker * requrements. * *************************************************************************/
#define NULL 0
#define EOF (-1)
#define _IOREAD 0x01
#define _IOWRT 0x02
#define _IOPEN 0x03
#define _IONBF 0x04
#define _IOEOF 0x10
#define _IOERR 0x20
#define _IOFBF 0x0
#define CTRL_Z 0x1a
typedef struct file { char *_ptr; int _cnt; char *_base; char _flag; char _file; int _bsize; /* buffer size */ } FILE;
extern FILE _iob[];
extern int cdecl _filbuf(struct file *f); extern void cdecl _xfilbuf(struct file *f); extern int cdecl _flsbuf(unsigned int c,struct file *f); extern int cdecl fflush(struct file *f); extern int cdecl fclose(struct file *f); extern long cdecl ftell(struct file *f); extern int cdecl fseek(struct file *f,long lfa,int mode); extern int cdecl fgetc(struct file *f); extern int cdecl fputc(unsigned int c,struct file *f); extern int cdecl fputs(char *s,struct file *f); extern int cdecl fread(void *pobj, unsigned int cbobj, unsigned int nobj, struct file *f); extern int cdecl fwrite(char *pobj,int cbobj,int nobj,struct file *f); extern int cdecl ungetc(int c,struct file *f); extern void cdecl FlsStdio(void); extern struct file * cdecl fopen(char *name,char *mode); extern struct file * cdecl fdopen(int fh,char *mode); extern int cdecl setvbuf(struct file *fh,char *buf,int type,int size);
#define stdin (&_iob[0])
#define stdout (&_iob[1])
#define stderr (&_iob[2])
#define getc(p) (--(p)->_cnt>=0? *(p)->_ptr++&0377:_filbuf(p))
#define putc(x,p) (--(p)->_cnt>=0? ((int)(*(p)->_ptr++=(char)(unsigned)(x))):_flsbuf((unsigned)(x),p))
#define feof(p) (((p)->_flag&_IOEOF)!=0)
#define ferror(p) (((p)->_flag&_IOERR)!=0)
#define fileno(p) ((p)->_file)
// The following functions are comming from standard C run-time library
#if defined( _WIN32 )
#ifndef _VA_LIST_DEFINED
#ifdef _M_ALPHA
typedef struct { char *a0; /* pointer to first homed integer argument */ int offset; /* byte offset of next parameter */ } va_list; #else
typedef char * va_list; #endif
#define _VA_LIST_DEFINED
#endif
#endif
extern int cdecl sprintf(char *buf, const char *fmt, ...); extern int cdecl vsprintf(char *buf, const char *fmt, va_list pArgs);
//
// DLH Can't use fprintf or vfprintf from MSVCRT.DLL, since the FILE structure
// is too different. Implemented in stdio20.c instead.
//
extern int cdecl fprintf(struct file *f, const char *fmt, ...); extern int cdecl vfprintf(struct file *f, const char *fmt, va_list pArgs);
|