home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Computer Club Elmshorn Atari PD
/
CCE_PD.iso
/
pc
/
0400
/
CCE_0423.ZIP
/
CCE_0423.PD
/
GPINCL13.ZOO
/
stdio.h
< prev
next >
Wrap
C/C++ Source or Header
|
1992-04-02
|
14KB
|
558 lines
// 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