Annotation of researchv10no/cmd/cfront/libC/iostream.cpio, revision 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.