246 lines
6.7 KiB
C++
246 lines
6.7 KiB
C++
/* Release 3.10 */
|
|
/*-------------------------------------------------------------------------*
|
|
* *
|
|
* STREAM.HPP - header file for AT&T v1.2 stream input and output. *
|
|
* *
|
|
* COPYRIGHT (C) 1990..1992 Clarion Software Corporation *
|
|
* All Rights Reserved *
|
|
* *
|
|
*--------------------------------------------------------------------------*/
|
|
#include <stdepoc.h>
|
|
|
|
#ifndef __STREAM_INC_
|
|
#define __STREAM_INC_
|
|
|
|
#include <stdio.h>
|
|
|
|
#pragma save
|
|
#pragma name(prefix=>"__o__")
|
|
|
|
struct whitespace {
|
|
char x;
|
|
};
|
|
|
|
extern struct whitespace WS;
|
|
|
|
class istream;
|
|
class ostream;
|
|
|
|
class streambuf {
|
|
|
|
friend istream;
|
|
friend ostream;
|
|
|
|
protected:
|
|
|
|
FILE *file;
|
|
char *base;
|
|
char *pptr;
|
|
char *gptr;
|
|
char *eptr;
|
|
int didalloc;
|
|
|
|
virtual int overflow(int = EOF );
|
|
virtual int underflow();
|
|
|
|
int allocate();
|
|
streambuf * setbuf(char *, int , unsigned = 0);
|
|
|
|
virtual void terminate();
|
|
|
|
public:
|
|
streambuf() { file=0; didalloc=0; base=pptr=gptr=eptr=NULL; }
|
|
streambuf(char *buf, int len) { file=0; didalloc=0; setbuf(buf, len); }
|
|
virtual ~streambuf();
|
|
|
|
virtual int snextc();
|
|
virtual int sputc(int);
|
|
virtual void sputbackc(char);
|
|
|
|
};
|
|
|
|
enum open_mode {
|
|
input,
|
|
output,
|
|
append
|
|
};
|
|
|
|
class filebuf : public streambuf {
|
|
|
|
private:
|
|
|
|
int fd;
|
|
int isopen;
|
|
|
|
protected:
|
|
|
|
void terminate();
|
|
|
|
public:
|
|
|
|
filebuf() { isopen=0; fd=0; }
|
|
filebuf(FILE *);
|
|
filebuf(int);
|
|
filebuf(int, char *, int);
|
|
~filebuf() { close(); }
|
|
|
|
filebuf* open(char *, int);
|
|
int close();
|
|
int snextc() { return ::fgetc(file); }
|
|
int sputc(int _c) { return ::fputc(_c, file); }
|
|
void sputbackc(char _c) { (void) :: ungetc(_c, file); }
|
|
};
|
|
|
|
char *dec(long, int = 0);
|
|
char *hex(long, int = 0);
|
|
char *oct(long, int = 0);
|
|
char *chr(int, int = 0);
|
|
char *str(const char *, int = 0);
|
|
char *form(char *, ...);
|
|
|
|
enum stream_state {
|
|
_good=0,
|
|
_eof=1,
|
|
_fail=2,
|
|
_bad=4
|
|
};
|
|
|
|
class ostream {
|
|
|
|
friend istream;
|
|
|
|
private:
|
|
|
|
streambuf* stream;
|
|
char mystream;
|
|
char state;
|
|
|
|
public:
|
|
|
|
ostream(streambuf *);
|
|
ostream(int);
|
|
ostream(int, char *);
|
|
~ostream() { (void) flush(); if(mystream) delete stream; }
|
|
|
|
operator void*() { return (state == _good) ? this : NULL; }
|
|
int operator !() { return (state != _good); }
|
|
|
|
ostream& operator <<(int);
|
|
ostream& operator <<(long);
|
|
ostream& operator <<(unsigned int _U) { return *this << ((long) _U); }
|
|
ostream& operator <<(unsigned long);
|
|
ostream& operator <<(const char *);
|
|
ostream& operator <<(double);
|
|
ostream& operator <<(long double);
|
|
|
|
ostream& put(char _c) { if(stream->sputc(_c) == EOF)
|
|
state = _fail;
|
|
return *this; }
|
|
|
|
ostream& flush();
|
|
|
|
int rdstate() { return state; }
|
|
void clear(int _s = _good) { state = _s; }
|
|
int bad() { return (state & _bad); }
|
|
int fail() { return (state & _fail); }
|
|
int eof() { return (state & _eof); }
|
|
int good() { return (state == _good); }
|
|
|
|
};
|
|
|
|
class istream {
|
|
|
|
friend void eatwhite(istream& _s) {_s >> WS; }
|
|
|
|
private:
|
|
ostream* tied_to;
|
|
streambuf* stream;
|
|
char skipping;
|
|
char mystream;
|
|
int state;
|
|
|
|
long getlong(int);
|
|
long double getreal();
|
|
|
|
public:
|
|
istream(streambuf*, int = 1, ostream* = NULL);
|
|
istream(int, char*, int = 1);
|
|
istream(int, int = 1, ostream* = NULL);
|
|
~istream() { if(mystream) delete stream; }
|
|
|
|
operator void*() { return (state == _good) ? this : NULL; }
|
|
int operator !() { return (state != _good); }
|
|
|
|
istream& operator >> (signed char& _c) { unsigned char _x;
|
|
*this >> _x;
|
|
if(state == _good)
|
|
_c=(signed char) _x;
|
|
return *this; }
|
|
|
|
istream& operator >> ( char& _c) { unsigned char _x;
|
|
*this >> _x;
|
|
if(state == _good)
|
|
_c=(char) _x;
|
|
return *this; }
|
|
|
|
istream& operator >> (short& _s){ short _x= (short) getlong(0);
|
|
if(state == _good)
|
|
_s=_x;
|
|
return *this; }
|
|
|
|
istream& operator >> (int& _i) { int _x= (int) getlong(0);
|
|
if(state == _good)
|
|
_i=_x;
|
|
return *this; }
|
|
|
|
istream& operator >> (long& _l){ long _x= getlong(0);
|
|
if(state == _good)
|
|
_l=_x;
|
|
return *this; }
|
|
|
|
|
|
istream& operator >> (unsigned char& _c);
|
|
|
|
istream& operator >> (unsigned short& _s){ unsigned short _x= (unsigned short) getlong(0);
|
|
if(state == _good)
|
|
_s=_x;
|
|
return *this; }
|
|
|
|
istream& operator >> (unsigned int& _i){ unsigned int _x= (unsigned int) getlong(0);
|
|
if(state == _good)
|
|
_i=_x;
|
|
return *this; }
|
|
|
|
istream& operator >> (unsigned long& _l){ unsigned long _x= (unsigned long) getlong(0);
|
|
if(state == _good)
|
|
_l=_x;
|
|
return *this; }
|
|
|
|
istream& operator >>(float&);
|
|
istream& operator >>(double&);
|
|
istream& operator >>(long double&);
|
|
istream& operator >>(char *);
|
|
istream& operator >>(whitespace&);
|
|
istream& get(char&);
|
|
istream& get(char*, int, int = '\n');
|
|
|
|
int skip(int _s) { short _t = skipping; skipping = _s; return _t; }
|
|
ostream * tie( ostream *_to ) { ostream *_t = tied_to; tied_to = _to; return _t; }
|
|
void putback(char _c) { stream->sputbackc(_c); };
|
|
int rdstate() { return state; }
|
|
void clear(int _s = _good) { state = _s; }
|
|
int bad() { return (state & _bad); }
|
|
int fail() { return (state & _fail); }
|
|
int eof() { return (state & _eof); }
|
|
int good() { return (state == _good); }
|
|
|
|
};
|
|
|
|
extern istream cin;
|
|
extern ostream cout;
|
|
extern ostream cerr;
|
|
|
|
#pragma restore
|
|
|
|
#endif
|