Annotation of researchv10no/cmd/cfront/libC/iostream.cpio, revision 1.1.1.1

1.1       root        1: 0707070044042147441006440042240042240000020065000443212436100000700000026560README
                      2: 5/9/89: Have filebuf::sync() reset last_seek.  This will have the
                      3:         effect that if somebody else moves the file pointer
                      4:         after a sync() but before a seek(), the filebuf will behave
                      5:        sensibly.
                      6: 
                      7: 5/9/89: Fix define of "hardfail".
                      8: 
                      9: 5/5/89: Lots of stuff to improve buffering. New function 
                     10:        
                     11:        ostream::osfx()
                     12:                Perform "suffix" actions before returning from
                     13:                inserters.  This is called by all predefined
                     14:                inserters.  It isn't called by the binary output functions.
                     15:                And should be called by user inserters
                     16:                after any direct manipulation of the streambuf.
                     17: 
                     18:        There are two new format flags:
                     19: 
                     20:                unitbuf: when set a flush is performed by osfx() ;
                     21:                stdio: when set stdout and stderr are flushed by osfx() ;
                     22: 
                     23:        cerr is now unitbuf'ed rather than unbuffered.
                     24: 
                     25:        sync_with_stdio makes cout, cerr unit buffered rather than
                     26:        unbuffered.
                     27: 
                     28:        cin and cout now get the arrays they use dynamically. (Previously
                     29:        they were statically allocated.)  This change is prompted
                     30:        by people who complained about wasting 2K when they didn't
                     31:        use cin or cout.
                     32: 
                     33: 5/5/89: Add check in streambuf* insertor so that it sets failbit when
                     34:        given the null pointer.  (Right now it just core dumps).
                     35: 
                     36: 5/5/89: Change ios::clear to have an int argument
                     37: 
                     38: cycle 16
                     39: 
                     40: 5/4/89: Change all open_mode arguments to ints.
                     41: 
                     42: 5/3/89: Fix ws manipulator so that it will flushed tied ostream
                     43:        when required.
                     44: 
                     45: 5/2/89: More cleanup of open_mode arguments.  Add defaults for
                     46:        ifstream::open and ofstream::open.  Change all
                     47:        defaults to filebuf::openprot
                     48: 
                     49: cycle 15
                     50: 
                     51: 4/28/89. Add default open_mode arguments to ifstream and ofstream
                     52:         constructors.
                     53: 
                     54: cycle 14?
                     55: 
                     56: 4/18/89.  Fix bug is filebuf::seekoff that also caused problems
                     57:          for tellg and tellp.  
                     58: 
                     59: 4/13/89.  Change cstreams.c so it doesn't refer to skip (which is
                     60:        a stream compatibility function.
                     61: 
                     62: ------------------------------------------------
                     63: Cycle 13
                     64: 
                     65: Change typedef in strstream.c to avoid use of size_t.  (This is
                     66: because of header file compatibility problems.)
                     67: 
                     68: Change exit(10) to abort() in oldformat.c.
                     69: 
                     70: Cycle 12
                     71: 
                     72: Put in include of <iostream.h> in strstream.h
                     73: 
                     74: Change istream::get() so that it really gets expanded inline.
                     75: Previous definition was being outlined.
                     76: 
                     77: Reorder declarations so that ipfx comes before any operator>>. Not
                     78: just before the ones that have inline code refering to it. The old
                     79: ordering was resulting in a failure to expand ipfx where it should
                     80: have been.
                     81: 
                     82: Move declaration of ios_user_union higher in stream.c in order to
                     83: eliminate a new warning message.
                     84: 
                     85: Change values of O_CREAT O_TRUNC O_EXCL in cases where headers don't
                     86: define them (the only known such system is V9)
                     87: 
                     88: Fix ostream::out_waiting.  It was just returning non-zero when there was stuff
                     89: accumulated but not consumed.  It was supposed to return the number
                     90: (at least according to the man page.)
                     91: 
                     92: -----------------------------------------------------
                     93: Cycle 11
                     94: 
                     95: Change cstreams.c for change to way explicit placement works.
                     96: 
                     97: Implement bidirectional strstream. 
                     98: 
                     99: ----------------------------------------------------
                    100: Cycle 9 
                    101: 
                    102: Fix bug in void* inserter.  (Showbase should have been set
                    103: but wasn't)
                    104: 
                    105: 
                    106: --------------------------------------------------
                    107: Cycle 8
                    108: 
                    109: streambuf::snextc was not incrementing the get pointer before
                    110: it called underflow.  This had no effect because the streambuf
                    111: classes assume that when underflow is called there
                    112: was nothing in the buffer.  The man page said that although this
                    113: was "normally the case" but doesn't guarantee it.  I wrote a new
                    114: streambuf class that checked for the condition and it failed.
                    115: I've fixed snextc.  
                    116: 
                    117: ---------------------------------------------------
                    118: Cycle 7  
                    119: 
                    120: Fix bug in setstate.  
                    121: 
                    122: Change return type of filebuf::close to filebuf*
                    123: 
                    124: Add noreplace to open_mode 
                    125: 
                    126: Fixed bug in adjustment of floating fields
                    127: 
                    128: -----------------------------------------------------
                    129: 
                    130: Cycle 6.1 
                    131: 
                    132: Interpretation of justification fields was screwed up.
                    133: 
                    134: Fix for whitespace eating of character extractor of cycle 6  was
                    135: incomplete. (It might read characters when the stream was
                    136: in error status).
                    137: 
                    138: -----------------------------------------------------
                    139: Cycle 6
                    140: 
                    141: Make streambuf::xsgetn and streambuf::xsputn virtuals
                    142: 
                    143: ios::operator int changed to ios::operator void* in order to allow
                    144: detection of "cin << 5" without requiring any extractor or inserter
                    145: to be declared in class iostream.
                    146: 
                    147: sync is moved from ios to istream,  the corresponding action on
                    148: ostreams is flushing.
                    149: 
                    150: Reorder declarations in iostream.h to avoid forward enum tag
                    151: declarations.
                    152: 
                    153: Fixes to single character extractors to make sure they skip
                    154: whitespace when required.
                    155: 
                    156: Massive simplification of format control stuff
                    157: 
                    158:        struct fmtinfo goes away as do pushing and popping of it.
                    159: 
                    160:        several format state variables are consolodated into
                    161:        a single flag field and new flags are added to control
                    162:        more stuff.  Remaining state variables are fill, precision and
                    163:        width.  New statevariable "flags".
                    164: 
                    165:        Flags declared in an enum within ios:
                    166: 
                    167:        enum            { skipws=01,    
                    168:                                        /* skip whitespace on input */
                    169:                          left=02,  right=04, internal=010,
                    170:                                        /* padding location */
                    171:                          dec=020, oct=040, hex=0100, 
                    172:                                        /* conversion base */
                    173:                          showbase=0200, showpoint=0400, uppercase=01000,
                    174:                          showpos=02000, 
                    175:                                        /* modifiers */
                    176:                          scientific=04000, fixed=010000
                    177:                                        /* floating point notation */                                             } ;
                    178:        
                    179:        Functions to manipulate the flag field
                    180:                s.flags()       return current flag
                    181:                s.flags(b)      sets flags to b 
                    182:                s.setf(b)       turns on bits marked in f in flags
                    183:                s.setf(b,f)     assigns b to "field" specified by f
                    184:                                (i.e. bits that are on in f)
                    185: 
                    186:         static ios int members for convienent reference to fields
                    187:                 ios::basefield = hex|dec|oct ;
                    188:                 ios::adjustfield = left|right|internal ;
                    189:                 ios::floatfield = scientific|fixed ;
                    190: 
                    191: New manipulators
                    192: 
                    193:        s << setfill(f)         sets fill state variable
                    194:        s << setprecision(p)    sets precision state variable
                    195:        s << setiosflags(b)     does s.setf(b)
                    196:        s << resetiosflags(b)   does s.setf(0,b)
                    197: 
                    198: New user setable state variables
                    199: 
                    200:        flags are a long user code may use unassigned bits
                    201:        s.iword(x)              returns a long& 
                    202:        s.pword(s)              returns a void*& (sharing space with s.iword(x)
                    203:        
                    204: 
                    205:        ios::bitalloc()         returns a previously unallocated bit
                    206:        ios::xalloc()           returns a previously unused index
                    207:        
                    208: ---------------------------------------------
                    209: Cycle 5
                    210: 
                    211: Eliminated a lot of warnings about assigning longs to ints and
                    212: the like.
                    213: 
                    214: Put in some overflow detection on integer input (it is still very
                    215: incomplete). 
                    216: 
                    217: Change sync_with_stdio into a static member function
                    218: 
                    219: Add enum_mode, nocreate.  Causes failure of an open if file does not
                    220: previously exist. 
                    221: 
                    222: Changed popfmt to reset width to 0.  This is more consistent with the
                    223: normal use.
                    224: 
                    225: Fixed some bugs in interaction of EOF eating whitespace and "ignore"
                    226: 
                    227: ------------------------------------------
                    228: 
                    229: Multiple Inheritance Version.  
                    230: 
                    231: Changes from previous version:
                    232: 
                    233: MI structure in classes.  Mainly this is a lot of trivial changes.
                    234: But one substantive change arises.  Because ios is now inherited
                    235: as a virtual base class, a constructor with no arguments must
                    236: be used.  Therefore ios::init(streambuf*) is declared protected and
                    237: must be used to initialize in derived classes.
                    238: 
                    239: -------------------------------------------
                    240: 
                    241: The latest version of the iostream package incorporates a large
                    242: number of changes and bug fixes.  They are listed here in my
                    243: estimation of their importance.
                    244: 
                    245: In principle, istream, ostream, and iostream are now distinct
                    246: classes. istream only contains input operations and ostream only
                    247: contains output operations.  iostream is the "join" of the two. There
                    248: is a new class ios containing the common state information from which
                    249: all these are derived.
                    250: 
                    251: This means, for example, that cin should't be passed to a function
                    252: expecting an iostream.
                    253: 
                    254: In practice to do this would have required a good implementation of
                    255: multiple inheritance with virtual base classes. To avoid relying on
                    256: this feature of C++ all the stream classes are typedefed to ios.
                    257: 
                    258: As a consequence of this change several classes derived from
                    259: "istream" and "ostream" have been added.  Namely ifstream, ofstream,
                    260: istrstream and ostrstream.  These (rather than the bidrectional
                    261: fstream and strstream) should be used when a stream for only input or
                    262: only output is desired.
                    263: 
                    264: The kludge that used #defines and pointer variables to implement cin,
                    265: cour, cerr and cdebug has been eliminated. The standard streams are
                    266: now declared as extern variables in iostream.h. Their types are
                    267: classes derived from iostream with an assignment operator. So that it
                    268: is now permitted to assign streams to them.
                    269: 
                    270: Because cfront now distinguishes int from char in overload resolution
                    271: cout << 'a' now outputs the character 'a' rather than the decimal
                    272: value.  This is an incompatibility with the old stream package, but
                    273: is such a large improvement that I thought it was worth any
                    274: conversion problems it might cause.   This made the manipulator
                    275: "onec" redundant and it has been removed.
                    276: 
                    277: The name space has been cleaned up.  A lot of identifiers that were
                    278: previously part of the global name space have been made local to a
                    279: class. A table of the old and new names follows.  Probably the most
                    280: important is the renaming of open_modes.
                    281: 
                    282:        old name                new name
                    283:        --------                --------
                    284: 
                    285:        iocdebug                        // eliminated
                    286:        iocerr                          // eliminated
                    287:        iocin                           // eliminated
                    288:        iocout                          // eliminated
                    289:        
                    290:        cdebug                  clog    // Renamed because of
                    291:                                        // complaints about old name
                    292: 
                    293:        state_value             io_state
                    294:                                        // Renamed because state_value
                    295:                                        // was too unspecific
                    296: 
                    297:        _bad                    ios::badbit
                    298:        _eof                    ios::eofbit
                    299:        _fail                   ios::failbit
                    300:        _good                   ios::goodbit
                    301: 
                    302:        append                  ios::app
                    303:        atend                   ios::ate
                    304:        input                   ios::in
                    305:        output                  ios::out
                    306: 
                    307:        seek_beg                ios::beg
                    308:        seek_cur                ios::cur
                    309:        seek_end                ios::end
                    310: 
                    311: stream.h contains declarations of the names required for backward
                    312: compatibility with the stream package.
                    313: 
                    314: The macros for declaring manipulator classes (IOMANIP and  IOMANIP2)
                    315: have been replaced by a collection of macros that are more
                    316: "template-like". Two argument manipulators are not implemented.
                    317: (Users may follow the pattern in iomanip.h to implement them
                    318: themselves.)
                    319: 
                    320: filebuf and fstream operations no longer clear errno.
                    321: 
                    322: The virtual declaration of streambuf::setbuf now only has two
                    323: arguments. The three argument form exists in streambuf for
                    324: compatibility with the stream package, but the "official"
                    325: definition has only two arguments. Similarly the documented
                    326: constructor is now streambuf(char*,int).
                    327: 
                    328: The members of fstream (ifstream and ofstream) that used to return an
                    329: int as an error indication (namely open, attach, close) now return
                    330: void.  Errors are indicated by setting failbit in the error state.
                    331: There was some confusion here about whether an error was indicated by
                    332: returning 0 or EOF.  Declaraing these functions to return void
                    333: eliminates the possibility of confusion.
                    334: 
                    335: strstreambuf now allows setbuf in order to control sizes of
                    336: allocation in dynamic mode. (When character strings are being
                    337: automatically extended.)
                    338: 
                    339: More careful checks for whether flushes are required on streams that
                    340: are tied to other streams. (E.g. flushes on cout when characters are
                    341: extracted from cin.)
                    342: 
                    343: Tieing now works for insertion. E.g. cerr is tied to cout, so
                    344: insertion into cerr causes cout to be flushed.
                    345: 
                    346: Redundant calls to allocate have been removed from streambuf::xsgetn
                    347: and streambuf::xsputn.  (This means that the only calls to
                    348: streambuf::allocate from streambuf member functions are from the
                    349: virtuals that may be overriden in derived classes.)
                    350: 
                    351: open with ios::ate (the old atend) no longer implies ios::out (the
                    352: old output).  ios::app does.  (ate is a perfectly sensible mode
                    353: for input.)
                    354: 
                    355: eatwhite is defined for compatibility with stream package.
                    356: 0707070044044145711004440042240042240000011611140443034215700001300000003313cstreams.c/*ident "@(#)ctrans:lib/stream/cstreams.c       1.1.4.1" */
                    357: /**************************************************************************
                    358:                         Copyright (c) 1984 AT&T
                    359:                           All Rights Reserved   
                    360: 
                    361:         THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T
                    362:         
                    363:         The copyright notice above does not evidence any        
                    364:         actual or intended publication of such source code.
                    365: 
                    366: cstreams.c:
                    367: 
                    368: *****************************************************************************/
                    369: 
                    370: #include <iostream.h>
                    371: #include <fstream.h>
                    372: #include <new.h>
                    373: #include "streamdefs.h"
                    374: 
                    375: int Iostream_init::stdstatus = 0 ;
                    376: int Iostream_init::initcount = 0 ;
                    377: 
                    378: istream_withassign cin ;
                    379: ostream_withassign cout ;
                    380: ostream_withassign cerr ;
                    381: ostream_withassign clog ;
                    382: 
                    383:        // The value of Iostream_init::stdstatus describes the
                    384:        // The std stream variables
                    385: 
                    386:        // 0 means istream::stdin, ostream::stdout, ostream::stderr, and
                    387:        //      ostream::stdlog are unitialized
                    388:        // 1 means they are initialized to filebufs
                    389:        // 2 means they are initialized to stdiobufs
                    390: 
                    391: Iostream_init::Iostream_init() 
                    392: {
                    393:        ++initcount ;
                    394:        if ( initcount > 1 ) return ;
                    395: 
                    396:        // Be careful.  Initialization occurs before constructors
                    397:        // of the standard streams are called.
                    398:        new (&cin) istream_withassign ;
                    399:        new (&cout) ostream_withassign ;
                    400:        new (&cerr) ostream_withassign ;
                    401:        new (&clog) ostream_withassign ;
                    402:        cin = new filebuf(0) ;
                    403:        cout = new filebuf(1) ;
                    404:        cerr = new filebuf(2) ;
                    405:        clog = new filebuf(2) ;
                    406: 
                    407:        cin.setf(~0L,ios::skipws) ;
                    408:        cerr.setf(~0L,ios::unitbuf) ;
                    409:        cin.tie(&cout) ;
                    410:        cerr.tie(&cout) ;
                    411:        clog.tie(&cout) ;
                    412:        stdstatus = 1 ;
                    413:        }
                    414: 
                    415: Iostream_init::~Iostream_init()
                    416: {
                    417:        --initcount ;
                    418:        if ( initcount > 0 ) return ;
                    419:        cout.flush() ;
                    420:        cerr.flush() ;
                    421:        clog.flush() ;
                    422:        }
                    423: 0707070044044142401004440042240042240000011563100443207260400001200000021543filebuf.c/*ident  "@(#)ctrans:lib/stream/filebuf.c        1.1.2.2" */
                    424: /**************************************************************************
                    425:                         Copyright (c) 1984 AT&T
                    426:                           All Rights Reserved   
                    427: 
                    428:         THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T
                    429:       
                    430:         The copyright notice above does not evidence any        
                    431:         actual or intended publication of such source code.
                    432: 
                    433: filebuf.c:
                    434: 
                    435: *****************************************************************************/
                    436: 
                    437: #include <iostream.h>
                    438: #include <fstream.h>
                    439: #include <osfcn.h>
                    440: #include "streamdefs.h"
                    441: 
                    442: #ifndef O_RDONLY
                    443: #      include <fcntl.h>
                    444: #endif
                    445: 
                    446: #ifndef O_CREAT
                    447: #      define O_CREAT 00400
                    448: #endif
                    449: 
                    450: #ifndef O_TRUNC
                    451: #      define O_TRUNC 01000
                    452: #endif
                    453: 
                    454: #ifndef O_EXCL
                    455: #      define O_EXCL 02000
                    456: #endif
                    457: 
                    458: 
                    459: #ifndef O_APPEND
                    460: #      define O_APPEND 0
                    461: #endif
                    462: 
                    463: #include <errno.h>
                    464: extern int errno ;
                    465: 
                    466: const int filebuf::openprot = 0644 ;
                    467: 
                    468: static const int input=ios::in ;
                    469: static const int output=ios::out ;
                    470: static const int append=ios::app ;
                    471: static const int atend=ios::ate ;
                    472: static const int tcate=ios::trunc ;
                    473: static const int nocr=ios::nocreate ;
                    474: static const int norep=ios::noreplace ;
                    475: 
                    476: static const int seek_beg=ios::beg ;
                    477: static const int seek_end=ios::end ;
                    478: static const int seek_cur=ios::cur ;
                    479: 
                    480: int filebuf::last_op() 
                    481: {
                    482:        return (pptr()?output:(gptr()?input:0)) ;
                    483: }
                    484: 
                    485: inline void save_errno(int& orig)
                    486: {
                    487:        orig = ::errno ;
                    488:        ::errno = 0 ;
                    489: }
                    490: 
                    491: inline int restore_errno(int& orig)
                    492: {
                    493:        if ( ::errno == 0 ) ::errno = orig ;
                    494:        return EOF ;
                    495: }
                    496:        
                    497: /*
                    498:  *     Open a file with the given mode.
                    499:  *     Return:         NULL if failure
                    500:  *                     this if success
                    501:  */
                    502: filebuf* filebuf::open (const char *name, int om, int prot)
                    503: {
                    504:        int errno_orig ;
                    505:        save_errno(errno_orig) ;
                    506:        if ( om&append ) om |= output ;
                    507: 
                    508:        if ( opened ) {
                    509:                restore_errno(errno_orig) ;
                    510:                return 0 ;
                    511:                }
                    512: 
                    513:         int flags = 0 ;
                    514:        if ( om&append ) flags |= O_APPEND ;
                    515: 
                    516:        switch (om&(input|output)) {
                    517:        case input : 
                    518:                flags |=  O_RDONLY ;
                    519:                xfd = ::open(name,flags) ;
                    520:                break ;
                    521: 
                    522:        case output :
                    523:                flags |= O_WRONLY|O_CREAT|O_TRUNC ;
                    524:                if ( om&nocr ) flags &= ~O_CREAT ;
                    525:                if ( om&norep ) flags |= O_CREAT|O_EXCL ;
                    526:                if ( om&append ) flags |= O_APPEND ;
                    527:                if ( flags == (O_WRONLY|O_CREAT|O_TRUNC) ) {
                    528:                        xfd = ::creat(name,prot) ;
                    529:                        }
                    530:                else {
                    531:                        xfd = ::open(name,flags,prot) ;
                    532:                        }
                    533: 
                    534:                if ( xfd >= 0 && (om&(atend|append))) lseek(xfd,0,2) ;
                    535:                break ;
                    536: 
                    537:        case input|output:
                    538:                flags |= O_RDWR|O_CREAT ;
                    539:                if ( om&tcate ) flags |= O_TRUNC ;
                    540:                if ( om&append ) flags |= O_APPEND ;
                    541:                if ( om&nocr ) flags &= ~O_CREAT ;
                    542:                xfd = ::open(name,flags,prot) ;
                    543:                if ( xfd >= 0 && (om&(atend|append))) lseek(xfd,0,2) ;
                    544:                break;
                    545:        }
                    546: 
                    547:        if (xfd < 0) return 0;
                    548: 
                    549:        opened = 1;
                    550:        setp(0,0) ;
                    551:        setg(0,0,0) ;
                    552:        mode = om ;
                    553:        last_seek = EOF ;
                    554:        restore_errno(errno_orig) ;
                    555:        return this;
                    556: }
                    557: 
                    558: filebuf* filebuf::attach (int f)
                    559: {
                    560:        if ( opened ) return 0 ;
                    561:        xfd = f;
                    562:        opened = 1;
                    563:        setp(0,0) ;
                    564:        setg(0,0,0) ;
                    565:        mode=0 ;
                    566:        last_seek= EOF;
                    567:        return this;
                    568: }
                    569: 
                    570: /*
                    571:  *     Empty an output buffer.
                    572:  *     Returns:        EOF on error
                    573:  *                     0 on success
                    574:  */
                    575: int filebuf::overflow(int c)
                    576: {
                    577:        int errno_orig ;
                    578:        save_errno(errno_orig) ;
                    579:        if ( !opened ) return restore_errno(errno_orig) ;
                    580:        if ( allocate() == EOF ) return restore_errno(errno_orig) ;
                    581:        if ( last_op() == input ) {
                    582:                if ( sync()==EOF ) return restore_errno(errno_orig) ;
                    583:        }
                    584: 
                    585:        register char* p = base() ;
                    586:        // pptr()==NULL does not imply p < pptr(),  so we need separate
                    587:        // test.
                    588:        while ( pptr() && p < pptr() )  {
                    589:                if ( O_APPEND==0 && (mode&append) ) {
                    590:                        // System doesn't have an append mode, so approximate
                    591:                        // as best we can.
                    592:                        lseek(xfd,0,2) ;
                    593:                        }
                    594:                /* Partial writes are sometimes possible in peculiar
                    595:                 * circumstances */
                    596:                register int count = write(xfd,p,pptr()-p) ;
                    597:                if ( count < 0 ) {
                    598:                        last_seek = EOF ;
                    599:                        return restore_errno(errno_orig) ;
                    600:                }
                    601:                p += count ;
                    602: 
                    603:                if ( SEEK_ARITH_OK      
                    604:                                && last_seek != EOF
                    605:                                && mode && !(mode&append)
                    606:                                && count >= 0 ) {
                    607:                        last_seek += count ;
                    608:                } else {
                    609:                        last_seek = EOF ;
                    610:                }
                    611: 
                    612:                if ( count < 0  ) return restore_errno(errno_orig) ;
                    613:        }
                    614: 
                    615:        setp(base(),ebuf()) ;
                    616:        setg(0,0,0);
                    617: 
                    618:        if ( c == EOF ) /* don't do anything */ ;
                    619:        else if ( unbuffered() ) {
                    620:                char ch = c;
                    621:                last_seek = EOF ;
                    622:                while ( write(xfd,&ch,1)!=1 && ::errno==0 ) ;
                    623:                if ( ::errno != 0 ) return restore_errno(errno_orig) ;
                    624:                }
                    625:        else {
                    626:                sputc(c) ;
                    627:                }
                    628: 
                    629:        restore_errno(errno_orig) ;
                    630:        return zapeof(c) ;
                    631: }
                    632: 
                    633: 
                    634: /*
                    635:  *     Fill an input buffer.
                    636:  *     Returns:        EOF on error or end of input
                    637:  *                     next character on success
                    638:  */
                    639: int filebuf::underflow()
                    640: {
                    641:        int count;
                    642: 
                    643:        if ( !opened ) return EOF ;
                    644:        if ( allocate() == EOF ) return EOF ;
                    645:        if ( last_op() == output ) {
                    646:                if ( sync()==EOF ) return EOF ;
                    647:        }
                    648:        int orig_errno ;
                    649:        save_errno(orig_errno) ;
                    650:        setp(0,0) ;
                    651:        if ( unbuffered() ) {
                    652:                last_seek=EOF ;
                    653:                count = read(xfd,&lahead[0],1) ;
                    654:                setg(&lahead[0],&lahead[0],&lahead[count]) ;
                    655:                if ( count <= 0 ) return EOF ;
                    656:                } 
                    657:        else {
                    658:                register int    rdsize ;
                    659:                if ( blen() > 2*sizeof(long) ) {
                    660:                        /* gptr must be set greater than base to
                    661:                         * guarantee at least 1 char of pushback.
                    662:                         * putting it farther will tend in many common
                    663:                         * cases to keep things aligned. 
                    664:                         */
                    665:                        in_start = base()+sizeof(long) ;
                    666:                        rdsize = blen()-sizeof(long) ;
                    667:                } else {
                    668:                        in_start = base()+1 ;
                    669:                        rdsize = blen()-1 ;
                    670:                }
                    671:                count = read(xfd,in_start,rdsize) ;
                    672:                while ( count<=0 && ::errno==EINTR ) {
                    673:                        /*
                    674:                         * Signal caught and returned before any data
                    675:                         * transfered.  
                    676:                         */
                    677:                        ::errno = 0 ;
                    678:                        count = read(xfd,in_start,rdsize) ;
                    679:                }
                    680: 
                    681:                if ( SEEK_ARITH_OK      
                    682:                                && last_seek != EOF
                    683:                                && mode && !(mode&append) 
                    684:                                && count >= 0 ) {
                    685:                        last_seek += count ;
                    686:                } else {
                    687:                        last_seek = EOF ;
                    688:                }
                    689: 
                    690:                if ( count <= 0 ) {
                    691:                        setg(0,0,0) ;
                    692:                        return restore_errno(orig_errno) ;
                    693:                        }
                    694:                setg(base(),in_start,in_start+count) ;
                    695:        }
                    696:        
                    697:        restore_errno(orig_errno) ;     
                    698:        return zapeof(*gptr());
                    699: }
                    700: 
                    701: filebuf* filebuf::close()
                    702: {
                    703:        int f = xfd ;
                    704:        if ( !opened ) {
                    705:                return 0 ;
                    706:        }
                    707:        if (last_op()==output) overflow();
                    708:        setg(0,0,0) ;
                    709:        setp(0,0) ;
                    710:        opened = 0 ;
                    711:        xfd = -1 ;
                    712:        last_seek = EOF ;
                    713:        if ( mode != 0 ) {
                    714:                mode = 0 ;
                    715:                int orig_errno ;
                    716:                save_errno(orig_errno) ;
                    717:                int ok = ::close(f);
                    718:                restore_errno(orig_errno) ;
                    719:                return ( ok==EOF ? 0 : this ) ;
                    720:        } else {
                    721:                return this ; 
                    722:        }
                    723: }
                    724: 
                    725: int filebuf::sync() 
                    726: {
                    727:        int ok = 0 ;
                    728:        int orig_errno ;
                    729:        save_errno(orig_errno) ;
                    730:        switch(last_op()) {
                    731:        case input: 
                    732:                last_seek = lseek(xfd,gptr()-egptr(),seek_cur) ;
                    733:                if ( last_seek < 0 ) {
                    734:                        ok = EOF ;
                    735:                        last_seek = EOF ;
                    736:                        }
                    737:                break ;
                    738:        case output:
                    739:                ok = overflow() ;
                    740:                /* This does not result in infinite recursion even though
                    741:                 * under some circumstances overflow might call sync.
                    742:                 * it explicitly does not when last_op==output
                    743:                 */
                    744:                break;
                    745:        }
                    746:        setp(0,0) ;
                    747:        setg(0,0,0) ;
                    748:        last_seek = EOF ;
                    749:        restore_errno(orig_errno) ;
                    750:        return (ok==EOF ? EOF : 0 ) ;
                    751: }
                    752: 
                    753: streampos filebuf::seekoff(streamoff p, seek_dir d, int m)
                    754: {
                    755:        int orig_errno ;
                    756:        save_errno(orig_errno) ;
                    757: 
                    758:        if ( last_seek == EOF ) {
                    759:                last_seek = lseek(xfd,0,seek_cur) ;
                    760:                }
                    761:        if ( last_seek == EOF ) return EOF ;
                    762:        if( SEEK_ARITH_OK  && !unbuffered() ) {
                    763:                char* refptr = 0 ;
                    764:                streampos sneed ;
                    765:                streampos sref, minavail, maxavail ;
                    766: 
                    767:                switch ( last_op() ) {
                    768:                case input : {
                    769:                        refptr = gptr() ;
                    770:                        sref = last_seek-(egptr()-gptr()) ;
                    771:                        minavail = last_seek-(egptr()-in_start) ; 
                    772:                        maxavail = last_seek-1 ;
                    773:                        } break ;
                    774:                case output : {
                    775:                        // only allowable seek during output is
                    776:                        // to present position. 
                    777:                        refptr = pptr() ;
                    778:                        sref = last_seek+pptr()-pbase() ;
                    779:                        minavail = maxavail = sref ;
                    780:                        } break  ;
                    781:                }
                    782:                switch( d ) {
                    783:                case seek_beg : sneed = p ; break ;
                    784:                case seek_cur : sneed = sref+p ;break ;
                    785:                case seek_end : refptr = 0 ; break ;
                    786:                                /* Can't do seek_end */
                    787:                }
                    788:                if ( refptr && sneed >= minavail && sneed <= maxavail ) {
                    789:                        switch( last_op() ) {
                    790:                        case input : {
                    791:                                setg(eback(),refptr+(sneed-sref),egptr());
                    792:                                } break ;
                    793:                        case output : {
                    794:                                // Seeking to current position.  Nothing to
                    795:                                // do.
                    796:                                } break ;
                    797:                        default : { 
                    798:                                // shouldn't get here.  Try to recover somehow
                    799:                                sync() ;
                    800:                                seekoff(p,d,m);
                    801:                                } break ;
                    802:                        }
                    803:                        return sneed ;
                    804:                }
                    805:                if ( refptr && sneed < sref && sneed+blen()/2 > sref 
                    806:                        && last_op() == input ) {
                    807:                        // looks like we are stepping backward through
                    808:                        // a file.  Performance may be improved by
                    809:                        // backing up a little extra. 
                    810: 
                    811:                        streampos toofar = sneed-blen()/2 ;
                    812:                        if ( toofar < 0 ) toofar = 0 ;
                    813:                        sync() ;
                    814:                        last_seek=lseek(xfd,toofar,seek_beg) ;
                    815:                        overflow();
                    816:                        seekoff(p,d,m);
                    817:                }
                    818:        }
                    819: 
                    820:        restore_errno(orig_errno) ;
                    821:        if ( sync()==EOF )      return EOF ;
                    822:        else    {
                    823:                last_seek=lseek(xfd,p,d) ;
                    824:                return last_seek ;
                    825:                }
                    826: }
                    827: 
                    828: filebuf::filebuf()
                    829:        : xfd(-1), opened(0), mode(0), last_seek(EOF)
                    830: {
                    831: 
                    832: }
                    833: 
                    834: filebuf::filebuf(int f)
                    835:        : xfd(f), opened(1), mode(0), last_seek(EOF)
                    836: {
                    837: 
                    838: }
                    839: 
                    840: filebuf::filebuf(int f, char* p, int l) 
                    841:        : streambuf(p,l), xfd(f), opened(1), mode(0), last_seek(EOF)
                    842: {
                    843: 
                    844: }
                    845:        
                    846: filebuf::~filebuf() {
                    847:        close() ;
                    848:        }
                    849: 
                    850: streambuf* filebuf::setbuf(char* p , int len)
                    851: {
                    852:        if ( is_open() && base() ) return 0 ;
                    853:        // Note the special case of allowing buffering to be turned
                    854:        // on even for an already opened filebuf.
                    855:        setb(0,0) ;
                    856:        return streambuf::setbuf(p,len) ;
                    857: }
                    858: 0707070044044145301004440042240042240000011662000443034061200000600000006470flt.c/*ident      "@(#)ctrans:lib/stream/flt.c    1.1.4.1" */
                    859: /**************************************************************************
                    860:                         Copyright (c) 1984 AT&T
                    861:                           All Rights Reserved   
                    862: 
                    863:         THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T
                    864:         
                    865:         The copyright notice above does not evidence any        
                    866:         actual or intended publication of such source code.
                    867: 
                    868: flt.c:
                    869: 
                    870: *****************************************************************************/
                    871: 
                    872: #include <iostream.h>
                    873: #include <ctype.h>
                    874: #include <stdio.h>
                    875: #include <libc.h>
                    876: #include <string.h>
                    877: 
                    878: #define OSTREAM ostream
                    879: #define ISTREAM istream
                    880: 
                    881: // This file contains all the functions having to do with i/o of
                    882: // floats and doubles.  It drags in lots of stuff from stdio, which
                    883: // is why I made it separate.
                    884: 
                    885: istream& ISTREAM::operator>>(double& d)
                    886: /*
                    887:        {+|-} d* {.} d* { e|E {+|-} d+ } 
                    888:        except that
                    889:                - a dot must be pre- or succeeded by at least one digit
                    890:                - an exponent must be preceded by at least one digit
                    891: */
                    892: {
                    893:        register c = 0;
                    894:        register anydigits = 0 ;
                    895:        char buf[256];
                    896:        register char* p = buf;
                    897:        register streambuf* nbp = bp;
                    898:        
                    899:        if (!ipfx() ) return *this ;
                    900: 
                    901:        /* get the sign */
                    902:        switch (c = nbp->sgetc()) {
                    903:        case EOF:
                    904:                setstate(eofbit|failbit) ;
                    905:                return *this;
                    906:        case '-':
                    907:        case '+':
                    908:                *p++ = c;
                    909:                c = bp->snextc();
                    910:        }
                    911: 
                    912:        /* get integral part */
                    913:        while (isdigit(c)) {
                    914:                *p++ = c;
                    915:                c = bp->snextc();
                    916:                anydigits = 1 ;
                    917:        }
                    918: 
                    919:        /* get fraction */
                    920:        if (c == '.') {
                    921:                do {
                    922:                        *p++ = c;
                    923:                        c = bp->snextc();
                    924:                        anydigits = 1 ;
                    925:                } while (isdigit(c));
                    926:        }
                    927: 
                    928:        /* get exponent */
                    929:        if ( anydigits && (c == 'e' || c == 'E')) {
                    930:                *p++ = c;
                    931:                switch (c = nbp->snextc()) {
                    932:                case EOF:
                    933:                        setstate(eofbit|failbit) ;
                    934:                        return *this;
                    935:                case '-':
                    936:                case '+':
                    937:                        *p++ = c;
                    938:                        c = bp->snextc();
                    939:                }
                    940:                while (isdigit(c)) {
                    941:                        *p++ = c;
                    942:                        c = bp->snextc();
                    943:                }
                    944:        }
                    945: 
                    946:        *p = 0;
                    947:        d = atof(buf);
                    948: 
                    949:        if (c == EOF) setstate(eofbit) ;
                    950:        if (!anydigits) setstate(badbit) ;
                    951:        return *this;
                    952: }
                    953: 
                    954: 
                    955: istream& ISTREAM::operator>>(float& f)
                    956: {
                    957:        double d;
                    958: 
                    959: 
                    960:        if (!ipfx() ) return *this ;
                    961: 
                    962:        *this >> d ;
                    963:        if ( good() ) f = d;
                    964: 
                    965:        return *this;
                    966: }
                    967: 
                    968: ostream& OSTREAM::operator<<(float f)  { return *this << (double)f ; }
                    969: 
                    970: static const int fltbits =
                    971:                ios::scientific|ios::fixed|ios::uppercase ;
                    972: 
                    973: ostream& OSTREAM::operator<<(double d)
                    974: {
                    975:        char buf[32];
                    976:        int w = width(0) ;
                    977:        int p = precision() ;
                    978:        int explicitp = ( p > 0 ) || (flags()&ios::fixed) ;
                    979:        if (!opfx()) return *this;
                    980:        long bits = flags() & fltbits ;
                    981:        char fmt[20] ;
                    982:        strcpy(fmt,"%") ;
                    983:        if ( flags() & ios::showpoint ) {
                    984:                strcat(fmt,"#") ;
                    985:                }
                    986:        if ( flags() & ios::showpos ) {
                    987:                strcat(fmt,"+") ;
                    988:                }
                    989:        if ( explicitp ) {
                    990:                strcat(fmt,".*") ;
                    991:                }
                    992: 
                    993:        long mode = flags()
                    994:                    & (ios::scientific|ios::fixed|ios::uppercase);
                    995:        
                    996:        switch(mode) {
                    997:        case ios::scientific :          strcat(fmt,"e") ; break ;
                    998:        case ios::scientific|ios::uppercase :
                    999:                                                strcat(fmt,"E") ; break;
                   1000:        case ios::fixed :                       strcat(fmt,"f") ; break ;
                   1001:        case ios::fixed|ios::uppercase: strcat(fmt,"F") ; break ;
                   1002:        case ios::uppercase :           strcat(fmt,"G") ; break ;
                   1003:        default :                               strcat(fmt,"g") ; break ;
                   1004:        }
                   1005: 
                   1006:        if ( explicitp ) {
                   1007:                sprintf(buf,fmt,p,d) ;
                   1008:                }
                   1009:        else {
                   1010:                sprintf(buf,fmt,d) ;
                   1011:                }
                   1012: 
                   1013:        int padf = w-strlen(buf) ;
                   1014:        if ( padf < 0 ) padf = 0 ;
                   1015:        if ( padf && !(flags()&ios::left) ) {
                   1016:                while ( padf-- > 0 ) put(fill()) ;
                   1017:                }
                   1018:        *this << buf ;
                   1019:        while ( padf-- > 0 ) put(fill()) ;
                   1020:        osfx() ;
                   1021:        return *this ;
                   1022:        }
                   1023: 0707070044044146061004440042240042240000011611500443013563700001200000005353fstream.c/*ident  "@(#)ctrans:lib/stream/fstream.c        1.1.2.2" */
                   1024: /**************************************************************************
                   1025:                         Copyright (c) 1984 AT&T
                   1026:                           All Rights Reserved   
                   1027: 
                   1028:         THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T
                   1029:       
                   1030:         The copyright notice above does not evidence any        
                   1031:         actual or intended publication of such source code.
                   1032: 
                   1033: fstream.c:
                   1034: 
                   1035: *****************************************************************************/
                   1036: 
                   1037: #include <iostream.h>
                   1038: #include <fstream.h>
                   1039: 
                   1040: static const int ios_atend = ios::ate ;
                   1041: static const int ios_input = ios::in ;
                   1042: static const int ios_output = ios::out ;
                   1043: static const int ios_append = ios::app ;
                   1044: static const int seek_cur = ios::cur ;
                   1045: static const int seek_end = ios::end ;
                   1046: static const int seek_beg = ios::beg ;
                   1047: 
                   1048: fstreambase::fstreambase() { init(&buf) ; }
                   1049: 
                   1050: fstreambase::fstreambase(const char* name, int mode, int prot)
                   1051: {
                   1052:        init(&buf) ;
                   1053:        open(name,mode,prot) ;
                   1054:        }
                   1055: 
                   1056: fstreambase::fstreambase(int fd) 
                   1057:        : buf(fd) 
                   1058: {
                   1059:        init(&buf) ;
                   1060:        }
                   1061: 
                   1062: fstreambase::fstreambase(int fd, char* p, int l)
                   1063:        : buf(fd,p,l) 
                   1064: {
                   1065:        init(&buf) ;
                   1066:        }
                   1067: 
                   1068: static inline void fstreambase::verify(int ok)
                   1069: {
                   1070:        if ( ok ) clear(0) ;
                   1071:        else      setstate(ios::failbit) ;
                   1072:        }
                   1073: 
                   1074: void fstreambase::setbuf(char* p, int len) 
                   1075: {
                   1076:        verify(buf.setbuf(p,len) != 0 ) ;
                   1077:        }
                   1078: 
                   1079: void fstreambase::open(const char* name, int mode, int prot)
                   1080: {
                   1081:        verify(buf.open(name,mode,prot) != 0 ) ;
                   1082:        }
                   1083: 
                   1084: void fstreambase::attach(int fd ) 
                   1085: {
                   1086:        verify(buf.attach(fd) != 0 ) ;
                   1087:        }
                   1088: 
                   1089: void fstreambase::close() 
                   1090: {
                   1091:        verify(buf.close() != (filebuf*)0 ) ;
                   1092:        }
                   1093: 
                   1094: fstreambase::~fstreambase() { }
                   1095: 
                   1096: ifstream::ifstream() { }
                   1097: ifstream::ifstream(const char* name, int mode, int prot)
                   1098:        : fstreambase(name,mode|ios_input,prot) { }
                   1099: ifstream::ifstream(int fd) : fstreambase(fd) { }
                   1100: ifstream::ifstream(int fd, char* p, int l) : fstreambase(fd,p,l) { }
                   1101: ifstream::~ifstream() { }
                   1102: 
                   1103: void ifstream::open(const char* name, int mode, int prot)
                   1104: {
                   1105:        verify(rdbuf()->open(name,mode|ios_input,prot) != (filebuf*)0 ) ;
                   1106:        }
                   1107: 
                   1108: ofstream::ofstream() { }
                   1109: ofstream::ofstream(const char* name, int mode, int prot)
                   1110:        : fstreambase(name,mode|ios_output,prot) { }
                   1111: ofstream::ofstream(int fd) : fstreambase(fd) { }
                   1112: ofstream::ofstream(int fd, char* p, int l) : fstreambase(fd,p,l) { }
                   1113: ofstream::~ofstream() { }
                   1114: void ofstream::open(const char* name, int mode, int prot)
                   1115: {
                   1116:        verify(rdbuf()->open(name,mode|ios_output,prot) != (filebuf*)0 ) ;
                   1117:        }
                   1118: 
                   1119: fstream::fstream() { }
                   1120: fstream::fstream(const char* name, int mode, int prot)
                   1121:        : fstreambase(name,mode,prot) { }
                   1122: fstream::fstream(int fd) : fstreambase(fd) { }
                   1123: fstream::fstream(int fd, char* p, int l) : fstreambase(fd,p,l) { }
                   1124: fstream::~fstream() { }void fstream::open(const char* name, int mode, int prot)
                   1125: {
                   1126:        verify(rdbuf()->open(name,mode,prot) != (filebuf*)0 ) ;
                   1127:        }
                   1128: 0707070044044146021004440042240042240000011560430443013461300001200000005573fstream.h/*ident  "@(#)ctrans:incl/fstream.h      1.1.1.2" */
                   1129: /**************************************************************************
                   1130:                         Copyright (c) 1984 AT&T
                   1131:                           All Rights Reserved   
                   1132: 
                   1133:         THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T
                   1134:       
                   1135:         The copyright notice above does not evidence any        
                   1136:         actual or intended publication of such source code.
                   1137: 
                   1138: *****************************************************************************/
                   1139: #ifndef FSTREAMH
                   1140: #define FSTREAMH
                   1141: 
                   1142: #include <iostream.h>
                   1143: 
                   1144: class  filebuf : public streambuf {    /* a stream buffer for files */
                   1145: public:
                   1146:        static const int openprot ; /* default protection for open */
                   1147: public:
                   1148:                        filebuf() ;
                   1149:                        filebuf(int fd);
                   1150:                        filebuf(int fd, char*  p, int l) ;
                   1151: 
                   1152:        int             is_open() { return opened ; }
                   1153:        int             fd() { return xfd ; }
                   1154:        filebuf*        open(const char *name, int om, int prot=openprot);
                   1155:        filebuf*        attach(int fd) ;
                   1156:        filebuf*        close() ;
                   1157:                        ~filebuf() ;
                   1158: public: /* virtuals */
                   1159:        virtual int     overflow(int=EOF);
                   1160:        virtual int     underflow();
                   1161:        virtual int     sync() ;
                   1162:        virtual streampos
                   1163:                        seekoff(streamoff,seek_dir,int) ;
                   1164:        virtual streambuf*
                   1165:                        setbuf(char*  p, int len) ;
                   1166: protected:
                   1167:        int             xfd;    
                   1168:        int             mode ;
                   1169:        char            opened;
                   1170:        streampos       last_seek ;
                   1171:        char*           in_start;
                   1172:        int             last_op();
                   1173:        char            lahead[2] ;
                   1174: };
                   1175: 
                   1176: class fstreambase : virtual public ios { 
                   1177: public:
                   1178:                        fstreambase() ;
                   1179:        
                   1180:                        fstreambase(const char* name, 
                   1181:                                        int mode,
                   1182:                                        int prot=filebuf::openprot) ;
                   1183:                        fstreambase(int fd) ;
                   1184:                        fstreambase(int fd, char*  p, int l) ;
                   1185:                        ~fstreambase() ;
                   1186:        void            open(const char* name, int mode, 
                   1187:                                        int prot=filebuf::openprot) ;
                   1188:        void            attach(int fd);
                   1189:        void            close() ;
                   1190:        void            setbuf(char*  p, int l) ;
                   1191:        filebuf*        rdbuf() { return &buf ; }
                   1192: private:
                   1193:        filebuf         buf ;
                   1194: protected:
                   1195:        void            verify(int) ;
                   1196: } ;
                   1197: 
                   1198: class ifstream : public fstreambase, public istream {
                   1199: public:
                   1200:                        ifstream() ;
                   1201:                        ifstream(const char* name, 
                   1202:                                        int mode=ios::in,
                   1203:                                        int prot=filebuf::openprot) ;
                   1204:                        ifstream(int fd) ;
                   1205:                        ifstream(int fd, char*  p, int l) ;
                   1206:                        ~ifstream() ;
                   1207: 
                   1208:        filebuf*        rdbuf() { return fstreambase::rdbuf(); }
                   1209:        void            open(const char* name, int mode=ios::in, 
                   1210:                                        int prot=filebuf::openprot) ;
                   1211: } ;
                   1212: 
                   1213: class ofstream : public fstreambase, public ostream {
                   1214: public:
                   1215:                        ofstream() ;
                   1216:                        ofstream(const char* name, 
                   1217:                                        int mode=ios::out,
                   1218:                                        int prot=filebuf::openprot) ;
                   1219:                        ofstream(int fd) ;
                   1220:                        ofstream(int fd, char*  p, int l) ;
                   1221:                        ~ofstream() ;
                   1222: 
                   1223:        filebuf*        rdbuf() { return fstreambase::rdbuf(); }
                   1224:        void            open(const char* name, int mode=ios::out, 
                   1225:                                        int prot=filebuf::openprot) ;
                   1226: } ;
                   1227: 
                   1228: class fstream : public fstreambase, public iostream {
                   1229: public:
                   1230:                        fstream() ;
                   1231:        
                   1232:                        fstream(const char* name, 
                   1233:                                        int mode,
                   1234:                                        int prot=filebuf::openprot) ;
                   1235:                        fstream(int fd) ;
                   1236:                        fstream(int fd, char*  p, int l) ;
                   1237:                        ~fstream() ;
                   1238:        filebuf*        rdbuf() { return fstreambase::rdbuf(); }
                   1239:        void            open(const char* name, int mode, 
                   1240:                                int prot=filebuf::openprot) ;
                   1241: } ;
                   1242: 
                   1243: #endif
                   1244: 0707070044044142541004440042240042240000011572060437432273600000500000003350in.c/*ident       "@(#)ctrans:lib/stream/in.c     1.1.1.1" */
                   1245: /**************************************************************************
                   1246:                        Copyright (c) 1984 AT&T
                   1247:                          All Rights Reserved   
                   1248: 
                   1249:        THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T
                   1250:        
                   1251:        The copyright notice above does not evidence any        
                   1252:        actual or intended publication of such source code.
                   1253: 
                   1254: in.c:
                   1255: 
                   1256: *****************************************************************************/
                   1257: 
                   1258: #include <ctype.h>
                   1259: #include <iostream.h>
                   1260: 
                   1261: #define ISTREAM istream
                   1262: 
                   1263: void ISTREAM::eatwhite ()
                   1264: {
                   1265:        register streambuf *nbp = bp;
                   1266:        register int c = nbp->sgetc();
                   1267:        while (isspace(c)) c = nbp->snextc();
                   1268:        if (c == EOF) setstate(eofbit);
                   1269: }
                   1270: 
                   1271: void ISTREAM::xget(char* c) 
                   1272: {
                   1273:        register streambuf* sbp = bp ;
                   1274:        if ( !ipfx(1) ) return ;
                   1275:        x_gcount = 0 ; 
                   1276:        register int newc = sbp->sbumpc() ;
                   1277:        if ( newc == EOF ) {
                   1278:                setstate(failbit|eofbit) ;
                   1279:                return ;
                   1280:                }
                   1281:        x_gcount = 1 ;
                   1282:        *c = newc ;
                   1283:        }
                   1284: 
                   1285: istream& ISTREAM::operator>>(register char* s)
                   1286: {
                   1287:        /* get string */
                   1288: 
                   1289:        register int w = width(0) ;
                   1290:        if ( flags()&skipws ) {
                   1291:                // We don't know a maximum number of required
                   1292:                // characters 
                   1293:                if ( !ipfx(0) ) return *this ;
                   1294:                }
                   1295:        else if ( !ipfx(w) ) {
                   1296:                return *this ;
                   1297:                }
                   1298: 
                   1299:        register streambuf *nbp = bp;
                   1300:        register int c = nbp->sgetc();
                   1301: 
                   1302:        if (c == EOF) setstate(failbit|eofbit) ;
                   1303: 
                   1304:        if ( w > 0 ) {
                   1305:                while (!isspace(c) && c != EOF && --w > 0 ) {
                   1306:                        *s++ = c;
                   1307:                        c = nbp->snextc();
                   1308:                }
                   1309:        } else {
                   1310:                while (!isspace(c) && c != EOF ) {
                   1311:                        *s++ = c;
                   1312:                        c = nbp->snextc();
                   1313:                }
                   1314:        }
                   1315:        
                   1316:        *s = '\0';
                   1317: 
                   1318:        if (c == EOF) setstate(eofbit) ;
                   1319: 
                   1320:        return *this;
                   1321: }
                   1322: 
                   1323: istream& ISTREAM::operator>>(unsigned char* s)
                   1324: {
                   1325:        return *this >> (char*)s ;
                   1326: }
                   1327: 
                   1328: istream& ISTREAM::putback(register char c)
                   1329: {
                   1330:        if ( !good() ) return *this ;
                   1331:        if ( bp->sputbackc(c) == EOF ) setstate(badbit) ;
                   1332:        return *this;
                   1333: }
                   1334: 0707070044044142711004440042240042240000011574300437215614100001000000010725intin.c/*ident    "@(#)ctrans:lib/stream/intin.c  1.1.1.1" */
                   1335: /**************************************************************************
                   1336:                        Copyright (c) 1984 AT&T
                   1337:                          All Rights Reserved   
                   1338: 
                   1339:        THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T
                   1340:        
                   1341:        The copyright notice above does not evidence any        
                   1342:        actual or intended publication of such source code.
                   1343: 
                   1344: intin.c: Input conversions of numbers
                   1345: 
                   1346: *****************************************************************************/
                   1347: 
                   1348: 
                   1349: #include <ctype.h>
                   1350: #include <iostream.h>
                   1351: 
                   1352: /****************
                   1353:  * 
                   1354:  *     This file contains the extraction operations for integer input. 
                   1355:  *     It suffers from several flaws that ought to be fixed. 
                   1356:  *
                   1357:  *     All other versions depend on the extractor for longs to
                   1358:  *     do the real work.  This is OK when int==long but on a machine
                   1359:  *     where int!=long there will be a large performance penalty.
                   1360:  *
                   1361:  *     Overflow detection is limited to cases where the long is
                   1362:  *     shortened and changes its value.  This misses a lot of cases.
                   1363:  *
                   1364:  ***************/
                   1365: 
                   1366: 
                   1367: #define ISTREAM istream
                   1368: 
                   1369: static const int a10 = 'a'-10;
                   1370: static const int A10 = 'A'-10;
                   1371: 
                   1372: istream& ISTREAM::operator>>(long& i)
                   1373: {
                   1374:        // This code ignores overflows.  This ought to be fixed
                   1375:        // in some future version.
                   1376: 
                   1377:        if ( !ipfx() ) return *this ;
                   1378: 
                   1379:        register int    c;
                   1380:        register int    base    ;
                   1381: 
                   1382:        switch ( flags()&(ios::dec|ios::hex|ios::oct) ) {
                   1383:                case ios::hex : base = 16 ; break ;
                   1384:                case ios::oct : base = 8 ; break ;
                   1385:                case ios::dec : base = 10 ; break ;
                   1386:                default :               base = 0 ; break ;
                   1387:                }
                   1388: 
                   1389:        register streambuf *nbp = bp;   // put bp in a reg for efficiency
                   1390:        register int    x       = 0 ;   // how many chars are processed 
                   1391:        register int    neg     = 0;    // set to '-' for negative number
                   1392: 
                   1393:        switch (c = nbp->sgetc()) {
                   1394:        case '-':
                   1395:                neg = 1 ;
                   1396:                c = nbp->snextc(); ++x ;
                   1397:                break;
                   1398:        case '+':
                   1399:                c = nbp->snextc(); ++x ;
                   1400:                break;
                   1401:        case EOF:
                   1402:                setstate(failbit|eofbit) ;
                   1403:                break ;
                   1404:        }
                   1405: 
                   1406:        if ( base==0 && c=='0' ) {
                   1407:                c = nbp->snextc() ; ++x ;
                   1408: 
                   1409:                if ( c=='x' || c=='X' ) {
                   1410:                        base = 16 ;
                   1411:                        c = nbp->snextc() ; ++x ;
                   1412:                        }
                   1413:                else {
                   1414:                        base = 8 ;
                   1415:                }
                   1416:        } else if ( base==0 ) base = 10 ;
                   1417: 
                   1418:        // for efficiency we have similar loops
                   1419:        // Note that when we reach this point c has already been set to
                   1420:        // the first char of the string to be converted. 
                   1421: 
                   1422:        if ( base==10 ) {
                   1423:                register long ii = 0;
                   1424:                for( ; isdigit(c) ; c=nbp->snextc(),++x ) {
                   1425:                        
                   1426:                        /* accumulate as negative to avoid problems
                   1427:                         * with biggest negative integer on
                   1428:                         * 2's complement machines
                   1429:                         */
                   1430:                        ii = ii*10-(c-'0');
                   1431:                }
                   1432:                i = neg ? ii : -ii;
                   1433:        } else if ( base < 10 ) {
                   1434:                register unsigned long ii = 0;
                   1435:                for( ; isdigit(c)  ; c=nbp->snextc(),++x ) {
                   1436:                        /* accumulate as unsigned */
                   1437:                        register int diff = c-'0' ;
                   1438:                        if ( diff >= base ) break ;
                   1439:                        ii = ii*base+diff ;
                   1440:                }
                   1441:                i = neg ? -(long)ii : (long)ii;
                   1442:        } else if ( base>10 ) { /* hex like base */
                   1443:                register unsigned long ii = 0;
                   1444:                /* accumulate as unsigned */
                   1445:                for( ; isxdigit(c) ; c=nbp->snextc(),++x ) {
                   1446:                        register int diff ;
                   1447:                        if ( isdigit(c) )       diff = (c-'0');
                   1448:                        else if ( isupper(c) )  diff = (c-A10);
                   1449:                        else                    diff = (c-a10);
                   1450:                        if ( diff >= base ) break ;
                   1451:                        ii = ii*base+diff ;
                   1452:                }
                   1453:                i = neg ? -(long)ii : (long)ii;
                   1454:        }
                   1455:        
                   1456: 
                   1457:        if (x == 0 ) setstate(failbit) ;
                   1458:                                // Correct treatment of this case
                   1459:                                // (i.e. no correct digits) 
                   1460:                                // is unclear. Making it an error
                   1461:                                // avoids certain infinite loops.
                   1462:                        
                   1463:        return *this;
                   1464: }
                   1465: 
                   1466: istream& ISTREAM::operator>>(int& i)
                   1467: {
                   1468:        long l;
                   1469:        
                   1470:        if ( !ipfx() ) return *this ;
                   1471: 
                   1472:        *this>>l ;
                   1473:        if ( good() ) {
                   1474:                i = (int)l ;
                   1475:                if  ( i != l ) {
                   1476:                        // overflow
                   1477:                        setstate(failbit) ;
                   1478:                        }
                   1479:                } 
                   1480:        return *this;
                   1481: }
                   1482: 
                   1483: istream& ISTREAM::operator>>(short& i)
                   1484: {
                   1485:        long l;
                   1486: 
                   1487:        if (!ipfx() ) return *this ;
                   1488: 
                   1489:        *this>>l ;
                   1490:        if ( good() ) {
                   1491:                i = (short)l ;
                   1492:                if  ( i != l ) {
                   1493:                        // overflow
                   1494:                        setstate(failbit) ;
                   1495:                        }
                   1496:                } 
                   1497: 
                   1498:        return *this;
                   1499: }
                   1500: 
                   1501: 
                   1502: // The following routines deal with unsigned by reading a long and
                   1503: // copying.  This is certainly safe for "shorts", but is
                   1504: // slightly problematic for ints and longs.  It works on "common"
                   1505: // machines.
                   1506: 
                   1507: 
                   1508: istream& ISTREAM::operator>>(unsigned short& u)
                   1509: {
                   1510:        long l ;
                   1511:        *this >> l ;
                   1512:        if ( good() ) {
                   1513:                u = (unsigned short)l ;
                   1514:                if  ( u != l ) {
                   1515:                        // overflow
                   1516:                        setstate(failbit) ;
                   1517:                        }
                   1518:                } 
                   1519:        return *this ;
                   1520:        } 
                   1521: 
                   1522: istream& ISTREAM::operator>>(unsigned int& u)
                   1523: {
                   1524:        long l ;
                   1525:        *this >> l ;
                   1526:        if ( good() ) {
                   1527:                u = (unsigned int)l ;
                   1528:                if  ( u != l ) {
                   1529:                        // overflow
                   1530:                        setstate(failbit) ;
                   1531:                        }
                   1532:                } 
                   1533:        return *this ;
                   1534:        } 
                   1535: 
                   1536: istream& ISTREAM::operator>>(unsigned long& u)
                   1537: {
                   1538:        long l ;
                   1539:        *this >> l ;
                   1540:        if ( good() ) {
                   1541:                u = (unsigned long)l ;
                   1542:                if  ( u != l ) {
                   1543:                        // overflow
                   1544:                        setstate(failbit) ;
                   1545:                        }
                   1546:                } 
                   1547:        return *this ;
                   1548:        } 
                   1549: 
                   1550: 0707070044044142501004440042240042240000011613440437222454700001200000006507iomanip.h/*ident  "@(#)ctrans:incl/iomanip.h      1.1.1.2" */
                   1551: /**************************************************************************
                   1552:                         Copyright (c) 1984 AT&T
                   1553:                           All Rights Reserved   
                   1554: 
                   1555:         THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T
                   1556:       
                   1557:         The copyright notice above does not evidence any        
                   1558:         actual or intended publication of such source code.
                   1559: 
                   1560: *****************************************************************************/
                   1561: 
                   1562: #ifndef IOMANIPH
                   1563: #define IOMANIPH
                   1564: 
                   1565: #include <generic.h>
                   1566: 
                   1567: #define SMANIP(T)name2(smanip_,T)
                   1568: #define SAPP(T)name2(sapply_,T)
                   1569: #define IMANIP(T)name2(imanip_,T)
                   1570: #define OMANIP(T)name2(omanip_,T)
                   1571: #define IOMANIP(T)name2(iomanip_,T)
                   1572: #define IAPP(T)name2(iapply_,T)
                   1573: #define OAPP(T)name2(oapply_,T)
                   1574: #define IOAPP(T)name2(ioapply_,T)
                   1575: 
                   1576: #define IOMANIPdeclare(T)                                              \
                   1577: class SMANIP(T) {                                                      \
                   1578:        ios& (*fct)(ios&,T) ;                                           \
                   1579:        T arg ;                                                         \
                   1580: public:                                                                        \
                   1581:        SMANIP(T)(ios& (*f)(ios&, T), T a) :                            \
                   1582:                        fct(f), arg(a) { }                              \
                   1583:        friend istream& operator>>(istream& i, SMANIP(T)& m) {          \
                   1584:                        ios* s = &i ;                                   \
                   1585:                        (*m.fct)(*s,m.arg) ; return i ; }               \
                   1586:        friend ostream& operator<<(ostream& o, SMANIP(T)& m) {          \
                   1587:                        ios* s = &o ;                                   \
                   1588:                        (*m.fct)(*s,m.arg) ; return o ; }               \
                   1589:        } ;                                                             \
                   1590: class SAPP(T) {                                                                \
                   1591:        ios& (*fct)(ios&, T) ;                                          \
                   1592: public:                                                                        \
                   1593:        SAPP(T)(ios& (*f)(ios&,T)) : fct(f) { }                         \
                   1594:        SMANIP(T) operator()(T a) {                                     \
                   1595:                        return SMANIP(T)(fct,a) ; }                     \
                   1596:        } ;                                                             \
                   1597: class IMANIP(T) {                                                      \
                   1598:        istream& (*fct)(istream&,T) ;                                   \
                   1599:        T arg ;                                                         \
                   1600: public:                                                                        \
                   1601:        IMANIP(T)(istream& (*f)(istream&, T), T a ) :                   \
                   1602:                fct(f), arg(a) { }                                      \
                   1603:        friend istream& operator>>(istream& s, IMANIP(T)& m) {          \
                   1604:                return(*m.fct)(s,m.arg) ;                               \
                   1605:                }                                                       \
                   1606:        } ;                                                             \
                   1607: class IAPP(T) {                                                                \
                   1608:        istream& (*fct)(istream&, T) ;                                  \
                   1609: public:                                                                        \
                   1610:        IAPP(T)(istream& (*f)(istream&,T)) : fct(f) { }                 \
                   1611:        IMANIP(T) operator()(T a) {                                     \
                   1612:                        return IMANIP(T)(fct,a) ; }                     \
                   1613:        } ;                                                             \
                   1614: class OMANIP(T) {                                                      \
                   1615:        ostream& (*fct)(ostream&,T) ;                                   \
                   1616:        T arg ;                                                         \
                   1617: public:                                                                        \
                   1618:        OMANIP(T)(ostream& (*f)(ostream&, T), T a ) :                   \
                   1619:                fct(f), arg(a) { }                                      \
                   1620:        friend ostream& operator<<(ostream& s, OMANIP(T)& m) {          \
                   1621:                return(*m.fct)(s,m.arg) ;                               \
                   1622:                }                                                       \
                   1623:        } ;                                                             \
                   1624: class OAPP(T) {                                                                \
                   1625:        ostream& (*fct)(ostream&, T) ;                                  \
                   1626: public:                                                                        \
                   1627:        OAPP(T)(ostream& (*f)(ostream&,T)) : fct(f) { }                 \
                   1628:        OMANIP(T) operator()(T a) {                                     \
                   1629:                        return OMANIP(T)(fct,a) ; }                     \
                   1630:        } ;                                                             \
                   1631: class IOMANIP(T) {                                                     \
                   1632:        iostream& (*fct)(iostream&,T) ;                                 \
                   1633:        T arg ;                                                         \
                   1634: public:                                                                        \
                   1635:        IOMANIP(T)(iostream& (*f)(iostream&, T), T a ) :                \
                   1636:                fct(f), arg(a) { }                                      \
                   1637:        friend istream& operator>>(iostream& s, IOMANIP(T)& m) {        \
                   1638:                return(*m.fct)(s,m.arg) ;                               \
                   1639:                }                                                       \
                   1640:        friend ostream& operator<<(iostream& s, IOMANIP(T)& m) {        \
                   1641:                return(*m.fct)(s,m.arg) ;                               \
                   1642:                }                                                       \
                   1643:        } ;                                                             \
                   1644: class IOAPP(T) {                                                       \
                   1645:        iostream& (*fct)(iostream&, T) ;                                \
                   1646: public:                                                                        \
                   1647:        IOAPP(T)(iostream& (*f)(iostream&,T)) : fct(f) { }              \
                   1648:        IOMANIP(T) operator()(T a) {                                    \
                   1649:                        return IOMANIP(T)(fct,a) ; }                    \
                   1650:        } ;                                                             \
                   1651: 
                   1652: 
                   1653: 
                   1654: IOMANIPdeclare(int) ;
                   1655: IOMANIPdeclare(long) ;
                   1656: 
                   1657: SMANIP(int)    setbase(int b) ;        /* 10, 8, 16 or 0 */
                   1658: SMANIP(long)   resetiosflags(long b) ;
                   1659: SMANIP(long)   setiosflags(long b) ;
                   1660: SMANIP(int)    setfill(int f);
                   1661: SMANIP(int)    setprecision(int p);
                   1662: SMANIP(int)    setw(int w) ;
                   1663: 
                   1664: #endif
                   1665: 0707070044044142431004440042240042240000011577100443212410100001300000032472iostream.h/*ident "@(#)ctrans:incl/iostream.h     1.1.5.2" */
                   1666: /**************************************************************************
                   1667:                         Copyright (c) 1984 AT&T
                   1668:                           All Rights Reserved   
                   1669: 
                   1670:         THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T
                   1671:       
                   1672:         The copyright notice above does not evidence any        
                   1673:         actual or intended publication of such source code.
                   1674: 
                   1675: *****************************************************************************/
                   1676: #ifndef IOSTREAMH
                   1677: #define IOSTREAMH
                   1678: 
                   1679: #include <memory.h>
                   1680:                /* Some inlines use memcpy */
                   1681: 
                   1682: /* If EOF is defined already verify that it is -1.  Otherwise
                   1683:  * define it.
                   1684:  */
                   1685: 
                   1686: #ifdef EOF
                   1687: #      if EOF!=-1
                   1688: #              define EOF (-1) 
                   1689: #      endif
                   1690: #else
                   1691: #      define EOF (-1)
                   1692: #endif
                   1693: 
                   1694: /* Don't worry about NULL not being 0 */
                   1695: #ifndef NULL
                   1696: #      define NULL 0
                   1697: #endif
                   1698: 
                   1699: #define        zapeof(c) ((c)&0377)
                   1700:            /* extracts char from c. The critical requirement is
                   1701:             *      zapeof(EOF)!=EOF
                   1702:             * ((c)&0377) and ((unsigned char)(c)) are alternative definitions
                   1703:             * whose efficiency depends on compiler environment.
                   1704:             */
                   1705: 
                   1706: typedef long streampos ;
                   1707: typedef long streamoff ;
                   1708: 
                   1709: class streambuf ;
                   1710: class ostream ;
                   1711: 
                   1712: 
                   1713: class ios {
                   1714: public: /* Some enums are declared in ios to avoid pollution of
                   1715:         * global namespace
                   1716:         */
                   1717:        enum io_state   { goodbit=0, eofbit=1, failbit=2, badbit=4, 
                   1718:                                hardfail=0200};
                   1719:                                /* hard fail can be set and reset internally,
                   1720:                                 * but not via public function */
                   1721:        enum open_mode  { in=1, out=2, ate=4, app=010, trunc=020,
                   1722:                                nocreate=040, noreplace=0100} ;
                   1723:        enum seek_dir   { beg=0, cur=1, end=2 } ;
                   1724: 
                   1725:        /* flags for controlling format */
                   1726:        enum            { skipws=01,    
                   1727:                                        /* skip whitespace on input */
                   1728:                          left=02,  right=04, internal=010,
                   1729:                                        /* padding location */
                   1730:                          dec=020, oct=040, hex=0100, 
                   1731:                                        /* conversion base */
                   1732:                          showbase=0200, showpoint=0400, uppercase=01000,
                   1733:                          showpos=02000, 
                   1734:                                        /* modifiers */
                   1735:                          scientific=04000, fixed=010000,
                   1736:                                        /* floating point notation */
                   1737:                          unitbuf=020000, stdio=040000
                   1738:                                        /* stuff to control flushing */
                   1739:                          } ;
                   1740:        static const long 
                   1741:                        basefield ; /* dec|oct|hex */
                   1742:        static const long
                   1743:                        adjustfield ; /* left|right|internal */
                   1744:        static const long
                   1745:                        floatfield ; /* scientific|fixed */
                   1746: public:
                   1747:                        ios(streambuf*) ;
                   1748:        virtual         ~ios() ;
                   1749: 
                   1750:        long            flags()         { return x_flags ; }
                   1751:        long            flags(long f);
                   1752: 
                   1753:        long            setf(long setbits, long field);
                   1754:        long            setf(long) ;
                   1755:        long            unsetf(long) ;
                   1756: 
                   1757:        int             width()         { return x_width ; }
                   1758:        int             width(int w)
                   1759:        {
                   1760:                        int i = x_width ; x_width = w ; return i ;
                   1761:        }
                   1762:                
                   1763:        ostream*        tie(ostream* s); 
                   1764:        ostream*        tie()           { return x_tie ; }
                   1765:        char            fill(char) ;
                   1766:        char            fill()          { return x_fill ; }
                   1767:        int             precision(int) ;
                   1768:        int             precision()     { return x_precision ; }
                   1769: 
                   1770:        int             rdstate()       { return state ; }
                   1771:                        operator void*()
                   1772:                                {
                   1773:                                if (state&(failbit|badbit|hardfail)) return 0 ;
                   1774:                                else return this ;
                   1775:                                }
                   1776: 
                   1777:        int             operator!()
                   1778:                                { return state&(failbit|badbit|hardfail); } 
                   1779:        int             eof()   { return state&eofbit; }
                   1780:        int             fail()  { return state&(failbit|badbit|hardfail); }
                   1781:        int             bad()   { return state&badbit ; }
                   1782:        int             good()  { return state==0 ; }
                   1783:        void            clear(int i =0) 
                   1784:                                {       
                   1785:                                state =  (i&0377) | (state&hardfail) ;
                   1786:                                ispecial = (ispecial&~0377) | state ; 
                   1787:                                ospecial = (ospecial&~0377) | state ; 
                   1788:                                }
                   1789:        streambuf*      rdbuf() { return bp ;} 
                   1790: 
                   1791: public: /* Members related to user allocated bits and words */
                   1792:        long &          iword(int) ;
                   1793:        void* &         pword(int) ;
                   1794:        static long     bitalloc() ;
                   1795:        static long     xalloc() ;
                   1796: 
                   1797: private: /*** privates for implemting allocated bits and words */ 
                   1798:        static long     nextbit ;
                   1799:        static long     nextword ;
                   1800:        
                   1801:        int             nuser ;
                   1802:        union ios_user_union*
                   1803:                        x_user ;
                   1804:        void    uresize(int) ;
                   1805: public: /* static member functions */
                   1806:        static void     sync_with_stdio() ;
                   1807: protected:
                   1808:        enum            { skipping=01000, tied=02000 } ;
                   1809:                        /*** bits 0377 are reserved for userbits ***/
                   1810:        streambuf*      bp;
                   1811:        void            setstate(int b)
                   1812:                        {       state |= (b&0377) ;
                   1813:                                ispecial |= b&~skipping ;
                   1814:                                ispecial |= b ;
                   1815:                        }
                   1816:        int             state;  
                   1817:        int             ispecial;               
                   1818:        int             ospecial;
                   1819:        int             isfx_special;
                   1820:        int             osfx_special;           
                   1821:        int             delbuf;
                   1822:        ostream*        x_tie;
                   1823:        long            x_flags;
                   1824:        short           x_precision;
                   1825:        char            x_fill;
                   1826:        short           x_width;
                   1827: 
                   1828:        static void     (*stdioflush)() ;
                   1829: 
                   1830:        void            init(streambuf*) ;
                   1831:                                /* Does the real work of a constructor */
                   1832:                        ios() ; /* No initialization at all. Needed by
                   1833:                                 * multiple inheritance versions */
                   1834:        int             assign_private ;
                   1835:                                /* needed by with_assgn classes */
                   1836: private:               
                   1837:                        ios(ios&) ; /* Declared but not defined */
                   1838:        void            operator=(ios&) ; /* Declared but not defined */
                   1839: public:   /* old stream package compatibility */
                   1840:        int             skip(int i) ; 
                   1841: };
                   1842: 
                   1843: class streambuf {
                   1844:        short           alloc;  
                   1845:        short           x_unbuf;
                   1846:        char*           x_base; 
                   1847:        char*           x_pbase;
                   1848:        char*           x_pptr; 
                   1849:        char*           x_epptr;
                   1850:        char*           x_gptr;
                   1851:        char*           x_egptr;
                   1852:        char*           x_eback;
                   1853:        int             x_blen; 
                   1854:     private:
                   1855:                        streambuf(streambuf&); /* Declared but not defined */
                   1856:        void            operator=(streambuf&); /* Declared but not defined */
                   1857:     public:
                   1858:        void            dbp();
                   1859:     protected:
                   1860:        char*           base()          { return x_base ; }
                   1861:        char*           pbase()         { return x_pbase ; }
                   1862:        char*           pptr()          { return x_pptr ; }
                   1863:        char*           epptr()         { return x_epptr ; }
                   1864:        char*           gptr()          { return x_gptr ; }
                   1865:        char*           egptr()         { return x_egptr ; }
                   1866:        char*           eback()         { return x_eback ; }
                   1867:        char*           ebuf()          { return x_base+x_blen ; }
                   1868:        int             blen()          { return x_blen; }
                   1869:        void            setp(char*  p, char*  ep)
                   1870:        {
                   1871:                x_pbase=x_pptr=p ; x_epptr=ep ;
                   1872:        }
                   1873:        void            setg(char*  eb,char*  g, char*  eg)
                   1874:        {
                   1875:                x_eback=eb; x_gptr=g ; x_egptr=eg ;
                   1876:        }
                   1877:        void            pbump(int n) 
                   1878:        { 
                   1879:                x_pptr+=n ;
                   1880:        }
                   1881: 
                   1882:        void            gbump(int n) 
                   1883:        { 
                   1884:                x_gptr+=n ;
                   1885:                }
                   1886: 
                   1887:        void            setb(char* b, char* eb, int a = 0 )
                   1888:        {
                   1889:                if ( alloc && x_base ) delete x_base ;
                   1890:                x_base = b ;
                   1891:                x_blen= (eb>b) ? (eb-b) : 0 ;
                   1892:                alloc = a ;
                   1893:                }
                   1894:        int             unbuffered() { return x_unbuf; }
                   1895:        void            unbuffered(int unb) { x_unbuf = (unb!=0)  ; }
                   1896:        int             allocate()
                   1897:        {
                   1898:                if ( x_base== 0 && !unbuffered() ) return doallocate() ;
                   1899:                else                             return 0 ;
                   1900:        }
                   1901:        virtual int     doallocate();
                   1902:     public : 
                   1903:        virtual int     overflow(int c=EOF);
                   1904:        virtual int     underflow();
                   1905:        virtual int     pbackfail(int c);
                   1906:        virtual int     sync();
                   1907:        virtual streampos
                   1908:                        seekoff(streamoff,seek_dir,int =ios::in|ios::out);
                   1909:        virtual streampos
                   1910:                        seekpos(streampos, int =ios::in|ios::out) ;
                   1911:        virtual int     xsputn(const char*  s,int n);
                   1912:        virtual int     xsgetn(char*  s,int n);
                   1913: 
                   1914:        int             in_avail()
                   1915:        {
                   1916:                return x_gptr<x_egptr ? x_egptr-x_gptr : 0 ;
                   1917:        }
                   1918: 
                   1919:        int             out_waiting() 
                   1920:        {       
                   1921:                if ( x_pptr ) return x_pptr-x_pbase ;
                   1922:                else          return 0 ; 
                   1923:        }
                   1924: 
                   1925:        int             sgetc()
                   1926:        {
                   1927:                /***WARNING: sgetc does not bump the pointer ***/
                   1928:                return (x_gptr>=x_egptr) ? underflow() : zapeof(*x_gptr);
                   1929:        }
                   1930:        int             snextc()
                   1931:        {
                   1932:                return (++x_gptr>=x_egptr)
                   1933:                                ? x_snextc()
                   1934:                                : zapeof(*x_gptr);
                   1935:        }
                   1936:        int             sbumpc()
                   1937:        {
                   1938:                return  ( x_gptr>=x_egptr && underflow()==EOF ) 
                   1939:                                ? EOF 
                   1940:                                : zapeof(*x_gptr++) ;
                   1941:        }
                   1942:        void            stossc()
                   1943:        {
                   1944:                if ( x_gptr++ > x_egptr ) underflow() ;
                   1945:        }
                   1946: 
                   1947:        int             sputbackc(char c)
                   1948:        {
                   1949:                if (x_gptr > x_eback ) {
                   1950:                        if ( *--x_gptr == c ) return zapeof(c) ;
                   1951:                        else                  return zapeof(*x_gptr=c) ;
                   1952:                } else {
                   1953:                        return pbackfail(c) ;
                   1954:                }
                   1955:        }
                   1956: 
                   1957:        int             sputc(int c)
                   1958:        {
                   1959:                return (x_pptr>=x_epptr) ? overflow(zapeof(c))
                   1960:                                      : zapeof(*x_pptr++=c);
                   1961:        }
                   1962:        int             sputn(const char*  s,int n)
                   1963:         {
                   1964:                if ( n <= (x_epptr-x_pptr) ) {
                   1965:                        memcpy(x_pptr,s,n) ;
                   1966:                        pbump(n);
                   1967:                        return n ;
                   1968:                } else {
                   1969:                        return xsputn(s,n) ;
                   1970:                }
                   1971:        }
                   1972:        int             sgetn(char*  s,int n)
                   1973:        {
                   1974:                if ( n <= (x_egptr-x_gptr) ) {
                   1975:                        memcpy(s,x_gptr,n) ;
                   1976:                        gbump(n);
                   1977:                        return n ;
                   1978:                } else {
                   1979:                        return xsgetn(s,n) ;
                   1980:                }
                   1981:        }
                   1982:        virtual streambuf*
                   1983:                        setbuf(char*  p, int len) ;
                   1984:        streambuf*      setbuf(unsigned char*  p, int len) ;
                   1985: 
                   1986:        streambuf*      setbuf(char*  p, int len, int count) ;
                   1987:                                /* obsolete third argument */
                   1988:                        /*** Constructors -- should be protected ***/
                   1989:                        streambuf() ;
                   1990:                        streambuf(char*  p, int l) ;
                   1991: 
                   1992:                        streambuf(char*  p, int l,int c) ;
                   1993:                        /* 3 argument form is obsolete.
                   1994:                         * Use strstreambuf.
                   1995:                         */
                   1996:        virtual         ~streambuf() ;
                   1997: private:
                   1998:        int             x_snextc() ;
                   1999: };
                   2000: 
                   2001: class istream : virtual public ios {
                   2002: public: /* Constructor */
                   2003:                        istream(streambuf*) ;
                   2004:        virtual         ~istream() ;
                   2005: public:        
                   2006:        int             ipfx(int noskipws=0)
                   2007:                        {       if ( noskipws?(ispecial&~skipping):ispecial) {
                   2008:                                        return do_ipfx(noskipws) ;
                   2009:                                } else return 1 ;
                   2010:                        }
                   2011:        void            isfx() { }  
                   2012:        istream&        seekg(streampos p) ;
                   2013:        istream&        seekg(streamoff o, seek_dir d) ;
                   2014:        streampos       tellg() ; 
                   2015:        istream&        operator>> (istream& (*f)(istream&))
                   2016:                        {       return (*f)(*this) ; }
                   2017:        istream&        operator>> (ios& (*f)(ios&) ) ;
                   2018:        istream&        operator>>(char*);
                   2019:        istream&        operator>>(unsigned char*);
                   2020:        istream&        operator>>(unsigned char& c)
                   2021:                        {       if ( ipfx(0) ) {
                   2022:                                        if (  bp->in_avail() ) {
                   2023:                                                c = bp->sbumpc() ;
                   2024:                                        } else  xget((char*)&c) ;
                   2025:                                }
                   2026:                                return *this ;
                   2027:                        }
                   2028:        istream&        operator>>(char& c)
                   2029:                        {       if ( ipfx(0) ) {
                   2030:                                        if (  bp->in_avail() ) {
                   2031:                                                c = bp->sbumpc() ;
                   2032:                                        } else  xget((char*)&c) ;
                   2033:                                }
                   2034:                                return *this ;
                   2035:                        }
                   2036:        istream&        operator>>(short&);
                   2037:        istream&        operator>>(int&);
                   2038:        istream&        operator>>(long&);
                   2039:        istream&        operator>>(unsigned short&);
                   2040:        istream&        operator>>(unsigned int&);
                   2041:        istream&        operator>>(unsigned long&);
                   2042:        istream&        operator>>(float&);
                   2043:        istream&        operator>>(double&);
                   2044:        istream&        operator>>(streambuf*);
                   2045:        istream&        get(char* , int lim, char delim='\n');
                   2046:        istream&        get(unsigned char* b,int lim, char delim='\n');
                   2047:        istream&        getline(char* b, int lim, char delim='\n');
                   2048:        istream&        getline(unsigned char* b, int lim, char delim='\n');
                   2049:        istream&        get(streambuf& sb, char delim ='\n');
                   2050:        istream&        get(unsigned char& c)
                   2051:                        {
                   2052:                                if ( ipfx(1) && bp->in_avail()) {
                   2053:                                        x_gcount = 1 ;
                   2054:                                        c = bp->sbumpc() ;
                   2055:                                } else {
                   2056:                                        xget((char*)&c) ;
                   2057:                                }
                   2058:                                return *this ;
                   2059:                        }
                   2060:        istream&        get(char& c)
                   2061:                        {
                   2062:                                if ( ipfx(1) && bp->in_avail()) {
                   2063:                                        x_gcount = 1 ;
                   2064:                                        c = bp->sbumpc() ;
                   2065:                                } else {
                   2066:                                        xget(&c) ;
                   2067:                                }
                   2068:                                return *this ;
                   2069:                        }
                   2070:        int             get()
                   2071:                        {
                   2072:                                int c ;
                   2073:                                if ( !ipfx(1) ) return EOF ;
                   2074:                                else {
                   2075:                                        c = bp->sbumpc() ;
                   2076:                                        if ( c == EOF ) setstate(eofbit) ;
                   2077:                                        return c ;
                   2078:                                        }
                   2079:                        }
                   2080:        int             peek() 
                   2081:                        {
                   2082:                                if ( ipfx(-1) ) return bp->sgetc() ;
                   2083:                                else            return EOF ;
                   2084: 
                   2085:                        }
                   2086:        istream&        ignore(int n=1,int delim=EOF) ;
                   2087:        istream&        read(char*  s,int n);
                   2088:        istream&        read(unsigned char* s,int n) 
                   2089:                        {
                   2090:                                return read((char*)s,n) ;
                   2091:                        }
                   2092:        int             gcount() ;
                   2093:        istream&        putback(char c);
                   2094:        int             sync()  { return bp->sync() ; }
                   2095: protected:  
                   2096:        int             do_ipfx(int noskipws) ;
                   2097:        void            eatwhite() ;
                   2098:                        istream() ;
                   2099: private: 
                   2100:        int             x_gcount ;
                   2101:        void            xget(char*  c) ;
                   2102: public: /*** Obsolete constructors, carried over from stream package ***/
                   2103:                        istream(streambuf*, int sk, ostream* t=0) ;
                   2104:                                /* obsolete, set sk and tie
                   2105:                                 * via format state variables */
                   2106:                        istream(int size ,char*,int sk=1) ;
                   2107:                                /* obsolete, use strstream */
                   2108:                        istream(int fd,int sk=1, ostream* t=0) ;
                   2109:                                /* obsolete use fstream */
                   2110: };
                   2111: 
                   2112: class ostream : virtual public ios {
                   2113: public: /* Constructor */
                   2114:                        ostream(streambuf*) ;
                   2115:        virtual         ~ostream();
                   2116: public:        
                   2117:        int             opfx()  /* Output prefix */
                   2118:                        {       if ( ospecial ) return do_opfx() ;
                   2119:                                else            return 1 ;
                   2120:                        }
                   2121:        void            osfx() 
                   2122:                        {       if ( osfx_special ) do_osfx() ; }
                   2123: 
                   2124:        ostream&        flush() ;
                   2125:        ostream&        seekp(streampos p) ;
                   2126:        ostream&        seekp(streamoff o, seek_dir d) ;
                   2127:        streampos       tellp() ; 
                   2128:        ostream&        put(char c)
                   2129:        {
                   2130:                if ( opfx() ) {
                   2131:                        if (  bp->sputc(c) == EOF )  {
                   2132:                                setstate(eofbit|failbit) ;
                   2133:                        }
                   2134:                        osfx() ;
                   2135:                }
                   2136:                return *this ;
                   2137:        }
                   2138:        ostream&        operator<<(char c) { put(c) ; osfx() ; return *this ; }
                   2139: 
                   2140:        ostream&        operator<<(unsigned char c) 
                   2141:        {       put(c) ; osfx() ; return *this ; }
                   2142: 
                   2143:        ostream&        operator<<(const char*);
                   2144:        ostream&        operator<<(int a); 
                   2145:        ostream&        operator<<(long);       
                   2146:        ostream&        operator<<(double);
                   2147:        ostream&        operator<<(float);
                   2148:        ostream&        operator<<(unsigned int a);
                   2149:        ostream&        operator<<(unsigned long);
                   2150:        ostream&        operator<<(void*);
                   2151:        ostream&        operator<<(streambuf*);
                   2152:        ostream&        operator<<(short i) { return *this << (int)i ; }
                   2153:        ostream&        operator<<(unsigned short i) 
                   2154:                        { return *this << (int)i  ; }
                   2155: 
                   2156:        ostream&        operator<< (ostream& (*f)(ostream&))
                   2157:                        { return (*f)(*this) ; }
                   2158:        ostream&        operator<< (ios& (*f)(ios&) ) ;
                   2159: 
                   2160:        ostream&        write(const char*  s,int n)     
                   2161:        {
                   2162:                if ( !state ) {
                   2163:                        if ( bp->sputn(s,n) != n ) setstate(eofbit|failbit);
                   2164:                        }
                   2165:                return *this ;
                   2166:        }
                   2167:        ostream&        write(const unsigned char* s, int n)
                   2168:        {
                   2169:                return write((const char*)s,n);
                   2170:        }
                   2171: protected: /* More ostream members */
                   2172:        int             do_opfx() ;
                   2173:        void            do_osfx() ;
                   2174:                        ostream() ;
                   2175: 
                   2176: public: /*** Obsolete constructors, carried over from stream package ***/
                   2177:                        ostream(int fd) ;
                   2178:                                /* obsolete use fstream */
                   2179:                        ostream(int size ,char*) ;
                   2180:                                /* obsolete, use strstream */
                   2181: } ;
                   2182: 
                   2183: class iostream : public istream, public ostream {
                   2184: public:
                   2185:                        iostream(streambuf*) ;
                   2186:        virtual         ~iostream() ;
                   2187: protected:
                   2188:                        iostream() ;
                   2189:        } ;
                   2190: 
                   2191: class istream_withassign : public istream {
                   2192: public:
                   2193:                        istream_withassign() ;
                   2194:        virtual         ~istream_withassign() ;
                   2195:        istream_withassign&     operator=(istream&) ;
                   2196:        istream_withassign&     operator=(streambuf*) ;
                   2197: } ;
                   2198: 
                   2199: class ostream_withassign : public ostream {
                   2200: public:
                   2201:                        ostream_withassign() ;
                   2202:        virtual         ~ostream_withassign() ;
                   2203:        ostream_withassign&     operator=(ostream&) ;
                   2204:        ostream_withassign&     operator=(streambuf*) ;
                   2205: } ;
                   2206: 
                   2207: class iostream_withassign : public iostream {
                   2208: public:
                   2209:                        iostream_withassign() ;
                   2210:        virtual         ~iostream_withassign() ;
                   2211:        iostream_withassign&    operator=(ios&) ;
                   2212:        iostream_withassign&    operator=(streambuf*) ;
                   2213: } ;
                   2214: 
                   2215: extern istream_withassign cin ;
                   2216: extern ostream_withassign cout ;
                   2217: extern ostream_withassign cerr ;
                   2218: extern ostream_withassign clog ;
                   2219: 
                   2220: ios&           dec(ios&) ; 
                   2221: ostream&       endl(ostream& i) ;
                   2222: ostream&       ends(ostream& i) ;
                   2223: ostream&       flush(ostream&) ;
                   2224: ios&           hex(ios&) ;
                   2225: ios&           oct(ios&) ; 
                   2226: istream&       ws(istream&) ;
                   2227: 
                   2228: static class Iostream_init {
                   2229:        static int      stdstatus ; /* see cstreams.c */
                   2230:        static int      initcount ;
                   2231:        friend          ios ;
                   2232: public:
                   2233:        Iostream_init() ; 
                   2234:        ~Iostream_init() ; 
                   2235: } iostream_init ;      
                   2236: 
                   2237: #endif
                   2238: 0707070044044142561004440042240042240000011571420442762431100001000000004471manip.c/*ident    "@(#)ctrans:lib/stream/manip.c  1.1.3.1" */
                   2239: /**************************************************************************
                   2240:                         Copyright (c) 1984 AT&T
                   2241:                           All Rights Reserved   
                   2242: 
                   2243:         THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T
                   2244:       
                   2245:         The copyright notice above does not evidence any        
                   2246:         actual or intended publication of such source code.
                   2247: 
                   2248: manip.c:
                   2249: 
                   2250: *****************************************************************************/
                   2251: 
                   2252: #include <iostream.h>
                   2253: #include <iomanip.h>
                   2254: #include <ctype.h>
                   2255: 
                   2256: istream& ws(istream& i)
                   2257: {
                   2258:        if ( !i.ipfx(1) ) return i ;
                   2259:        register streambuf *nbp = i.rdbuf();
                   2260:        register int c = nbp->sgetc();
                   2261:        while (isspace(c)) c = nbp->snextc();
                   2262:        if (c == EOF) i.clear(ios::eofbit) ;
                   2263:        return i ;
                   2264: }
                   2265: 
                   2266: ostream& ends(ostream& i) 
                   2267: {
                   2268:        return i.put(0) ;
                   2269: }
                   2270: 
                   2271: ostream& endl(ostream& i) 
                   2272: {
                   2273:        i.put('\n') ;
                   2274:        i.flush() ;
                   2275:        return i ;
                   2276: }
                   2277: 
                   2278: static const int basebits = ios::dec|ios::oct|ios::hex ;
                   2279: 
                   2280: static ios& setb(ios& i, int b)
                   2281: {
                   2282:        switch(b) {
                   2283:                case 10 : i.setf(ios::dec,basebits) ; break ;
                   2284:                case 8 : i.setf(ios::oct,basebits) ; break ;
                   2285:                case 16 : i.setf(ios::hex,basebits) ; break ;
                   2286:                default : i.setf(0,basebits) ; break ;
                   2287:                }
                   2288:        return i ;
                   2289:        }
                   2290: 
                   2291: SMANIP(int) setbase(int b) { return SMANIP(int)(setb,b) ; }
                   2292: 
                   2293: static ios& resetiosflags(ios& i,long b) { i.setf(0,b) ; return i ; }
                   2294: SMANIP(long) resetiosflags(long b) { return SMANIP(long)(resetiosflags,b) ; }
                   2295: 
                   2296: static ios& setiosflags(ios& i,long b) { i.setf(b) ; return i ; }
                   2297: SMANIP(long) setiosflags(long b) { return SMANIP(long)(setiosflags,b) ; }
                   2298: 
                   2299: static ios& setfill(ios& i,int f) { i.fill(f) ; return i ; }
                   2300: SMANIP(int) setfill(int f) { return SMANIP(int)(setfill,f) ; }
                   2301: 
                   2302: static ios& setprecision(ios& i,int p) { i.precision(p) ; return i ; }
                   2303: SMANIP(int) setprecision(int p) { return SMANIP(int)(setprecision,p) ; }
                   2304: 
                   2305: static ios& setw(ios& i,int w) { i.width(w) ; return i ; }
                   2306: SMANIP(int) setw(int w) { return SMANIP(int)(setw,w) ; }
                   2307: 
                   2308: ios& hex(ios& s) { s.setf(ios::hex,basebits ) ; return s ; }
                   2309: ios& dec(ios& s) { s.setf(ios::dec,basebits ) ; return s ; }
                   2310: ios& oct(ios& s) { s.setf(ios::oct,basebits ) ; return s ; }
                   2311: 
                   2312: ostream& flush(ostream& s) { s.flush() ; return s ; }
                   2313: 
                   2314: ostream& ostream::operator<<( ios& (*f)(ios&) )
                   2315: {
                   2316:        f(*this) ;
                   2317:        return *this ;
                   2318:        }
                   2319: 
                   2320: istream& istream::operator>>( ios& (*f)(ios&) )
                   2321: {
                   2322:        f(*this) ;
                   2323:        return *this ;
                   2324:        }
                   2325: 0707070044044141271004440042240042240000011557620441667020000001400000013350oldformat.c/*ident        "@(#)ctrans:lib/stream/oldformat.c      1.1.4.1" */
                   2326: /**************************************************************************
                   2327:                         Copyright (c) 1984 AT&T
                   2328:                           All Rights Reserved   
                   2329: 
                   2330:         THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T
                   2331:       
                   2332:         The copyright notice above does not evidence any        
                   2333:         actual or intended publication of such source code.
                   2334: 
                   2335: oldformat.c:
                   2336:            file for obsolete stream stuff that isn't part of the
                   2337:            official iostream package.
                   2338: *****************************************************************************/
                   2339: 
                   2340: #include <stream.h>
                   2341: #include "streamdefs.h"
                   2342: #include <string.h>
                   2343: #include <strstream.h>
                   2344: #include <fstream.h>
                   2345: #include <libc.h>
                   2346: 
                   2347: #ifdef VSPRINTF
                   2348: #      include <stdarg.h>
                   2349: #endif
                   2350: 
                   2351: static const int cb_size = 1024 ;
                   2352: static const int fld_size = 256 ;
                   2353: 
                   2354: /* a circular formating buffer */
                   2355: static char    formbuf[cb_size];       // some slob for form overflow
                   2356: static char*   bfree=formbuf;
                   2357: static char*   max = &formbuf[cb_size-1];
                   2358: 
                   2359: char* chr(register i, register int w)  /* note: chr(0) is "" */
                   2360: {
                   2361:        register char* buf = bfree;
                   2362: 
                   2363:        if (w<=0 || fld_size<w) w = 1;
                   2364:        w++;                            /* space for trailing 0 */
                   2365:        if (max < buf+w) buf = formbuf;
                   2366:        bfree = buf+w;
                   2367:        char * res = buf;
                   2368: 
                   2369:        w -= 2;                         /* pad */
                   2370:        while (w--) *buf++ = ' ';
                   2371:        if (i<0 || 127<i) i = ' ';
                   2372:        *buf++ = i;
                   2373:        *buf = 0;
                   2374:        return res;
                   2375: }
                   2376: 
                   2377: char* str(const char* s, register int w)
                   2378: {
                   2379:        register char* buf = bfree;
                   2380:        int ll = strlen(s);
                   2381:        if (w<=0 || fld_size<w) w = ll;
                   2382:        if (w < ll) ll = w;
                   2383:        w++;                            /* space for traling 0 */
                   2384:        if (max < buf+w) buf = formbuf;
                   2385:        bfree = buf+w;
                   2386:        char* res = buf;
                   2387: 
                   2388:        w -= (ll+1);                    /* pad */
                   2389:        while (w--) *buf++ = ' ';
                   2390:        while (*s) *buf++ = *s++;
                   2391:        *buf = 0;
                   2392:        return res;
                   2393: }
                   2394: 
                   2395: char* form(const char* format ...)
                   2396: {
                   2397:        register char* buf = bfree;
                   2398:        if (max < buf+fld_size) buf = formbuf;
                   2399: 
                   2400: #      ifdef VSPRINTF
                   2401:                va_list args ;
                   2402:                va_start(args,format) ;
                   2403:                VSPRINTF(buf,format,args) ;
                   2404:                va_end(args) ;
                   2405: #      else
                   2406:                // not very portable
                   2407:                register* ap = (int*)((char*)&format+sizeof(char*));
                   2408:                sprintf(buf,format,ap[0],ap[1],ap[2],ap[3],ap[4],ap[5],ap[6],ap[7],ap[8],ap[9]);        
                   2409: #      endif
                   2410: 
                   2411:        register ll = strlen(buf);                      // not all sprintf's return length
                   2412:        if (0<ll && ll<cb_size)                         // length
                   2413:                ;
                   2414:        else if (buf<(char*)ll && (char*)ll<buf+cb_size)// pointer to trailing 0
                   2415:                ll = (char*)ll - buf;
                   2416:        else
                   2417:                ll = strlen(buf);
                   2418: 
                   2419:        // If we have scribbled beyond the end of the buffer then
                   2420:        // who knows what data we've destroyed.  Better to abort here
                   2421:        // here there is some chance that somebody can associate
                   2422:        // the location with the error than to continue and die
                   2423:        // a mysterious death later.
                   2424:        if (fld_size < ll) abort();
                   2425: 
                   2426:        bfree = buf+ll+1;
                   2427:        return buf;
                   2428: }
                   2429: 
                   2430: const char a10 = 'a'-10;
                   2431: 
                   2432: char* hex(long ii, register w)
                   2433: {
                   2434:        int m = sizeof(long)*2;         // maximum hex digits for a long
                   2435:        if (w<0 || fld_size<w) w = 0;
                   2436:        int sz = (w?w:m)+1;
                   2437:        register char* buf = bfree;
                   2438:        if (max < buf+sz) buf = formbuf;
                   2439:        register char* p = buf+sz;
                   2440:        bfree = p+1;
                   2441:        *p-- = 0;                       // trailing 0
                   2442:        register unsigned long i = ii;
                   2443: 
                   2444:        if (w) {
                   2445:                do {
                   2446:                        register h = (int)(i&0xf);
                   2447:                        *p-- = (h < 10) ? h+'0' : h+a10;
                   2448:                } while (--w && (i>>=4));
                   2449:                while (0<w--) *p-- = ' ';
                   2450:        }
                   2451:        else {
                   2452:                do {
                   2453:                        register h = (int)(i&0xf);
                   2454:                        *p-- = (h < 10) ? h+'0' : h+a10;
                   2455:                } while (i>>=4);
                   2456:        }
                   2457:        return p+1;
                   2458: }
                   2459: 
                   2460: char* oct(long ii, int w)
                   2461: {
                   2462:        int m = sizeof(long)*3;         // maximum oct digits for a long
                   2463:        if (w<0 || fld_size<w) w = 0;
                   2464:        int sz = (w?w:m)+1;
                   2465:        register char* buf = bfree;
                   2466:        if (max < buf+sz) buf = formbuf;
                   2467:        register char* p = buf+sz;
                   2468:        bfree = p+1;
                   2469:        *p-- = 0;                       // trailing 0
                   2470:        register unsigned long i = ii;
                   2471: 
                   2472:        if (w) {
                   2473:                do {
                   2474:                        register h = (int)(i&07);
                   2475:                        *p-- = h + '0';
                   2476:                } while (--w && (i>>=3));
                   2477:                while (0<w--) *p-- = ' ';
                   2478:        }
                   2479:        else {
                   2480:                do {
                   2481:                        register h = (int)(i&07);
                   2482:                        *p-- = h+'0';
                   2483:                } while (i>>=3);
                   2484:        }
                   2485: 
                   2486:        return p+1;
                   2487: }
                   2488: 
                   2489: char* dec(long i, int w)
                   2490: {
                   2491:        int sign = 0;
                   2492:        if (i < 0) {
                   2493:                sign = 1;
                   2494:                i = -i;
                   2495:        }       
                   2496:        int m = sizeof(long)*3;         /* maximum dec digits for a long */
                   2497:        if (w<0 || fld_size<w) w = 0;
                   2498:        int sz = (w?w:m)+1;
                   2499:        register char* buf = bfree;
                   2500:        if (max < buf+sz) buf = formbuf;
                   2501:        register char* p = buf+sz;
                   2502:        bfree = p+1;
                   2503:        *p-- = 0;                       /* trailing 0 */
                   2504: 
                   2505:        if (w) {
                   2506:                do {
                   2507:                        register h = (int)(i%10);
                   2508:                        *p-- = h + '0';
                   2509:                } while (--w && (i/=10));
                   2510:                if (sign && 0<w) {
                   2511:                        w--;
                   2512:                        *p-- = '-';
                   2513:                }
                   2514:                while (0<w--) *p-- = ' ';
                   2515:        }
                   2516:        else {
                   2517:                do {
                   2518:                        register h = (int)(i%10);
                   2519:                        *p-- = h + '0';
                   2520:                } while (i/=10);
                   2521:                if (sign) *p-- = '-';
                   2522:        }
                   2523: 
                   2524:        return p+1;
                   2525: }
                   2526: 
                   2527: istream& WS(istream& i) { return i >> ws ; }
                   2528: 
                   2529: void eatwhite(istream& i) { i >> ws ; }
                   2530: 
                   2531: istream::istream(streambuf* b, int sk, ostream* t) 
                   2532: {
                   2533:        init(b) ;
                   2534:        skip(sk) ;
                   2535:        tie(t) ;
                   2536:        }
                   2537: 
                   2538: istream::istream(int len, char* b, int sk) 
                   2539: {
                   2540:        init( new streambuf(b,len,-len) ) ;
                   2541:        delbuf = 1 ;
                   2542:        skip(sk) ;
                   2543: }
                   2544: 
                   2545: istream::istream(int fd, int sk, ostream* t) 
                   2546: {
                   2547:        init( new filebuf(fd) ) ;
                   2548:        delbuf = 1 ;
                   2549:        skip(sk) ;
                   2550:        tie(t) ;
                   2551: }
                   2552: 
                   2553: ostream::ostream(int fd) 
                   2554: {
                   2555:        init( new filebuf(fd) ) ;
                   2556:        delbuf = 1 ;
                   2557: }
                   2558: 
                   2559: ostream::ostream(int len, char* b) 
                   2560: {
                   2561:        init( new streambuf(b,len,0) ) ;
                   2562:        delbuf = 1 ;
                   2563: }
                   2564: 
                   2565: streambuf::streambuf(char* p, int l, int c ) :
                   2566:        x_unbuf(0), alloc(0)
                   2567: {
                   2568:        setb(0,0,0);
                   2569:        setbuf(p,l,c) ;
                   2570: }
                   2571: 
                   2572: streambuf* streambuf::setbuf(char* p, int len, int count)
                   2573: {
                   2574:        // Three argument setbuf for compatibility with old
                   2575:        // stream package.
                   2576:        if ( x_base ) return 0 ;
                   2577:        if ( len <= 0 || p == 0 ) {
                   2578:                // make it unbuffered
                   2579:                setb(0,0,0) ;
                   2580:                setg(0,0,0) ;
                   2581:                setp(0,0);
                   2582:                unbuffered(1) ;
                   2583:        } else if ( count >= 0 ) {
                   2584:                setb(p,p+len,0) ;
                   2585:                setg(p,p,p+count) ;
                   2586:                setp(p+count,p+len) ;
                   2587:                unbuffered(0) ;
                   2588:        } else  { // count < 0 
                   2589:                // Special case,
                   2590:                // Used by iostream::iostream(char*,int) 
                   2591:                // For backwards compatibility with old streams
                   2592:                setb(p,p+len,0) ;
                   2593:                setg(p,p,p-count) ;
                   2594:                setp(p,p+len) ;
                   2595:                unbuffered(0) ;
                   2596:                }
                   2597:        return this;
                   2598:        }
                   2599: 
                   2600: int ios::skip(int sk)
                   2601: {
                   2602:        long f ;
                   2603:        if ( sk ) f = setf(skipws,skipws) ;
                   2604:        else      f = setf(0,skipws) ;
                   2605:        
                   2606:        return (f&skipws) != 0 ;
                   2607: }
                   2608: 0707070044044142441006440042240042240000011611200443034047300000600000020040out.c/*ident      "@(#)ctrans:lib/stream/out.c    1.1.2.1" */
                   2609: /**************************************************************************
                   2610:                        Copyright (c) 1984 AT&T
                   2611:                          All Rights Reserved   
                   2612: 
                   2613:        THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T
                   2614:        
                   2615:        The copyright notice above does not evidence any        
                   2616:        actual or intended publication of such source code.
                   2617: 
                   2618: out.c: 
                   2619: 
                   2620: *****************************************************************************/
                   2621: 
                   2622: #include <iostream.h>
                   2623: #include "streamdefs.h"
                   2624: #include <string.h>
                   2625: 
                   2626: #define OSTREAM ostream
                   2627: 
                   2628: const int basebits = ios::dec|ios::oct|ios::hex ;
                   2629: 
                   2630: // At the cost of 100 bytes of table we can measurably speed
                   2631: // up conversion (at least on a VAX)
                   2632: 
                   2633: static char digit1[] = {
                   2634:        '0','1','2','3','4','5','6','7','8','9',
                   2635:        '0','1','2','3','4','5','6','7','8','9',
                   2636:        '0','1','2','3','4','5','6','7','8','9',
                   2637:        '0','1','2','3','4','5','6','7','8','9',
                   2638:        '0','1','2','3','4','5','6','7','8','9',
                   2639:        '0','1','2','3','4','5','6','7','8','9',
                   2640:        '0','1','2','3','4','5','6','7','8','9',
                   2641:        '0','1','2','3','4','5','6','7','8','9',
                   2642:        '0','1','2','3','4','5','6','7','8','9',
                   2643:        '0','1','2','3','4','5','6','7','8','9',
                   2644:        } ;
                   2645: 
                   2646: static char digit2[] = {
                   2647:        '0','0','0','0','0','0','0','0','0','0',
                   2648:        '1','1','1','1','1','1','1','1','1','1',
                   2649:        '2','2','2','2','2','2','2','2','2','2',
                   2650:        '3','3','3','3','3','3','3','3','3','3',
                   2651:        '4','4','4','4','4','4','4','4','4','4',
                   2652:        '5','5','5','5','5','5','5','5','5','5',
                   2653:        '6','6','6','6','6','6','6','6','6','6',
                   2654:        '7','7','7','7','7','7','7','7','7','7',
                   2655:        '8','8','8','8','8','8','8','8','8','8',
                   2656:        '9','9','9','9','9','9','9','9','9','9',
                   2657:        } ;
                   2658: 
                   2659: static char* conv10(long i, char* bufend) 
                   2660: /* p points to right end of a buffer. Function function returns
                   2661:  * pointer to left end of converted number.  Number is not 0 terminated.
                   2662:  *
                   2663:  * Special care with negatives to avoid problems with
                   2664:  * biggest negative number on 2's complement machines
                   2665:  */
                   2666: {
                   2667:        register long j = i ;
                   2668:        register char* p = bufend ;
                   2669: 
                   2670:        /* Above entered low order digit or 0 if i is zero */
                   2671: 
                   2672:        if ( j >= 0 ) {
                   2673:                register int diff ;
                   2674:                do {
                   2675:                        long register by100 = j/100 ;
                   2676:                        diff = (int)(j-100*by100) ;
                   2677:                        *p-- = digit1[diff] ;
                   2678:                        *p-- = digit2[diff] ;
                   2679:                        j = by100;
                   2680:                } while ( j > 0 ) ;
                   2681:                if ( diff<10 ) ++p ; //compensate for extra 0
                   2682:        } else { // j < 0
                   2683:                register int diff ;
                   2684:                do {
                   2685:                        long register by100 = j/100 ;
                   2686:                        diff = (int)(100*by100-j) ;
                   2687:                        *p-- = digit1[diff] ;
                   2688:                        *p-- = digit2[diff] ;
                   2689:                        j = by100;
                   2690:                } while ( j < 0 ) ;
                   2691:                if ( diff<10 ) ++p ; //compensate for extra 0
                   2692:        }
                   2693:        return p+1 ;
                   2694: 
                   2695: }
                   2696: 
                   2697: static char* uconv10(unsigned long i, char* bufend) 
                   2698: /* Same interface as conv10 except unsigned so we don't have
                   2699:  * to worry about negatives */
                   2700: {
                   2701:        register unsigned long j = i ;
                   2702:        register char* p = bufend ;
                   2703:        register int diff ;
                   2704: 
                   2705:        do {
                   2706:                long register by100 = j/100 ;
                   2707:                diff = (int)(j-100*by100) ;
                   2708:                *p-- = digit1[diff] ;
                   2709:                *p-- = digit2[diff] ;
                   2710:                j = by100;
                   2711:        } while ( j > 0 ) ;
                   2712:        if ( diff<10 ) ++p ; //compensate for extra 0
                   2713:        
                   2714:        return p+1 ;
                   2715: 
                   2716: }
                   2717: 
                   2718: 
                   2719: static char* conv8(register unsigned long i, register char* p) 
                   2720: {
                   2721:        do {
                   2722:                *p-- = (char)('0' + i%8) ;
                   2723:                } while ( (i >>= 3) > 0 ) ;
                   2724:        return p+1 ;
                   2725: }
                   2726: 
                   2727: static char* conv16(register unsigned long i, register char* p) 
                   2728: {
                   2729:        do {
                   2730:                register dig = (int)(i%16) ;
                   2731:                if ( dig < 10 ) *p-- = (char)('0' + i%16) ;
                   2732:                else            *p-- = (char)('a'-10 + dig) ;
                   2733: 
                   2734:                } while ( (i >>= 4) > 0 ) ;
                   2735:        return p+1 ;
                   2736: }
                   2737: 
                   2738: 
                   2739: static char* conv16u(register unsigned long i, register char* p) 
                   2740: {
                   2741:        do {
                   2742:                register dig = (int)(i%16) ;
                   2743:                if ( dig < 10 ) *p-- = (char)('0' + i%16) ;
                   2744:                else            *p-- = (char)('A'-10 + dig) ;
                   2745: 
                   2746:                } while ( (i >>= 4) > 0 ) ;
                   2747:        return p+1 ;
                   2748: }
                   2749: ostream& OSTREAM::operator<<(const char* s)
                   2750: {
                   2751:        // I play some games so that if BREAKEVEN is <= 0 all
                   2752:        // tests get set the right way at compile time 
                   2753: 
                   2754: #       if BREAKEVEN > 0
                   2755:                static int      avglen = BREAKEVEN ;
                   2756:                                        // running average of the lengths
                   2757:                                        // of strings ;
                   2758: #      else
                   2759:                static const int avglen = BREAKEVEN ;
                   2760:                                        // fixed constant so all tests
                   2761:                                        // are fixed at compile time
                   2762: #      endif
                   2763: 
                   2764:        register int fwidth = width(0) ;
                   2765: 
                   2766:        if (!opfx() ) return *this ;
                   2767:        if ( s==0 ) return *this;
                   2768:        register streambuf* nbp = bp ;
                   2769:        register const char* p ;
                   2770:        register int len ;
                   2771:        register int pad ;
                   2772: 
                   2773:        register int leftjust = ( (flags()&left) != 0 ) ;
                   2774:        if ( BREAKEVEN<0 
                   2775:                        || BREAKEVEN>0 && avglen<=BREAKEVEN &&
                   2776:                           (fwidth==0 || leftjust)){
                   2777:                p = s ;
                   2778:                while ( *p ) {
                   2779:                        if ( nbp->sputc(*p++) == EOF ) {
                   2780:                                setstate(badbit) ;
                   2781:                                break ;
                   2782:                        }
                   2783:                }
                   2784:                len = p-s ;
                   2785:                pad = fwidth-len ;
                   2786:        } else {
                   2787:                len = strlen(s) ;
                   2788:                pad = fwidth-len ;
                   2789:                if ( pad>0 && !leftjust ) {
                   2790:                        while ( pad-- > 0 ) {
                   2791:                                if ( nbp->sputc(fill()) == EOF ) {
                   2792:                                        setstate(badbit) ;
                   2793:                                }
                   2794:                        }
                   2795:                }
                   2796:                write(s,len) ;
                   2797:        }
                   2798: 
                   2799:        if ( pad > 0  ) {
                   2800:                while ( pad-- > 0 ) {
                   2801:                        if ( nbp->sputc(fill()) == EOF ) setstate(badbit) ;
                   2802:                }
                   2803:        }
                   2804: 
                   2805:        if ( BREAKEVEN > 0 ) { // will be eliminated at compile time 
                   2806:                avglen = (3*avglen + len) >> 2;
                   2807:        }
                   2808:        osfx() ;
                   2809:        return *this;
                   2810: }
                   2811: 
                   2812: static int dofield(
                   2813:        ostream* ios,
                   2814:        register char* pfx,
                   2815:        int pwidth,
                   2816:        register char* sfx,
                   2817:        int swidth) 
                   2818: {
                   2819:        register streambuf* b = ios->rdbuf() ;
                   2820:        register int w = ios->width(0)-(pwidth+swidth) ;
                   2821:        register int f = (int)ios->flags() ;
                   2822:        register int fchar = ios->fill() ; 
                   2823: 
                   2824:        if ( (f&ios::right) || !(f&(ios::left|ios::internal)) ) {
                   2825:                while ( w-- > 0 ) {
                   2826:                        if ( b->sputc(fchar) == EOF ) return ios::badbit ;
                   2827:                        }
                   2828:                }
                   2829: 
                   2830:        while ( *pfx ) {
                   2831:                if ( b->sputc(*pfx++) == EOF ) return ios::badbit ;
                   2832:                }
                   2833: 
                   2834:        if ( f&ios::internal ) {
                   2835:                while ( w-- > 0 ) {
                   2836:                        if ( b->sputc(fchar) == EOF ) return ios::badbit ;
                   2837:                        }
                   2838:                }
                   2839:        while ( *sfx ) {
                   2840:                if ( b->sputc(*sfx++) == EOF ) return ios::badbit ;
                   2841:                }
                   2842: 
                   2843:        while ( w-- > 0 ) {
                   2844:                if ( b->sputc(fchar) == EOF ) return ios::badbit ;
                   2845:                }
                   2846: 
                   2847:        return 0 ;
                   2848:        }
                   2849: 
                   2850: static const int dbufsize = 32 ;
                   2851: 
                   2852: ostream& OSTREAM::operator<<(long i)
                   2853: {
                   2854:        if (!opfx()) {
                   2855:                width(0) ;
                   2856:                return *this;
                   2857:                }
                   2858:        char buf[dbufsize];
                   2859: 
                   2860:        register char *p ;
                   2861:        register char* pfx = "" ;
                   2862:        register int pfxsize = 0 ;
                   2863: 
                   2864:        buf[dbufsize-1] = 0 ;
                   2865:        switch( flags()&basebits ) {
                   2866:                case ios::oct :
                   2867:                        p = conv8(i,&buf[dbufsize-2]) ;
                   2868:                        if ( (flags()&showbase) && i ) {
                   2869:                                pfx = "0" ; pfxsize = 1 ;
                   2870:                                }
                   2871:                        break ;
                   2872:                case ios::hex :
                   2873:                        if ( flags()&uppercase ) {
                   2874:                                p=conv16u(i,&buf[dbufsize-2]);
                   2875:                                if ( flags()&showbase ) {
                   2876:                                        pfx = "0X" ; pfxsize = 2 ;
                   2877:                                        }
                   2878:                                }
                   2879:                        else {
                   2880:                                p=conv16(i,&buf[dbufsize-2]); 
                   2881:                                if ( flags()&showbase ) {
                   2882:                                        pfx = "0x" ; pfxsize = 2 ;
                   2883:                                        }
                   2884:                                }
                   2885:                        break ;
                   2886:                default:
                   2887:                        p = conv10(i,&buf[dbufsize-2]) ;
                   2888:                        if ( i < 0 ) {
                   2889:                                pfx = "-" ; pfxsize = 1 ;
                   2890:                                }
                   2891:                        else if ( flags()&showpos ) {
                   2892:                                pfx = "+" ; pfxsize = 1 ;
                   2893:                                }
                   2894:                        break ;
                   2895:                }
                   2896:        register int err ;
                   2897:        if ( err = dofield(this,pfx,pfxsize,p,&buf[dbufsize-1]-p) ) {
                   2898:                setstate(err) ;
                   2899:                }
                   2900:        osfx() ;
                   2901:        return *this ;
                   2902:        }
                   2903: 
                   2904: ostream& OSTREAM::operator<<(unsigned long i)
                   2905: {
                   2906:        if (!opfx()) {
                   2907:                width(0) ;
                   2908:                return *this;
                   2909:                }
                   2910:        char buf[dbufsize];
                   2911:        register char *p ;
                   2912:        register char* pfx = "" ;
                   2913:        register int pfxsize = 0 ;
                   2914: 
                   2915: 
                   2916:        buf[dbufsize-1] = 0 ;
                   2917:        switch( flags()&basebits ) {
                   2918:                case ios::oct :
                   2919:                        p = conv8(i,&buf[dbufsize-2]) ;
                   2920:                        if ( (flags()&showbase) && i ) {
                   2921:                                pfx = "0" ; pfxsize = 1 ;
                   2922:                                }
                   2923:                        break ;
                   2924:                case ios::hex :
                   2925:                        if ( flags()&uppercase ) {
                   2926:                                p=conv16u(i,&buf[dbufsize-2]);
                   2927:                                if ( flags()&showbase ) {
                   2928:                                        pfx = "0X" ; pfxsize = 2 ;
                   2929:                                        }
                   2930:                                }
                   2931:                        else {
                   2932:                                p=conv16(i,&buf[dbufsize-2]); 
                   2933:                                if ( flags()&showbase ) {
                   2934:                                        pfx = "0x" ; pfxsize = 2 ;
                   2935:                                        }
                   2936:                                }
                   2937:                        break ;
                   2938:                default:
                   2939:                        p = uconv10(i,&buf[dbufsize-2]) ;
                   2940:                        break ;
                   2941:                }
                   2942:        register int err ;
                   2943:        if ( err = dofield(this,pfx,pfxsize,p,&buf[dbufsize-1]-p) ) {
                   2944:                setstate(err) ;
                   2945:                }
                   2946:        osfx() ;
                   2947:        return *this ;
                   2948:        }
                   2949:        
                   2950: ostream& OSTREAM::operator<<(register streambuf* b)
                   2951: {
                   2952:        register streambuf* nbp = bp;
                   2953:        register int c;
                   2954: 
                   2955:        if (!opfx()) return *this;
                   2956:        if ( !b ) {
                   2957:                setstate(failbit) ;
                   2958:                return *this ;
                   2959:                }
                   2960:        c = b->sgetc();
                   2961:        while (c != EOF) {
                   2962:                if (nbp->sputc(c) == EOF) {
                   2963:                        setstate(badbit) ;
                   2964:                        break;
                   2965:                        }
                   2966:                c = b->snextc();
                   2967:                }
                   2968: 
                   2969:        osfx() ;                
                   2970:        return *this;
                   2971:        }
                   2972: 
                   2973: ostream& OSTREAM::operator<<( void* p)
                   2974: {
                   2975:        long f = setf(ios::showbase|PTRBASE,  basebits|ios::showbase) ;
                   2976:        *this << (long)p ;
                   2977:        setf(f,~0) ;
                   2978:        return *this ;
                   2979:        }
                   2980: 
                   2981: ostream& OSTREAM::operator<<(int x)
                   2982: {
                   2983:        *this << (long)x ;
                   2984:        return *this ;
                   2985:        }
                   2986: 
                   2987: ostream& OSTREAM::operator<<(unsigned int x)
                   2988: {
                   2989:        *this << (unsigned long)x ;
                   2990:        return *this ;
                   2991:        }
                   2992: 0707070044044142671004440042240042240000011604650437162573100001000000005714rawin.c/*ident    "@(#)ctrans:lib/stream/rawin.c  1.1.1.1" */
                   2993: /**************************************************************************
                   2994:                        Copyright (c) 1984 AT&T
                   2995:                          All Rights Reserved   
                   2996: 
                   2997:        THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T
                   2998:        
                   2999:        The copyright notice above does not evidence any        
                   3000:        actual or intended publication of such source code.
                   3001: 
                   3002: rawin.c:
                   3003:        raw input functions. (I.e. those that don't "eatwhite".)
                   3004: 
                   3005: *****************************************************************************/
                   3006: 
                   3007: #include <iostream.h>
                   3008: 
                   3009: #define ISTREAM istream
                   3010: 
                   3011: istream& ISTREAM::read(char* s, int n)
                   3012: {
                   3013:        if ( !ipfx(n) ) {
                   3014:                if ( n > 0 ) setstate(eofbit|failbit) ;
                   3015:                return *this ;
                   3016:                }
                   3017:        x_gcount = bp->sgetn(s,n) ; ;
                   3018:        if ( x_gcount < n ) setstate(eofbit|failbit) ;
                   3019:        return *this ;
                   3020: }
                   3021: 
                   3022: istream& ISTREAM::ignore(register int n, register int delim)
                   3023: {
                   3024:        x_gcount = 0 ;
                   3025:        if ( !ipfx(1) ) return *this ;
                   3026:        if ( n == 0 ) return *this ;
                   3027:        register streambuf* nbp = bp ;
                   3028:        register int count = 0 ;
                   3029: 
                   3030:        while ( 1 ) {
                   3031:                register int c = nbp->sbumpc() ;
                   3032:                if (  c == EOF ) {
                   3033:                        setstate(eofbit|failbit) ;
                   3034:                        break ;
                   3035:                        }
                   3036:                ++count ;
                   3037:                if ( c == delim ) break ;
                   3038:                if ( count == n ) break ;
                   3039:                }
                   3040:        x_gcount = count ;
                   3041:        return *this ;
                   3042:        }
                   3043: 
                   3044: istream& ISTREAM::get(
                   3045:        register char* s,       /* character array to read into */
                   3046:        register int len,       /* size of character array */
                   3047:        register char term      /* character that terminates input */
                   3048: ) {
                   3049:        register c;
                   3050:        register streambuf *nbp = bp;
                   3051: 
                   3052: 
                   3053:        x_gcount = 0 ;
                   3054:        if ( len == 0 ) return *this ;
                   3055: 
                   3056:        if ( !ipfx(len) ) {
                   3057:                *s = 0 ;
                   3058:                return *this ;
                   3059:        }
                   3060: 
                   3061:        if ( len<=0 ) return *this ;
                   3062: 
                   3063:        if ((c = bp->sgetc()) == EOF) {
                   3064:                setstate(failbit | eofbit) ;
                   3065:                return *this;
                   3066:        }
                   3067: 
                   3068:        while (c != term && c != EOF && len > 1) {
                   3069:                *s++ = c;
                   3070:                c = nbp->snextc();
                   3071:                len--;
                   3072:                ++x_gcount ;
                   3073:        }
                   3074:        *s = '\0';
                   3075:        if (c == EOF) setstate(eofbit) ;
                   3076:        return *this;
                   3077: }
                   3078: 
                   3079: 
                   3080: istream& ISTREAM::get(
                   3081:        register streambuf &s,  /* streambuf to input to */
                   3082:        register char term      /* termination character */
                   3083: ){
                   3084:        register c;
                   3085: 
                   3086:        int oldskip = skip(0) ;
                   3087:        if ( !ipfx() ) {
                   3088:                skip(oldskip) ;
                   3089:                return *this ;
                   3090:        }
                   3091:        skip(oldskip) ;
                   3092:        register streambuf *nbp = bp;
                   3093: 
                   3094:        x_gcount = 0 ;
                   3095:        if ((c = bp->sgetc()) == EOF) {
                   3096:                setstate(failbit | eofbit) ;
                   3097:                return *this;
                   3098:        }
                   3099: 
                   3100:        while (c != term && c != EOF) {
                   3101:                if (s.sputc(c) == EOF) break;
                   3102:                c = nbp->snextc();
                   3103:                ++x_gcount ;
                   3104:        }
                   3105:        if (c == EOF) setstate(eofbit) ;
                   3106:        return *this;
                   3107: }
                   3108: 
                   3109: istream& ISTREAM::getline(char* b, int len, char d ) 
                   3110: {
                   3111:        get(b,len,d) ;
                   3112:        if ( x_gcount != len-1 && d!=EOF && bp->sgetc()==d) {
                   3113:                ++x_gcount ;
                   3114:                bp->sbumpc() ;
                   3115:        }
                   3116:        return *this ;
                   3117: }
                   3118: 
                   3119: istream& ISTREAM::getline(unsigned char* b, int len, char d ) 
                   3120: {
                   3121:        return getline((char*)b,len,d) ;
                   3122: }
                   3123: 
                   3124: int ISTREAM::gcount()
                   3125: {
                   3126:        return x_gcount ;
                   3127: }
                   3128: 
                   3129: istream& ISTREAM::operator>>(register streambuf* s) {
                   3130:        register c;
                   3131:        if ( !ipfx() ) return *this ;
                   3132: 
                   3133:        register streambuf *nbp = bp;
                   3134: 
                   3135:        if ((c = bp->sgetc()) == EOF) {
                   3136:                setstate(failbit | eofbit) ;
                   3137:                return *this;
                   3138:        }
                   3139: 
                   3140:        while (c != EOF) {
                   3141:                if (s->sputc(c) == EOF) break;
                   3142:                c = nbp->snextc();
                   3143:        }
                   3144:        if (c == EOF) setstate(eofbit) ;
                   3145:        return *this;
                   3146: }
                   3147: 
                   3148: 0707070044043602501004440042240042240000010416170437115412200001300000001542sbuf.dbp.c/*ident "@(#)ctrans:lib/stream/sbuf.dbp.c       1.1.2.1" */
                   3149: /**************************************************************************
                   3150:                        Copyright (c) 1984 AT&T
                   3151:                          All Rights Reserved   
                   3152: 
                   3153:        THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T
                   3154:        
                   3155:        The copyright notice above does not evidence any        
                   3156:        actual or intended publication of such source code.
                   3157: 
                   3158: sbuf.dbp.c
                   3159: 
                   3160: *****************************************************************************/
                   3161: 
                   3162: 
                   3163: #include <iostream.h>
                   3164: #include <stdio.h>
                   3165: #include <string.h>
                   3166: #include <osfcn.h>
                   3167: 
                   3168: void streambuf::dbp()
                   3169: {
                   3170:        char msg[256] ;
                   3171:        sprintf(msg,"buf at %#x, base=%#x, ebuf=%#x, ",
                   3172:                                this, base(), ebuf());
                   3173:        write(1,msg,strlen(msg)) ;
                   3174:        sprintf(msg,"pptr=%#x, epptr=%#x, ", pptr(),epptr() );
                   3175:        write(1,msg,strlen(msg)) ;
                   3176:        sprintf(msg,"eback=%#x, gptr=%#x, egptr=%#x\n",
                   3177:                        eback(), gptr(), egptr() ) ;
                   3178:        write(1,msg,strlen(msg)) ;
                   3179: 
                   3180: }
                   3181: 0707070044044146101004440042240042240000011575740443013564500001300000003220stdiobuf.c/*ident "@(#)ctrans:lib/stream/stdiobuf.c       1.1.2.2" */
                   3182: /**************************************************************************
                   3183:                        Copyright (c) 1984 AT&T
                   3184:                          All Rights Reserved   
                   3185: 
                   3186:        THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T
                   3187:        
                   3188:        The copyright notice above does not evidence any        
                   3189:        actual or intended publication of such source code.
                   3190: 
                   3191: stdiobuf.c:
                   3192: 
                   3193: *****************************************************************************/
                   3194: 
                   3195: 
                   3196: #include <iostream.h>
                   3197: #include <stdiostream.h>
                   3198: 
                   3199: int stdiobuf::overflow(int c) 
                   3200: {
                   3201:        if ( fp == 0 || c==EOF) return EOF ;
                   3202:        if ( last_op == ios::in ) {
                   3203:                if ( egptr()!=gptr() ) ungetc(*gptr(),fp) ;
                   3204:                // stdio requires seeks between reads and writes
                   3205:                fseek(fp,0,ios::cur) ;
                   3206:                setg(0,0,0) ;
                   3207:                }
                   3208:        last_op = ios::out ;
                   3209:        
                   3210:        return putc(c,fp) ;
                   3211: }
                   3212: 
                   3213: int stdiobuf::underflow() {
                   3214:        if ( fp == 0 ) return EOF ;
                   3215:        if ( last_op == ios::out ) {
                   3216:                fseek(fp,0,0) ;
                   3217:                }
                   3218:        if ( feof(fp) ) return EOF ;
                   3219:        int c = getc(fp) ;
                   3220:        if ( c == EOF ) return EOF ;
                   3221:        setg(buf,buf,buf+1) ;
                   3222:        buf[0] = c ;
                   3223:        return c ;
                   3224: }
                   3225: 
                   3226: int stdiobuf::pbackfail(int c) 
                   3227: {
                   3228:        return ungetc(c,fp) ;
                   3229: }
                   3230: 
                   3231: int stdiobuf::sync()
                   3232: {
                   3233:        if ( last_op==ios::out ) fflush(fp) ;
                   3234:        else if ( last_op==ios::in && gptr()!=egptr() ) {
                   3235:                ungetc(*gptr(),fp) ;
                   3236:                setg(0,0,0) ;
                   3237:        }
                   3238:        return fseek(fp,0,ios::cur) ;
                   3239: }
                   3240:        
                   3241: streampos stdiobuf::seekoff(streamoff p,seek_dir d,int) 
                   3242: {
                   3243: 
                   3244:        if ( gptr()!=egptr() ) ungetc(*gptr(),fp) ;
                   3245:        setg(0,0,0) ;
                   3246:        return fseek(fp,p,d) ;
                   3247: }
                   3248: 
                   3249: stdiobuf::stdiobuf(FILE* f) :
                   3250:        fp(f)
                   3251: {
                   3252:        setbuf((char*)0,0) ;
                   3253: }
                   3254: 
                   3255: stdiobuf::~stdiobuf() 
                   3256: {
                   3257:        if (fp) fflush(fp) ;
                   3258: }
                   3259: 
                   3260: stdiostream::stdiostream(FILE* f) :  buf(f)
                   3261: {
                   3262:        init(&buf) ;
                   3263: }
                   3264: 
                   3265: stdiostream::~stdiostream() { }
                   3266: 
                   3267: stdiobuf* stdiostream::rdbuf() { return &buf ; }
                   3268: 0707070044044146041004440042240042240000011615120443013464300001600000002172stdiostream.h/*ident      "@(#)ctrans:incl/stdiostream.h  1.1.1.2" */
                   3269: /**************************************************************************
                   3270:                         Copyright (c) 1984 AT&T
                   3271:                           All Rights Reserved   
                   3272: 
                   3273:         THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T
                   3274:       
                   3275:         The copyright notice above does not evidence any        
                   3276:         actual or intended publication of such source code.
                   3277: 
                   3278: *****************************************************************************/
                   3279: #ifndef STDSTREAMH
                   3280: #define STDSTREAMH
                   3281: 
                   3282: #include <iostream.h>
                   3283: #include <stdio.h>
                   3284: 
                   3285: class stdiobuf : public streambuf {
                   3286:        /*** stdiobuf is obsolete, should be avoided ***/
                   3287: public: // Virtuals
                   3288:        virtual int     overflow(int=EOF);
                   3289:        virtual int     underflow();
                   3290:        virtual int     sync() ;
                   3291:        virtual streampos
                   3292:                        seekoff(streamoff,seek_dir,int) ;
                   3293:        virtual int     pbackfail(int c);
                   3294: public:
                   3295:                        stdiobuf(FILE* f) ;
                   3296:        FILE*           stdiofile() { return fp ; }
                   3297:        virtual         ~stdiobuf() ;
                   3298: private:
                   3299:        FILE*           fp ;                    
                   3300:        int             last_op ;
                   3301:        char            buf[2];
                   3302: };
                   3303: 
                   3304: class stdiostream : public ios {
                   3305: public:
                   3306:                        stdiostream(FILE*) ;
                   3307:                        ~stdiostream() ;
                   3308:        stdiobuf*       rdbuf() ;
                   3309: private:
                   3310:        stdiobuf        buf ;
                   3311: };
                   3312: 
                   3313: #endif
                   3314: 
                   3315: 0707070044044146241004440042240042240000011614100443034011500001100000015362stream.c/*ident   "@(#)ctrans:lib/stream/stream.c 1.1.3.2" */
                   3316: /**************************************************************************
                   3317:                         Copyright (c) 1984 AT&T
                   3318:                           All Rights Reserved   
                   3319: 
                   3320:         THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T
                   3321:       
                   3322:         The copyright notice above does not evidence any        
                   3323:         actual or intended publication of such source code.
                   3324: 
                   3325: stream.c:
                   3326: 
                   3327: *****************************************************************************/
                   3328: 
                   3329: #include <iostream.h>
                   3330: 
                   3331: void (*ios::stdioflush)() = 0 ;
                   3332: 
                   3333: long ios::nextbit = 1L<<16 ;
                   3334: long ios::nextword = 0 ;
                   3335: 
                   3336: const long ios::adjustfield = ios::left|ios::right|ios::internal ;
                   3337: const long ios::floatfield = ios::fixed|ios::scientific ;
                   3338: const long ios::basefield = ios::dec|ios::hex|ios::oct ;
                   3339: 
                   3340: #define ISTREAM istream
                   3341: #define OSTREAM ostream
                   3342: #define IOSTREAM iostream
                   3343: 
                   3344: union ios_user_union { long i ; void* p ; } ;
                   3345: 
                   3346: void ios::init(streambuf* b)
                   3347: {
                   3348:        // Must be called by other constructors. */
                   3349:        bp=b ;
                   3350:        state = 0 ;
                   3351:        ispecial = 0 ;
                   3352:        ospecial = 0 ;
                   3353:        osfx_special = 0 ;
                   3354:        isfx_special = 0 ;
                   3355:        delbuf = 0 ;
                   3356:        if (!bp ) setstate(hardfail|failbit) ;
                   3357:        flags(skipws|dec) ;
                   3358:        width(0);
                   3359:        precision(6);
                   3360:        fill(' ');
                   3361:        tie(0);
                   3362:        
                   3363:        x_user = 0 ;
                   3364:        nuser = 0 ;
                   3365:        }
                   3366: 
                   3367: ios::ios(streambuf* b) { init(b) ; }
                   3368: 
                   3369: ios::~ios()
                   3370: {
                   3371:        if (bp) bp->sync() ;
                   3372:        if (delbuf) {
                   3373:                delete bp ;
                   3374:                bp = 0 ;
                   3375:                }
                   3376:        if (x_user) {
                   3377:                delete x_user ; 
                   3378:                x_user = 0 ;
                   3379:                }
                   3380:        }
                   3381: 
                   3382: iostream::iostream(streambuf* b) { init(b) ; }
                   3383: iostream::~iostream() { }
                   3384: istream::istream(streambuf* b) { init(b) ; }
                   3385: istream::~istream() { }
                   3386: ostream::ostream(streambuf* b) { init(b) ; }
                   3387: ostream::~ostream() { }
                   3388: 
                   3389: IOSTREAM::IOSTREAM() { } 
                   3390: ISTREAM::ISTREAM() { } 
                   3391: OSTREAM::OSTREAM() { }
                   3392: 
                   3393: ostream& OSTREAM::flush()
                   3394: {
                   3395:        if ( bp->out_waiting() )        bp->overflow() ;
                   3396:        else if ( bp->in_avail() )      bp->sync() ; 
                   3397: 
                   3398:        return *this ;
                   3399: }
                   3400: 
                   3401: streampos OSTREAM::tellp()
                   3402: {
                   3403:        return bp->seekoff(0,cur,out) ;
                   3404: }
                   3405: 
                   3406: streampos ISTREAM::tellg()
                   3407: {
                   3408:        return bp->seekoff(0,cur,in) ;
                   3409: }
                   3410:        
                   3411: ostream& OSTREAM::seekp(streampos p)
                   3412: {
                   3413:        if ( bp->seekpos(p,out) == EOF ) setstate(badbit) ;
                   3414:        return *this ;
                   3415: }
                   3416: 
                   3417: typedef seek_dir Sdir ; /** Gets around a bug in release 2.0 beta 5 **/
                   3418: 
                   3419: ostream& OSTREAM::seekp(streamoff o, Sdir d)
                   3420: {
                   3421:        if ( bp->seekoff(o,d,out) == EOF ) setstate(badbit) ;
                   3422:        return *this ;
                   3423: }
                   3424:        
                   3425: istream& ISTREAM::seekg(streampos p)
                   3426: {
                   3427:        if ( bp->seekpos(p,in) == EOF ) setstate(badbit) ;
                   3428:        return *this ;
                   3429: }
                   3430: 
                   3431: istream& ISTREAM::seekg(streamoff o, Sdir d)
                   3432: {
                   3433:        if ( bp->seekoff(o,d,in) == EOF ) setstate(badbit) ;
                   3434:        return *this ;
                   3435: }
                   3436: 
                   3437: ostream* ios::tie(ostream* s) 
                   3438: {
                   3439:        ostream* t = x_tie ;
                   3440:        x_tie = s ;
                   3441: 
                   3442:        if ( s ) {
                   3443:                ispecial |= tied ;
                   3444:                ospecial |= tied ;
                   3445:                }
                   3446:        else {
                   3447:                ispecial &= ~tied ;
                   3448:                ospecial &= ~tied ;
                   3449:                }
                   3450:        return t ;
                   3451: }
                   3452: 
                   3453: char ios::fill(char c)
                   3454: {
                   3455:        char oldf = x_fill ;
                   3456:        x_fill = c ;
                   3457:        return oldf ;
                   3458:        }
                   3459: 
                   3460: int ios::precision(int p)
                   3461: {
                   3462:        register int oldp = x_precision ;
                   3463:        x_precision = p;
                   3464:        return oldp ;
                   3465:        }
                   3466: 
                   3467: long ios::setf(long b, long f)
                   3468: {
                   3469:        long oldf = x_flags ;
                   3470:        x_flags = (b&f) | (x_flags&~f) ;
                   3471: 
                   3472:        if (x_flags&skipws )    ispecial |= skipping ;
                   3473:        else                    ispecial &= ~skipping ;
                   3474: 
                   3475:        osfx_special = (x_flags&(unitbuf|stdio)) != 0 ;
                   3476:                        
                   3477:        return oldf ;
                   3478:        }
                   3479: 
                   3480: long ios::setf(long b)
                   3481: {
                   3482:        long oldf = x_flags ;
                   3483:        x_flags |= b ;
                   3484: 
                   3485:        if (x_flags&skipws )    ispecial |= skipping ;
                   3486:        else                    ispecial &= ~skipping ;
                   3487: 
                   3488:        osfx_special = (x_flags&(unitbuf|stdio)) != 0 ;
                   3489:        return oldf ;
                   3490:        }
                   3491: 
                   3492: long ios::unsetf(long b)
                   3493: {
                   3494:        long oldf = x_flags ;
                   3495:        x_flags &= ~b ;
                   3496: 
                   3497:        if (x_flags&skipws )    ispecial |= skipping ;
                   3498:        else                    ispecial &= ~skipping ;
                   3499: 
                   3500:        osfx_special = (x_flags&(unitbuf|stdio)) != 0 ;
                   3501:        return oldf ;
                   3502:        }
                   3503: 
                   3504: long ios::flags(long f) 
                   3505: {
                   3506:        long oldf = x_flags ;
                   3507:        x_flags = f ;
                   3508: 
                   3509:        if (x_flags&skipws )    ispecial |= skipping ;
                   3510:        else                    ispecial &= ~skipping ;
                   3511: 
                   3512:        osfx_special = (x_flags&(unitbuf|stdio)) != 0 ;
                   3513:        return oldf ;
                   3514:        }
                   3515:        
                   3516: int ISTREAM::do_ipfx(int noskipws)
                   3517: {
                   3518:        if ( state&hardfail) return 0 ;
                   3519:        // note that we flush tied stream even when !this->good().
                   3520:        if ( x_tie && x_tie->rdbuf()->out_waiting()
                   3521:                        && (noskipws==0 || rdbuf()->in_avail()<noskipws) ){
                   3522:                x_tie->flush() ;
                   3523:                }
                   3524:        if ( good() && !noskipws && (ispecial&skipping) ) eatwhite() ;
                   3525:        if ( eof() ) {
                   3526:                // if we were only skipping this wouldn't be a failure.
                   3527:                // but the presumption is that this is a prefix operation
                   3528:                // prior to inputting something else.
                   3529:                setstate(ios::failbit) ;
                   3530:                return 0 ;
                   3531:                }
                   3532:        return good() ;
                   3533:        }
                   3534: 
                   3535: int OSTREAM::do_opfx()
                   3536: {
                   3537:        if ( state&hardfail) return 0 ;
                   3538:        if ( x_tie && x_tie->rdbuf()->out_waiting()) {
                   3539:                x_tie->flush() ;
                   3540:                }
                   3541:        return good() ;
                   3542:        }
                   3543: 
                   3544: void OSTREAM::do_osfx()
                   3545: {
                   3546:        if ( (x_flags & stdio) && stdioflush ) { (*stdioflush)() ; }
                   3547:        if ( x_flags & unitbuf ) flush() ;
                   3548:        }
                   3549: 
                   3550: void ios::operator=(ios& rhs) { bp = rhs.bp ; }
                   3551: 
                   3552: ios::ios() { assign_private = state ; state = hardfail ; } 
                   3553: 
                   3554: istream_withassign::istream_withassign() 
                   3555: {
                   3556:        // In order for the standard streams to be properly initialized
                   3557:        // it is essential that nothing is done by the combination
                   3558:        // of this constructor and ios::ios().  So we undo the effect of
                   3559:        // ios::ios() 
                   3560:        state = assign_private ;
                   3561:        }
                   3562: 
                   3563: istream_withassign::~istream_withassign()  { } 
                   3564: 
                   3565: istream_withassign& istream_withassign::operator=(istream& s)
                   3566: {
                   3567:        init(s.rdbuf()) ;
                   3568:        return *this ;
                   3569:        }
                   3570: 
                   3571: ostream_withassign::~ostream_withassign()  { } 
                   3572: 
                   3573: istream_withassign& istream_withassign::operator=(streambuf* sb)
                   3574: {
                   3575:        init(sb) ;
                   3576:        return *this ;
                   3577:        }
                   3578: 
                   3579: ostream_withassign::ostream_withassign() 
                   3580: {
                   3581:        // In order for the standard streams to be properly initialized
                   3582:        // it is essential that nothing is done by the combination
                   3583:        // of this constructor and ios::ios().  So we undo the effect of
                   3584:        // ios::ios() 
                   3585:        state = assign_private ;
                   3586:        }
                   3587: 
                   3588: ostream_withassign& ostream_withassign::operator=(ostream& s)
                   3589: {
                   3590:        init(s.rdbuf()) ;
                   3591:        return *this ;
                   3592:        }
                   3593: 
                   3594: ostream_withassign& ostream_withassign::operator=(streambuf* sb)
                   3595: {
                   3596:        init(sb) ;
                   3597:        return *this ;
                   3598:        }
                   3599: 
                   3600: iostream_withassign::iostream_withassign() 
                   3601: {
                   3602:        // In order for the standard streams to be properly initialized
                   3603:        // it is essential that nothing is done by the combination
                   3604:        // of this constructor and ios::ios().  So we undo the effect of
                   3605:        // ios::ios() 
                   3606:        state = assign_private ;
                   3607:        }
                   3608: 
                   3609: iostream_withassign::~iostream_withassign()  { } 
                   3610: 
                   3611: 
                   3612: iostream_withassign& iostream_withassign::operator=(ios& s)
                   3613: {
                   3614:        init(s.rdbuf()) ;
                   3615:        return *this ;
                   3616:        }
                   3617: 
                   3618: iostream_withassign& iostream_withassign::operator=(streambuf* sb)
                   3619: {
                   3620:        init(sb) ;
                   3621:        return *this ;
                   3622:        }
                   3623: 
                   3624: void ios::uresize(int n)
                   3625: {
                   3626:        if ( n < nuser ) return ;
                   3627:        ios_user_union* newu = new ios_user_union[n+1] ;
                   3628:        for ( int x = 0 ; x < nuser ; ++x ) {
                   3629:                newu[x] = x_user[x] ;
                   3630:                } ;
                   3631:        delete [nuser] x_user ;
                   3632:        nuser = n+1 ;
                   3633:        x_user = newu ;
                   3634:        }
                   3635: 
                   3636: long & ios::iword(int x)
                   3637: {
                   3638:        if ( x < 0 ) x = 0 ;
                   3639:        if ( x >= nuser ) uresize(x) ;
                   3640:        return x_user[x].i ;
                   3641:        }
                   3642: 
                   3643: void* & ios::pword(int x)
                   3644: {
                   3645:        if ( x < 0 ) x = 0 ;
                   3646:        if ( x >= nuser ) uresize(x) ;
                   3647:        return x_user[x].p ;
                   3648:        }
                   3649: 
                   3650: 
                   3651: long ios::bitalloc()
                   3652: {
                   3653:        long w = nextbit ;
                   3654:        nextbit = nextbit << 1 ;
                   3655:        return w ;
                   3656:        }
                   3657: 
                   3658: long ios::xalloc()
                   3659: {
                   3660:        return nextword++ ;
                   3661:        }
                   3662: 0707070044043602551004440042240042240000010450100437115412200001100000003251stream.h/*ident   "@(#)ctrans:incl/stream.h       1.1.5.1" */
                   3663: /**************************************************************************
                   3664:                         Copyright (c) 1984 AT&T
                   3665:                           All Rights Reserved   
                   3666: 
                   3667:         THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T
                   3668:       
                   3669:         The copyright notice above does not evidence any        
                   3670:         actual or intended publication of such source code.
                   3671: 
                   3672: *****************************************************************************/
                   3673: 
                   3674: #ifndef STREAMH
                   3675: #define STREAMH
                   3676: 
                   3677: #include <iostream.h>
                   3678: #include <iomanip.h>
                   3679: #include <stdiostream.h>
                   3680: 
                   3681: #ifndef NULL
                   3682: #define NULL   0
                   3683: #endif
                   3684: 
                   3685: extern char*  oct(long, int =0);
                   3686: extern char*  dec(long, int =0);
                   3687: extern char*  hex(long, int =0);
                   3688: 
                   3689: extern char*  chr(int, int =0);        /* chr(0) is the empty string "" */
                   3690: extern char*  str(const char*, int =0);
                   3691: extern char*  form(const char* ...);
                   3692:                        /* printf format
                   3693:                          * Things may go terribly wrong (maybe even core
                   3694:                          * dumps, if form tries to create a string with
                   3695:                          * more than "max_field_width" characters. */
                   3696: 
                   3697: /* WS used to be a special in streams. The WS manipulator
                   3698:  * is implemented differently but may be extracted from an istream
                   3699:  * with the same effect as the old form.
                   3700:  */
                   3701: 
                   3702: extern istream& WS(istream&) ;
                   3703: extern void eatwhite(istream&) ;
                   3704: 
                   3705: static const int input = (ios::in) ;
                   3706: static const int output = (ios::out) ;
                   3707: static const int append = (ios::app) ;
                   3708: static const int atend = (ios::ate) ;
                   3709: static const int _good = (ios::goodbit) ;
                   3710: static const int _bad = (ios::badbit) ;
                   3711: static const int _fail = (ios::failbit) ;
                   3712: static const int _eof = (ios::eofbit) ;
                   3713: 
                   3714: typedef io_state state_value ;
                   3715: 
                   3716: #endif
                   3717: 0707070044044146111004440042240042240000011627220443013566500001400000007423streambuf.c/*ident        "@(#)ctrans:lib/stream/streambuf.c      1.1.6.2" */
                   3718: /**************************************************************************
                   3719:                         Copyright (c) 1984 AT&T
                   3720:                           All Rights Reserved   
                   3721: 
                   3722:         THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T
                   3723:       
                   3724:         The copyright notice above does not evidence any        
                   3725:         actual or intended publication of such source code.
                   3726: 
                   3727: streambuf.c:
                   3728: 
                   3729: *****************************************************************************/
                   3730: 
                   3731: #include <iostream.h>
                   3732: #include "streamdefs.h"
                   3733: #include <string.h>
                   3734: #include <memory.h>
                   3735: 
                   3736: /*
                   3737:        Allocate some space for the buffer.
                   3738:        Returns:        EOF on error
                   3739:                        0 on success
                   3740: */
                   3741: int streambuf::doallocate()
                   3742: {
                   3743:        char *buf = new char[STREAMBUFSIZE] ;
                   3744:        if ( !buf ) return EOF ;
                   3745:        setb(buf,buf+STREAMBUFSIZE,1) ;
                   3746:        return 0;
                   3747: }
                   3748: 
                   3749: /*
                   3750:        Come here on a put to a full buffer.  Allocate the buffer if 
                   3751:        it is uninitialized.
                   3752:        Returns:        EOF on error
                   3753:                        the argument on success
                   3754: */
                   3755: int streambuf::overflow(int c)
                   3756: {
                   3757:        if ( c==EOF )                   return zapeof(c) ;
                   3758:        if ( allocate() == EOF)         return EOF;
                   3759: 
                   3760:        if ( x_pptr <= x_epptr )        return sputc(c) ;
                   3761:        else                            return EOF ;
                   3762: }
                   3763: 
                   3764: /*
                   3765:        Fill a buffer.
                   3766:        Returns:        EOF on error or end of input
                   3767:                        next character on success
                   3768: */
                   3769: int streambuf::underflow()
                   3770: {
                   3771:        if ( x_pptr > x_egptr ) setg(x_eback,x_gptr,x_pptr) ;
                   3772: 
                   3773:        if ( x_egptr > x_gptr ) return 0 ;
                   3774:        else                    return EOF ;
                   3775: }
                   3776: 
                   3777: int streambuf::pbackfail(int)
                   3778: {
                   3779:        return EOF;
                   3780: }
                   3781: 
                   3782: int streambuf::sync()
                   3783: {
                   3784:        // It's unclear exactly what this should do.  Should it reset
                   3785:        // the buffer or what.  One theory (that used to be in the code.
                   3786:        // was that it should insert a 0.  Which seems to be the
                   3787:        // right thing for "strings".
                   3788:        if ( x_pptr && x_epptr > x_pptr )  sputc(0) ;
                   3789:        return EOF ;
                   3790: }
                   3791: 
                   3792: 
                   3793: streampos streambuf::seekpos(streampos p, int m)
                   3794: {
                   3795:        return seekoff(p, ios::beg, m) ;
                   3796:        }
                   3797: 
                   3798: streampos streambuf::seekoff(streampos,seek_dir,int) 
                   3799: {
                   3800:        return EOF ;
                   3801: }
                   3802: 
                   3803: int streambuf::xsputn(register const char* s, int n)
                   3804: {
                   3805:        register int req = n ;
                   3806:        if ( unbuffered() ) {
                   3807:                while( req-- > 0 ) {
                   3808:                        if ( sputc(*s++) == EOF ) return n-req-1 ;
                   3809:                }
                   3810:                return n ;
                   3811:        }
                   3812:        register int avail = x_epptr-x_pptr ;
                   3813:        while ( avail < req ) {
                   3814:                memcpy(x_pptr,s,avail) ;
                   3815:                s += avail ;
                   3816:                pbump(avail) ;
                   3817:                req -= avail ;
                   3818:                if ( overflow(zapeof(*s++)) == EOF ) return n-req ;
                   3819:                --req ;
                   3820:                avail = x_epptr-x_pptr ;
                   3821:        }
                   3822:        memcpy(x_pptr,s,req ) ;
                   3823:        pbump(req) ;
                   3824:        return n ;
                   3825: }
                   3826: 
                   3827: int streambuf::xsgetn(register char* s, int n)
                   3828: {
                   3829:        register char* p = s ;
                   3830:        register int req = n ;
                   3831:        if (  unbuffered()  ) {
                   3832:                while (req-- > 0 ) {
                   3833:                        register int c ;
                   3834:                        if ( (c=sbumpc() ) != EOF )  *p++ = c ;
                   3835:                        else                    return p-s ;
                   3836:                }
                   3837:        }
                   3838: 
                   3839:        if ( req <= 0 ) return 0 ;
                   3840: 
                   3841:        register int avail = x_egptr-x_gptr ;
                   3842:        while (  avail < req ) {
                   3843:                memcpy(p,x_gptr,avail) ;
                   3844:                p += avail ; 
                   3845:                req -= avail ;
                   3846:                gbump(avail) ;
                   3847:                if ( underflow()==EOF ) return p-s ;
                   3848:                avail = x_egptr-x_gptr ;
                   3849:                }
                   3850: 
                   3851:        memcpy(p,x_gptr,req) ;
                   3852:        gbump(req) ;
                   3853:        return n ;
                   3854: }
                   3855: 
                   3856: 
                   3857: streambuf* streambuf::setbuf(char* p , int len)
                   3858: {
                   3859: 
                   3860:        if ( x_base ) return 0 ;
                   3861:        if ( len <= 0 || p == 0 ) {
                   3862:                // make it unbuffered
                   3863:                setb(0,0,0) ;
                   3864:                setg(0,0,0) ;
                   3865:                setp(0,0);
                   3866:                unbuffered(1) ; 
                   3867:                }
                   3868:        else {
                   3869:                setb(p,p+len,0) ;
                   3870:                setg(p,p,p) ;
                   3871:                setp(p,p+len) ;
                   3872:                unbuffered(0) ;
                   3873:                } 
                   3874:        return this;
                   3875: }
                   3876: 
                   3877: streambuf* streambuf::setbuf(unsigned char* p, int len)
                   3878: {
                   3879:        return setbuf((char*)p,len) ;
                   3880: }
                   3881: 
                   3882: streambuf::streambuf() :
                   3883:        x_unbuf(0), alloc(0)
                   3884: {
                   3885:        setb(0,0,0);
                   3886:        setg(0,0,0);
                   3887:        setp(0,0);
                   3888: }
                   3889: 
                   3890: streambuf::streambuf(char* p, int l) :
                   3891:        x_unbuf(0), alloc(0)
                   3892: {
                   3893:        setb(0,0,0);
                   3894:        setbuf(p,l) ;
                   3895: }
                   3896: 
                   3897: streambuf::~streambuf() 
                   3898: {
                   3899:        sync() ;
                   3900:        if (x_base && alloc) delete x_base;
                   3901:        }
                   3902: 
                   3903: int streambuf::x_snextc()
                   3904: {
                   3905:        // called by snextc to handle overflow
                   3906:        if ( x_egptr==0 || x_gptr != x_egptr ) {
                   3907:                // we stepped beyond x_gptr meaning snextc was called when
                   3908:                // x_gtr == x_egptr rather than when x_gptr+1=x_egptr.
                   3909:                underflow() ;
                   3910:                pbump(1) ;
                   3911:                }
                   3912:        return sgetc() ;
                   3913:        }
                   3914: 0707070044044142641004440042240042240000011622740437760332500001500000004211streamdefs.h/*ident       "@(#)ctrans:lib/stream/streamdefs.h     1.1.2.1" */
                   3915: /**************************************************************************
                   3916:                        Copyright (c) 1984 AT&T
                   3917:                          All Rights Reserved   
                   3918: 
                   3919:        THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T
                   3920:        
                   3921:        The copyright notice above does not evidence any        
                   3922:        actual or intended publication of such source code.
                   3923: 
                   3924: streamdefs.h:
                   3925: 
                   3926: *****************************************************************************/
                   3927: 
                   3928: 
                   3929: // This file contains #defines for controlling conditional compilation 
                   3930: // of the stream library
                   3931: 
                   3932: 
                   3933: // The follwing functions adjust for machine dependencies
                   3934: 
                   3935: #define BREAKEVEN      10    
                   3936:                        /* The approximate length of a string
                   3937:                         * for which it is faster to do a strncpy
                   3938:                         * than a char by char loop. If BREAKEVEN is 0 
                   3939:                         * then strncpy is always better.  If it is <0 then 
                   3940:                         * loop is always better, (e.g. if strncopy does
                   3941:                         * a char by char copy anyway.)
                   3942:                         */
                   3943: 
                   3944: #define SEEK_ARITH_OK  1
                   3945:                        /* System supports arithmetic on stream positions.
                   3946:                         * I.e. if file is at a position and we read or
                   3947:                         * write n bytes we can find the new position
                   3948:                         * by adding n to old position. (Providing
                   3949:                         * O_APPEND isn't set in on open.)
                   3950:                         */
                   3951: 
                   3952: static const int PTRBASE = ios::hex ;
                   3953:                        /* base for output of pointers (void*) */
                   3954: 
                   3955: // There is one important machine dependent feature of this implementation
                   3956: // It assumes that it can always create a pointer to the byte after
                   3957: // a char array used as a buffer, and that pointer will be greater than
                   3958: // any pointer into the array. 
                   3959: // My reading of the ANSI standard is that this assumption is permissible,
                   3960: // but I can imagine segmented architectures where it fails.
                   3961: 
                   3962: /* #define VSPRINTF vsprintf */
                   3963: 
                   3964:                        /* If defined, the name of a "vsprintf" function.
                   3965:                         * If not defined, 
                   3966:                         * various non-portable kludges are used in
                   3967:                         * oldformat.c
                   3968:                         */
                   3969: 
                   3970: static const int STREAMBUFSIZE = 1024 ;
                   3971:                        // The default buffer size.
                   3972: 
                   3973: /*******
                   3974:        #define O_CREAT 01000 
                   3975:        #define O_TRUNC 02000 
                   3976:        #define O_EXCL  04000
                   3977:  *******/
                   3978:                        /* Used in filebuf.c.  Define if your system
                   3979:                         * needs it to have a value different from
                   3980:                         * that indicated here, but doesn't
                   3981:                         * define it in standard system headers
                   3982:                         */
                   3983: 0707070044044146121004440042240042240000011606300443013570600001400000014566strstream.c/*ident        "@(#)ctrans:lib/stream/strstream.c      1.1.4.2" */
                   3984: /**************************************************************************
                   3985:                         Copyright (c) 1984 AT&T
                   3986:                           All Rights Reserved   
                   3987: 
                   3988:         THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T
                   3989:       
                   3990:         The copyright notice above does not evidence any        
                   3991:         actual or intended publication of such source code.
                   3992: 
                   3993: strstream.c:
                   3994: 
                   3995: *****************************************************************************/
                   3996: 
                   3997: #include <iostream.h>
                   3998: #include <string.h>
                   3999: #include <strstream.h>
                   4000: #include <memory.h>
                   4001: 
                   4002: typedef unsigned int Size_t ;  
                   4003:                        // Some day <memory.h> will be ANSIfied and
                   4004:                        // this will be declared there.
                   4005:                        // Until then make it compatible with declaration
                   4006:                        // of third argument of memcpy.
                   4007: 
                   4008: static const int initsize = 16*sizeof(int) ;
                   4009: static const int increment = 2 ;       
                   4010: 
                   4011: static const int arbitrary = 1024 ;    // used by ignore_oflow.
                   4012: 
                   4013: static const int ios_atend = ios::ate ;
                   4014: static const int ios_input = ios::in ;
                   4015: static const int ios_output = ios::out ;
                   4016: static const int ios_append = ios::app ;
                   4017: static const int seek_cur = ios::cur ;
                   4018: static const int seek_end = ios::end ;
                   4019: static const int seek_beg = ios::beg ;
                   4020: 
                   4021: strstreambuf::strstreambuf(void* (*a)(long), void (*f)(void*)) :
                   4022:        afct(a),
                   4023:        ffct(f),
                   4024:        froozen(1),
                   4025:        auto_extend(initsize),
                   4026:        ignore_oflow(0)
                   4027: {
                   4028:        }
                   4029: 
                   4030: void strstreambuf::init(char* b, int size, char* pstart)
                   4031: {
                   4032:        if ( b && size > 0 ) {
                   4033:                setb(b,b+size) ;
                   4034:                }
                   4035:        else if ( b && size == 0 ) {
                   4036:                setb(b,b+strlen(b) ) ;
                   4037:                }
                   4038:        else if ( b && size < 0 ) {
                   4039:                ignore_oflow = 1 ;
                   4040:                setb(b,b+arbitrary) ;
                   4041:                }
                   4042:        else if ( !b && size > initsize ) {
                   4043:                auto_extend = size ;
                   4044:                setb(0,0) ;
                   4045:                }
                   4046:        else {
                   4047:                setb(0,0) ;
                   4048:                }
                   4049: 
                   4050:        if ( pstart && base() && base() <= pstart && pstart <= ebuf() ) {
                   4051:                setp(pstart,ebuf()) ;
                   4052:                }
                   4053:        else {
                   4054:                setp(0,0) ;
                   4055:                }
                   4056:        
                   4057:        if ( base() ) {
                   4058:                setg(base(),base(),ebuf()) ;
                   4059:                auto_extend = 0 ;
                   4060:                froozen = 1 ;
                   4061:                }
                   4062:        else {
                   4063:                setg(0,0,0) ;
                   4064:                }
                   4065:        }
                   4066: 
                   4067: strstreambuf::strstreambuf(char* b, int size, char* pstart) :
                   4068:        afct(0),
                   4069:        ffct(0),
                   4070:        froozen(0),
                   4071:        auto_extend(0),
                   4072:        ignore_oflow(0)
                   4073: {
                   4074:        init(b,size,pstart) ; 
                   4075:        }
                   4076: 
                   4077: strstreambuf::strstreambuf(unsigned char* b, int size, unsigned char* pstart) :
                   4078:        afct(0),
                   4079:        ffct(0),
                   4080:        froozen(0),
                   4081:        auto_extend(0),
                   4082:        ignore_oflow(0)
                   4083: {
                   4084:        init((char*)b,size,(char*)pstart) ; 
                   4085:        }
                   4086: 
                   4087: 
                   4088: strstreambuf::strstreambuf(int ae) :
                   4089:        afct(0),
                   4090:        ffct(0),
                   4091:        froozen(1),
                   4092:        auto_extend(ae>0?ae:initsize),
                   4093:        ignore_oflow(0)
                   4094: {
                   4095:        }
                   4096: 
                   4097: strstreambuf::strstreambuf() :
                   4098:        afct(0),
                   4099:        ffct(0),
                   4100:        froozen(1),
                   4101:        auto_extend(initsize),
                   4102:        ignore_oflow(0)
                   4103: {
                   4104:        }
                   4105: 
                   4106: 
                   4107: int strstreambuf::doallocate()
                   4108: {
                   4109:        if ( auto_extend < initsize ) auto_extend = initsize ;
                   4110:        char* newspace  = afct ? (char*)(*afct)(auto_extend) 
                   4111:                               : new char[auto_extend] ;
                   4112: 
                   4113:        if ( !newspace ) return EOF ;
                   4114: 
                   4115:        froozen = 0 ;
                   4116:        setb(newspace,newspace+auto_extend,0) ;
                   4117:                        // Will free this space ourselves if neccessary
                   4118: 
                   4119:        setp(newspace,newspace+auto_extend) ;
                   4120:        setg(newspace,newspace,newspace) ;
                   4121: 
                   4122:        return 0 ;
                   4123:        }
                   4124: 
                   4125: int strstreambuf::overflow(int c)
                   4126: {
                   4127:        if ( !base() ) {
                   4128:                allocate() ;
                   4129:                if ( !base() ) return EOF ;
                   4130:                }
                   4131:        else if ( auto_extend && !froozen ) {
                   4132:                Size_t inserted=pptr()-base() ; // number of chars previously
                   4133:                                                // inserted into buffer
                   4134: 
                   4135:                Size_t extracted=gptr()-base() ;
                   4136:                                                // number of chars previously
                   4137:                                                // extracted from buffer
                   4138: 
                   4139:                // after we copy chars from current space to a new
                   4140:                // (larger) area we have to adjust pointers to take into
                   4141:                // acount previous activities.
                   4142: 
                   4143:                Size_t newsize = (Size_t)increment*blen() + 4 ;
                   4144:                if ( newsize < auto_extend ) newsize = auto_extend ;
                   4145:                char* newspace = afct ? (char*)(*afct)(newsize) 
                   4146:                                      : new char[newsize] ;
                   4147: 
                   4148:                if ( !newspace ) return EOF ;
                   4149: 
                   4150:                memcpy(newspace,base(),inserted) ;
                   4151: 
                   4152:                if ( ffct )     (*ffct)(base()) ;
                   4153:                else            delete base() ;
                   4154: 
                   4155:                setb(newspace,newspace+newsize,0) ;
                   4156:                setp(base()+inserted,ebuf()) ;
                   4157:                setg(base(),base()+extracted,pptr()) ;
                   4158:                }
                   4159:        else if ( ignore_oflow ) {
                   4160:                setp(pptr(),pptr()+arbitrary) ; 
                   4161:                }
                   4162:        else {
                   4163:                return EOF ;
                   4164:                }
                   4165:        if ( c!=EOF ) return sputc(c) ;
                   4166:        }
                   4167: 
                   4168: int strstreambuf::underflow()
                   4169: {
                   4170:        if ( !pptr() ) return EOF ;
                   4171:        if ( !egptr() ) return EOF ;
                   4172: 
                   4173:        setg(base(),egptr(),pptr()) ;
                   4174:        
                   4175:        if ( egptr() <= gptr() )        return EOF ;
                   4176:        else                            return *gptr() ;
                   4177:        }
                   4178: 
                   4179: void strstreambuf::freeze(int n) 
                   4180: {
                   4181:        froozen = n ;
                   4182:        }
                   4183: 
                   4184: 
                   4185: char* strstreambuf::str() 
                   4186: {
                   4187:        freeze() ;
                   4188:        return base() ;
                   4189:        }
                   4190: 
                   4191: strstreambuf::~strstreambuf()
                   4192: {
                   4193:        if ( !froozen && base() ) {
                   4194:                if ( ffct )     ffct(base()) ;
                   4195:                else            delete base() ;
                   4196:                }
                   4197:        }
                   4198: 
                   4199: streambuf* strstreambuf::setbuf(char* p, int size) 
                   4200: {
                   4201:        if ( p == 0 && ( base()==0 || auto_extend ) ) {
                   4202:                auto_extend = size ;
                   4203:                return this ;
                   4204:                }
                   4205:        else {
                   4206:                return 0 ;
                   4207:                }
                   4208:        }
                   4209: 
                   4210: streampos strstreambuf::seekoff(streamoff o, seek_dir d, int m)
                   4211: {
                   4212:        switch (d) {
                   4213:        case seek_beg : break ;
                   4214:        case seek_cur : {
                   4215:                if ( (m&ios_input) ) {
                   4216:                        o += gptr()-base() ;
                   4217:                        }
                   4218:                else  {
                   4219:                        o += pptr()-base() ;
                   4220:                        }
                   4221:                } break ;
                   4222:        case seek_end : {
                   4223:                if ( gptr()<egptr() && egptr()>pptr() ) {
                   4224:                        o += egptr()-base() ;
                   4225:                        }
                   4226:                else if ( pptr()<epptr() ) {
                   4227:                        o += pptr()-base();
                   4228:                        }
                   4229:                } break ;
                   4230:            } // end switch
                   4231:        if ( o < 0 ) return streampos(EOF) ;
                   4232:        if ( o >= blen() && !ignore_oflow ) return streampos(EOF) ;
                   4233:        if ( m&ios_input ) setg(base(), base()+o, egptr() ) ;
                   4234:        if ( m&ios_output) setp(base()+o, epptr() ) ;
                   4235:        return o ;
                   4236:        }
                   4237: 
                   4238: strstreambase::strstreambase(char* str, int size, char* pstart)
                   4239:        :  buf(str,size,pstart) { init(&buf) ; }
                   4240: 
                   4241: strstreambase::strstreambase() : buf() { init(&buf) ; }
                   4242: 
                   4243: strstreambase::~strstreambase() { }
                   4244: 
                   4245: strstreambuf* strstreambase::rdbuf() { return &buf ; }
                   4246: 
                   4247: istrstream::istrstream(char* str)
                   4248:        : strstreambase(str,strlen(str),0) { }
                   4249: 
                   4250: istrstream::istrstream(char* str, int size)
                   4251:        : strstreambase(str, size , 0) { }
                   4252: 
                   4253: istrstream::~istrstream() { }
                   4254: 
                   4255: 
                   4256: static char* pstart(char* str, int size, int m)
                   4257: {
                   4258:        if ( (m&(ios_append|ios_output)) == 0 ) return str+size ;
                   4259:        else if ( (m&(ios_append|ios_atend)) )  return str+strlen(str) ;
                   4260:        else                                    return str ;
                   4261:        }
                   4262: 
                   4263: ostrstream::ostrstream(char* str, int size, int m)
                   4264:        : strstreambase(str, size, pstart(str,size, (m|ios_output)) )
                   4265: { }
                   4266: 
                   4267: ostrstream::ostrstream() : strstreambase() { }
                   4268: 
                   4269: 
                   4270: ostrstream::~ostrstream()
                   4271: {
                   4272:        ios::rdbuf()->sputc(0) ;
                   4273:        }
                   4274: 
                   4275: char* ostrstream::str() 
                   4276: {
                   4277:        return strstreambase::rdbuf()->str() ;
                   4278:        }
                   4279: 
                   4280: int ostrstream::pcount() {
                   4281:        return ios::rdbuf()->out_waiting() ;
                   4282:        }
                   4283: 
                   4284: strstream::strstream() : strstreambase() { }
                   4285: 
                   4286: strstream::strstream(char* str, int size, int m) 
                   4287:        : strstreambase(str,size,pstart(str,size,m)) 
                   4288: { }
                   4289: 
                   4290: char* strstream::str() 
                   4291: {
                   4292:        return strstreambase::rdbuf()->str() ;
                   4293:        }
                   4294: 
                   4295: 
                   4296: strstream::~strstream() { }
                   4297: 0707070044044146051004440042240042240000011620550443013473100001400000003720strstream.h/*ident        "@(#)ctrans:incl/strstream.h    1.1.1.1" */
                   4298: /**************************************************************************
                   4299:                         Copyright (c) 1984 AT&T
                   4300:                           All Rights Reserved   
                   4301: 
                   4302:         THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T
                   4303:       
                   4304:         The copyright notice above does not evidence any        
                   4305:         actual or intended publication of such source code.
                   4306: 
                   4307: *****************************************************************************/
                   4308: #ifndef STRSTREAMH
                   4309: #define STRSTREAMH
                   4310: 
                   4311: #include <iostream.h>
                   4312: class strstreambuf : public streambuf
                   4313: {
                   4314: public: 
                   4315:                        strstreambuf() ;
                   4316:                        strstreambuf(int) ;
                   4317:                        strstreambuf(void* (*a)(long), void (*f)(void*)) ;
                   4318:                        strstreambuf(char* b, int size, char* pstart = 0 ) ;
                   4319:                        strstreambuf(unsigned char* b, int size, unsigned char* pstart = 0 ) ;
                   4320:        void            freeze(int n=1) ;
                   4321:        char*           str() ;
                   4322:                        ~strstreambuf() ;
                   4323: 
                   4324: public: /* virtuals  */
                   4325:        virtual int     doallocate() ;
                   4326:        virtual int     overflow(int) ;
                   4327:        virtual int     underflow() ;
                   4328:        virtual streambuf*
                   4329:                        setbuf(char*  p, int l) ;
                   4330:        virtual streampos
                   4331:                        seekoff(streamoff,seek_dir,int) ;
                   4332: 
                   4333: private:
                   4334:        void            init(char*,int,char*) ;
                   4335: 
                   4336:        void*           (*afct)(long) ;
                   4337:        void            (*ffct)(void*) ;
                   4338:        int             ignore_oflow ;
                   4339:        int             froozen ;
                   4340:        int             auto_extend ;
                   4341: 
                   4342: public:
                   4343:        } ;
                   4344: 
                   4345: class strstreambase : public virtual ios {
                   4346: public:
                   4347:        strstreambuf*   rdbuf() ;
                   4348: protected:     
                   4349:                        strstreambase(char*, int, char*) ;
                   4350:                        strstreambase() ;
                   4351:                        ~strstreambase() ;
                   4352: private:
                   4353:        strstreambuf    buf ; 
                   4354:        } ;
                   4355: 
                   4356: class istrstream : public strstreambase, public istream {
                   4357: public:
                   4358:                        istrstream(char* str);
                   4359:                        istrstream(char* str, int size ) ;
                   4360:                        ~istrstream() ;
                   4361:        } ;
                   4362: 
                   4363: class ostrstream : public strstreambase, public ostream {
                   4364: public:
                   4365:                        ostrstream(char* str, int size, int=ios::out) ;
                   4366:                        ostrstream() ;
                   4367:                        ~ostrstream() ;
                   4368:        char*           str() ;
                   4369:        int             pcount() ;
                   4370:        } ;
                   4371: 
                   4372: 
                   4373: class strstream : public strstreambase, public iostream {
                   4374: public:
                   4375:                        strstream() ;
                   4376:                        strstream(char* str, int size, int mode) ;
                   4377:                        ~strstream() ;
                   4378:        char*           str() ;
                   4379:        } ;
                   4380: 
                   4381: #endif
                   4382: 0707070044044142521004440042240042240000011613160443033725500001200000002075swstdio.c/*ident  "@(#)ctrans:lib/stream/swstdio.c        1.1.1.1" */
                   4383: /**************************************************************************
                   4384:                        Copyright (c) 1984 AT&T
                   4385:                          All Rights Reserved   
                   4386: 
                   4387:        THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T
                   4388:        
                   4389:        The copyright notice above does not evidence any        
                   4390:        actual or intended publication of such source code.
                   4391: 
                   4392: swstdio.c:
                   4393: 
                   4394: *****************************************************************************/
                   4395: 
                   4396: 
                   4397: #include <iostream.h>
                   4398: #include <stdiostream.h>
                   4399: 
                   4400: static void stdioflush()
                   4401: {
                   4402:        fflush(stdout) ;
                   4403:        fflush(stderr) ;
                   4404:        }
                   4405: 
                   4406: void ios::sync_with_stdio() 
                   4407: {
                   4408:        switch ( Iostream_init::stdstatus )
                   4409:        {
                   4410:        case 1 : cout.flush() ; cerr.flush() ; clog.flush() ; break ;
                   4411:        case 2 : break ;
                   4412:        default : return ; }
                   4413:  
                   4414:        cin = new stdiobuf(stdin) ;
                   4415:        cout = new stdiobuf(stdout) ;
                   4416:        cerr = new stdiobuf(stderr) ;
                   4417:        clog = cerr ;
                   4418:        cin.setf(~0L,skipws) ;
                   4419:        cout.setf(~0L,unitbuf|stdio) ;
                   4420:        cerr.setf(~0L,unitbuf|stdio) ;
                   4421:        clog.setf(~0L,unitbuf|stdio) ;
                   4422:        cin.tie(&cout) ;
                   4423:        cerr.tie(&cout) ;
                   4424:        clog.tie(&cout) ;
                   4425:        Iostream_init::stdstatus = 2 ;
                   4426:        ios::stdioflush = ::stdioflush ;
                   4427:        }
                   4428: 0707070044043601661006440042240042240000010432300443212600200001000000000134versionIostream with multiple inheritance
                   4429: hector!/home/jss/work/iosrc
                   4430: Wed May 10 17:39:14 EDT 1989
                   4431: 0707070044043601661006440042240042240000010432300443212600200001300000000000TRAILER!!!0134versionIostream with multiple inheritance
                   4432: hector!/home/jss/work/iosrc
                   4433: Wed May 10 17:39:14 EDT 1989
                   4434: 0707070044043601661006440042240042240000010432300443212600200001300000000000TRAILER!!!0134versionIostream with multiple inheritance
                   4435: hector!/home/jss/work/iosrc
                   4436: Wed May 10 17:39:14 EDT 1989
                   4437: 07070700440436016610064400

unix.superglobalmegacorp.com

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