Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/fstream.cfa

    r8d321f9 r4cae032  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Jun 19 16:24:54 2020
    13 // Update Count     : 384
     12// Last Modified On : Fri Nov 29 06:56:46 2019
     13// Update Count     : 355
    1414//
    1515
     
    2626
    2727
    28 // *********************************** ofstream ***********************************
     28//*********************************** ofstream ***********************************
    2929
    3030
     
    3232
    3333void ?{}( ofstream & os, void * file ) {
    34         os.$file = file;
    35         os.$sepDefault = true;
    36         os.$sepOnOff = false;
    37         os.$nlOnOff = true;
    38         os.$prt = false;
    39         os.$sawNL = false;
    40         $sepSetCur( os, sepGet( os ) );
     34        os.file = file;
     35        os.sepDefault = true;
     36        os.sepOnOff = false;
     37        os.nlOnOff = true;
     38        os.prt = false;
     39        os.sawNL = false;
    4140        sepSet( os, " " );
     41        sepSetCur( os, sepGet( os ) );
    4242        sepSetTuple( os, ", " );
    4343} // ?{}
    4444
    4545// private
    46 bool $sepPrt( ofstream & os ) { $setNL( os, false ); return os.$sepOnOff; }
    47 void $sepReset( ofstream & os ) { os.$sepOnOff = os.$sepDefault; }
    48 void $sepReset( ofstream & os, bool reset ) { os.$sepDefault = reset; os.$sepOnOff = os.$sepDefault; }
    49 const char * $sepGetCur( ofstream & os ) { return os.$sepCur; }
    50 void $sepSetCur( ofstream & os, const char sepCur[] ) { os.$sepCur = sepCur; }
    51 bool $getNL( ofstream & os ) { return os.$sawNL; }
    52 void $setNL( ofstream & os, bool state ) { os.$sawNL = state; }
    53 bool $getANL( ofstream & os ) { return os.$nlOnOff; }
    54 bool $getPrt( ofstream & os ) { return os.$prt; }
    55 void $setPrt( ofstream & os, bool state ) { os.$prt = state; }
     46bool sepPrt( ofstream & os ) { setNL( os, false ); return os.sepOnOff; }
     47void sepReset( ofstream & os ) { os.sepOnOff = os.sepDefault; }
     48void sepReset( ofstream & os, bool reset ) { os.sepDefault = reset; os.sepOnOff = os.sepDefault; }
     49const char * sepGetCur( ofstream & os ) { return os.sepCur; }
     50void sepSetCur( ofstream & os, const char * sepCur ) { os.sepCur = sepCur; }
     51bool getNL( ofstream & os ) { return os.sawNL; }
     52void setNL( ofstream & os, bool state ) { os.sawNL = state; }
     53bool getANL( ofstream & os ) { return os.nlOnOff; }
     54bool getPrt( ofstream & os ) { return os.prt; }
     55void setPrt( ofstream & os, bool state ) { os.prt = state; }
    5656
    5757// public
    58 void ?{}( ofstream & os ) { os.$file = 0p; }
    59 
    60 void ?{}( ofstream & os, const char name[], const char mode[] ) {
     58void ?{}( ofstream & os ) { os.file = 0; }
     59
     60void ?{}( ofstream & os, const char * name, const char * mode ) {
    6161        open( os, name, mode );
    6262} // ?{}
    6363
    64 void ?{}( ofstream & os, const char name[] ) {
     64void ?{}( ofstream & os, const char * name ) {
    6565        open( os, name, "w" );
    6666} // ?{}
     
    7070} // ^?{}
    7171
    72 void sepOn( ofstream & os ) { os.$sepOnOff = ! $getNL( os ); }
    73 void sepOff( ofstream & os ) { os.$sepOnOff = false; }
     72void sepOn( ofstream & os ) { os.sepOnOff = ! getNL( os ); }
     73void sepOff( ofstream & os ) { os.sepOnOff = false; }
    7474
    7575bool sepDisable( ofstream & os ) {
    76         bool temp = os.$sepDefault;
    77         os.$sepDefault = false;
    78         $sepReset( os );
     76        bool temp = os.sepDefault;
     77        os.sepDefault = false;
     78        sepReset( os );
    7979        return temp;
    8080} // sepDisable
    8181
    8282bool sepEnable( ofstream & os ) {
    83         bool temp = os.$sepDefault;
    84         os.$sepDefault = true;
    85         if ( os.$sepOnOff ) $sepReset( os );                            // start of line ?
     83        bool temp = os.sepDefault;
     84        os.sepDefault = true;
     85        if ( os.sepOnOff ) sepReset( os );                                      // start of line ?
    8686        return temp;
    8787} // sepEnable
    8888
    89 void nlOn( ofstream & os ) { os.$nlOnOff = true; }
    90 void nlOff( ofstream & os ) { os.$nlOnOff = false; }
    91 
    92 const char * sepGet( ofstream & os ) { return os.$separator; }
    93 void sepSet( ofstream & os, const char s[] ) {
     89void nlOn( ofstream & os ) { os.nlOnOff = true; }
     90void nlOff( ofstream & os ) { os.nlOnOff = false; }
     91
     92const char * sepGet( ofstream & os ) { return os.separator; }
     93void sepSet( ofstream & os, const char * s ) {
    9494        assert( s );
    95         strncpy( os.$separator, s, sepSize - 1 );
    96         os.$separator[sepSize - 1] = '\0';
     95        strncpy( os.separator, s, sepSize - 1 );
     96        os.separator[sepSize - 1] = '\0';
    9797} // sepSet
    9898
    99 const char * sepGetTuple( ofstream & os ) { return os.$tupleSeparator; }
    100 void sepSetTuple( ofstream & os, const char s[] ) {
     99const char * sepGetTuple( ofstream & os ) { return os.tupleSeparator; }
     100void sepSetTuple( ofstream & os, const char * s ) {
    101101        assert( s );
    102         strncpy( os.$tupleSeparator, s, sepSize - 1 );
    103         os.$tupleSeparator[sepSize - 1] = '\0';
     102        strncpy( os.tupleSeparator, s, sepSize - 1 );
     103        os.tupleSeparator[sepSize - 1] = '\0';
    104104} // sepSet
    105105
    106106void ends( ofstream & os ) {
    107         if ( $getANL( os ) ) nl( os );
    108         else $setPrt( os, false );                                                      // turn off
     107        if ( getANL( os ) ) nl( os );
     108        else setPrt( os, false );                                                       // turn off
    109109        if ( &os == &exit ) exit( EXIT_FAILURE );
    110110        if ( &os == &abort ) abort();
     
    112112
    113113int fail( ofstream & os ) {
    114         return os.$file == 0 || ferror( (FILE *)(os.$file) );
     114        return os.file == 0 || ferror( (FILE *)(os.file) );
    115115} // fail
    116116
    117117int flush( ofstream & os ) {
    118         return fflush( (FILE *)(os.$file) );
     118        return fflush( (FILE *)(os.file) );
    119119} // flush
    120120
    121 void open( ofstream & os, const char name[], const char mode[] ) {
     121void open( ofstream & os, const char * name, const char * mode ) {
    122122        FILE * file = fopen( name, mode );
    123123        #ifdef __CFA_DEBUG__
    124         if ( file == 0p ) {
    125                 throw (Open_Failure){ os };
    126                 // abort | IO_MSG "open output file \"" | name | "\"" | nl | strerror( errno );
     124        if ( file == 0 ) {
     125                abort | IO_MSG "open output file \"" | name | "\"" | nl | strerror( errno );
    127126        } // if
    128127        #endif // __CFA_DEBUG__
     
    130129} // open
    131130
    132 void open( ofstream & os, const char name[] ) {
     131void open( ofstream & os, const char * name ) {
    133132        open( os, name, "w" );
    134133} // open
    135134
    136135void close( ofstream & os ) {
    137   if ( (FILE *)(os.$file) == 0p ) return;
    138   if ( (FILE *)(os.$file) == (FILE *)stdout || (FILE *)(os.$file) == (FILE *)stderr ) return;
    139 
    140         if ( fclose( (FILE *)(os.$file) ) == EOF ) {
     136        if ( (FILE *)(os.file) == stdout || (FILE *)(os.file) == stderr ) return;
     137
     138        if ( fclose( (FILE *)(os.file) ) == EOF ) {
    141139                abort | IO_MSG "close output" | nl | strerror( errno );
    142140        } // if
    143         os.$file = 0p;
    144141} // close
    145142
    146 ofstream & write( ofstream & os, const char data[], size_t size ) {
     143ofstream & write( ofstream & os, const char * data, size_t size ) {
    147144        if ( fail( os ) ) {
    148145                abort | IO_MSG "attempt write I/O on failed stream";
    149146        } // if
    150147
    151         if ( fwrite( data, 1, size, (FILE *)(os.$file) ) != size ) {
     148        if ( fwrite( data, 1, size, (FILE *)(os.file) ) != size ) {
    152149                abort | IO_MSG "write" | nl | strerror( errno );
    153150        } // if
     
    158155        va_list args;
    159156        va_start( args, format );
    160         int len = vfprintf( (FILE *)(os.$file), format, args );
     157        int len = vfprintf( (FILE *)(os.file), format, args );
    161158        if ( len == EOF ) {
    162                 if ( ferror( (FILE *)(os.$file) ) ) {
     159                if ( ferror( (FILE *)(os.file) ) ) {
    163160                        abort | IO_MSG "invalid write";
    164161                } // if
     
    166163        va_end( args );
    167164
    168         $setPrt( os, true );                                                            // called in output cascade
    169         $sepReset( os );                                                                        // reset separator
     165        setPrt( os, true );                                                                     // called in output cascade
     166        sepReset( os );                                                                         // reset separator
    170167        return len;
    171168} // fmt
     
    182179
    183180
    184 // *********************************** ifstream ***********************************
     181//*********************************** ifstream ***********************************
    185182
    186183
    187184// private
    188185void ?{}( ifstream & is, void * file ) {
    189         is.$file = file;
    190         is.$nlOnOff = false;
     186        is.file = file;
     187        is.nlOnOff = false;
    191188} // ?{}
    192189
    193190// public
    194 void ?{}( ifstream & is ) { is.$file = 0p; }
    195 
    196 void ?{}( ifstream & is, const char name[], const char mode[] ) {
     191void ?{}( ifstream & is ) {     is.file = 0; }
     192
     193void ?{}( ifstream & is, const char * name, const char * mode ) {
    197194        open( is, name, mode );
    198195} // ?{}
    199196
    200 void ?{}( ifstream & is, const char name[] ) {
     197void ?{}( ifstream & is, const char * name ) {
    201198        open( is, name, "r" );
    202199} // ?{}
     
    206203} // ^?{}
    207204
    208 void nlOn( ifstream & os ) { os.$nlOnOff = true; }
    209 void nlOff( ifstream & os ) { os.$nlOnOff = false; }
    210 bool getANL( ifstream & os ) { return os.$nlOnOff; }
     205void nlOn( ifstream & os ) { os.nlOnOff = true; }
     206void nlOff( ifstream & os ) { os.nlOnOff = false; }
     207bool getANL( ifstream & os ) { return os.nlOnOff; }
    211208
    212209int fail( ifstream & is ) {
    213         return is.$file == 0p || ferror( (FILE *)(is.$file) );
     210        return is.file == 0 || ferror( (FILE *)(is.file) );
    214211} // fail
    215212
    216213int eof( ifstream & is ) {
    217         return feof( (FILE *)(is.$file) );
     214        return feof( (FILE *)(is.file) );
    218215} // eof
    219216
    220 void open( ifstream & is, const char name[], const char mode[] ) {
     217void open( ifstream & is, const char * name, const char * mode ) {
    221218        FILE * file = fopen( name, mode );
    222219        #ifdef __CFA_DEBUG__
    223         if ( file == 0p ) {
    224                 throw (Open_Failure){ is };
    225                 // abort | IO_MSG "open input file \"" | name | "\"" | nl | strerror( errno );
     220        if ( file == 0 ) {
     221                abort | IO_MSG "open input file \"" | name | "\"" | nl | strerror( errno );
    226222        } // if
    227223        #endif // __CFA_DEBUG__
    228         is.$file = file;
    229 } // open
    230 
    231 void open( ifstream & is, const char name[] ) {
     224        is.file = file;
     225} // open
     226
     227void open( ifstream & is, const char * name ) {
    232228        open( is, name, "r" );
    233229} // open
    234230
    235231void close( ifstream & is ) {
    236   if ( (FILE *)(is.$file) == 0p ) return;
    237   if ( (FILE *)(is.$file) == (FILE *)stdin ) return;
    238 
    239         if ( fclose( (FILE *)(is.$file) ) == EOF ) {
     232        if ( (FILE *)(is.file) == stdin ) return;
     233
     234        if ( fclose( (FILE *)(is.file) ) == EOF ) {
    240235                abort | IO_MSG "close input" | nl | strerror( errno );
    241236        } // if
    242         is.$file = 0p;
    243237} // close
    244238
     
    248242        } // if
    249243
    250         if ( fread( data, size, 1, (FILE *)(is.$file) ) == 0 ) {
     244        if ( fread( data, size, 1, (FILE *)(is.file) ) == 0 ) {
    251245                abort | IO_MSG "read" | nl | strerror( errno );
    252246        } // if
     
    259253        } // if
    260254
    261         if ( ungetc( c, (FILE *)(is.$file) ) == EOF ) {
     255        if ( ungetc( c, (FILE *)(is.file) ) == EOF ) {
    262256                abort | IO_MSG "ungetc" | nl | strerror( errno );
    263257        } // if
     
    269263
    270264        va_start( args, format );
    271         int len = vfscanf( (FILE *)(is.$file), format, args );
     265        int len = vfscanf( (FILE *)(is.file), format, args );
    272266        if ( len == EOF ) {
    273                 if ( ferror( (FILE *)(is.$file) ) ) {
     267                if ( ferror( (FILE *)(is.file) ) ) {
    274268                        abort | IO_MSG "invalid read";
    275269                } // if
     
    282276ifstream & sin = sinFile, & stdin = sinFile;
    283277
    284 
    285 // *********************************** exceptions ***********************************
    286 
    287 
    288 void ?{}( Open_Failure & this, ofstream & ostream ) {
    289         VTABLE_INIT(this, Open_Failure);
    290         this.ostream = &ostream;
    291         this.tag = 1;
    292 }
    293 void ?{}( Open_Failure & this, ifstream & istream ) {
    294         VTABLE_INIT(this, Open_Failure);
    295         this.istream = &istream;
    296         this.tag = 0;
    297 }
    298 const char * Open_Failure_msg(Open_Failure * this) {
    299         return "Open_Failure";
    300 }
    301 VTABLE_INSTANCE(Open_Failure)(Open_Failure_msg);
    302 void throwOpen_Failure( ofstream & ostream ) {
    303         Open_Failure exc = { ostream };
    304 }
    305 void throwOpen_Failure( ifstream & istream ) {
    306         Open_Failure exc = { istream };
    307 }
    308 
    309278// Local Variables: //
    310279// tab-width: 4 //
Note: See TracChangeset for help on using the changeset viewer.