/*
Copyright (c) 1993 Xerox Corporation. All rights reserved.
*/
/*
$Id$
$Date$
*/
/* Chauser, October 28, 1993 3:30 pm PDT */
/*
* stdio.h --
*
* This header file declares the stdio library facilities. They
* provide a general stream facility and routines for formatted
* input and output.
*
* Copyright 1986, 1988 Regents of the University of California
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies. The University of California
* makes no representations about the suitability of this
* software for any purpose. It is provided "as is" without
* express or implied warranty.
*
* $Header: /sprite/src/lib/include/RCS/stdio.h,v 1.19 90/06/27 13:29:57 shirriff Exp $ SPRITE (Berkeley)
*/
/*
* PCR stdio.h
*/
#ifndef ←←PCR←stdio←h
#define ←←PCR←stdio←h
#include <config/PCR←StdTypes.h>
#include <stdarg.h>
#include <stddef.h>
#define FILE struct PCR←Stdio←StreamRep
typedef unsigned long fpos←t;
#ifndef EOF
#define EOF (-1)
#endif
#ifndef NULL
# error NULL not in stddef
#endif
/*
* Mode for setvbuf:
*/
#define ←IOFBF 0 /* default must be 0 */
#define ←IOLBF 1
#define ←IONBF 2
/*
* Relative position indicator for fseek:
*/
#ifndef SEEK←SET
# define SEEK←SET 0
# define SEEK←CUR 1
# define SEEK←END 2
#endif
/*
* Directory for tmpnam
*/
#define P←tmpdir "/usr/tmp"
/*
* Limits
*/
#define BUFSIZ 4096
#define FOPEN←MAX 10 /* ??? */
#define FILENAME←MAX 1024 /* ??? */
#define TMP←MAX 1000 /* ??? */
#define L←tmpnam 48
/*
* File operations (4.9.4)
*/
extern int PCR←remove(const char *filename);
extern int PCR←rename(const char *old, const char *new);
extern FILE *PCR←tmpfile(void);
extern char *PCR←tmpnam(char *s);
#ifndef PCR←NO←RENAME
# undef remove
# define remove PCR←remove
# undef rename
# define rename PCR←rename
# undef tmpfile
# define tmpfile PCR←tmpfile
# undef tmpnam
# define tmpnam PCR←tmpnam
#endif /* !PCR←NO←RENAME */
/*
* File access functions (4.9.5)
*/
extern int PCR←fclose(FILE *stream);
extern int PCR←fflush(FILE *stream);
extern FILE *PCR←fopen(const char *filename, const char *mode);
extern FILE *PCR←freopen(
const char *filename, const char *mode, FILE *stream);
extern FILE *PCR←fdopen(int fd, const char *mode);
/* not ANSI */
extern FILE *PCR←fdreopen(int fd, const char *mode, FILE *stream);
/* not ANSI */
extern int PCR←fileno(FILE *stream);
/* not ANSI */
extern void PCR←setbuf(FILE *stream, char *buf);
extern int PCR←setvbuf(FILE *stream, char *buf, int mode, size←t size);
#ifndef PCR←NO←RENAME
# undef fclose
# define fclose PCR←fclose
# undef fflush
# define fflush PCR←fflush
# undef fopen
# define fopen PCR←fopen
# undef freopen
# define freopen PCR←freopen
# undef fdopen
# define fdopen PCR←fdopen
# undef fdreopen
# define fdreopen PCR←fdreopen
# undef fileno
# define fileno PCR←fileno
# undef setbuf
# define setbuf PCR←setbuf
# undef setvbuf
# define setvbuf PCR←setvbuf
#endif /* !PCR←NO←RENAME */
/*
* Formatted input/output functions (4.9.6)
*/
extern int PCR←fprintf(FILE *stream, const char *format, ...);
extern int PCR←fscanf(FILE *stream, const char *format, ...);
extern int PCR←printf(const char *format, ...);
extern int PCR←scanf(const char *format, ...);
extern int PCR←sprintf(char *s, const char *format, ...);
extern int PCR←sscanf(const char *s, const char *format, ...);
extern int PCR←vfprintf(FILE *stream, const char *format, va←list arg);
extern int PCR←vprintf(const char *format, va←list arg);
extern int PCR←vsprintf(char *s, const char *format, va←list arg);
extern int PCR←vfscanf(FILE *stream, const char *format, va←list arg);
/* not ANSI */
#ifndef PCR←NO←RENAME
# undef fprintf
# define fprintf PCR←fprintf
# undef fscanf
# define fscanf PCR←fscanf
# undef printf
# define printf PCR←printf
# undef scanf
# define scanf PCR←scanf
# undef sprintf
# define sprintf PCR←sprintf
# undef sscanf
# define sscanf PCR←sscanf
# undef vfprintf
# define vfprintf PCR←vfprintf
# undef vprintf
# define vprintf PCR←vprintf
# undef vsprintf
# define vsprintf PCR←vsprintf
# undef vfscanf
# define vfscanf PCR←vfscanf
#endif /* !PCR←NO←RENAME */
/*
* Character input/output functions (4.9.7)
*/
extern int PCR←fgetc(FILE *stream);
extern char * PCR←fgets(char *s, int n, FILE *stream);
extern int PCR←fputc(int c, FILE *stream);
extern int PCR←fputs(const char *s, FILE *stream);
extern int PCR←getc(FILE *stream);
#define PCR←getc(stream) PCR←Stdio←GetCMacro(stream)
extern int PCR←getchar(void);
#define PCR←getchar() PCR←getc(PCR←stdin)
extern char * PCR←gets(char *s);
extern int PCR←putc(int c, FILE *stream);
#define PCR←putc(c,stream) PCR←Stdio←PutCMacro(c,stream)
extern int PCR←putchar(int c);
#define PCR←putchar(c) PCR←putc((c),PCR←stdout)
extern int PCR←puts(const char *s);
extern int PCR←ungetc(int c, FILE *stream);
#ifndef PCR←NO←RENAME
# undef fgetc
# define fgetc PCR←fgetc
# undef fgets
# define fgets PCR←fgets
# undef fputc
# define fputc PCR←fputc
# undef fputs
# define fputs PCR←fputs
# undef getc
# define getc PCR←getc
# undef getchar
# define getchar PCR←getchar
# undef gets
# define gets PCR←gets
# undef putc
# define putc PCR←putc
# undef putchar
# define putchar PCR←putchar
# undef puts
# define puts PCR←puts
# undef ungetc
# define ungetc PCR←ungetc
#endif /* !PCR←NO←RENAME */
/*
* Direct input/output functions (4.9.8)
*/
extern size←t PCR←fread(
void *ptr, size←t size, size←t nmemb, FILE *stream);
extern size←t PCR←fwrite(
const void *ptr, size←t size, size←t nmemb, FILE *stream);
#ifndef PCR←NO←RENAME
# undef fread
# define fread PCR←fread
# undef fwrite
# define fwrite PCR←fwrite
#endif /* !PCR←NO←RENAME */
/*
* File positioning functions (4.9.9)
*/
extern int PCR←fgetpos(FILE *stream, fpos←t *pos);
extern int PCR←fseek(FILE *stream, long offset, int whence);
extern int PCR←fsetpos(FILE *stream, const fpos←t *fpos);
extern long PCR←ftell(FILE *stream);
extern void PCR←rewind(FILE *stream);
#ifndef PCR←NO←RENAME
# undef fgetpos
# define fgetpos PCR←fgetpos
# undef fseek
# define fseek PCR←fseek
# undef fsetpos
# define fsetpos PCR←fsetpos
# undef ftell
# define ftell PCR←ftell
# undef rewind
# define rewind PCR←rewind
#endif /* !PCR←NO←RENAME */
/*
* Error handling functions (4.9.10)
*/
extern void PCR←clearerr(FILE *stream);
extern void PCR←seterr(FILE *stream, int err);
/* not ANSI */
extern int PCR←feof(FILE *stream);
extern int PCR←ferror(FILE *stream);
extern void PCR←perror(const char *s);
#ifndef PCR←NO←RENAME
# undef clearerr
# define clearerr PCR←clearerr
# undef seterr
# define seterr PCR←seterr
# undef feof
# define feof PCR←feof
# undef ferror
# define ferror PCR←ferror
# undef perror
# define perror PCR←perror
#endif /* !PCR←NO←RENAME */
/*
************************************************************************
*
* Implementation details
*
************************************************************************
*/
struct PCR←Stdio←StreamRep {
void * str←procs;
FILE *str←next;
FILE *str←prev;
int str←flags;
int str←status;
PCR←Bool str←eof;
int str←readCount;
unsigned char *str←readPtr;
int str←writeCount;
unsigned char *str←writePtr;
unsigned char * str←vbuf;
int str←vbufSize;
int str←vbufMode;
PCR←Any str←clientData;
};
typedef FILE PCR←Stdio←Stream;
#define PCR←Stdio←GetCMacro(stream) \
( ((stream)->str←readCount <= 0) \
? PCR←fgetc(stream) \
: ( ((stream)->str←readCount--), \
*(((stream)->str←readPtr)++) ) )
#define PCR←Stdio←PutCMacro(c,stream) \
( ((stream)->str←writeCount <= 1) \
? PCR←fputc((c),(stream)) \
: ( ((stream)->str←writeCount--), \
(*(((stream)->str←writePtr)++) = (c)) ) )
/*
* Handles for standard input and output streams.
*
* All threads share the same streams, but they actually
* behave as if they were per-thread.
*/
#define PCR←Stdio←numStdStreams 3
PCR←Stdio←Stream PCR←Stdio←stdStreams[PCR←Stdio←numStdStreams];
#define PCR←stdin &(PCR←Stdio←stdStreams[0])
#define PCR←stdout &(PCR←Stdio←stdStreams[1])
#define PCR←stderr &(PCR←Stdio←stdStreams[2])
#ifndef PCR←NO←RENAME
# define stdin PCR←stdin
# define stdout PCR←stdout
# define stderr PCR←stderr
#endif
#endif /* ←←PCR←stdio←h */
/*
$Log$
*/