home *** CD-ROM | disk | FTP | other *** search
- /*-- Rev Header - do NOT edit!
- *
- * Filename : ios.h
- * Purpose : (Erst einmal) Ersatz von ios, e.g. used in cin/cout
- *
- * Program : -
- * Author : Gerhard Müller
- * Copyright: (c) by Gerhard Müller
- * Creation :
- *
- * compile : make
- *
- * Compile version : 0.1
- * Ext. Version : 0.1
- *
- * REVISION HISTORY
- *
- * Date Comment
- * ------------------------ -------------------------------------------------
- * Fri Sep 17 00:49:09 1993 Took from libg++, notice copyrights there
- * Only raw implementation, but works
- * (nearly nothing is supported, tough)
- *
- *-- REV_END --
- */
-
- #ifndef ADD_IOS_H
- #define ADD_IOS_H
-
- /*
- * C-Includes, C-Definitionen
- *
- */
-
- #define class _class
- #define template _template
-
- extern "C" {
- #include <exec/types.h>
- #include <dos/dos.h>
- #include <dos/dosextens.h>
- #include <clib/alib_protos.h>
- #include <clib/alib_stdio_protos.h>
- #include <inline/stubs.h>
- #ifdef __OPTIMIZE__
- #include <inline/exec.h>
- #include <inline/dos.h>
- #else
- #include <clib/exec_protos.h>
- #include <clib/dos_protos.h>
- #endif
-
- /* #include <ctype.h> */
- }
-
- #undef template
- #undef class
-
-
- typedef unsigned long __fmtflags;
- typedef unsigned char __iostate;
-
-
- struct _ios_fields { // The data members of an ios.
-
- // streambuf *_strbuf;
- // ostream* _tie;
-
- BPTR _fh;
- BPTR _tie;
-
- // int _width;
- __fmtflags _flags;
- // _G_wchar_t _fill;
- __iostate _state;
- // __iostate _exceptions;
- // int _precision;
- };
-
-
-
- #define _IOS_GOOD 0
- #define _IOS_EOF 1
- #define _IOS_FAIL 2
- #define _IOS_BAD 4
-
- //#define _IOS_INPUT 1
- //#define _IOS_OUTPUT 2
- //#define _IOS_ATEND 4
- //#define _IOS_APPEND 8
- //#define _IOS_TRUNC 16
- //#define _IOS_NOCREATE 32
- //#define _IOS_NOREPLACE 64
- //#define _IOS_BIN 128
-
-
- class ios : public _ios_fields {
- public:
-
- typedef __fmtflags fmtflags;
- typedef int iostate;
- // typedef int openmode;
- // typedef int streamsize;
-
- enum io_state {
- goodbit = _IOS_GOOD,
- eofbit = _IOS_EOF,
- failbit = _IOS_FAIL,
- badbit = _IOS_BAD };
-
- // enum open_mode {
- // in = _IOS_INPUT,
- // out = _IOS_OUTPUT,
- // ate = _IOS_ATEND,
- // app = _IOS_APPEND,
- // trunc = _IOS_TRUNC,
- // nocreate = _IOS_NOCREATE,
- // noreplace = _IOS_NOREPLACE,
- // bin = _IOS_BIN };
-
- enum seek_dir { beg, cur, end};
- // ANSI: typedef enum seek_dir seekdir; etc
-
- enum {
- skipws=01, left=02, right=04, internal=010,
- // dec=020, oct=040, hex=0100,
- // showbase=0200, showpoint=0400, uppercase=01000, showpos=02000,
- // scientific=04000, fixed=010000, unitbuf=020000, stdio=040000,
- dont_close=0100000 //Don't delete streambuf on stream destruction
- };
-
- // enum { // Masks.
- // basefield=dec+oct+hex,
- // floatfield = scientific+fixed,
- // adjustfield = left+right+internal
- // };
-
- BPTR tie() const { return _tie; }
- BPTR tie(BPTR fh) { BPTR save=_tie; _tie=fh; return save; }
-
- // Methods to change the format state.
-
- // _G_wchar_t fill() const { return (_G_wchar_t)_fill; }
- // _G_wchar_t fill(_G_wchar_t newf)
- // {_G_wchar_t oldf = (_G_wchar_t)_fill; _fill = (char)newf; return oldf;}
-
- fmtflags flags() const { return _flags; }
-
- fmtflags flags(fmtflags new_val) {
- fmtflags old_val = _flags; _flags = new_val; return old_val; }
-
- // int precision() const { return _precision; }
-
- // int precision(int newp) {
- // unsigned short oldp = _precision; _precision = (unsigned short)newp;
- // return oldp; }
-
- fmtflags setf(fmtflags val) {
- fmtflags oldbits = _flags;
- _flags |= val; return oldbits; }
-
- fmtflags setf(fmtflags val, fmtflags mask) {
- fmtflags oldbits = _flags;
- _flags = (_flags & ~mask) | (val & mask); return oldbits; }
-
- fmtflags unsetf(fmtflags mask) {
- fmtflags oldbits = _flags & mask;
- _flags &= ~mask; return oldbits; }
-
- // int width() const { return _width; }
- // int width(int val) { int save = _width; _width = val; return save; }
-
- // streambuf* rdbuf() const { return _strbuf; }
-
- void clear(iostate state = 0) {
- _state = _fh ? state : state|badbit;
- // if (_state & _exceptions) _throw_failure();
- }
-
- void set(iostate flag) { _state |= flag;
- // if (_state & _exceptions) _throw_failure();
- }
-
- void setstate(iostate flag) { _state |= flag; // ANSI
- // if (_state & _exceptions) _throw_failure();
- }
-
- int good() const { return _state == 0; }
-
- int eof() const { return _state & ios::eofbit; }
-
- int fail() const { return _state & (ios::badbit|ios::failbit); }
-
- int bad() const { return _state & ios::badbit; }
-
- iostate rdstate() const { return _state; }
-
- operator void*() const { return fail() ? (void*)0 : (void*)(-1); }
- int operator!() const { return fail(); }
- // iostate exceptions() const { return _exceptions; }
- // void exceptions(iostate enable) {
- // _exceptions = enable;
- // if (_state & _exceptions) _throw_failure(); }
-
- // static int sync_with_stdio(int on);
- // static void sync_with_stdio() { sync_with_stdio(1); }
-
-
- // // Used to initialize standard streams. Not needed in this implementation.
- // class Init {
- // public:
- // Init () { }
- // };
-
- protected:
- ios(BPTR fh = 0, BPTR tie = 0);
- ~ios();
- // virtual ~ios();
- // void init(streambuf* sb) { _state=0; _strbuf=sb; }
- };
-
- typedef int _seek_dir;
-
- // Magic numbers and bits for the _flags field.
- // The magic numbers use the high-order bits of _flags;
- // the remaining bits are abailable for variable flags.
- // Note: The magic numbers must all be negative if stdio
- // emulation is desired.
-
- //#define _IO_MAGIC 0xFBAD0000 /* Magic number */
- //#define _OLD_STDIO_MAGIC 0xFABC0000 /* Emulate old stdio. */
- //#define _IO_MAGIC_MASK 0xFFFF0000
- //#define _S_USER_BUF 1 /* User owns buffer; don't delete it on close. */
- //#define _S_UNBUFFERED 2
- #define _S_NO_READS 4 /* Reading not allowed */
- #define _S_NO_WRITES 8 /* Writing not allowd */
- #define _S_EOF_SEEN 0x10
- #define _S_ERR_SEEN 0x20
- #define _S_DELETE_DONT_CLOSE 0x40
- //#define _S_LINKED 0x80 // Set if linked (using _chain) to streambuf::_list_all.
- //#define _S_IN_BACKUP 0x100
- //#define _S_LINE_BUF 0x200
- //#define _S_TIED_PUT_GET 0x400 // Set if put and get pointer logicly tied.
- //#define _S_CURRENTLY_PUTTING 0x800
- //#define _S_IS_APPENDING 0x1000
- //#define _S_IS_BACKUPBUF 0x4000
- //#define _S_IS_FILEBUF 0x8000
-
- inline ios::ios(BPTR fh=0, BPTR tie_to = 0 ) {
- _state = fh ? ios::goodbit : ios::badbit; // _exceptions=0;
- _fh = fh; _tie = tie_to; // _width=0; _fill=' ';
- //_flags=ios::skipws|ios::dec; // _precision=6;
- _flags=0;
- }
-
- inline ios::~ios()
- {
- if (! (_flags & (unsigned int)ios::dont_close) )
- if(_fh) Close(_fh);
- }
-
- #endif /* ADD_IOS_H */
-