home *** CD-ROM | disk | FTP | other *** search
- // This may look like C code, but it is really -*- C++ -*-
- /*
- Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
- This file is part of the GNU C++ Library. This 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. This 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 this library; if not, write to the Free Software
- Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
- /*
- * Please check the following before installing this file:
- *
- * Make sure USG is #defined if you are on a USG system!
- *
- * Check the value of _NFILE against the one in your /usr/include/stdio.h.
- * (USG only)
- *
- * Check whether your libc.a sprintf function returns
- * an int (as do most) versus a char* (BSD), and (un)comment
- * the corresponding SPRINTF_RETURNS_INT line.
- *
- * Check the value of BUFSIZ against the one in your /usr/include/stdio.h.
- *
- * Carefully check the fields and order of _iobuf declaration against
- * the one in your /usr/include/stdio.h. Xenix-based systems
- * may need some re-ordering of _iobuf. fields.
- *
- * Note that some _IOXXX #defines may not be present in your
- * /usr/include/stdio.h. This is ok, so long as the ones that
- * are present in both are set to the same values.
- *
- * Some of the prototypes refer to functions that may not be
- * present in your libc.a. This is ok so long as you do not
- * actually call such functions.
- *
- */
-
- #ifndef _stdio_h
- #ifdef __GNUG__
- #pragma once
- #pragma interface
- #endif
- #define _stdio_h 1
-
- /*
- HAVE_VPRINTF should be set if vprintf is in libc.a
- HAVE_SETVBUF should be set if setvbuf is in libc.a
- HAVE_SETLINEBUF should be set if setlinebuf in libc.a
-
- The following are probably correct for the listed systems
-
- */
-
- #ifdef SYSTEM_FIVE
- #define USG
- #endif
-
- #if defined(USG)
- #define HAVE_VPRINTF
- #define HAVE_SETVBUF
- //#define HAVE_SETLINEBUF
-
- #elif defined(VMS)
- #define HAVE_VPRINTF
- #define HAVE_SETVBUF
- //#define HAVE_SETLINEBUF
- #define NO_LIBGXX_MALLOC
- #define _NFILE 20
- #define IOBUF_FLAG_TYPE char
- #define IOBUF_BUFSIZ_FIELD /* we aint got one either*/
-
- #elif masscomp
- #ifndef _NFILE
- #define _NFILE 40
- #endif
- #ifdef _ATT
- #define HAVE_VPRINTF
- #define HAVE_SETVBUF
- #define USG
- #endif
- #ifdef _UCB
- #undef HAVE_VPRINTF
- #undef HAVE_SETLINEBUF
- #define IOBUF_BUFSIZ_FIELD
- #endif
-
- #elif defined(vax) || defined(sony)
- //#define HAVE_VPRINTF
- //#define HAVE_SETVBUF
- #define HAVE_SETLINEBUF
-
- #elif defined(sun)
- #define HAVE_VPRINTF
- #define HAVE_SETVBUF
- #define HAVE_SETLINEBUF
-
- #elif defined(sequent)
- //#define HAVE_VPRINTF
- //#define HAVE_SETVBUF
- #define HAVE_SETLINEBUF
-
- #elif defined(DGUX)
- #define HAVE_VPRINTF
- #define HAVE_SETVBUF
- #define HAVE_SETLINEBUF
- #define IOBUF_FLAG_TYPE int
- #define IOBUF_FILE_TYPE int
- #define _NFILE 64
- #define IOBUF_EXTRA_FIELDS int _reserve[27];
- #define SPRINTF_RETURNS_INT
- #define BUFEND_ENTRY_TYPE unsigned char *
- #define USG
-
- #elif defined(TEKTRONIX_SYSV) || defined(hp9000s300) || defined(i386)
- #define HAVE_VPRINTF
- #define HAVE_SETVBUF
- //#define HAVE_SETLINEBUF
- #define USG
-
- #elif defined(convex)
- //#define HAVE_VPRINTF
- //#define HAVE_SETVBUF
- #define HAVE_SETLINEBUF
- #define IOBUF_FILE_TYPE unsigned char
- #define HAVE_VOID_DOPRNT
-
- #elif defined(atarist)
- #include <compiler.h>
-
- #ifndef _SIZE_T
- #define _SIZE_T __SIZE_TYPEDEF__
- typedef _SIZE_T size_t;
- #endif
-
- /* object of type capable of recording uniquely every position in a file */
- typedef unsigned long fpos_t;
-
- #define HAVE_VSCANF
- #define HAVE_VPRINTF
- #define HAVE_SETVBUF
- #define HAVE_SETLINEBUF
- #define IOBUF_FLAG_TYPE unsigned int
- #define IOBUF_FILE_TYPE int
- #define IOBUF_BUFSIZ_FIELD long _bsiz;
- #define IOBUF_EXTRA_FIELDS unsigned char _ch;
- #define _NFILE (20)
- #define SPRINTF_RETURNS_INT
- #ifndef NULL
- # ifdef __MSHORT__
- # define __NULL ((void *)0)
- # else
- /* avoid complaints about misuse of NULL :-)*/
- # define __NULL (0)
- # endif
- #endif
- #define L_tmpnam 128
- #define TMP_MAX 100
- #ifndef NO_LIBGXX_MALLOC
- # define NO_LIBGXX_MALLOC
- #endif
-
- #endif /* atarist */
-
- #ifdef hpux
- #define IOBUF_FLAG_TYPE short
- #endif
-
- #ifdef i386
- #define IOBUF_FLAG_TYPE char
- #endif
-
- #ifdef USG
- #define IOBUF_BUFSIZ_FIELD /* System V ain't got one */
- #endif
-
- /* Some default definitions for things not defined machine-specifically
- above. */
-
- #ifndef IOBUF_BUFSIZ_FIELD
- #define IOBUF_BUFSIZ_FIELD int _bufsiz;
- #endif
-
- #ifndef IOBUF_FLAG_TYPE
- #define IOBUF_FLAG_TYPE short
- #endif
-
- #ifndef IOBUF_FILE_TYPE
- #define IOBUF_FILE_TYPE char
- #endif
-
- #ifndef IOBUF_EXTRA_FIELDS
- #define IOBUF_EXTRA_FIELDS
- #endif
-
- #if defined(USG) && !defined(_NFILE)
- #ifdef hpux
- #define _NFILE 60
- #elif
- #define _NFILE 20
- #endif
- #endif
-
- #ifdef USG
- #define _bufend(p) _bufendtab[(p)->_file]
- #define _bufsiz(p) (_bufend(p) - (p)->_base)
- #ifndef BUFEND_ENTRY_TYPE
- #define BUFEND_ENTRY_TYPE char *
- #endif
- extern "C" {
- BUFEND_ENTRY_TYPE _bufendtab[];
- }
- #endif
-
- /* check this -- hardly any systems need this these days */
- /* #define SPRINTF_RETURNS_INT */
-
- /* check and possibly redefine the following */
-
- #ifndef VMS
- #define BUFSIZ ((size_t)1024)
- #else
- #define BUFSIZ 512
- #endif
-
- #ifdef masscomp
- extern struct _iobuf {
- #ifdef BUFSIZ
- # undef BUFSIZ
- #endif
- #define BUFSIZ 4096
-
- #ifdef mc68000
- unsigned char* _ptr;
- int _cnt;
- #endif
- char* _base;
- IOBUF_BUFSIZ_FIELD
- IOBUF_FLAG_TYPE _flag;
- IOBUF_FILE_TYPE _file;
- IOBUF_EXTRA_FIELDS
- } _iob[];
- #else /* not masscomp */
- #ifdef atarist
- # ifdef BUFSIZ
- # undef BUFSIZ
- # endif
- # define BUFSIZ ((size_t)1024)
- extern "C" { extern unsigned long __DEFAULT_BUFSIZ__; }
- extern struct _iobuf {
- long _cnt;
- unsigned char *_ptr;
- unsigned char *_base;
- IOBUF_FLAG_TYPE _flag;
- IOBUF_FILE_TYPE _file;
- IOBUF_BUFSIZ_FIELD
- IOBUF_EXTRA_FIELDS
- } _iob[];
- #else /* not atarist */
- extern struct _iobuf {
- int _cnt;
- char* _ptr;
- char* _base;
- IOBUF_BUFSIZ_FIELD
- IOBUF_FLAG_TYPE _flag;
- IOBUF_FILE_TYPE _file;
- IOBUF_EXTRA_FIELDS
- } _iob[];
- #endif /* not atari */
- #endif /* not masscomp */
-
- #ifndef VMS
- typedef struct _iobuf FILE;
- #else
- typedef struct _iobuf *FILE;
- typedef FILE *VMS_FILE;
- #endif
-
- #ifndef atarist
- #define _IOFBF 00000
- #define _IOREAD 00001
- #define _IOWRT 00002
- #define _IONBF 00004
- #define _IOMYBUF 00010
- #define _IOEOF 00020
- #define _IOERR 00040
- #if defined(USG) && !defined(hpux)
- #define _IOSTRG 00000 /* faked out for USG */
- #define _IOLBF 00100
- #define _IORW 00200
- #define _IOAPPEND 00000 /* faked out for USG */
- #elif defined(masscomp)
- #define _IOSTRG 0x00 /* not used in this version of stdio */
- #ifdef _IOERR
- # undef _IOERR
- #endif
- #define _IOERR 0x40 /* i/o error on buffer */
- #define _IOLBF 0x80 /* buffering is by line */
- #define _IORW 0x100 /* read or write ok */
- #define _IOAPPEND 0x00 /* not used in this version of stdio */
- #elif defined(hpux)
- #define _IOSTRG 00000 /* faked out for USG */
- #define _IOLBF 00200
- #define _IORW 00400
- #define _IOAPPEND 00000 /* faked out for USG */
- #elif defined(VMS)
- #define _IOSTRG 0100 /* Doing I/O to a string */
- #define _IORW 0200 /* Open for read/write */
- #define _IOAPPEND 00 /* VMS does not actually have this */
- #else
- #define _IOSTRG 00100
- #define _IOLBF 00200
- #define _IORW 00400
- #define _IOAPPEND 01000
- #endif
- #ifdef DGUX
- #define _IOPBF 00400 /* Boolean - ungetc() not called since fill/flush */
- #endif
- #else /* atarist */
- #define _IOREAD 0x0001 /* file may be read from */
- #define _IOWRT 0x0002 /* file may be written to */
- #define _IOBIN 0x0004 /* file is in "binary" mode */
- #define _IODEV 0x0008 /* file is a character device */
- #define _IORW 0x0080 /* file is open for update (r+w) */
- #define _IOFBF 0x0100 /* i/o is fully buffered */
- #define _IOLBF 0x0200 /* i/o is line buffered */
- #define _IONBF 0x0400 /* i/o is not buffered */
- #define _IOMYBUF 0x0800 /* standard buffer */
- #define _IOEOF 0x1000 /* EOF has been reached */
- #define _IOERR 0x4000 /* an error has occured */
- #define _IOSTRING 0x8000 /* really a string buffer */
- #define _IOSTRG _IOSTRING
- #define _IOAPPEND 0 /* fake */
- #endif /* atarist */
-
- #define EOF (-1)
-
- #ifndef NULL
- #define NULL 0
- #endif
-
- #ifndef VMS
- #define stdin (&_iob[0])
- #define stdout (&_iob[1])
- #define stderr (&_iob[2])
-
- #ifndef atarist
- #define getc(p) (--(p)->_cnt>=0?(int)(*(unsigned char*)(p)->_ptr++):_filbuf(p))
- #define putc(x,p) (--(p)->_cnt>=0? ((int)((unsigned char)((*(p)->_ptr++=(unsigned)(x))))):_flsbuf((unsigned)(x),p))
- #else
- #define getc fgetc
- #define putc fputc
- #define ungetc fungetc
- #define ungetchar(c) fungetc((c), stdin)
- #endif
-
- #ifdef atarist
- #define clearerr(p) ((void) ((p)->_flag &= ~(_IOERR|_IOEOF)))
- #else
- #define clearerr(p) ((p)->_flag &= ~(_IOERR|_IOEOF))
- #endif
- #define getchar() getc(stdin)
- #define putchar(x) putc(x,stdout)
- #define feof(p) (((p)->_flag&_IOEOF)!=0)
- #define ferror(p) (((p)->_flag&_IOERR)!=0)
- #define fileno(p) ((p)->_file)
-
- #else
-
- #undef _IOFBF
- #define _IOLBF 1
- #define _IOFBF 2
- #define F_RDLCK
- /* Also, stdin/stdout/stderr need to be defined
- * [We also use a hack here that makes the GCC assembler modify
- * the psect attributes to match those of the VAX-11 "C" runtime]
- */
- #define stdin $$PsectAttributes_NOSHR$$stdin
- #define stdout $$PsectAttributes_NOSHR$$stdout
- #define stderr $$PsectAttributes_NOSHR$$stderr
-
- extern VMS_FILE stdin;
- extern VMS_FILE stdout;
- extern VMS_FILE stderr;
-
- // Define the stdio macros
-
- #define getc(p) fgetc(p)
- #define getchar() fgetc(stdin)
- #define putc(x,p) fputc(x,p)
- #define putchar(x) fputc(x,stdout)
- #define feof(p) (((*p)->_flag&_IOEOF)!=0)
- #define ferror(p) (((*p)->_flag&_IOERR)!=0)
- #define fileno(p) ((*p)->_file)
- #define clearerr(p) ((*p)->_flag &= ~(_IOERR|_IOEOF))
-
- #endif
-
- extern "C" {
-
- #ifndef atarist
- #ifdef VMS
- int c$$doprint(const char*, void*, FILE*);
- int c$$doscan(FILE*, const char*, ...);
- int c$$filbuf(FILE*);
- int c$$flsbuf(unsigned, FILE*);
- #else
- int _doprnt(const char*, void*, FILE*);
- int _doscan(FILE*, const char*, ...);
- int _filbuf(FILE*);
- int _flsbuf(unsigned, FILE*);
- #endif
- int fclose(FILE*);
- FILE* fdopen(int, const char*);
- int fflush(FILE*);
- int fgetc(FILE*);
- char* fgets(char*, int, FILE *);
- FILE* fopen(const char*, const char*);
- int fprintf(FILE*, const char* ...);
- int fputc(int, FILE*);
- int fputs(const char*, FILE*);
- int fread(void*, int, int, FILE*);
- #ifdef VMS
- FILE* freopen(const char*, const char*, FILE* ...);
- #else
- FILE* freopen(const char*, const char*, FILE*);
- #endif
- int fscanf(FILE*, const char* ...);
- int fseek(FILE*, long, int);
- long ftell(FILE *);
- int fwrite(const void*, int, int, FILE*);
- char* gets(char*);
- int getw(FILE*);
- int pclose(FILE*);
- FILE* popen(const char*, const char*);
- int printf(const char* ...);
- int puts(const char*);
- int putw(int, FILE*);
- int rewind(FILE*);
- int scanf(const char* ...);
- int setbuf(FILE*, char*);
- int setbuffer(FILE*, char*, int);
- int setlinebuf(FILE*);
- int setvbuf(FILE*, char*, int, int);
- int sscanf(char*, const char* ...);
- FILE* tmpfile();
- int ungetc(int, FILE*);
- int vfprintf(FILE*, const char*, ...);
-
- // Third arg to vprintf must be '...' for some machines, & doesn't
- // hurt for others.
-
- int vprintf(const char*, ... );
-
- #ifdef SPRINTF_RETURNS_INT
- int sprintf(char*, const char* ...);
- int vsprintf(char*, const char*, ...);
- #else
- char* sprintf(char*, const char* ...);
- char* vsprintf(char*, const char*, ...);
- #endif
-
- #else /* atarist */
- int remove (const char *filename);
- int rename (const char *_oldname, const char *_newname);
-
- FILE *tmpfile (void);
- char *tmpnam (char *buf);
-
- int fclose (FILE *fp);
- int fflush (FILE *fp);
-
- FILE *fopen (const char *filename, const char *mode);
- FILE *freopen (const char *filename, const char *mode, FILE *fp);
-
- void setbuf (FILE *fp, char *buf);
- int setvbuf (FILE *fp, char *bp, int bmode, size_t size);
-
- int fprintf (FILE *fp, const char *fmt, ...);
- int printf (const char *fmt, ...);
- int sprintf (char *buf, const char *fmt, ...);
-
- int fscanf (FILE *fp, const char *fmt, ...);
- int scanf (const char *fmt, ...);
- int sscanf (const char *buf, const char *fmt, ...);
-
- int vfprintf (FILE *, const char *, __VA_LIST__);
- int vprintf (const char *, __VA_LIST__);
- int vsprintf (char *, const char *, __VA_LIST__);
-
- int vfscanf (FILE *, const char *, __VA_LIST__);
- int vscanf (const char *, __VA_LIST__);
- int vsscanf (const char *, const char *, __VA_LIST__);
-
- int fgetc (FILE *fp);
- char *fgets (char *data, int limit, FILE *fp);
- char *gets (char *data);
-
- int fputc (int c, FILE *fp);
- int fputs (const char *data, FILE *fp);
- int puts (const char *data);
- int fungetc (int c, FILE *fp);
-
- size_t fread (void *data, size_t size, size_t count, FILE *fp);
- size_t fwrite (const void *data, size_t size, size_t count, FILE *fp);
-
- int fgetpos (FILE *fp, fpos_t *pos);
- int fsetpos (FILE *fp, fpos_t *pos);
-
- long ftell (FILE *fp);
- void rewind (FILE *fp);
- int fseek (FILE *fp, long offset, int origin);
-
- void perror (const char *msg);
-
- #ifndef __STRICT_ANSI__
- FILE *fdopen (int h, const char *mode);
- FILE *popen (const char *command, const char *type);
- int pclose (FILE *fp);
- # ifndef _POSIX_SOURCE
- void _binmode (int force);
- long getl (FILE *fp);
- long putl (long n, FILE *fp);
-
- short getw (FILE *fp);
- short putw (short n, FILE *fp);
- #endif
- #endif
- int _filbuf (FILE *); /* needed for getc */
- #endif /* atarist */
-
- }
-
- #ifndef L_ctermid
- #define L_ctermid 9
- #endif
- #ifndef L_cuserid
- #define L_cuserid 9
- #endif
- #ifndef P_tmpdir
- #define P_tmpdir "/tmp/"
- #endif
- #ifndef L_tmpnam
- #define L_tmpnam (sizeof(P_tmpdir) + 15)
- #endif
-
- extern FILE* log_file;
-
- #endif // _stdio_h
-