Ignore:
Timestamp:
Jun 19, 2020, 5:49:22 PM (18 months ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
arm-eh, jacob/cs343-translation, master, new-ast, new-ast-unique-expr
Children:
a8a3485
Parents:
8d321f9
Message:

update idiomic Cforall command-line processing and coping input file to output file

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tests/.expect/copyfile.txt

    r8d321f9 r6c4bd02  
    88//
    99// Author           : Peter A. Buhr
    10 // Created On       : Tue Jul 16 16:47:22 2019
     10// Created On       : Fri Jun 19 13:44:05 2020
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Jun  1 09:10:58 2020
    13 // Update Count     : 28
     12// Last Modified On : Fri Jun 19 14:16:44 2020
     13// Update Count     : 3
    1414//
    1515
    1616#include <fstream.hfa>
    17 #include <stdlib.hfa>                                                                   // new/delete
     17#include <exception.hfa>
    1818
    1919int main( int argc, char * argv[] ) {
    20         ifstream & in  = stdin;                                                         // default files
    21         ofstream & out = stdout;
     20        ifstream in  = stdin;                                                           // copy default files
     21        ofstream out = stdout;
     22
    2223        try {
    2324                choose ( argc ) {
     25                        char ch;
    2426                  case 2, 3:
    25                           &in = new( (const char *)argv[1] );           // open input file first as output creates file
    26                           if ( argc == 3 ) &out = new( (const char *)argv[2] ); // only open output if input opens as output created if nonexistent
    27                   case 1: ;                                     // use default files
     27                        open( in, argv[1] );                                            // open input file first as output creates file
     28                        if ( argc == 3 ) open( out, argv[2] );          // do not create output unless input opens
     29                  case 1: ;                                                                             // use default files
    2830                  default:
    29                           exit | "Usage [ input-file (default stdin) [ output-file (default stdout) ] ]";
     31                        exit | "Usage" | argv[0] | "[ input-file (default stdin) [ output-file (default stdout) ] ]";
    3032                } // choose
     33        } catch( Open_Failure * ex ; ex->istream == &in ) {
     34                exit | "Unable to open input file" | argv[1];
     35        } catch( Open_Failure * ex ; ex->ostream == &out ) {
     36                close( in );                                                                    // optional
     37                exit | "Unable to open output file" | argv[2];
     38        } // try
    3139
    32                 char ch;
    33                 out | nlOff;                                                                    // turn off auto newline
    34                 in  | nlOn;                                                                             // turn on reading newline
     40        out | nlOff;                                                                            // turn off auto newline
     41        in  | nlOn;                                                                                     // turn on reading newline
    3542
    36                 for () {                                                                                // read all characters
    37                         in | ch;
    38                   if ( eof( in ) ) break;                                               // eof ?
    39                         out | ch;
    40                 } // for
    41         } finally {
    42                 if ( &in  != &stdin  ) delete( &in );                   // close file, do not delete stdin!
    43                 if ( &out != &stdout ) delete( &out );                  // close file, do not delete stdout!
    44         } // try
     43        char ch;
     44        for () {                                                                                        // read all characters
     45                in | ch;
     46          if ( eof( in ) ) break;                                                       // eof ?
     47                out | ch;
     48        } //for
    4549} // main
    4650
Note: See TracChangeset for help on using the changeset viewer.