Annotation of GNUtools/libg++/libio/libio.h, revision 1.1

1.1     ! root        1: /* 
        !             2: Copyright (C) 1993 Free Software Foundation
        !             3: 
        !             4: This file is part of the GNU IO Library.  This library is free
        !             5: software; you can redistribute it and/or modify it under the
        !             6: terms of the GNU General Public License as published by the
        !             7: Free Software Foundation; either version 2, or (at your option)
        !             8: any later version.
        !             9: 
        !            10: This library is distributed in the hope that it will be useful,
        !            11: but WITHOUT ANY WARRANTY; without even the implied warranty of
        !            12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        !            13: GNU General Public License for more details.
        !            14: 
        !            15: You should have received a copy of the GNU General Public License
        !            16: along with GNU CC; see the file COPYING.  If not, write to
        !            17: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
        !            18: 
        !            19: As a special exception, if you link this library with files
        !            20: compiled with a GNU compiler to produce an executable, this does not cause
        !            21: the resulting executable to be covered by the GNU General Public License.
        !            22: This exception does not however invalidate any other reasons why
        !            23: the executable file might be covered by the GNU General Public License. */
        !            24: 
        !            25: /* This is part of the iostream library.
        !            26:    Copyright (C) 1991, 1992 Per Bothner. */
        !            27: 
        !            28: #ifndef _IO_STDIO_H
        !            29: #define _IO_STDIO_H
        !            30: #ifdef __GNUG__
        !            31: #pragma interface
        !            32: #pragma cplusplus
        !            33: #endif
        !            34: 
        !            35: #if 1
        !            36: #include <_G_config.h>
        !            37: #define _IO_pos_t _G_fpos_t /* obsolete */
        !            38: #define _IO_fpos_t _G_fpos_t
        !            39: #define _IO_size_t _G_size_t
        !            40: #define _IO_ssize_t _G_ssize_t
        !            41: #define _IO_off_t _G_off_t
        !            42: #define _IO_pid_t _G_pid_t
        !            43: #define _IO_HAVE_SYS_WAIT _G_HAVE_SYS_WAIT
        !            44: #define _IO_BUFSIZ _G_BUFSIZ
        !            45: #define _IO_va_list _G_va_list
        !            46: 
        !            47: #ifdef _G_NEED_STDARG_H
        !            48: /* This define avoids name pollution if we're using GNU stdarg.h */
        !            49: #define __need___va_list
        !            50: extern "C" {
        !            51: #include <stdarg.h>
        !            52: }
        !            53: #ifdef __GNUC_VA_LIST
        !            54: #undef _IO_va_list
        !            55: #define _IO_va_list __gnuc_va_list
        !            56: #endif /* __GNUC_VA_LIST */
        !            57: #endif
        !            58: 
        !            59: #else
        !            60: #include <_IO_config.h>
        !            61: typedef _IO_fpos_t _IO_pos_t;
        !            62: #endif
        !            63: 
        !            64: #ifndef _PARAMS
        !            65: #ifdef __STDC__
        !            66: #define _PARAMS(paramlist) paramlist
        !            67: #else
        !            68: #define _PARAMS(paramlist) ()
        !            69: #endif
        !            70: #endif /*!_PARAMS*/
        !            71: #ifndef __STDC__
        !            72: #define const
        !            73: #endif
        !            74: #define USE_DTOA
        !            75: 
        !            76: #if 0
        !            77: #ifdef _IO_NEED_STDARG_H
        !            78: extern "C" {
        !            79: #include <stdarg.h>
        !            80: }
        !            81: #endif
        !            82: #endif
        !            83: 
        !            84: #ifndef EOF
        !            85: #define EOF (-1)
        !            86: #endif
        !            87: #ifndef NULL
        !            88: #if !defined(__cplusplus) || defined(__GNUC__)
        !            89: #define NULL ((void*)0)
        !            90: #else
        !            91: #define NULL (0)
        !            92: #endif
        !            93: #endif
        !            94: 
        !            95: #define _IOS_INPUT     1
        !            96: #define _IOS_OUTPUT    2
        !            97: #define _IOS_ATEND     4
        !            98: #define _IOS_APPEND    8
        !            99: #define _IOS_TRUNC     16
        !           100: #define _IOS_NOCREATE  32
        !           101: #define _IOS_NOREPLACE 64
        !           102: #define _IOS_BIN       128
        !           103: 
        !           104: /* Magic numbers and bits for the _flags field.
        !           105:    The magic numbers use the high-order bits of _flags;
        !           106:    the remaining bits are abailable for variable flags.
        !           107:    Note: The magic numbers must all be negative if stdio
        !           108:    emulation is desired. */
        !           109: 
        !           110: #define _IO_MAGIC 0xFBAD0000 /* Magic number */
        !           111: #define _OLD_STDIO_MAGIC 0xFABC0000 /* Emulate old stdio. */
        !           112: #define _IO_MAGIC_MASK 0xFFFF0000
        !           113: #define _IO_USER_BUF 1 /* User owns buffer; don't delete it on close. */
        !           114: #define _IO_UNBUFFERED 2
        !           115: #define _IO_NO_READS 4 /* Reading not allowed */
        !           116: #define _IO_NO_WRITES 8 /* Writing not allowd */
        !           117: #define _IO_EOF_SEEN 0x10
        !           118: #define _IO_ERR_SEEN 0x20
        !           119: #define _IO_DELETE_DONT_CLOSE 0x40
        !           120: #define _IO_LINKED 0x80 /* Set if linked (using _chain) to streambuf::_list_all.*/
        !           121: #define _IO_IN_BACKUP 0x100
        !           122: #define _IO_LINE_BUF 0x200
        !           123: #define _IO_TIED_PUT_GET 0x400 /* Set if put and get pointer logicly tied. */
        !           124: #define _IO_CURRENTLY_PUTTING 0x800
        !           125: #define _IO_IS_APPENDING 0x1000
        !           126: #define _IO_IS_FILEBUF 0x2000
        !           127: 
        !           128: /* These are "formatting flags" matching the iostream fmtflags enum values. */
        !           129: #define _IO_SKIPWS 01
        !           130: #define _IO_LEFT 02
        !           131: #define _IO_RIGHT 04
        !           132: #define _IO_INTERNAL 010
        !           133: #define _IO_DEC 020
        !           134: #define _IO_OCT 040
        !           135: #define _IO_HEX 0100
        !           136: #define _IO_SHOWBASE 0200
        !           137: #define _IO_SHOWPOINT 0400
        !           138: #define _IO_UPPERCASE 01000
        !           139: #define _IO_SHOWPOS 02000
        !           140: #define _IO_SCIENTIFIC 04000
        !           141: #define _IO_FIXED 010000
        !           142: #define _IO_UNITBUF 020000
        !           143: #define _IO_STDIO 040000
        !           144: #define _IO_DONT_CLOSE 0100000
        !           145: 
        !           146: /* A streammarker remembers a position in a buffer. */
        !           147: 
        !           148: struct _IO_jump_t;  struct _IO_FILE;
        !           149: 
        !           150: struct _IO_marker {
        !           151:   struct _IO_marker *_next;
        !           152:   struct _IO_FILE *_sbuf;
        !           153:   /* If _pos >= 0
        !           154:  it points to _buf->Gbase()+_pos. FIXME comment */
        !           155:   /* if _pos < 0, it points to _buf->eBptr()+_pos. FIXME comment */
        !           156:   int _pos;
        !           157: #if 0
        !           158:     void set_streampos(streampos sp) { _spos = sp; }
        !           159:     void set_offset(int offset) { _pos = offset; _spos = (streampos)(-2); }
        !           160:   public:
        !           161:     streammarker(streambuf *sb);
        !           162:     ~streammarker();
        !           163:     int saving() { return  _spos == -2; }
        !           164:     int delta(streammarker&);
        !           165:     int delta();
        !           166: #endif
        !           167: };
        !           168: 
        !           169: struct _IO_FILE {
        !           170:   int _flags;          /* High-order word is _IO_MAGIC; rest is flags. */
        !           171: #define _IO_file_flags _flags
        !           172: 
        !           173:   /* The following pointers correspond to the C++ streambuf protocol. */
        !           174:   char* _IO_read_ptr;  /* Current read pointer */
        !           175:   char* _IO_read_end;  /* End of get area. */
        !           176:   char* _IO_read_base; /* Start of putback+get area. */
        !           177:   char* _IO_write_base;        /* Start of put area. */
        !           178:   char* _IO_write_ptr; /* Current put pointer. */
        !           179:   char* _IO_write_end; /* End of put area. */
        !           180:   char* _IO_buf_base;  /* Start of reserve area. */
        !           181:   char* _IO_buf_end;   /* End of reserve area. */
        !           182:   /* The following fields are used to support backing up and undo. */
        !           183:   char *_IO_save_base; /* Pointer to start of non-current get area. */
        !           184:   char *_IO_backup_base;  /* Pointer to first valid character of backup area */
        !           185:   char *_IO_save_end; /* Pointer to end of non-current get area. */
        !           186: 
        !           187: /* These names are temporary aliases. TODO */
        !           188: #define _other_gbase _IO_save_base
        !           189: #define _aux_limit _IO_backup_base
        !           190: #define _other_egptr _IO_save_end
        !           191: 
        !           192:   struct _IO_marker *_markers;
        !           193:   
        !           194:   struct _IO_FILE *_chain;
        !           195:   
        !           196:   struct _IO_jump_t *_jumps; /* Jump table */
        !           197:   
        !           198:   int _fileno;
        !           199:   int _blksize;
        !           200:   _IO_off_t _offset;
        !           201:   
        !           202: #define __HAVE_COLUMN /* temporary */
        !           203:   /* 1+column number of pbase(); 0 is unknown. */
        !           204:   unsigned short _cur_column;
        !           205:   char _unused;
        !           206:   char _shortbuf[1];
        !           207:   
        !           208:   /*  char* _save_gptr;  char* _save_egptr; */
        !           209: };
        !           210: 
        !           211: #ifndef __cplusplus
        !           212: typedef struct _IO_FILE _IO_FILE;
        !           213: #endif
        !           214: 
        !           215: /* We always allocate an extra word following an _IO_FILE.
        !           216:    This is for compatibility with C++ streambuf; the word can
        !           217:    be used to smash to a pointer to a virtual function table. */
        !           218: 
        !           219: struct _IO_FILE_plus {
        !           220:   _IO_FILE _file;
        !           221:   const void *_vtable;
        !           222: };
        !           223: 
        !           224: extern struct _IO_FILE_plus _IO_stdin_, _IO_stdout_, _IO_stderr_;
        !           225: #define _IO_stdin (&_IO_stdin_._file)
        !           226: #define _IO_stdout (&_IO_stdout_._file)
        !           227: #define _IO_stderr (&_IO_stderr_._file)
        !           228: 
        !           229: #ifdef __cplusplus
        !           230: extern "C" {
        !           231: #endif
        !           232: 
        !           233: extern int __underflow _PARAMS((_IO_FILE*));
        !           234: extern int __overflow _PARAMS((_IO_FILE*, int));
        !           235: 
        !           236: extern unsigned __adjust_column _PARAMS((unsigned start, const char *line, int count));
        !           237: 
        !           238: #define _IO_getc(_fp) \
        !           239:        ((_fp)->_IO_read_ptr >= (_fp)->_IO_read_end \
        !           240:          && __underflow(_fp) == EOF ? EOF \
        !           241:        : *(unsigned char*)(_fp)->_IO_read_ptr++)
        !           242: #define _IO_peekc(_fp) \
        !           243:        ((_fp)->_IO_read_ptr >= (_fp)->_IO_read_end \
        !           244:          && __underflow(_fp) == EOF ? EOF \
        !           245:        : *(unsigned char*)(_fp)->_IO_read_ptr)
        !           246: 
        !           247: #define _IO_putc(_ch, _fp) \
        !           248:    (((_fp)->_IO_write_ptr >= (_fp)->_IO_write_end) \
        !           249:     ? __overflow(_fp, (unsigned char)_ch) \
        !           250:     : (unsigned char)(*(_fp)->_IO_write_ptr++ = _ch))
        !           251: 
        !           252: extern int _IO_vfscanf _PARAMS((_IO_FILE*, const char*, _IO_va_list, int*));
        !           253: extern int _IO_vfprintf _PARAMS((_IO_FILE*, const char*, _IO_va_list));
        !           254: extern _IO_ssize_t _IO_padn _PARAMS((_IO_FILE *, int, _IO_ssize_t));
        !           255: extern _IO_size_t _IO_sgetn _PARAMS((_IO_FILE *, void*, _IO_size_t));
        !           256: 
        !           257: extern void _IO_free_backup_area _PARAMS((_IO_FILE*));
        !           258: 
        !           259: #ifdef __cplusplus
        !           260: }
        !           261: #endif
        !           262: 
        !           263: #endif /* _IO_STDIO_H */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.