Changeset 3b56166 for libcfa/src/fstream.cfa
- Timestamp:
- Feb 10, 2020, 11:17:38 AM (6 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- 3966d9a, 41efd33
- Parents:
- 807a632 (diff), d231700 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - File:
-
- 1 edited
-
libcfa/src/fstream.cfa (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/fstream.cfa
r807a632 r3b56166 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Sep 10 22:19:56 201913 // Update Count : 3 5412 // Last Modified On : Fri Feb 7 19:01:01 2020 13 // Update Count : 363 14 14 // 15 15 … … 32 32 33 33 void ?{}( 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; 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 ) ); 40 41 sepSet( os, " " ); 41 sepSetCur( os, sepGet( os ) );42 42 sepSetTuple( os, ", " ); 43 43 } // ?{} 44 44 45 45 // 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; }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; } 56 56 57 57 // public 58 void ?{}( ofstream & os ) { os. file = 0; }59 60 void ?{}( ofstream & os, const char * name, const char * mode) {58 void ?{}( ofstream & os ) { os.$file = 0p; } 59 60 void ?{}( ofstream & os, const char name[], const char mode[] ) { 61 61 open( os, name, mode ); 62 62 } // ?{} 63 63 64 void ?{}( ofstream & os, const char * name) {64 void ?{}( ofstream & os, const char name[] ) { 65 65 open( os, name, "w" ); 66 66 } // ?{} 67 67 68 void sepOn( ofstream & os ) { os.sepOnOff = ! getNL( os ); } 69 void sepOff( ofstream & os ) { os.sepOnOff = false; } 68 void ^?{}( ofstream & os ) { 69 close( os ); 70 } // ^?{} 71 72 void sepOn( ofstream & os ) { os.$sepOnOff = ! $getNL( os ); } 73 void sepOff( ofstream & os ) { os.$sepOnOff = false; } 70 74 71 75 bool sepDisable( ofstream & os ) { 72 bool temp = os. sepDefault;73 os. sepDefault = false;74 sepReset( os );76 bool temp = os.$sepDefault; 77 os.$sepDefault = false; 78 $sepReset( os ); 75 79 return temp; 76 80 } // sepDisable 77 81 78 82 bool sepEnable( ofstream & os ) { 79 bool temp = os. sepDefault;80 os. sepDefault = true;81 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 ? 82 86 return temp; 83 87 } // sepEnable 84 88 85 void nlOn( ofstream & os ) { os. nlOnOff = true; }86 void nlOff( ofstream & os ) { os. nlOnOff = false; }87 88 const char * sepGet( ofstream & os ) { return os. separator; }89 void sepSet( ofstream & os, const char * s) {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[] ) { 90 94 assert( s ); 91 strncpy( os. separator, s, sepSize - 1 );92 os. separator[sepSize - 1] = '\0';95 strncpy( os.$separator, s, sepSize - 1 ); 96 os.$separator[sepSize - 1] = '\0'; 93 97 } // sepSet 94 98 95 const char * sepGetTuple( ofstream & os ) { return os. tupleSeparator; }96 void sepSetTuple( ofstream & os, const char * s) {99 const char * sepGetTuple( ofstream & os ) { return os.$tupleSeparator; } 100 void sepSetTuple( ofstream & os, const char s[] ) { 97 101 assert( s ); 98 strncpy( os. tupleSeparator, s, sepSize - 1 );99 os. tupleSeparator[sepSize - 1] = '\0';102 strncpy( os.$tupleSeparator, s, sepSize - 1 ); 103 os.$tupleSeparator[sepSize - 1] = '\0'; 100 104 } // sepSet 101 105 102 106 void ends( ofstream & os ) { 103 if ( getANL( os ) ) nl( os );104 else setPrt( os, false ); // turn off107 if ( $getANL( os ) ) nl( os ); 108 else $setPrt( os, false ); // turn off 105 109 if ( &os == &exit ) exit( EXIT_FAILURE ); 106 110 if ( &os == &abort ) abort(); … … 108 112 109 113 int fail( ofstream & os ) { 110 return os. file == 0 || ferror( (FILE *)(os.file) );114 return os.$file == 0 || ferror( (FILE *)(os.$file) ); 111 115 } // fail 112 116 113 117 int flush( ofstream & os ) { 114 return fflush( (FILE *)(os. file) );118 return fflush( (FILE *)(os.$file) ); 115 119 } // flush 116 120 117 void open( ofstream & os, const char * name, const char * mode) {121 void open( ofstream & os, const char name[], const char mode[] ) { 118 122 FILE * file = fopen( name, mode ); 119 123 #ifdef __CFA_DEBUG__ 120 if ( file == 0 ) {124 if ( file == 0p ) { 121 125 abort | IO_MSG "open output file \"" | name | "\"" | nl | strerror( errno ); 122 126 } // if … … 125 129 } // open 126 130 127 void open( ofstream & os, const char * name) {131 void open( ofstream & os, const char name[] ) { 128 132 open( os, name, "w" ); 129 133 } // open 130 134 131 135 void close( ofstream & os ) { 132 if ( (FILE *)(os. file) == stdout || (FILE *)(os.file) == stderr ) return;133 134 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 ) { 135 139 abort | IO_MSG "close output" | nl | strerror( errno ); 136 140 } // if 137 141 } // close 138 142 139 ofstream & write( ofstream & os, const char * data, size_t size ) {143 ofstream & write( ofstream & os, const char data[], size_t size ) { 140 144 if ( fail( os ) ) { 141 145 abort | IO_MSG "attempt write I/O on failed stream"; 142 146 } // if 143 147 144 if ( fwrite( data, 1, size, (FILE *)(os. file) ) != size ) {148 if ( fwrite( data, 1, size, (FILE *)(os.$file) ) != size ) { 145 149 abort | IO_MSG "write" | nl | strerror( errno ); 146 150 } // if … … 151 155 va_list args; 152 156 va_start( args, format ); 153 int len = vfprintf( (FILE *)(os. file), format, args );157 int len = vfprintf( (FILE *)(os.$file), format, args ); 154 158 if ( len == EOF ) { 155 if ( ferror( (FILE *)(os. file) ) ) {159 if ( ferror( (FILE *)(os.$file) ) ) { 156 160 abort | IO_MSG "invalid write"; 157 161 } // if … … 159 163 va_end( args ); 160 164 161 setPrt( os, true );// called in output cascade162 sepReset( os );// reset separator165 $setPrt( os, true ); // called in output cascade 166 $sepReset( os ); // reset separator 163 167 return len; 164 168 } // fmt … … 180 184 // private 181 185 void ?{}( ifstream & is, void * file ) { 182 is. file = file;183 is. nlOnOff = false;186 is.$file = file; 187 is.$nlOnOff = false; 184 188 } // ?{} 185 189 186 190 // public 187 void ?{}( ifstream & is ) { is.file = 0; }188 189 void ?{}( ifstream & is, const char * name, const char * mode) {191 void ?{}( ifstream & is ) { is.$file = 0p; } 192 193 void ?{}( ifstream & is, const char name[], const char mode[] ) { 190 194 open( is, name, mode ); 191 195 } // ?{} 192 196 193 void ?{}( ifstream & is, const char * name) {197 void ?{}( ifstream & is, const char name[] ) { 194 198 open( is, name, "r" ); 195 199 } // ?{} 196 200 197 void nlOn( ifstream & os ) { os.nlOnOff = true; } 198 void nlOff( ifstream & os ) { os.nlOnOff = false; } 199 bool getANL( ifstream & os ) { return os.nlOnOff; } 201 void ^?{}( ifstream & is ) { 202 close( is ); 203 } // ^?{} 204 205 void nlOn( ifstream & os ) { os.$nlOnOff = true; } 206 void nlOff( ifstream & os ) { os.$nlOnOff = false; } 207 bool getANL( ifstream & os ) { return os.$nlOnOff; } 200 208 201 209 int fail( ifstream & is ) { 202 return is. file == 0 || ferror( (FILE *)(is.file) );210 return is.$file == 0p || ferror( (FILE *)(is.$file) ); 203 211 } // fail 204 212 205 213 int eof( ifstream & is ) { 206 return feof( (FILE *)(is. file) );214 return feof( (FILE *)(is.$file) ); 207 215 } // eof 208 216 209 void open( ifstream & is, const char * name, const char * mode) {217 void open( ifstream & is, const char name[], const char mode[] ) { 210 218 FILE * file = fopen( name, mode ); 211 219 #ifdef __CFA_DEBUG__ 212 if ( file == 0 ) {220 if ( file == 0p ) { 213 221 abort | IO_MSG "open input file \"" | name | "\"" | nl | strerror( errno ); 214 222 } // if 215 223 #endif // __CFA_DEBUG__ 216 is. file = file;217 } // open 218 219 void open( ifstream & is, const char * name) {224 is.$file = file; 225 } // open 226 227 void open( ifstream & is, const char name[] ) { 220 228 open( is, name, "r" ); 221 229 } // open 222 230 223 231 void close( ifstream & is ) { 224 if ( (FILE *)(is. file) == stdin ) return;225 226 if ( fclose( (FILE *)(is. file) ) == EOF ) {232 if ( (FILE *)(is.$file) == stdin ) return; 233 234 if ( fclose( (FILE *)(is.$file) ) == EOF ) { 227 235 abort | IO_MSG "close input" | nl | strerror( errno ); 228 236 } // if … … 234 242 } // if 235 243 236 if ( fread( data, size, 1, (FILE *)(is. file) ) == 0 ) {244 if ( fread( data, size, 1, (FILE *)(is.$file) ) == 0 ) { 237 245 abort | IO_MSG "read" | nl | strerror( errno ); 238 246 } // if … … 245 253 } // if 246 254 247 if ( ungetc( c, (FILE *)(is. file) ) == EOF ) {255 if ( ungetc( c, (FILE *)(is.$file) ) == EOF ) { 248 256 abort | IO_MSG "ungetc" | nl | strerror( errno ); 249 257 } // if … … 255 263 256 264 va_start( args, format ); 257 int len = vfscanf( (FILE *)(is. file), format, args );265 int len = vfscanf( (FILE *)(is.$file), format, args ); 258 266 if ( len == EOF ) { 259 if ( ferror( (FILE *)(is. file) ) ) {267 if ( ferror( (FILE *)(is.$file) ) ) { 260 268 abort | IO_MSG "invalid read"; 261 269 } // if
Note:
See TracChangeset
for help on using the changeset viewer.