/* This file is part of the AHCC C Library. The AHCC C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. The AHCC C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* stdio.h */ #if !defined( __STDIO_H_ ) #define __STDIO_H_ #include #if !defined( __STDDEF ) #include #endif typedef unsigned long fpos_t; #include /* old typedef struct { short _cnt; /* # of bytes in buffer */ unsigned char *_ptr; /* current buffer pointer */ unsigned char *_base; /* base of file buffer */ unsigned short _flag; /* file status flags */ short _file; /* file handle */ size_t _bsiz; /* buffer size */ unsigned char _ch; /* tiny buffer, for "unbuffered" i/o */ } FILE; */ /* Try to make Pure C and AHCC FILE structure alike */ typedef struct { unsigned char *BufPtr; /* current buffer pointer */ long _cnt; /* # of bytes in buffer */ unsigned char *BufStart; /* base of file buffer */ size_t _bsiz; /* buffer size */ short Handle; /* file handle */ unsigned char Flags,Mode; /* file status flags, file mode */ unsigned char ChrBuf; /* tiny buffer, for "unbuffered" i/o */ char ungetFlag; } FILE; typedef short InFunc(void *ip); typedef short OutFunc(char c, void *op); typedef short UnFunc(short c, void *ip); /****** FileIo constants ************************************************/ #define OPEN_MAX 32 #define FOPEN_MAX 32 #define FILENAME_MAX 128 #define PATH_MAX 132 #define BUFSIZ 1024 #define EOF (-1) /* end of file */ #undef EOS #define EOS '\0' /* end-of-string indicator */ #define O_RDONLY 0x00 #define O_WRONLY 0x01 #define O_RDWR 0x02 #define O_APPEND 0x08 #define O_CREAT 0x20 #define O_TRUNC 0x40 #define O_EXCL 0x80 #define SEEK_SET 0 #define SEEK_CUR 1 #define SEEK_END 2 #define TMP_MAX 65535 #define L_tmpnam 13 /* Mode flags */ #define _IOFBF 0 /* full buffering */ #define _IOLBF 1 /* line buffering */ #define _IONBF 2 /* no buffering */ extern FILE _iob[]; /* standard streams */ #define stdin (&_StdInF) #define stdout (&_StdOutF) #define stderr (&_StdErrF) #define stdprn (&_StdPrnF) #define stdaux (&_StdAuxF) /* External data */ extern FILE _StdInF; extern FILE _StdOutF; extern FILE _StdErrF; extern FILE _StdPrnF; extern FILE _StdAuxF; /* StreamIO routines */ FILE * fopen ( const char *filename, const char *mo ); FILE * freopen ( const char *filename, const char *mo, FILE *stream ); FILE * tmpfile ( void ); void clearerr ( FILE *stream ); short fclose ( FILE *stream ); short feof ( FILE *stream ); short ferror ( FILE *stream ); short fflush ( FILE *stream ); short fgetc ( FILE *stream ); short fgetpos ( FILE *stream, fpos_t *pos ); short fprintf ( FILE *stream, const char *format, ... ); short d_fprintf ( FILE *stream, const char *format, ... ); short fscanf ( FILE *stream, const char *format, ... ); short fseek ( FILE *stream, long offset, short mo ); void rewind ( FILE *stream); short fsetpos ( FILE *stream, const fpos_t *pos ); long ftell ( FILE *stream ); void setbuf ( FILE *stream, void *buf ); short setvbuf ( FILE *stream, void *, short , size_t ); short vfprintf ( FILE *stream, const char *format, va_list param ); short vfscanf ( FILE *stream, const char *format, va_list param ); short fileno ( FILE *stream ); size_t fread ( void *buf, size_t elem_Siz, size_t count, FILE *stream ); char * fgets ( char *str, short n, FILE *stream ); size_t fwrite ( const void *buf, size_t elem_Siz, size_t count, FILE *stream ); short fputc ( short ch, FILE *stream ); short fputs ( const char *str, FILE *stream ); /* other IO routines */ char * gets ( char *str ); void perror ( char *s ); void perrorf (char *fmt, ...); short d_printf ( const char *format, ... ); /* HR used when debugging */ short printf ( const char *format, ... ); short puts ( const char *str ); short scanf ( const char *format, ... ); short sprintf ( char *string, const char *format, ... ); short sscanf ( const char *string, const char *format, ... ); char * tmpnam ( char *s ); short vprintf ( const char *format, va_list param ); short vsprintf ( char *string, const char *format, va_list param ); short vscanf ( const char *format, va_list param ); short vsscanf ( char *string, const char *format, va_list param ); /* FileIo macros */ #define getc( c ) fgetc( c ) #define getchar() fgetc( stdin ) #define ungetchar( c) fungetc(c, stdin) #define putc( c, s ) fputc( c, s ) #define putchar( c ) fputc( c, stdout ) #define exists(f ) access( f, 0x00 ) /* GEMDOS Handle level FileIO routines */ short open ( const char *filename, short access, ... ); short close ( short handle ); short creat ( const char *filename, ...); size_t read ( short handle, void *buf, size_t nbyte ); size_t write ( short handle, const void *buf, size_t nbyte ); size_t lseek ( short handle, size_t offset, short mo ); short remove ( const char *filename ); short unlink ( const char *filename ); short rename ( const char *oldname, const char *newname ); /* In dlibs, not in PC */ FILE * fopenp ( const char *filename, const char *mode ); FILE * fdopen ( short h, const char *mode ); char * fullpath ( char *full, const char *part ); char * findfile ( const char *afn, const char *ext ); char * pfindfile ( const char *path, const char *afn, const char *ext ); short fungetc ( short c, FILE *fp ); short ungetc ( short c, FILE *fp ); short cprintf ( const char *fmt, ... ); void cputs ( char *data ); short getw ( FILE *fp ); short putw ( short n, FILE *fp ); long getl ( FILE *fp); long putl ( long n, FILE *fp ); size_t tell ( short h ); short rmdir ( const char *pathname ); short mkdir ( const char *pathname ); short dup ( short handle); short dup2 ( short handle1, short handle2 ); short _tttty ( FILE *fp ); char *_splitpath ( const char *src, char *drive, char *path, char *file, char *ext ); short printf_dmode( short ); #ifndef ERROR #define ERROR (-1) /* general error condition */ #endif #endif