/*******************
  Read/Write integers
        ./a.out input-file [ output-file ]

  Example usage:
        ./a.out inputfile
        ./a.out inputfile outputfile
*******************/
#include <iostream>        // Ex26
#include <fstream>
using namespace std;

int main( int argc, char *argv[] ) {
    istream    *infile;
    ostream    *outfile = &cout;
    int i;

    switch ( argc ) {
      case 3:

        outfile = new ofstream( argv[2] );
        if ( outfile->fail() ) {
            cerr << "Open failure \""
                 << argv[2] << "\"" << endl;
            exit( -1 );        // TERMINATE!
        } // if
        // FALL THROUGH
      case 2:

        infile = new ifstream( argv[1] );
        if ( infile->fail() ) {
            cerr << "Open failure \""
                 << argv[1] << "\"" << endl;
            exit( -1 );        // TERMINATE!
        } // if
        break;
      default:
        cerr << "Usage: " << argv[0] <<
          " input-file [output-file]" << endl;
        exit( -1 );            // TERMINATE!
    }

    for ( ;; ) {
        *infile >> i;
      if ( infile->eof() ) break;
        *outfile << i;
    }
    delete infile;
    if ( outfile != &cout ) delete outfile;
}

