Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/fstream.cfa

    r5cb2b8c r9d362a0  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu May 16 08:33:28 2019
    13 // Update Count     : 328
     12// Last Modified On : Mon Dec 24 18:33:38 2018
     13// Update Count     : 304
    1414//
    1515
     
    2323#include <complex.h>                                                                    // creal, cimag
    2424#include <assert.h>
    25 #include <errno.h>                                                                              // errno
    2625
    2726#define IO_MSG "I/O error: "
    2827
    29 void ?{}( ofstream & os, void * file ) {
     28void ?{}( ofstream & os, void * file, bool sepDefault, bool sepOnOff, bool nlOnOff, bool prt, const char * separator, const char * tupleSeparator ) {
    3029        os.file = file;
    31         os.sepDefault = true;
    32         os.sepOnOff = false;
    33         os.nlOnOff = true;
    34         os.prt = false;
    35         os.sawNL = false;
    36         sepSet( os, " " );
     30        os.sepDefault = sepDefault;
     31        os.sepOnOff = sepOnOff;
     32        os.nlOnOff = nlOnOff;
     33        os.prt = prt;
     34        sepSet( os, separator );
    3735        sepSetCur( os, sepGet( os ) );
    38         sepSetTuple( os, ", " );
     36        sepSetTuple( os, tupleSeparator );
    3937}
    4038
     
    104102
    105103void open( ofstream & os, const char * name, const char * mode ) {
    106         FILE * file = fopen( name, mode );
     104        FILE *file = fopen( name, mode );
    107105        #ifdef __CFA_DEBUG__
    108106        if ( file == 0 ) {
    109                 abort( IO_MSG "open output file \"%s\", %s", name, strerror( errno ) );
     107                fprintf( stderr, IO_MSG "open output file \"%s\", ", name );
     108                perror( 0 );
     109                exit( EXIT_FAILURE );
    110110        } // if
    111111        #endif // __CFA_DEBUG__
    112         (os){ file };
     112        (os){ file, true, false, true, false, " ", ", " };
    113113} // open
    114114
     
    121121
    122122        if ( fclose( (FILE *)(os.file) ) == EOF ) {
    123                 abort( IO_MSG "close output %s", strerror( errno ) );
     123                perror( IO_MSG "close output" );
    124124        } // if
    125125} // close
     
    127127ofstream & write( ofstream & os, const char * data, size_t size ) {
    128128        if ( fail( os ) ) {
    129                 abort( "attempt write I/O on failed stream\n" );
     129                fprintf( stderr, "attempt write I/O on failed stream\n" );
     130                exit( EXIT_FAILURE );
    130131        } // if
    131132
    132133        if ( fwrite( data, 1, size, (FILE *)(os.file) ) != size ) {
    133                 abort( IO_MSG "write %s", strerror( errno ) );
     134                perror( IO_MSG "write" );
     135                exit( EXIT_FAILURE );
    134136        } // if
    135137        return os;
     
    142144        if ( len == EOF ) {
    143145                if ( ferror( (FILE *)(os.file) ) ) {
    144                         abort( "invalid write\n" );
     146                        fprintf( stderr, "invalid write\n" );
     147                        exit( EXIT_FAILURE );
    145148                } // if
    146149        } // if
     
    152155} // fmt
    153156
    154 static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_) };
     157static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_), true, false, true, false, " ", ", " };
    155158ofstream & sout = soutFile;
    156 static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_) };
     159static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_), true, false, true, false, " ", ", " };
    157160ofstream & serr = serrFile;
    158161
    159 // static ofstream sexitFile = { (FILE *)(&_IO_2_1_stdout_) };
    160 // ofstream & sexit = sexitFile;
    161 // static ofstream sabortFile = { (FILE *)(&_IO_2_1_stderr_) };
    162 // ofstream & sabort = sabortFile;
    163 
    164 void nl( ofstream & os ) {
    165         if ( getANL( os ) ) (ofstream &)(nl( os ));                     // implementation only
    166         else setPrt( os, false );                                                       // turn off
    167 }
    168162
    169163//---------------------------------------
     
    172166void ?{}( ifstream & is, void * file ) {
    173167        is.file = file;
    174         is.nlOnOff = false;
    175168}
    176169
     
    184177        open( is, name, "r" );
    185178}
    186 
    187 void nlOn( ifstream & os ) { os.nlOnOff = true; }
    188 void nlOff( ifstream & os ) { os.nlOnOff = false; }
    189 bool getANL( ifstream & os ) { return os.nlOnOff; }
    190179
    191180int fail( ifstream & is ) {
     
    198187
    199188void open( ifstream & is, const char * name, const char * mode ) {
    200         FILE * file = fopen( name, mode );
     189        FILE *file = fopen( name, mode );
    201190        #ifdef __CFA_DEBUG__
    202191        if ( file == 0 ) {
    203                 abort( IO_MSG "open input file \"%s\", %s\n", name, strerror( errno ) );
     192                fprintf( stderr, IO_MSG "open input file \"%s\", ", name );
     193                perror( 0 );
     194                exit( EXIT_FAILURE );
    204195        } // if
    205196        #endif // __CFA_DEBUG__
     
    215206
    216207        if ( fclose( (FILE *)(is.file) ) == EOF ) {
    217                 abort( IO_MSG "close input %s", strerror( errno ) );
     208                perror( IO_MSG "close input" );
    218209        } // if
    219210} // close
     
    221212ifstream & read( ifstream & is, char * data, size_t size ) {
    222213        if ( fail( is ) ) {
    223                 abort( "attempt read I/O on failed stream\n" );
     214                fprintf( stderr, "attempt read I/O on failed stream\n" );
     215                exit( EXIT_FAILURE );
    224216        } // if
    225217
    226218        if ( fread( data, size, 1, (FILE *)(is.file) ) == 0 ) {
    227                 abort( IO_MSG "read %s", strerror( errno ) );
     219                perror( IO_MSG "read" );
     220                exit( EXIT_FAILURE );
    228221        } // if
    229222        return is;
     
    232225ifstream &ungetc( ifstream & is, char c ) {
    233226        if ( fail( is ) ) {
    234                 abort( "attempt ungetc I/O on failed stream\n" );
     227                fprintf( stderr, "attempt ungetc I/O on failed stream\n" );
     228                exit( EXIT_FAILURE );
    235229        } // if
    236230
    237231        if ( ungetc( c, (FILE *)(is.file) ) == EOF ) {
    238                 abort( IO_MSG "ungetc %s", strerror( errno ) );
     232                perror( IO_MSG "ungetc" );
     233                exit( EXIT_FAILURE );
    239234        } // if
    240235        return is;
     
    248243        if ( len == EOF ) {
    249244                if ( ferror( (FILE *)(is.file) ) ) {
    250                         abort( "invalid read\n" );
     245                        fprintf( stderr, "invalid read\n" );
     246                        exit( EXIT_FAILURE );
    251247                } // if
    252248        } // if
Note: See TracChangeset for help on using the changeset viewer.