Annotation of GNUtools/libg++/libio/iostream.info, revision 1.1

1.1     ! root        1: This is Info file iostream.info, produced by Makeinfo-1.55 from the
        !             2: input file ./iostream.texi.
        !             3: 
        !             4: START-INFO-DIR-ENTRY
        !             5: * iostream::                    The C++ input/output facility.
        !             6: END-INFO-DIR-ENTRY
        !             7: 
        !             8:    This file describes libio, the GNU library for C++ iostreams and C
        !             9: stdio.
        !            10: 
        !            11:    libio includes software developed by the University of California,
        !            12: Berkeley.
        !            13: 
        !            14:    Copyright (C) 1993 Free Software Foundation, Inc.
        !            15: 
        !            16:    Permission is granted to make and distribute verbatim copies of this
        !            17: manual provided the copyright notice and this permission notice are
        !            18: preserved on all copies.
        !            19: 
        !            20:    Permission is granted to copy and distribute modified versions of
        !            21: this manual under the conditions for verbatim copying, provided also
        !            22: that the entire resulting derived work is distributed under the terms
        !            23: of a permission notice identical to this one.
        !            24: 
        !            25:    Permission is granted to copy and distribute translations of this
        !            26: manual into another language, under the above conditions for modified
        !            27: versions.
        !            28: 
        !            29: 
        !            30: File: iostream.info,  Node: Top,  Next: Introduction,  Prev: (DIR),  Up: (DIR)
        !            31: 
        !            32: The GNU C++ Iostream Library
        !            33: ****************************
        !            34: 
        !            35:    This file provides reference information on the GNU C++ iostream
        !            36: library (`libio'), version 0.50.
        !            37: 
        !            38: * Menu:
        !            39: 
        !            40: * Introduction::
        !            41: * Operators::                  Operators and default streams.
        !            42: * Streams::                    Stream classes.
        !            43: * Files and Strings::          Classes for files and strings.
        !            44: * Streambuf::                  Using the streambuf layer.
        !            45: * Stdio::                      C input and output.
        !            46: * Index::
        !            47: 
        !            48: 
        !            49: File: iostream.info,  Node: Introduction,  Next: Operators,  Prev: Top,  Up: Top
        !            50: 
        !            51: Introduction
        !            52: ************
        !            53: 
        !            54:    The iostream classes implement most of the features of AT&T version
        !            55: 2.0 iostream library classes, and most of the features of the ANSI X3J16
        !            56: library draft (which is based on the AT&T design).
        !            57: 
        !            58:    This manual is meant as a reference; for tutorial material on
        !            59: iostreams, see the corresponding section of any recent popular
        !            60: introduction to C++.
        !            61: 
        !            62: * Menu:
        !            63: 
        !            64: * Copying::            Special GNU licensing terms for libio.
        !            65: * Acknowledgements::   Contributors to GNU iostream.
        !            66: 
        !            67: 
        !            68: File: iostream.info,  Node: Copying,  Next: Acknowledgements,  Up: Introduction
        !            69: 
        !            70: Licensing terms for `libio'
        !            71: ===========================
        !            72: 
        !            73:    Since the `iostream' classes are so fundamental to standard C++, the
        !            74: Free Software Foundation has agreed to a special exception to its
        !            75: standard license, when you link programs with `libio.a':
        !            76: 
        !            77:      As a special exception, if you link this library with files
        !            78:      compiled with a GNU compiler to produce an executable, this does
        !            79:      not cause the resulting executable to be covered by the GNU
        !            80:      General Public License.  This exception does not however
        !            81:      invalidate any other reasons why the executable file might be
        !            82:      covered by the GNU General Public License.
        !            83: 
        !            84:    The code is under the GNU General Public License (version 2) for all
        !            85: other purposes than linking with this library; that means that you can
        !            86: modify and redistribute the code as usual, but remember that if you do,
        !            87: your modifications, and anything you link with the modified code, must
        !            88: be available to others on the same terms.
        !            89: 
        !            90:    These functions are also available as part of the `libg++' library;
        !            91: if you link with that library instead of `libio', the GNU Library
        !            92: General Public License applies.
        !            93: 
        !            94: 
        !            95: File: iostream.info,  Node: Acknowledgements,  Prev: Copying,  Up: Introduction
        !            96: 
        !            97: Acknowledgements
        !            98: ================
        !            99: 
        !           100:    Per Bothner wrote most of the `iostream' library, but some portions
        !           101: have their origins elsewhere in the free software community.  Heinz
        !           102: Seidl wrote the IO manipulators.  The floating-point conversion software
        !           103: is by David M. Gay of AT&T.  Some code was derived from parts of BSD
        !           104: 4.4, which was written at the University of California, Berkeley.
        !           105: 
        !           106:    The iostream classes are found in the `libio' library.  An early
        !           107: version was originally distributed in `libg++', and they are still
        !           108: included there as well, for convenience if you need other `libg++'
        !           109: classes.  Doug Lea was the original author of `libg++', and some of the
        !           110: file-management code still in `libio' is his.
        !           111: 
        !           112:    Various people found bugs or offered suggestions.  Hongjiu Lu worked
        !           113: hard to use the library as the default stdio implementation for Linux,
        !           114: and has provided much stress-testing of the library.
        !           115: 
        !           116: 
        !           117: File: iostream.info,  Node: Operators,  Next: Streams,  Prev: Introduction,  Up: Top
        !           118: 
        !           119: Operators and Default Streams
        !           120: *****************************
        !           121: 
        !           122:    The GNU iostream library, `libio', implements the standard input and
        !           123: output facilities for C++.  These facilities are roughly analogous (in
        !           124: their purpose and ubiquity, at least) with those defined by the C
        !           125: `stdio' functions.
        !           126: 
        !           127:    Although these definitions come from a library, rather than being
        !           128: part of the "core language", they are sufficiently central to be
        !           129: specified in the latest working papers for C++.
        !           130: 
        !           131:    You can use two operators defined in this library for basic input and
        !           132: output operations.  They are familiar from any C++ introductory
        !           133: textbook: `<<' for output, and `>>' for input.  (Think of data flowing
        !           134: in the direction of the "arrows".)
        !           135: 
        !           136:    These operators are often used in conjunction with three streams that
        !           137: are open by default:
        !           138: 
        !           139:  - Variable: ostream cout
        !           140:      The standard output stream, analogous to the C `stdout'.
        !           141: 
        !           142:  - Variable: istream cin
        !           143:      The standard input stream, analogous to the C `stdin'.
        !           144: 
        !           145:  - Variable: ostream cerr
        !           146:      An alternative output stream for errors, analogous to the C
        !           147:      `stderr'.
        !           148: 
        !           149: For example, this bare-bones C++ version of the traditional "hello"
        !           150: program uses `<<' and `cout':
        !           151: 
        !           152:      #include <iostream.h>
        !           153:      
        !           154:      int main(int argc, char **argv)
        !           155:      {
        !           156:        cout << "Well, hi there.\n";
        !           157:        return 0;
        !           158:      }
        !           159: 
        !           160:    Casual use of these operators may be seductive, but--other than in
        !           161: writing throwaway code for your own use--it is not necessarily simpler
        !           162: than managing input and output in any other language.  For example,
        !           163: robust code should check the state of the input and output streams
        !           164: between operations (for example, using the method `good').  *Note
        !           165: Checking the state of a stream: States.  You may also need to adjust
        !           166: maximum input or output field widths, using manipulators like `setw' or
        !           167: `setprecision'.
        !           168: 
        !           169:  - Operator on ostream: <<
        !           170:      Write output to an open output stream of class `ostream'.  Defined
        !           171:      by this library on any OBJECT of a C++ primitive type, and on
        !           172:      other classes of the library.  You can overload the definition for
        !           173:      any of your own applications' classes.
        !           174: 
        !           175:      Returns a reference to the implied argument `*this' (the open
        !           176:      stream it writes on), permitting statements like
        !           177:           cout << "The value of i is " << i << "\n";
        !           178: 
        !           179:  - Operator on istream: >>
        !           180:      Read input from an open input stream of class `istream'.  Defined
        !           181:      by this library on primitive numeric, pointer, and string types;
        !           182:      you can extend the definition for any of your own applications'
        !           183:      classes.
        !           184: 
        !           185:      Returns a reference to the implied argument `*this' (the open
        !           186:      stream it reads), permitting multiple inputs in one statement.
        !           187: 
        !           188: 
        !           189: File: iostream.info,  Node: Streams,  Next: Files and Strings,  Prev: Operators,  Up: Top
        !           190: 
        !           191: Stream Classes
        !           192: **************
        !           193: 
        !           194:    The previous chapter referred in passing to the classes `ostream'
        !           195: and `istream', for output and input respectively.  These classes share
        !           196: certain properties, captured in their base class `ios'.
        !           197: 
        !           198: * Menu:
        !           199: 
        !           200: * Ios::       Shared properties.
        !           201: * Ostream::   Managing output streams.
        !           202: * Istream::   Managing input streams.
        !           203: * Iostream::  Input and output together.
        !           204: 
        !           205: 
        !           206: File: iostream.info,  Node: Ios,  Next: Ostream,  Up: Streams
        !           207: 
        !           208: Shared properties: class `ios'
        !           209: ==============================
        !           210: 
        !           211:    The base class `ios' provides methods to test and manage the state
        !           212: of input or output streams.
        !           213: 
        !           214:    `ios' delegates the job of actually reading and writing bytes to the
        !           215: abstract class `streambuf', which is designed to provide buffered
        !           216: streams (compatible with C, in the GNU implementation).  *Note Using
        !           217: the `streambuf' layer: Streambuf, for information on the facilities
        !           218: available at the `streambuf' level.
        !           219: 
        !           220:  - Constructor:  ios::ios ([streambuf* SB [, ostream* TIE])
        !           221:      The `ios' constructor by default initializes a new `ios', and if
        !           222:      you supply a `streambuf' SB to associate with it, sets the state
        !           223:      `good' in the new `ios' object.  It also sets the default
        !           224:      properties of the new object.
        !           225: 
        !           226:      You can also supply an optional second argument TIE to the
        !           227:      constructor: if present, it is an initial value for `ios::tie', to
        !           228:      associate the new `ios' object with another stream.
        !           229: 
        !           230:  - Destructor:  ios::~ios ()
        !           231:      The `ios' destructor is virtual, permitting application-specific
        !           232:      behavior when a stream is closed--typically, the destructor frees
        !           233:      any storage associated with the stream and releases any other
        !           234:      associated objects.
        !           235: 
        !           236: * Menu:
        !           237: 
        !           238: * States::             Checking the state of a stream.
        !           239: * Format Control::     Choices in formatting.
        !           240: * Manipulators::       Convenient ways of changing stream properties.
        !           241: * Extending::          Extended data fields.
        !           242: * Synchronization::    Synchronizing related streams.
        !           243: * Streambuf from Ios:: Reaching the underlying streambuf.
        !           244: 
        !           245: 
        !           246: File: iostream.info,  Node: States,  Next: Format Control,  Up: Ios
        !           247: 
        !           248: Checking the state of a stream
        !           249: ------------------------------
        !           250: 
        !           251:    Use this collection of methods to test for (or signal) errors and
        !           252: other exceptional conditions of streams:
        !           253: 
        !           254:  - Method: ios::operator void* () const
        !           255:      You can do a quick check on the state of the most recent operation
        !           256:      on a stream by examining a pointer to the stream itself.  The
        !           257:      pointer is arbitrary except for its truth value; it is true if no
        !           258:      failures have occurred (`ios::fail' is not true).  For example,
        !           259:      you might ask for input on `cin' only if all prior output
        !           260:      operations succeeded:
        !           261: 
        !           262:           if (cout)
        !           263:           {
        !           264:             // Everything OK so far
        !           265:             cin >> new_value;
        !           266:             ...
        !           267:           }
        !           268: 
        !           269:  - Method: ios::operator ! () const
        !           270:      In case it is more convenient to check whether something has
        !           271:      failed, the operator `!' returns true if `ios::fail' is true (an
        !           272:      operation has failed).  For example, you might issue an error
        !           273:      message if input failed:
        !           274: 
        !           275:           if (!cin)
        !           276:           {
        !           277:             // Oops
        !           278:             cerr << "Eh?\n";
        !           279:           }
        !           280: 
        !           281:  - Method: iostate ios::rdstate () const
        !           282:      Return the state flags for this stream.  The value is from the
        !           283:      enumeration `iostate'.  You can test for any combination of
        !           284: 
        !           285:     `goodbit'
        !           286:           There are no indications of exceptional states on this stream.
        !           287: 
        !           288:     `eofbit'
        !           289:           End of file.
        !           290: 
        !           291:     `failbit'
        !           292:           An operation has failed on this stream; this usually
        !           293:           indicates bad format of input.
        !           294: 
        !           295:     `badbit'
        !           296:           The stream is unusable.
        !           297: 
        !           298:  - Method: void ios::setstate (iostate STATE)
        !           299:      Set the state flag for this stream to STATE *in addition to* any
        !           300:      state flags already set.  Synonym (for upward compatibility):
        !           301:      `ios::set'.
        !           302: 
        !           303:      See `ios::clear' to set the stream state without regard to existing
        !           304:      state flags.  See `ios::good', `ios::eof', `ios::fail', and
        !           305:      `ios::bad', to test the state.
        !           306: 
        !           307:  - Method: int ios::good () const
        !           308:      Test the state flags associated with this stream; true if no error
        !           309:      indicators are set.
        !           310: 
        !           311:  - Method: int ios::bad () const
        !           312:      Test whether a stream is marked as unusable.  (Whether
        !           313:      `ios::badbit' is set.)
        !           314: 
        !           315:  - Method: int ios::eof () const
        !           316:      True if end of file was reached on this stream.  (If `ios::eofbit'
        !           317:      is set.)
        !           318: 
        !           319:  - Method: int ios::fail () const
        !           320:      Test for any kind of failure on this stream: *either* some
        !           321:      operation failed, *or* the stream is marked as bad.  (If either
        !           322:      `ios::failbit' or `ios::badbit' is set.)
        !           323: 
        !           324:  - Method: void ios::clear (iostate STATE)
        !           325:      Set the state indication for this stream to the argument STATE.
        !           326:      You may call `ios::clear' with no argument, in which case the state
        !           327:      is set to `good' (no errors pending).
        !           328: 
        !           329:      See `ios::good', `ios::eof', `ios::fail', and `ios::bad', to test
        !           330:      the state; see `ios::set' or `ios::setstate' for an alternative
        !           331:      way of setting the state.
        !           332: 
        !           333: 
        !           334: File: iostream.info,  Node: Format Control,  Next: Manipulators,  Prev: States,  Up: Ios
        !           335: 
        !           336: Choices in formatting
        !           337: ---------------------
        !           338: 
        !           339:    These methods control (or report on) settings for some details of
        !           340: controlling streams, primarily to do with formatting output:
        !           341: 
        !           342:  - Method: char ios::fill () const
        !           343:      Report on the padding character in use.
        !           344: 
        !           345:  - Method: char ios::fill (char PADDING)
        !           346:      Set the padding character.  You can also use the manipulator
        !           347:      `setfill'.  *Note Changing stream properties in expressions:
        !           348:      Manipulators.
        !           349: 
        !           350:      Default: blank.
        !           351: 
        !           352:  - Method: int ios::precision () const
        !           353:      Report the number of significant digits currently in use for
        !           354:      output of floating point numbers.
        !           355: 
        !           356:      Default: `6'.
        !           357: 
        !           358:  - Method: int ios::precision (int SIGNIF)
        !           359:      Set the number of significant digits (for input and output numeric
        !           360:      conversions) to SIGNIF.
        !           361: 
        !           362:      You can also use the manipulator `setprecision' for this purpose.
        !           363:      *Note Changing stream properties using manipulators: Manipulators.
        !           364: 
        !           365:  - Method: int ios::width () const
        !           366:      Report the current output field width setting (the number of
        !           367:      characters to write on the next `<<' output operation).
        !           368: 
        !           369:      Default: `0', which means to use as many characters as necessary.
        !           370: 
        !           371:  - Method: int ios::width (int NUM)
        !           372:      Set the input field width setting to NUM.  Return the *previous*
        !           373:      value for this stream.
        !           374: 
        !           375:      This value resets to zero (the default) every time you use `<<';
        !           376:      it is essentially an additional implicit argument to that
        !           377:      operator.  You can also use the manipulator `setw' for this
        !           378:      purpose.  *Note Changing stream properties using manipulators:
        !           379:      Manipulators.
        !           380: 
        !           381:  - Method: fmtflags ios::flags () const
        !           382:      Return the current value of the complete collection of flags
        !           383:      controlling the format state.  These are the flags and their
        !           384:      meanings when set:
        !           385: 
        !           386:     `ios::dec'
        !           387:     `ios::oct'
        !           388:     `ios::hex'
        !           389:           What numeric base to use in converting integers from internal
        !           390:           to display representation, or vice versa: decimal, octal, or
        !           391:           hexadecimal, respectively.  (You can change the base using
        !           392:           the manipulator `setbase', or any of the manipulators `dec',
        !           393:           `oct', or `hex'; *note Changing stream properties in
        !           394:           expressions: Manipulators..)
        !           395: 
        !           396:           On input, if none of these flags is set, read numeric
        !           397:           constants according to the prefix: decimal if no prefix (or a
        !           398:           `.' suffix), octal if a `0' prefix is present, hexadecimal if
        !           399:           a `0x' prefix is present.
        !           400: 
        !           401:           Default: `dec'.
        !           402: 
        !           403:     `ios::fixed'
        !           404:           Avoid scientific notation, and always show a fixed number of
        !           405:           digits after the decimal point, according to the output
        !           406:           precision in effect.  Use `ios::precision' to set precision.
        !           407: 
        !           408:     `ios::left'
        !           409:     `ios::right'
        !           410:     `ios::internal'
        !           411:           Where output is to appear in a fixed-width field;
        !           412:           left-justified, right-justified, or with padding in the
        !           413:           middle (e.g. between a numeric sign and the associated
        !           414:           value), respectively.
        !           415: 
        !           416:     `ios::scientific'
        !           417:           Use scientific (exponential) notation to display numbers.
        !           418: 
        !           419:     `ios::showbase'
        !           420:           Display the conventional prefix as a visual indicator of the
        !           421:           conversion base: no prefix for decimal, `0' for octal, `0x'
        !           422:           for hexadecimal.
        !           423: 
        !           424:     `ios::showpoint'
        !           425:           Display a decimal point and trailing zeros after it to fill
        !           426:           out numeric fields, even when redundant.
        !           427: 
        !           428:     `ios::showpos'
        !           429:           Display a positive sign on display of positive numbers.
        !           430: 
        !           431:     `ios::skipws'
        !           432:           Skip white space.  (On by default).
        !           433: 
        !           434:     `ios::stdio'
        !           435:           Flush the C `stdio' streams `stdout' and `stderr' after each
        !           436:           output operation (for programs that mix C and C++ output
        !           437:           conventions).
        !           438: 
        !           439:     `ios::unitbuf'
        !           440:           Flush after each output operation.
        !           441: 
        !           442:     `ios::uppercase'
        !           443:           Use upper-case characters for the non-numeral elements in
        !           444:           numeric displays; for instance, `0X7A' rather than `0x7a', or
        !           445:           `3.14E+09' rather than `3.14e+09'.
        !           446: 
        !           447:  - Method: fmtflags ios::flags (fmtflags VALUE)
        !           448:      Set VALUE as the complete collection of flags controlling the
        !           449:      format state.  The flag values are described under `ios::flags ()'.
        !           450: 
        !           451:      Use `ios::setf' or `ios::unsetf' to change one property at a time.
        !           452: 
        !           453:  - Method: fmtflags ios::setf (fmtflags FLAG)
        !           454:      Set one particular flag (of those described for `ios::flags ()';
        !           455:      return the complete collection of flags *previously* in effect.
        !           456:      (Use `ios::unsetf' to cancel.)
        !           457: 
        !           458:  - Method: fmtflags ios::setf (fmtflags FLAG, fmtflags MASK)
        !           459:      Clear the flag values indicated by MASK, then set any of them that
        !           460:      are also in FLAG.  (Flag values are described for `ios::flags
        !           461:      ()'.)  Return the complete collection of flags *previously* in
        !           462:      effect.  (See `ios::unsetf' for another way of clearing flags.)
        !           463: 
        !           464:  - Method: fmtflags ios::unsetf (fmtflags FLAG)
        !           465:      Make certain FLAG (a combination of flag values described for
        !           466:      `ios::flags ()') is not set for this stream; converse of
        !           467:      `ios::setf'.  Returns the old values of those flags.
        !           468: 
        !           469: 
        !           470: File: iostream.info,  Node: Manipulators,  Next: Extending,  Prev: Format Control,  Up: Ios
        !           471: 
        !           472: Changing stream properties using manipulators
        !           473: ---------------------------------------------
        !           474: 
        !           475:    For convenience, MANIPULATORS provide a way to change certain
        !           476: properties of streams, or otherwise affect them, in the middle of
        !           477: expressions involving `<<' or `>>'.  For example, you might write
        !           478: 
        !           479:      cout << "|" << setfill('*') << setw(5) << 234 << "|";
        !           480: 
        !           481: to produce `|**234|' as output.
        !           482: 
        !           483:  - Manipulator:  ws
        !           484:      Skip whitespace.
        !           485: 
        !           486:  - Manipulator:  flush
        !           487:      Flush an output stream.  For example, `cout << ... <<flush;' has
        !           488:      the same effect as `cout << ...; cout.flush();'.
        !           489: 
        !           490:  - Manipulator:  endl
        !           491:      Write an end of line character `\n', then flushes the output
        !           492:      stream.
        !           493: 
        !           494:  - Manipulator:  ends
        !           495:      Write `\0' (the string terminator character).
        !           496: 
        !           497:  - Manipulator:  setprecision (int SIGNIF)
        !           498:      You can change the value of `ios::precision' in `<<' expressions
        !           499:      with the manipulator `setprecision(SIGNIF)'; for example,
        !           500: 
        !           501:           cout << setprecision(2) << 4.567;
        !           502: 
        !           503:      prints `4.6'.  Requires `#include <iomanip.h>'.
        !           504: 
        !           505:  - Manipulator:  setw (int N)
        !           506:      You can change the value of `ios::width' in `<<' expressions with
        !           507:      the manipulator `setw(N)'; for example,
        !           508: 
        !           509:           cout << setw(5) << 234;
        !           510: 
        !           511:      prints `  234' with two leading blanks.  Requires `#include
        !           512:      <iomanip.h>'.
        !           513: 
        !           514:  - Manipulator:  setbase (int BASE)
        !           515:      Where BASE is one of `10' (decimal), `8' (octal), or `16'
        !           516:      (hexadecimal), change the base value for numeric representations.
        !           517:      Requires `#include <iomanip.h>'.
        !           518: 
        !           519:  - Manipulator:  dec
        !           520:      Select decimal base; equivalent to `setbase(10)'.
        !           521: 
        !           522:  - Manipulator:  hex
        !           523:      Select hexadecimal base; equivalent to `setbase(16)'.
        !           524: 
        !           525:  - Manipulator:  oct
        !           526:      Select octal base; equivalent to `setbase(8)'.
        !           527: 
        !           528:  - Manipulator:  setfill (char PADDING)
        !           529:      Set the padding character, in the same way as `ios::fill'.
        !           530:      Requires `#include <iomanip.h>'.
        !           531: 
        !           532: 
        !           533: File: iostream.info,  Node: Extending,  Next: Synchronization,  Prev: Manipulators,  Up: Ios
        !           534: 
        !           535: Extended data fields
        !           536: --------------------
        !           537: 
        !           538:    A related collection of methods allows you to extend this collection
        !           539: of flags and parameters for your own applications, without risk of
        !           540: conflict between them:
        !           541: 
        !           542:  - Method: static fmtflags ios::bitalloc ()
        !           543:      Reserve a bit (the single bit on in the result) to use as a flag.
        !           544:      Using `bitalloc' guards against conflict between two packages that
        !           545:      use `ios' objects for different purposes.
        !           546: 
        !           547:      This method is available for upward compatibility, but is not in
        !           548:      the ANSI working paper.  The number of bits available is limited; a
        !           549:      return value of `0' means no bit is available.
        !           550: 
        !           551:  - Method: static int ios::xalloc ()
        !           552:      Reserve space for a long integer or pointer parameter.  The result
        !           553:      is a unique nonnegative integer.  You can use it as an index to
        !           554:      `ios::iword' or `ios::pword'.  Use `xalloc' to arrange for
        !           555:      arbitrary special-purpose data in your `ios' objects, without risk
        !           556:      of conflict between packages designed for different purposes.
        !           557: 
        !           558:  - Method: long& ios::iword (int INDEX)
        !           559:      Return a reference to arbitrary data, of long integer type, stored
        !           560:      in an `ios' instance.  INDEX, conventionally returned from
        !           561:      `ios::xalloc', identifies what particular data you need.
        !           562: 
        !           563:  - Method: long ios::iword (int INDEX) const
        !           564:      Return the actual value of a long integer stored in an `ios'.
        !           565: 
        !           566:  - Method: void*& ios::pword (int INDEX)
        !           567:      Return a reference to an arbitrary pointer, stored in an `ios'
        !           568:      instance.  INDEX, originally returned from `ios::xalloc',
        !           569:      identifies what particular pointer you need.
        !           570: 
        !           571:  - Method: void* ios::pword (int INDEX) const
        !           572:      Return the actual value of a pointer stored in an `ios'.
        !           573: 
        !           574: 
        !           575: File: iostream.info,  Node: Synchronization,  Next: Streambuf from Ios,  Prev: Extending,  Up: Ios
        !           576: 
        !           577: Synchronizing related streams
        !           578: -----------------------------
        !           579: 
        !           580:    You can use these methods to synchronize related streams with one
        !           581: another:
        !           582: 
        !           583:  - Method: ostream* ios::tie () const
        !           584:      Report on what output stream, if any, is to be flushed before
        !           585:      accessing this one.  A pointer value of `0' means no stream is
        !           586:      tied.
        !           587: 
        !           588:  - Method: ostream* ios::tie (ostream* ASSOC)
        !           589:      Declare that output stream ASSOC must be flushed before accessing
        !           590:      this stream.
        !           591: 
        !           592:  - Method: int ios::sync_with_stdio ([int SWITCH])
        !           593:      Unless iostreams and C `stdio' are designed to work together, you
        !           594:      may have to choose between efficient C++ streams output and output
        !           595:      compatible with C `stdio'.  Use `ios::sync_with_stdio()' to select
        !           596:      C compatibility.
        !           597: 
        !           598:      The argument SWITCH is a GNU extension; use `0' as the argument to
        !           599:      choose output that is not necessarily compatible with C `stdio'.
        !           600:      The default value for SWITCH is `1'.
        !           601: 
        !           602:      If you install the `stdio' implementation that comes with GNU
        !           603:      `libio', there are compatible input/output facilities for both C
        !           604:      and C++.  In that situation, this method is unnecessary--but you
        !           605:      may still want to write programs that call it, for portability.
        !           606: 
        !           607: 
        !           608: File: iostream.info,  Node: Streambuf from Ios,  Prev: Synchronization,  Up: Ios
        !           609: 
        !           610: Reaching the underlying `streambuf'
        !           611: -----------------------------------
        !           612: 
        !           613:    Finally, you can use this method to access the underlying object:
        !           614: 
        !           615:  - Method: streambuf* ios::rdbuf () const
        !           616:      Return a pointer to the `streambuf' object that underlies this
        !           617:      `ios'.
        !           618: 
        !           619: 
        !           620: File: iostream.info,  Node: Ostream,  Next: Istream,  Prev: Ios,  Up: Streams
        !           621: 
        !           622: Managing output streams: class `ostream'
        !           623: ========================================
        !           624: 
        !           625:    Objects of class `ostream' inherit the generic methods from `ios',
        !           626: and in addition have the following methods available.  Declarations for
        !           627: this class come from `iostream.h'.
        !           628: 
        !           629:  - Constructor:  ostream::ostream ()
        !           630:      The simplest form of the constructor for an `ostream' simply
        !           631:      allocates a new `ios' object.
        !           632: 
        !           633:  - Constructor:  ostream::ostream (streambuf* SB [, ostream TIE])
        !           634:      This alternative constructor requires a first argument SB of type
        !           635:      `streambuf*', to use an existing open stream for output.  It also
        !           636:      accepts an optional second argument TIE, to specify a related
        !           637:      `ostream*' as the initial value for `ios::tie'.
        !           638: 
        !           639:      If you give the `ostream' a `streambuf' explicitly, using this
        !           640:      constructor, the SB is *not* destroyed (or deleted or closed) when
        !           641:      the `ostream' is destroyed.
        !           642: 
        !           643: * Menu:
        !           644: 
        !           645: * Writing::            Writing on an ostream.
        !           646: * Output Position::    Repositioning an ostream.
        !           647: * Ostream Housekeeping:: Miscellaneous ostream utilities.
        !           648: 
        !           649: 
        !           650: File: iostream.info,  Node: Writing,  Next: Output Position,  Up: Ostream
        !           651: 
        !           652: Writing on an `ostream'
        !           653: -----------------------
        !           654: 
        !           655:    These methods write on an `ostream' (you may also use the operator
        !           656: `<<'; *note Operators and Default Streams: Operators.).
        !           657: 
        !           658:  - Method: ostream& ostream::put (char C)
        !           659:      Write the single character C.
        !           660: 
        !           661:  - Method: ostream& ostream::write (STRING, int LENGTH)
        !           662:      Write LENGTH characters of a string to this `ostream', beginning
        !           663:      at the pointer STRING.
        !           664: 
        !           665:      STRING may have any of these types: `char*', `unsigned char*',
        !           666:      `signed char*'.
        !           667: 
        !           668:  - Method: ostream& ostream::form (const char *FORMAT, ...)
        !           669:      A GNU extension, similar to `fprintf(FILE, FORMAT, ...)'.
        !           670: 
        !           671:      FORMAT is a `printf'-style format control string, which is used to
        !           672:      format the (variable number of) arguments, printing the result on
        !           673:      this `ostream'.  See `ostream::vform' for a version that uses an
        !           674:      argument list rather than a variable number of arguments.
        !           675: 
        !           676:  - Method: ostream& ostream::vform (const char *FORMAT, va_list ARGS)
        !           677:      A GNU extension, similar to `vfprintf(FILE, FORMAT, ARGS)'.
        !           678: 
        !           679:      FORMAT is a `printf'-style format control string, which is used to
        !           680:      format the argument list ARGS, printing the result on this
        !           681:      `ostream'.  See `ostream::form' for a version that uses a variable
        !           682:      number of arguments rather than an argument list.
        !           683: 
        !           684: 
        !           685: File: iostream.info,  Node: Output Position,  Next: Ostream Housekeeping,  Prev: Writing,  Up: Ostream
        !           686: 
        !           687: Repositioning an `ostream'
        !           688: --------------------------
        !           689: 
        !           690:    You can control the output position (on output streams that actually
        !           691: support positions, typically files) with these methods:
        !           692: 
        !           693:  - Method: streampos ostream::tellp ()
        !           694:      Return the current write position in the stream.
        !           695: 
        !           696:  - Method: ostream& ostream::seekp (streampos LOC)
        !           697:      Reset the output position to LOC (which is usually the result of a
        !           698:      previous call to `ostream::tellp').  LOC specifies an absolute
        !           699:      position in the output stream.
        !           700: 
        !           701:  - Method: ostream& ostream::seekp (streamoff LOC, REL)
        !           702:      Reset the output position to LOC, relative to the beginning, end,
        !           703:      or current output position in the stream, as indicated by REL (a
        !           704:      value from the enumeration `ios::seekdir'):
        !           705: 
        !           706:     `beg'
        !           707:           Interpret LOC as an absolute offset from the beginning of the
        !           708:           file.
        !           709: 
        !           710:     `cur'
        !           711:           Interpret LOC as an offset relative to the current output
        !           712:           position.
        !           713: 
        !           714:     `end'
        !           715:           Interpret LOC as an offset from the current end of the output
        !           716:           stream.
        !           717: 
        !           718: 
        !           719: File: iostream.info,  Node: Ostream Housekeeping,  Prev: Output Position,  Up: Ostream
        !           720: 
        !           721: Miscellaneous `ostream' utilities
        !           722: ---------------------------------
        !           723: 
        !           724:    You may need to use these `ostream' methods for housekeeping:
        !           725: 
        !           726:  - Method: ostream& flush ()
        !           727:      Deliver any pending buffered output for this `ostream'.
        !           728: 
        !           729:  - Method: int ostream::opfx ()
        !           730:      `opfx' is a "prefix" method for operations on `ostream' objects;
        !           731:      it is designed to be called before any further processing.  See
        !           732:      `ostream::osfx' for the converse.
        !           733: 
        !           734:      `opfx' tests that the stream is in state `good', and if so flushes
        !           735:      any stream tied to this one.
        !           736: 
        !           737:      The result is `1' when `opfx' succeeds; else (if the stream state
        !           738:      is not `good'), the result is `0'.
        !           739: 
        !           740:  - Method: void ostream::osfx ()
        !           741:      `osfx' is a "suffix" method for operations on `ostream' objects;
        !           742:      it is designed to be called at the conclusion of any processing.
        !           743:      All the `ostream' methods end by calling `osfx'.  See
        !           744:      `ostream::opfx' for the converse.
        !           745: 
        !           746:      If the `unitbuf' flag is set for this stream, `osfx' flushes any
        !           747:      buffered output for it.
        !           748: 
        !           749:      If the `stdio' flag is set for this stream, `osfx' flushes any
        !           750:      output buffered for the C output streams `stdout' and `stderr'.
        !           751: 
        !           752: 
        !           753: File: iostream.info,  Node: Istream,  Next: Iostream,  Prev: Ostream,  Up: Streams
        !           754: 
        !           755: Managing input streams: class `istream'
        !           756: =======================================
        !           757: 
        !           758:    Class `istream' objects are specialized for input; as for `ostream',
        !           759: they are derived from `ios', so you can use any of the general-purpose
        !           760: methods from that base class.  Declarations for this class also come
        !           761: from `iostream.h'.
        !           762: 
        !           763:  - Constructor:  istream::istream ()
        !           764:      When used without arguments, the `istream' constructor simply
        !           765:      allocates a new `ios' object and initializes the input counter (the
        !           766:      value reported by `istream::gcount') to `0'.
        !           767: 
        !           768:  - Constructor:  istream::istream (streambuf *SB [, ostream TIE])
        !           769:      You can also call the constructor with one or two arguments.  The
        !           770:      first argument SB is a `streambuf*'; if you supply this pointer,
        !           771:      the constructor uses that `streambuf' for input.  You can use the
        !           772:      second optional argument TIE to specify a related output stream as
        !           773:      the initial value for `ios::tie'.
        !           774: 
        !           775:      If you give the `istream' a `streambuf' explicitly, using this
        !           776:      constructor, the SB is *not* destroyed (or deleted or closed) when
        !           777:      the `ostream' is destroyed.
        !           778: 
        !           779: * Menu:
        !           780: 
        !           781: * Char Input::         Reading one character.
        !           782: * String Input::       Reading strings.
        !           783: * Input Position::     Repositioning an istream.
        !           784: * Istream Housekeeping:: Miscellaneous istream utilities.
        !           785: 
        !           786: 
        !           787: File: iostream.info,  Node: Char Input,  Next: String Input,  Up: Istream
        !           788: 
        !           789: Reading one character
        !           790: ---------------------
        !           791: 
        !           792:    Use these methods to read a single character from the input stream:
        !           793: 
        !           794:  - Method: int istream::get ()
        !           795:      Read a single character (or `EOF') from the input stream, returning
        !           796:      it (coerced to an unsigned char) as the result.
        !           797: 
        !           798:  - Method: istream& istream::get (char& C)
        !           799:      Read a single character from the input stream, into `&C'.
        !           800: 
        !           801:  - Method: int istream::peek ()
        !           802:      Return the next available input character, but *without* changing
        !           803:      the current input position.
        !           804: 
        !           805: 
        !           806: File: iostream.info,  Node: String Input,  Next: Input Position,  Prev: Char Input,  Up: Istream
        !           807: 
        !           808: Reading strings
        !           809: ---------------
        !           810: 
        !           811:    Use these methods to read strings (for example, a line at a time)
        !           812: from the input stream:
        !           813: 
        !           814:  - Method: istream& istream::get (char* C, int LEN [, char DELIM])
        !           815:      Read a string from the input stream, into the array at C.
        !           816: 
        !           817:      The remaining arguments limit how much to read: up to `len-1'
        !           818:      characters, or up to (but not including) the first occurrence in
        !           819:      the input of a particular delimiter character DELIM--newline
        !           820:      (`\n') by default.  (Naturally, if the stream reaches end of file
        !           821:      first, that too will terminate reading.)
        !           822: 
        !           823:      If DELIM was present in the input, it remains available as if
        !           824:      unread; to discard it instead, see `iostream::getline'.
        !           825: 
        !           826:      `get' writes `\0' at the end of the string, regardless of which
        !           827:      condition terminates the read.
        !           828: 
        !           829:  - Method: istream& istream::get (streambuf& SB [, char DELIM])
        !           830:      Read characters from the input stream and copy them on the
        !           831:      `streambuf' object SB.  Copying ends either just before the next
        !           832:      instance of the delimiter character DELIM (newline `\n' by
        !           833:      default), or when either stream ends.   If DELIM was present in
        !           834:      the input, it remains available as if unread.
        !           835: 
        !           836:  - Method: istream& istream::getline (CHARPTR, int LEN [, char DELIM])
        !           837:      Read a line from the input stream, into the array at CHARPTR.
        !           838:      cHARPTR may be any of three kinds of pointer: `char*', `unsigned
        !           839:      char*', or `signed char*'.
        !           840: 
        !           841:      The remaining arguments limit how much to read: up to (but not
        !           842:      including) the first occurrence in the input of a line delimiter
        !           843:      character DELIM--newline (`\n') by default, or up to `len-1'
        !           844:      characters (or to end of file, if that happens sooner).
        !           845: 
        !           846:      If `getline' succeeds in reading a "full line", it also discards
        !           847:      the trailing delimiter character from the input stream.  (To
        !           848:      preserve it as available input, see the similar form of
        !           849:      `iostream::get'.)
        !           850: 
        !           851:      If DELIM was *not* found before LEN characters or end of file,
        !           852:      `getline' sets the `ios::fail' flag, as well as the `ios::eof'
        !           853:      flag if appropriate.
        !           854: 
        !           855:      `getline' writes a null character at the end of the string,
        !           856:      regardless of which condition terminates the read.
        !           857: 
        !           858:  - Method: istream& istream::read (POINTER, int LEN)
        !           859:      Read LEN bytes into the location at POINTER, unless the input ends
        !           860:      first.
        !           861: 
        !           862:      POINTER may be of type `char*', `void*', `unsigned char*', or
        !           863:      `signed char*'.
        !           864: 
        !           865:      If the `istream' ends before reading LEN bytes, `read' sets the
        !           866:      `ios::fail' flag.
        !           867: 
        !           868:  - Method: istream& istream::gets (char **S [, char DELIM])
        !           869:      A GNU extension, to read an arbitrarily long string from the
        !           870:      current input position to the next instance of the DELIM character
        !           871:      (newline `\n' by default).
        !           872: 
        !           873:      To permit reading a string of arbitrary length, `gets' allocates
        !           874:      whatever memory is required.  Notice that the first argument S is
        !           875:      an address to record a character pointer, rather than the pointer
        !           876:      itself.
        !           877: 
        !           878:  - Method: istream& istream::scan (const char *format ...)
        !           879:      A GNU extension, similar to `fscanf(FILE, FORMAT, ...)'.  The
        !           880:      FORMAT is a `scanf'-style format control string, which is used to
        !           881:      read the variables in the remainder of the argument list from the
        !           882:      `istream'.
        !           883: 
        !           884:  - Method: istream& istream::vscan (const char *format, va_list args)
        !           885:      Like `istream::scan', but takes a single `va_list' argument.
        !           886: 
        !           887: 
        !           888: File: iostream.info,  Node: Input Position,  Next: Istream Housekeeping,  Prev: String Input,  Up: Istream
        !           889: 
        !           890: Repositioning an `istream'
        !           891: --------------------------
        !           892: 
        !           893:    Use these methods to control the current input position:
        !           894: 
        !           895:  - Method: streampos istream::tellg ()
        !           896:      Return the current read position, so that you can save it and
        !           897:      return to it later with `istream::seekg'.
        !           898: 
        !           899:  - Method: istream& istream::seekg (streampos P)
        !           900:      Reset the input pointer (if the input device permits it) to P,
        !           901:      usually the result of an earlier call to `istream::tellg'.
        !           902: 
        !           903:  - Method: istream& istream::seekg (streamoff OFFSET, ios::seek_dir REF)
        !           904:      Reset the input pointer (if the input device permits it) to OFFSET
        !           905:      characters from the beginning of the input, the current position,
        !           906:      or the end of input.  Specify how to interpret OFFSET with one of
        !           907:      these values for the second argument:
        !           908: 
        !           909:     `ios::beg'
        !           910:           Interpret LOC as an absolute offset from the beginning of the
        !           911:           file.
        !           912: 
        !           913:     `ios::cur'
        !           914:           Interpret LOC as an offset relative to the current output
        !           915:           position.
        !           916: 
        !           917:     `ios::end'
        !           918:           Interpret LOC as an offset from the current end of the output
        !           919:           stream.
        !           920: 
        !           921: 
        !           922: File: iostream.info,  Node: Istream Housekeeping,  Prev: Input Position,  Up: Istream
        !           923: 
        !           924: Miscellaneous `istream' utilities
        !           925: ---------------------------------
        !           926: 
        !           927:    Use these methods for housekeeping on `istream' objects:
        !           928: 
        !           929:  - Method: int istream::gcount ()
        !           930:      Report how many characters were read from this `istream' in the
        !           931:      last unformatted input operation.
        !           932: 
        !           933:  - Method: int istream::ipfx (int KEEPWHITE)
        !           934:      Ensure that the `istream' object is ready for reading; check for
        !           935:      errors and end of file and flush any tied stream.  `ipfx' skips
        !           936:      whitespace if you specify `0' as the KEEPWHITE argument, *and*
        !           937:      `ios::skipws' is set for this stream.
        !           938: 
        !           939:      To avoid skipping whitespace (regardless of the `skipws' setting on
        !           940:      the stream), use `1' as the argument.
        !           941: 
        !           942:      Call `istream::ipfx' to simplify writing your own methods for
        !           943:      reading `istream' objects.
        !           944: 
        !           945:  - Method: void istream::isfx ()
        !           946:      A placeholder for compliance with the draft ANSI standard; this
        !           947:      method does nothing whatever.
        !           948: 
        !           949:      If you wish to write portable standard-conforming code on `istream'
        !           950:      objects, call `isfx' after any operation that reads from an
        !           951:      `istream'; if `istream::ipfx' has any special effects that must be
        !           952:      cancelled when done, `istream::isfx' will cancel them.
        !           953: 
        !           954:  - Method: istream& istream::ignore ([int N] [, int DELIM])
        !           955:      Discard some number of characters pending input.  The first
        !           956:      optional argument N specifies how many characters to skip.  The
        !           957:      second optional argument DELIM specifies a "boundary" character:
        !           958:      `ignore' returns immediately if this character appears in the
        !           959:      input.
        !           960: 
        !           961:      By default, DELIM is `EOF'; that is, if you do not specify a
        !           962:      second argument, only the count N restricts how much to ignore
        !           963:      (while input is still available).
        !           964: 
        !           965:      If you do not specify how many characters to ignore, `ignore'
        !           966:      returns after discarding only one character.
        !           967: 
        !           968:  - Method: istream& istream::putback (char CH)
        !           969:      Attempts to back up one character, replacing the character
        !           970:      backed-up over by CH.  Returns `EOF' if this is not allowed.
        !           971:      Putting back the most recently read character is always allowed.
        !           972:      (This method corresponds to the C function `ungetc'.)
        !           973: 
        !           974:  - Method: istream& istream::unget ()
        !           975:      Attempt to back up one character.
        !           976: 
        !           977: 
        !           978: File: iostream.info,  Node: Iostream,  Prev: Istream,  Up: Streams
        !           979: 
        !           980: Input and output together: class `iostream'
        !           981: ===========================================
        !           982: 
        !           983:    If you need to use the same stream for input and output, you can use
        !           984: an object of the class `iostream', which is derived from *both*
        !           985: `istream' and `ostream'.
        !           986: 
        !           987:    The constructors for `iostream' behave just like the constructors
        !           988: for `istream'.
        !           989: 
        !           990:  - Constructor:  iostream::iostream ()
        !           991:      When used without arguments, the `iostream' constructor simply
        !           992:      allocates a new `ios' object, and initializes the input counter
        !           993:      (the value reported by `istream::gcount') to `0'.
        !           994: 
        !           995:  - Constructor:  iostream::iostream (streambuf* SB [, ostream* TIE])
        !           996:      You can also call a constructor with one or two arguments.  The
        !           997:      first argument SB is a `streambuf*'; if you supply this pointer,
        !           998:      the constructor uses that `streambuf' for input and output.
        !           999: 
        !          1000:      You can use the optional second argument TIE (an `ostream*') to
        !          1001:      specify a related output stream as the initial value for
        !          1002:      `ios::tie'.
        !          1003: 
        !          1004:    As for `ostream' and `istream', `iostream' simply uses the `ios'
        !          1005: destructor.  However, an `iostream' is not deleted by its destructor.
        !          1006: 
        !          1007:    You can use all the `istream', `ostream', and `ios' methods with an
        !          1008: `iostream' object.
        !          1009: 
        !          1010: 
        !          1011: File: iostream.info,  Node: Files and Strings,  Next: Streambuf,  Prev: Streams,  Up: Top
        !          1012: 
        !          1013: Classes for Files and Strings
        !          1014: *****************************
        !          1015: 
        !          1016:    There are two very common special cases of input and output: using
        !          1017: files, and using strings in memory.
        !          1018: 
        !          1019:    `libio' defines four specialized classes for these cases:
        !          1020: 
        !          1021: `ifstream'
        !          1022:      Methods for reading files.
        !          1023: 
        !          1024: `ofstream'
        !          1025:      Methods for writing files.
        !          1026: 
        !          1027: `istrstream'
        !          1028:      Methods for reading strings from memory.
        !          1029: 
        !          1030: `ostrstream'
        !          1031:      Methods for writing strings in memory.
        !          1032: 
        !          1033: * Menu:
        !          1034: 
        !          1035: * Files::      Reading and writing files.
        !          1036: * Strings::    Reading and writing strings in memory.
        !          1037: 
        !          1038: 
        !          1039: File: iostream.info,  Node: Files,  Next: Strings,  Up: Files and Strings
        !          1040: 
        !          1041: Reading and writing files
        !          1042: =========================
        !          1043: 
        !          1044:    These methods are declared in `fstream.h'.
        !          1045: 
        !          1046:    You can read data from class `ifstream' with any operation from class
        !          1047: `istream'.  There are also a few specialized facilities:
        !          1048: 
        !          1049:  - Constructor:  ifstream::ifstream ()
        !          1050:      Make an `ifstream' associated with a new file for input.  (If you
        !          1051:      use this version of the constructor, you need to call
        !          1052:      `ifstream::open' before actually reading anything)
        !          1053: 
        !          1054:  - Constructor:  ifstream::ifstream (int FD)
        !          1055:      Make an `ifstream' for reading from a file that was already open,
        !          1056:      using file descriptor FD.  (This constructor is compatible with
        !          1057:      other versions of iostreams for POSIX systems, but is not part of
        !          1058:      the ANSI working paper.)
        !          1059: 
        !          1060:  - Constructor:  ifstream::ifstream (const char* FNAME [, int MODE
        !          1061:           [, int PROT]])
        !          1062:      Open a file `*FNAME' for this `ifstream' object.
        !          1063: 
        !          1064:      By default, the file is opened for input (with `ios::in' as MODE).
        !          1065:      If you use this constructor, the file will be closed when the
        !          1066:      `ifstream' is destroyed.
        !          1067: 
        !          1068:      You can use the optional argument MODE to specify how to open the
        !          1069:      file, by combining these enumerated values (with `|' bitwise or).
        !          1070:      (These values are actually defined in class `ios', so that all
        !          1071:      file-related streams may inherit them.)  Only some of these modes
        !          1072:      are defined in the latest draft ANSI specification; if portability
        !          1073:      is important, you may wish to avoid the others.
        !          1074: 
        !          1075:     `ios::in'
        !          1076:           Open for input.  (Included in ANSI draft.)
        !          1077: 
        !          1078:     `ios::out'
        !          1079:           Open for output.  (Included in ANSI draft.)
        !          1080: 
        !          1081:     `ios::ate'
        !          1082:           Set the initial input (or output) position to the end of the
        !          1083:           file.
        !          1084: 
        !          1085:     `ios::app'
        !          1086:           Seek to end of file before each write.  (Included in ANSI
        !          1087:           draft.)
        !          1088: 
        !          1089:     `ios::trunc'
        !          1090:           Guarantee a fresh file; discard any contents that were
        !          1091:           previously associated with it.
        !          1092: 
        !          1093:     `ios::nocreate'
        !          1094:           Guarantee an existing file; fail if the specified file did
        !          1095:           not already exist.
        !          1096: 
        !          1097:     `ios::noreplace'
        !          1098:           Guarantee a new file; fail if the specified file already
        !          1099:           existed.
        !          1100: 
        !          1101:     `ios::bin'
        !          1102:           Open as a binary file (on systems where binary and text files
        !          1103:           have different properties, typically how `\n' is mapped;
        !          1104:           included in ANSI draft).
        !          1105: 
        !          1106:      The last optional argument PROT is specific to Unix-like systems;
        !          1107:      it specifies the file protection (by default `644').
        !          1108: 
        !          1109:  - Method: void ifstream::open (const char* FNAME [, int MODE [, int
        !          1110:           PROT]])
        !          1111:      Open a file explicitly after the associated `ifstream' object
        !          1112:      already exists (for instance, after using the default
        !          1113:      constructor).  The arguments, options and defaults all have the
        !          1114:      same meanings as in the fully specified `ifstream' constructor.
        !          1115: 
        !          1116:    You can write data to class `ofstream' with any operation from class
        !          1117: `ostream'.  There are also a few specialized facilities:
        !          1118: 
        !          1119:  - Constructor:  ofstream::ofstream ()
        !          1120:      Make an `ofstream' associated with a new file for output.
        !          1121: 
        !          1122:  - Constructor:  ofstream::ofstream (int FD)
        !          1123:      Make an `ofstream' for writing to a file that was already open,
        !          1124:      using file descriptor FD.
        !          1125: 
        !          1126:  - Constructor:  ofstream::ofstream (const char* FNAME [, int MODE
        !          1127:           [, int PROT]])
        !          1128:      Open a file `*FNAME' for this `ofstream' object.
        !          1129: 
        !          1130:      By default, the file is opened for output (with `ios::out' as
        !          1131:      MODE).  You can use the optional argument MODE to specify how to
        !          1132:      open the file, just as described for `ifstream::ifstream'.
        !          1133: 
        !          1134:      The last optional argument PROT specifies the file protection (by
        !          1135:      default `644').
        !          1136: 
        !          1137:  - Destructor:  ofstream::~ofstream ()
        !          1138:      The files associated with `ofstream' objects are closed when the
        !          1139:      corresponding object is destroyed.
        !          1140: 
        !          1141:  - Method: void ofstream::open (const char* FNAME [, int MODE [, int
        !          1142:           PROT]])
        !          1143:      Open a file explicitly after the associated `ofstream' object
        !          1144:      already exists (for instance, after using the default
        !          1145:      constructor).  The arguments, options and defaults all have the
        !          1146:      same meanings as in the fully specified `ofstream' constructor.
        !          1147: 
        !          1148:    The class `fstream' combines the facilities of `ifstream' and
        !          1149: `ofstream', just as `iostream' combines `istream' and `ostream'.
        !          1150: 
        !          1151:    The class `fstreambase' underlies both `ifstream' and `ofstream'.
        !          1152: They both inherit this additional method:
        !          1153: 
        !          1154:  - Method: void fstreambase::close ()
        !          1155:      Close the file associated with this object, and set `ios::fail' in
        !          1156:      this object to mark the event.
        !          1157: 
        !          1158: 
        !          1159: File: iostream.info,  Node: Strings,  Prev: Files,  Up: Files and Strings
        !          1160: 
        !          1161: Reading and writing in memory
        !          1162: =============================
        !          1163: 
        !          1164:    The classes `istrstream', `ostrstream', and `strstream' provide some
        !          1165: additional features for reading and writing strings in memory--both
        !          1166: static strings, and dynamically allocated strings.  The underlying
        !          1167: class `strstreambase' provides some features common to all three;
        !          1168: `strstreambuf' underlies that in turn.
        !          1169: 
        !          1170:  - Constructor:  istrstream::istrstream (const char* STR [, int SIZE])
        !          1171:      Associate the new input string class `istrstream' with an existing
        !          1172:      static string starting at STR, of size SIZE.  If you do not
        !          1173:      specify SIZE, the string is treated as a `NUL' terminated string.
        !          1174: 
        !          1175:  - Constructor:  ostrstream::ostrstream ()
        !          1176:      Create a new stream for output to a dynamically managed string,
        !          1177:      which will grow as needed.
        !          1178: 
        !          1179:  - Constructor:  ostrstream::ostrstream (char* STR, int SIZE [,int
        !          1180:           MODE])
        !          1181:      A new stream for output to a statically defined string of length
        !          1182:      SIZE, starting at STR.  You may optionally specify one of the
        !          1183:      modes described for `ifstream::ifstream'; if you do not specify
        !          1184:      one, the new stream is simply open for output, with mode
        !          1185:      `ios::out'.
        !          1186: 
        !          1187:  - Method: int ostrstream::pcount ()
        !          1188:      Report the current length of the string associated with this
        !          1189:      `ostrstream'.
        !          1190: 
        !          1191:  - Method: char* ostrstream::str ()
        !          1192:      A pointer to the string managed by this `ostrstream'.  Implies
        !          1193:      `ostrstream::freeze()'.
        !          1194: 
        !          1195:  - Method: void ostrstream::freeze ([int N])
        !          1196:      If N is nonzero (the default), declare that the string associated
        !          1197:      with this `ostrstream' is not to change dynamically; while frozen,
        !          1198:      it will not be reallocated if it needs more space, and it will not
        !          1199:      be deallocated when the `ostrstream' is destroyed.  Use
        !          1200:      `freeze(1)' if you refer to the string as a pointer after creating
        !          1201:      it via `ostrstream' facilities.
        !          1202: 
        !          1203:      `freeze(0)' cancels this declaration, allowing a dynamically
        !          1204:      allocated string to be freed when its `ostrstream' is destroyed.
        !          1205: 
        !          1206:      If this `ostrstream' is already static--that is, if it was created
        !          1207:      to manage an existing statically allocated string--`freeze' is
        !          1208:      unnecessary, and has no effect.
        !          1209: 
        !          1210:  - Method: int ostrstream::frozen ()
        !          1211:      Test whether `freeze(1)' is in effect for this string.
        !          1212: 
        !          1213:  - Method: strstreambuf* strstreambase::rdbuf ()
        !          1214:      A pointer to the underlying `strstreambuf'.
        !          1215: 
        !          1216: 
        !          1217: File: iostream.info,  Node: Streambuf,  Next: Stdio,  Prev: Files and Strings,  Up: Top
        !          1218: 
        !          1219: Using the `streambuf' Layer
        !          1220: ***************************
        !          1221: 
        !          1222:    The `istream' and `ostream' classes are meant to handle conversion
        !          1223: between objects in your program and their textual representation.
        !          1224: 
        !          1225:    By contrast, the underlying `streambuf' class is for transferring
        !          1226: raw bytes between your program, and input sources or output sinks.
        !          1227: Different `streambuf' subclasses connect to different kinds of sources
        !          1228: and sinks.
        !          1229: 
        !          1230:    The GNU implementation of `streambuf' is still evolving; we describe
        !          1231: only some of the highlights.
        !          1232: 
        !          1233: * Menu:
        !          1234: 
        !          1235: * Areas::              Areas in a streambuf.
        !          1236: * Formatting::         C-style formatting for streambuf objects.
        !          1237: * Stdiobuf::           Wrappers for C stdio.
        !          1238: * Backing Up::         Marking and returning to a position.
        !          1239: * Indirectbuf::                Forwarding I/O activity.
        !          1240: 
        !          1241: 
        !          1242: File: iostream.info,  Node: Areas,  Next: Formatting,  Up: Streambuf
        !          1243: 
        !          1244: Areas of a `streambuf'
        !          1245: ======================
        !          1246: 
        !          1247:    Streambuf buffer management is fairly sophisticated (this is a nice
        !          1248: way to say "complicated").  The standard protocol has the following
        !          1249: "areas":
        !          1250: 
        !          1251:    * The "put area" contains characters waiting for output.
        !          1252: 
        !          1253:    * The "get area" contains characters available for reading.
        !          1254: 
        !          1255:    The GNU `streambuf' design extends this, but the details are still
        !          1256: evolving.
        !          1257: 
        !          1258: 
        !          1259: File: iostream.info,  Node: Formatting,  Next: Stdiobuf,  Prev: Areas,  Up: Streambuf
        !          1260: 
        !          1261: C-style formatting for `streambuf' objects
        !          1262: ==========================================
        !          1263: 
        !          1264:    The GNU `streambuf' class supports `printf'-like formatting and
        !          1265: scanning.
        !          1266: 
        !          1267:  - Method: int streambuf::vform (const char *FORMAT, ...)
        !          1268:      Similar to `fprintf(FILE, FORMAT, ...)'.  The FORMAT is a
        !          1269:      `printf'-style format control string, which is used to format the
        !          1270:      (variable number of) arguments, printing the result on the `this'
        !          1271:      streambuf.  The result is the number of characters printed.
        !          1272: 
        !          1273:  - Method: int streambuf::vform (const char *FORMAT, va_list ARGS)
        !          1274:      Similar to `vfprintf(FILE, FORMAT, ARGS)'.  The FORMAT is a
        !          1275:      `printf'-style format control string, which is used to format the
        !          1276:      argument list ARGS, printing the result on the `this' streambuf.
        !          1277:      The result is the number of characters printed.
        !          1278: 
        !          1279:  - Method: int streambuf::scan (const char *FORMAT, ...)
        !          1280:      Similar to `fscanf(FILE, FORMAT, ...)'.  The FORMAT is a
        !          1281:      `scanf'-style format control string, which is used to read the
        !          1282:      (variable number of) arguments from the `this' streambuf.  The
        !          1283:      result is the number of items assigned, or `EOF' in case of input
        !          1284:      failure before any conversion.
        !          1285: 
        !          1286:  - Method: int streambuf::vscan (const char *FORMAT, va_list ARGS)
        !          1287:      Like `streambuf::scan', but takes a single `va_list' argument.
        !          1288: 
        !          1289: 
        !          1290: File: iostream.info,  Node: Stdiobuf,  Next: Backing Up,  Prev: Formatting,  Up: Streambuf
        !          1291: 
        !          1292: Wrappers for C `stdio'
        !          1293: ======================
        !          1294: 
        !          1295:    A "stdiobuf" is a `streambuf' object that points to a `FILE' object
        !          1296: (as defined by `stdio.h').  All `streambuf' operations on the
        !          1297: `stdiobuf' are forwarded to the `FILE'.  Thus the `stdiobuf' object
        !          1298: provides a wrapper around a `FILE', allowing use of `streambuf'
        !          1299: operations on a `FILE'.  This can be useful when mixing C code with C++
        !          1300: code.
        !          1301: 
        !          1302:    The pre-defined streams `cin', `cout', and `cerr' are normally
        !          1303: implemented as `stdiobuf' objects that point to respectively `stdin',
        !          1304: `stdout', and `stderr'.  This is convenient, but it does cost some
        !          1305: extra overhead.
        !          1306: 
        !          1307:    If you set things up to use the implementation of `stdio' provided
        !          1308: with this library, then `cin', `cout', and `cerr' will be set up to to
        !          1309: use `stdiobuf' objects, since you get their benefits for free.  *Note C
        !          1310: Input and Output: Stdio.
        !          1311: 
        !          1312: 
        !          1313: File: iostream.info,  Node: Backing Up,  Next: Indirectbuf,  Prev: Stdiobuf,  Up: Streambuf
        !          1314: 
        !          1315: Backing up
        !          1316: ==========
        !          1317: 
        !          1318:    The GNU iostream library allows you to ask a `streambuf' to remember
        !          1319: the current position.  This allows you to go back to this position
        !          1320: later, after reading further.  You can back up arbitrary amounts, even
        !          1321: on unbuffered files or multiple buffers' worth, as long as you tell the
        !          1322: library in advance.  This unbounded backup is very useful for scanning
        !          1323: and parsing applications.  This example shows a typical scenario:
        !          1324: 
        !          1325:      // Read either "dog", "hound", or "hounddog".
        !          1326:      // If "dog" is found, return 1.
        !          1327:      // If "hound" is found, return 2.
        !          1328:      // If "hounddog" is found, return 3.
        !          1329:      // If none of these are found, return -1.
        !          1330:      int my_scan(streambuf* sb)
        !          1331:      {
        !          1332:          streammarker fence(sb);
        !          1333:          char buffer[20];
        !          1334:          // Try reading "hounddog":
        !          1335:          if (sb->sgetn(buffer, 8) == 8
        !          1336:              && strncmp(buffer, "hounddog", 8) == 0)
        !          1337:            return 3;
        !          1338:          // No, no "hounddog":  Back up to 'fence'
        !          1339:          sb->seekmark(fence); //
        !          1340:          // ... and try reading "dog":
        !          1341:          if (sb->sgetn(buffer, 3) == 3
        !          1342:              && strncmp(buffer, "dog", 3) == 0)
        !          1343:            return 1;
        !          1344:          // No, no "dog" either:  Back up to 'fence'
        !          1345:          sb->seekmark(fence); //
        !          1346:          // ... and try reading "hound":
        !          1347:          if (sb->sgetn(buffer, 5) == 5
        !          1348:              && strncmp(buffer, "hound", 5) == 0)
        !          1349:            return 2;
        !          1350:          // No, no "hound" either:  Back up and signal failure.
        !          1351:          sb->seekmark(fence); // Backup to 'fence'
        !          1352:          return -1;
        !          1353:      }
        !          1354: 
        !          1355:  - Constructor:  streammarker::streammarker (streambuf* SBUF)
        !          1356:      Create a `streammarker' associated with SBUF that remembers the
        !          1357:      current position of the get pointer.
        !          1358: 
        !          1359:  - Method: int streammarker::delta (streammarker& MARK2)
        !          1360:      Return the difference between the get positions corresponding to
        !          1361:      `*this' and MARK2 (which must point into the same `streambuffer'
        !          1362:      as `this').
        !          1363: 
        !          1364:  - Method: int streammarker::delta ()
        !          1365:      Return the position relative to the streambuffer's current get
        !          1366:      position.
        !          1367: 
        !          1368:  - Method: int streambuffer::seekmark (streammarker& MARK)
        !          1369:      Move the get pointer to where it (logically) was when MARK was
        !          1370:      constructed.
        !          1371: 
        !          1372: 
        !          1373: File: iostream.info,  Node: Indirectbuf,  Prev: Backing Up,  Up: Streambuf
        !          1374: 
        !          1375: Forwarding I/O activity
        !          1376: =======================
        !          1377: 
        !          1378:    An "indirectbuf" is one that forwards all of its I/O requests to
        !          1379: another streambuf.
        !          1380: 
        !          1381:    An `indirectbuf' can be used to implement Common Lisp
        !          1382: synonym-streams and two-way-streams:
        !          1383: 
        !          1384:      class synonymbuf : public indirectbuf {
        !          1385:         Symbol *sym;
        !          1386:         synonymbuf(Symbol *s) { sym = s; }
        !          1387:         virtual streambuf *lookup_stream(int mode) {
        !          1388:             return coerce_to_streambuf(lookup_value(sym)); }
        !          1389:      };
        !          1390: 
        !          1391: 
        !          1392: File: iostream.info,  Node: Stdio,  Next: Index,  Prev: Streambuf,  Up: Top
        !          1393: 
        !          1394: C Input and Output
        !          1395: ******************
        !          1396: 
        !          1397:    `libio' is distributed with a complete implementation of the ANSI C
        !          1398: `stdio' facility.  It is implemented using `streambuf' objects.  *Note
        !          1399: Wrappers for C `stdio': Stdiobuf.
        !          1400: 
        !          1401:    The `stdio' package is intended as a replacement for the whatever
        !          1402: `stdio' is in your C library.  Since `stdio' works best when you build
        !          1403: `libc' to contain it, and that may be inconvenient, it is not installed
        !          1404: by default.
        !          1405: 
        !          1406:    Extensions beyond ANSI:
        !          1407: 
        !          1408:    * A stdio `FILE' is identical to a streambuf.  Hence there is no
        !          1409:      need to worry about synchronizing C and C++ input/output--they are
        !          1410:      by definition always synchronized.
        !          1411: 
        !          1412:    * If you create a new streambuf sub-class (in C++), you can use it
        !          1413:      as a `FILE' from C.  Thus the system is extensible using the
        !          1414:      standard `streambuf' protocol.
        !          1415: 
        !          1416:    * You can arbitrarily mix reading and writing, without having to seek
        !          1417:      in between.
        !          1418: 
        !          1419:    * Unbounded `ungetc()' buffer.
        !          1420: 
        !          1421: 
        !          1422: File: iostream.info,  Node: Index,  Prev: Stdio,  Up: Top
        !          1423: 
        !          1424: Index
        !          1425: *****
        !          1426: 
        !          1427: * Menu:
        !          1428: 
        !          1429: * (:                                    States.
        !          1430: * (:                                    States.
        !          1431: * << on ostream:                        Operators.
        !          1432: * >> on istream:                        Operators.
        !          1433: * iostream destructor:                  Iostream.
        !          1434: * badbit:                               States.
        !          1435: * beg:                                  Output Position.
        !          1436: * cerr:                                 Operators.
        !          1437: * cin:                                  Operators.
        !          1438: * class fstreambase:                    Files.
        !          1439: * class fstream:                        Files.
        !          1440: * class ifstream:                       Files.
        !          1441: * class istrstream:                     Strings.
        !          1442: * class ostream:                        Files.
        !          1443: * class ostrstream:                     Strings.
        !          1444: * class strstreambase:                  Strings.
        !          1445: * class strstreambuf:                   Strings.
        !          1446: * class strstream:                      Strings.
        !          1447: * cout:                                 Operators.
        !          1448: * cur:                                  Output Position.
        !          1449: * dec:                                  Manipulators.
        !          1450: * destructor for iostream:              Iostream.
        !          1451: * end:                                  Output Position.
        !          1452: * endl:                                 Manipulators.
        !          1453: * ends:                                 Manipulators.
        !          1454: * eofbit:                               States.
        !          1455: * failbit:                              States.
        !          1456: * flush:                                Manipulators.
        !          1457: * flush:                                Ostream Housekeeping.
        !          1458: * fstream:                              Files.
        !          1459: * fstreambase:                          Files.
        !          1460: * fstreambase::close:                   Files.
        !          1461: * get area:                             Areas.
        !          1462: * goodbit:                              States.
        !          1463: * hex:                                  Manipulators.
        !          1464: * ifstream:                             Files.
        !          1465: * ifstream:                             Files and Strings.
        !          1466: * ifstream::ifstream:                   Files.
        !          1467: * ifstream::ifstream:                   Files.
        !          1468: * ifstream::ifstream:                   Files.
        !          1469: * ifstream::open:                       Files.
        !          1470: * ios::app:                             Files.
        !          1471: * ios::ate:                             Files.
        !          1472: * ios::bad:                             States.
        !          1473: * ios::beg:                             Input Position.
        !          1474: * ios::bin:                             Files.
        !          1475: * ios::bitalloc:                        Extending.
        !          1476: * ios::clear:                           States.
        !          1477: * ios::cur:                             Input Position.
        !          1478: * ios::dec:                             Format Control.
        !          1479: * ios::end:                             Input Position.
        !          1480: * ios::eof:                             States.
        !          1481: * ios::fail:                            States.
        !          1482: * ios::fill:                            Format Control.
        !          1483: * ios::fill:                            Format Control.
        !          1484: * ios::fixed:                           Format Control.
        !          1485: * ios::flags:                           Format Control.
        !          1486: * ios::flags:                           Format Control.
        !          1487: * ios::good:                            States.
        !          1488: * ios::hex:                             Format Control.
        !          1489: * ios::in:                              Files.
        !          1490: * ios::internal:                        Format Control.
        !          1491: * ios::ios:                             Ios.
        !          1492: * ios::iword:                           Extending.
        !          1493: * ios::iword:                           Extending.
        !          1494: * ios::left:                            Format Control.
        !          1495: * ios::nocreate:                        Files.
        !          1496: * ios::noreplace:                       Files.
        !          1497: * ios::oct:                             Format Control.
        !          1498: * ios::out:                             Files.
        !          1499: * ios::precision:                       Format Control.
        !          1500: * ios::precision:                       Format Control.
        !          1501: * ios::pword:                           Extending.
        !          1502: * ios::pword:                           Extending.
        !          1503: * ios::rdbuf:                           Streambuf from Ios.
        !          1504: * ios::rdstate:                         States.
        !          1505: * ios::right:                           Format Control.
        !          1506: * ios::scientific:                      Format Control.
        !          1507: * ios::seekdir:                         Output Position.
        !          1508: * ios::set:                             States.
        !          1509: * ios::setf:                            Format Control.
        !          1510: * ios::setf:                            Format Control.
        !          1511: * ios::setstate:                        States.
        !          1512: * ios::showbase:                        Format Control.
        !          1513: * ios::showpoint:                       Format Control.
        !          1514: * ios::showpos:                         Format Control.
        !          1515: * ios::skipws:                          Format Control.
        !          1516: * ios::stdio:                           Format Control.
        !          1517: * ios::sync_with_stdio:                 Synchronization.
        !          1518: * ios::tie:                             Synchronization.
        !          1519: * ios::tie:                             Synchronization.
        !          1520: * ios::trunc:                           Files.
        !          1521: * ios::unitbuf:                         Format Control.
        !          1522: * ios::unsetf:                          Format Control.
        !          1523: * ios::uppercase:                       Format Control.
        !          1524: * ios::width:                           Format Control.
        !          1525: * ios::width:                           Format Control.
        !          1526: * ios::xalloc:                          Extending.
        !          1527: * ios::~ios:                            Ios.
        !          1528: * iostream::iostream:                   Iostream.
        !          1529: * iostream::iostream:                   Iostream.
        !          1530: * istream::gcount:                      Istream Housekeeping.
        !          1531: * istream::get:                         String Input.
        !          1532: * istream::get:                         Char Input.
        !          1533: * istream::get:                         String Input.
        !          1534: * istream::get:                         Char Input.
        !          1535: * istream::getline:                     String Input.
        !          1536: * istream::gets:                        String Input.
        !          1537: * istream::ignore:                      Istream Housekeeping.
        !          1538: * istream::ipfx:                        Istream Housekeeping.
        !          1539: * istream::isfx:                        Istream Housekeeping.
        !          1540: * istream::istream:                     Istream.
        !          1541: * istream::istream:                     Istream.
        !          1542: * istream::peek:                        Char Input.
        !          1543: * istream::putback:                     Istream Housekeeping.
        !          1544: * istream::read:                        String Input.
        !          1545: * istream::scan:                        String Input.
        !          1546: * istream::seekg:                       Input Position.
        !          1547: * istream::seekg:                       Input Position.
        !          1548: * istream::tellg:                       Input Position.
        !          1549: * istream::unget:                       Istream Housekeeping.
        !          1550: * istream::vscan:                       String Input.
        !          1551: * istrstream:                           Files and Strings.
        !          1552: * istrstream:                           Strings.
        !          1553: * istrstream::istrstream:               Strings.
        !          1554: * oct:                                  Manipulators.
        !          1555: * ofstream:                             Files and Strings.
        !          1556: * ofstream::ofstream:                   Files.
        !          1557: * ofstream::ofstream:                   Files.
        !          1558: * ofstream::ofstream:                   Files.
        !          1559: * ofstream::open:                       Files.
        !          1560: * ofstream::~ofstream:                  Files.
        !          1561: * ostream:                              Files.
        !          1562: * ostream::form:                        Writing.
        !          1563: * ostream::opfx:                        Ostream Housekeeping.
        !          1564: * ostream::osfx:                        Ostream Housekeeping.
        !          1565: * ostream::ostream:                     Ostream.
        !          1566: * ostream::ostream:                     Ostream.
        !          1567: * ostream::put:                         Writing.
        !          1568: * ostream::seekp:                       Output Position.
        !          1569: * ostream::seekp:                       Output Position.
        !          1570: * ostream::tellp:                       Output Position.
        !          1571: * ostream::vform:                       Writing.
        !          1572: * ostream::write:                       Writing.
        !          1573: * ostrstream:                           Strings.
        !          1574: * ostrstream:                           Files and Strings.
        !          1575: * ostrstream::freeze:                   Strings.
        !          1576: * ostrstream::frozen:                   Strings.
        !          1577: * ostrstream::ostrstream:               Strings.
        !          1578: * ostrstream::ostrstream:               Strings.
        !          1579: * ostrstream::pcount:                   Strings.
        !          1580: * ostrstream::str:                      Strings.
        !          1581: * put area:                             Areas.
        !          1582: * setbase:                              Manipulators.
        !          1583: * setfill:                              Manipulators.
        !          1584: * setprecision:                         Format Control.
        !          1585: * setprecision:                         Manipulators.
        !          1586: * setting ios::precision:               Format Control.
        !          1587: * setting ios::width:                   Format Control.
        !          1588: * setw:                                 Manipulators.
        !          1589: * setw:                                 Format Control.
        !          1590: * streambuf::scan:                      Formatting.
        !          1591: * streambuf::vform:                     Formatting.
        !          1592: * streambuf::vform:                     Formatting.
        !          1593: * streambuf::vscan:                     Formatting.
        !          1594: * streambuffer::seekmark:               Backing Up.
        !          1595: * streammarker::delta:                  Backing Up.
        !          1596: * streammarker::delta:                  Backing Up.
        !          1597: * streammarker::streammarker:           Backing Up.
        !          1598: * strstream:                            Strings.
        !          1599: * strstreambase:                        Strings.
        !          1600: * strstreambase::rdbuf:                 Strings.
        !          1601: * strstreambuf:                         Strings.
        !          1602: * ws:                                   Manipulators.
        !          1603: 
        !          1604: 
        !          1605: 
        !          1606: Tag Table:
        !          1607: Node: Top985
        !          1608: Node: Introduction1471
        !          1609: Node: Copying2041
        !          1610: Node: Acknowledgements3254
        !          1611: Node: Operators4238
        !          1612: Node: Streams7003
        !          1613: Node: Ios7485
        !          1614: Node: States9086
        !          1615: Node: Format Control12064
        !          1616: Node: Manipulators17225
        !          1617: Node: Extending19198
        !          1618: Node: Synchronization20997
        !          1619: Node: Streambuf from Ios22311
        !          1620: Node: Ostream22661
        !          1621: Node: Writing23795
        !          1622: Node: Output Position25172
        !          1623: Node: Ostream Housekeeping26330
        !          1624: Node: Istream27586
        !          1625: Node: Char Input28963
        !          1626: Node: String Input29559
        !          1627: Node: Input Position33067
        !          1628: Node: Istream Housekeeping34274
        !          1629: Node: Iostream36579
        !          1630: Node: Files and Strings37870
        !          1631: Node: Files38497
        !          1632: Node: Strings43121
        !          1633: Node: Streambuf45567
        !          1634: Node: Areas46405
        !          1635: Node: Formatting46879
        !          1636: Node: Stdiobuf48288
        !          1637: Node: Backing Up49232
        !          1638: Node: Indirectbuf51501
        !          1639: Node: Stdio52043
        !          1640: Node: Index53071
        !          1641: 
        !          1642: End Tag Table

unix.superglobalmegacorp.com

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