Changes in / [37f9860:c4187df]


Ignore:
Location:
src
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • src/libcfa/fstream

    r37f9860 rc4187df  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Mar 21 15:57:24 2017
    13 // Update Count     : 102
     12// Last Modified On : Tue Mar  7 14:48:08 2017
     13// Update Count     : 91
    1414//
    1515
     
    2121enum { separateSize = 16 };
    2222struct ofstream {
    23         void * file;
     23        void *file;
    2424        _Bool sepDefault;
    2525        _Bool sepOnOff;
    26         const char * sepCur;
    2726        char separator[separateSize];
    28         char tupleSeparator[separateSize];
    2927}; // ofstream
    3028
     
    3432void sepReset( ofstream * );
    3533void sepReset( ofstream *, _Bool );
    36 const char * sepGetCur( ofstream * );
    37 void sepSetCur( ofstream *, const char * );
    3834const char * sepGet( ofstream * );
    3935void sepSet( ofstream *, const char * );
    40 const char * sepGetTuple( ofstream * );
    41 void sepSetTuple( ofstream *, const char * );
    4236_Bool sepDisable( ofstream * );
    4337_Bool sepEnable( ofstream * );
     
    4842void close( ofstream * );
    4943ofstream * write( ofstream *, const char * data, unsigned long int size );
    50 int fmt( ofstream *, const char fmt[], ... );
    51 
    52 void ?{}( ofstream * );
     44int prtfmt( ofstream *, const char fmt[], ... );
    5345
    5446extern ofstream * sout, * serr;
     
    5648// implement context istream
    5749struct ifstream {
    58         void * file;
     50        void *file;
    5951}; // ifstream
    6052
     
    6557ifstream * read( ifstream * is, char * data, unsigned long int size );
    6658ifstream * ungetc( ifstream * is, char c );
    67 int fmt( ifstream *, const char fmt[], ... );
     59int scanfmt( ifstream *, const char fmt[], ... );
    6860
    69 extern ifstream * sin;
     61extern ifstream *sin;
    7062
    7163#endif // __FSTREAM_H__
  • src/libcfa/fstream.c

    r37f9860 rc4187df  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar 22 16:17:21 2017
    13 // Update Count     : 221
     12// Last Modified On : Tue Mar  7 14:48:09 2017
     13// Update Count     : 192
    1414//
    1515
     
    2525#include <complex.h>                                                                    // creal, cimag
    2626}
    27 #include "assert"
    2827
    2928#define IO_MSG "I/O error: "
     
    3433void sepReset( ofstream * os ) { os->sepOnOff = os->sepDefault; }
    3534void sepReset( ofstream * os, _Bool reset ) { os->sepDefault = reset; os->sepOnOff = os->sepDefault; }
    36 
    37 const char * sepGetCur( ofstream * os ) { return os->sepCur; }
    38 void sepSetCur( ofstream * os, const char * sepCur ) { os->sepCur = sepCur; }
    39 
    40 const char * sepGet( ofstream * os ) { return os->separator; }
     35const char * sepGet( ofstream * os ) { return &(os->separator[0]); }
    4136
    4237void sepSet( ofstream * os, const char * s ) {
    43         assert( s );
    44         strncpy( os->separator, s, separateSize - 1 );
     38        strncpy( &(os->separator[0]), s, separateSize - 1 );
    4539        os->separator[separateSize - 1] = '\0';
    46 } // sepSet
    47 
    48 const char * sepGetTuple( ofstream * os ) { return os->tupleSeparator; }
    49 
    50 void sepSetTuple( ofstream * os, const char * s ) {
    51         assert( s );
    52         strncpy( os->tupleSeparator, s, separateSize - 1 );
    53         os->tupleSeparator[separateSize - 1] = '\0';
    5440} // sepSet
    5541
     
    10995} // write
    11096
    111 int fmt( ofstream * os, const char format[], ... ) {
     97int prtfmt( ofstream * os, const char fmt[], ... ) {
    11298        va_list args;
    113         va_start( args, format );
    114         int len = vfprintf( (FILE *)(os->file), format, args );
     99        va_start( args, fmt );
     100        int len = vfprintf( (FILE *)(os->file), fmt, args );
    115101        if ( len == EOF ) {
    116102                if ( ferror( (FILE *)(os->file) ) ) {
     
    123109        sepReset( os );                                                                         // reset separator
    124110        return len;
    125 } // fmt
     111} // prtfmt
    126112
    127 void ?{}( ofstream * this, void * file, _Bool sepDefault, _Bool sepOnOff, const char * separator, const char * tupleSeparator ) {
    128         this->file = file;
    129         this->sepDefault = sepDefault;
    130         this->sepOnOff = sepOnOff;
    131         sepSet( this, separator );
    132         sepSetCur( this, sepGet( this ) );
    133         sepSetTuple( this, tupleSeparator );
    134 }
    135113
    136 static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_), 1, 0, " ", ", " };
     114static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_), 1, 0, { ' ', '\0' } };
    137115ofstream *sout = &soutFile;
    138 static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_), 1, 0, " ", ", " };
     116static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_), 1, 0, { ' ', '\0' } };
    139117ofstream *serr = &serrFile;
    140118
     
    195173} // ungetc
    196174
    197 int fmt( ifstream * is, const char format[], ... ) {
     175int scanfmt( ifstream * is, const char fmt[], ... ) {
    198176        va_list args;
    199177
    200         va_start( args, format );
    201         int len = vfscanf( (FILE *)(is->file), format, args );
     178        va_start( args, fmt );
     179        int len = vfscanf( (FILE *)(is->file), fmt, args );
    202180        if ( len == EOF ) {
    203181                if ( ferror( (FILE *)(is->file) ) ) {
     
    208186        va_end( args );
    209187        return len;
    210 } // fmt
     188} // prtfmt
    211189
    212190
  • src/libcfa/iostream

    r37f9860 rc4187df  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Mar 21 15:57:29 2017
    13 // Update Count     : 104
     12// Last Modified On : Mon Mar  6 20:51:35 2017
     13// Update Count     : 98
    1414//
    1515
     
    2525        void sepReset( ostype * );                                                      // set separator state to default state
    2626        void sepReset( ostype *, _Bool );                                       // set separator and default state
    27         const char * sepGetCur( ostype * );                                     // get current separator string
    28         void sepSetCur( ostype *, const char * );                       // set current separator string
     27        void sepSet( ostype *, const char * );                          // set separator to string (15 character maximum)
    2928        const char * sepGet( ostype * );                                        // get separator string
    30         void sepSet( ostype *, const char * );                          // set separator to string (15 character maximum)
    31         const char * sepGetTuple( ostype * );                           // get tuple separator string
    32         void sepSetTuple( ostype *, const char * );                     // set tuple separator to string (15 character maximum)
    3329        _Bool sepDisable( ostype * );                                           // set default state to off, and return previous state
    3430        _Bool sepEnable( ostype * );                                            // set default state to on, and return previous state
     
    3935        void close( ostype * os );
    4036        ostype * write( ostype *, const char *, unsigned long int );
    41         int fmt( ostype *, const char fmt[], ... );
     37        int prtfmt( ostype *, const char fmt[], ... );
    4238};
    4339
     
    9995        istype * read( istype *, char *, unsigned long int );
    10096        istype * ungetc( istype *, char );
    101         int fmt( istype *, const char fmt[], ... );
     97        int scanfmt( istype *, const char fmt[], ... );
    10298};
    10399
  • src/libcfa/iostream.c

    r37f9860 rc4187df  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Mar 22 17:21:23 2017
    13 // Update Count     : 358
     12// Last Modified On : Mon Mar  6 20:52:02 2017
     13// Update Count     : 313
    1414//
    1515
     
    2424
    2525forall( dtype ostype | ostream( ostype ) )
    26 ostype * ?|?( ostype * os, char c ) {
    27         fmt( os, "%c", c );
    28         sepOff( os );
    29         return os;
    30 } // ?|?
    31 
    32 forall( dtype ostype | ostream( ostype ) )
    33 ostype * ?|?( ostype * os, signed char c ) {
    34         fmt( os, "%hhd", c );
    35         sepOff( os );
    36         return os;
    37 } // ?|?
    38 
    39 forall( dtype ostype | ostream( ostype ) )
    40 ostype * ?|?( ostype * os, unsigned char c ) {
    41         fmt( os, "%hhu", c );
    42         sepOff( os );
    43         return os;
    44 } // ?|?
    45 
    46 forall( dtype ostype | ostream( ostype ) )
    47 ostype * ?|?( ostype * os, short int si ) {
    48         if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
    49         fmt( os, "%hd", si );
    50         return os;
    51 } // ?|?
    52 
    53 forall( dtype ostype | ostream( ostype ) )
    54 ostype * ?|?( ostype * os, unsigned short int usi ) {
    55         if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
    56         fmt( os, "%hu", usi );
    57         return os;
    58 } // ?|?
    59 
    60 forall( dtype ostype | ostream( ostype ) )
    61 ostype * ?|?( ostype * os, int i ) {
    62         if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
    63         fmt( os, "%d", i );
    64         return os;
    65 } // ?|?
    66 
    67 forall( dtype ostype | ostream( ostype ) )
    68 ostype * ?|?( ostype * os, unsigned int ui ) {
    69         if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
    70         fmt( os, "%u", ui );
    71         return os;
    72 } // ?|?
    73 
    74 forall( dtype ostype | ostream( ostype ) )
    75 ostype * ?|?( ostype * os, long int li ) {
    76         if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
    77         fmt( os, "%ld", li );
    78         return os;
    79 } // ?|?
    80 
    81 forall( dtype ostype | ostream( ostype ) )
    82 ostype * ?|?( ostype * os, unsigned long int uli ) {
    83         if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
    84         fmt( os, "%lu", uli );
    85         return os;
    86 } // ?|?
    87 
    88 forall( dtype ostype | ostream( ostype ) )
    89 ostype * ?|?( ostype * os, long long int lli ) {
    90         if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
    91         fmt( os, "%lld", lli );
    92         return os;
    93 } // ?|?
    94 
    95 forall( dtype ostype | ostream( ostype ) )
    96 ostype * ?|?( ostype * os, unsigned long long int ulli ) {
    97         if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
    98         fmt( os, "%llu", ulli );
    99         return os;
    100 } // ?|?
    101 
    102 forall( dtype ostype | ostream( ostype ) )
    103 ostype * ?|?( ostype * os, float f ) {
    104         if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
    105         fmt( os, "%g", f );
    106         return os;
    107 } // ?|?
    108 
    109 forall( dtype ostype | ostream( ostype ) )
    110 ostype * ?|?( ostype * os, double d ) {
    111         if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
    112         fmt( os, "%.*lg", DBL_DIG, d );
    113         return os;
    114 } // ?|?
    115 
    116 forall( dtype ostype | ostream( ostype ) )
    117 ostype * ?|?( ostype * os, long double ld ) {
    118         if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
    119         fmt( os, "%.*Lg", LDBL_DIG, ld );
    120         return os;
    121 } // ?|?
    122 
    123 forall( dtype ostype | ostream( ostype ) )
    124 ostype * ?|?( ostype * os, float _Complex fc ) {
     26ostype * ?|?( ostype *os, char c ) {
     27        prtfmt( os, "%c", c );
     28        sepOff( os );
     29        return os;
     30} // ?|?
     31
     32forall( dtype ostype | ostream( ostype ) )
     33ostype * ?|?( ostype *os, signed char c ) {
     34        prtfmt( os, "%hhd", c );
     35        sepOff( os );
     36        return os;
     37} // ?|?
     38
     39forall( dtype ostype | ostream( ostype ) )
     40ostype * ?|?( ostype *os, unsigned char c ) {
     41        prtfmt( os, "%hhu", c );
     42        sepOff( os );
     43        return os;
     44} // ?|?
     45
     46forall( dtype ostype | ostream( ostype ) )
     47ostype * ?|?( ostype *os, short int si ) {
     48        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
     49        prtfmt( os, "%hd", si );
     50        return os;
     51} // ?|?
     52
     53forall( dtype ostype | ostream( ostype ) )
     54ostype * ?|?( ostype *os, unsigned short int usi ) {
     55        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
     56        prtfmt( os, "%hu", usi );
     57        return os;
     58} // ?|?
     59
     60forall( dtype ostype | ostream( ostype ) )
     61ostype * ?|?( ostype *os, int i ) {
     62        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
     63        prtfmt( os, "%d", i );
     64        return os;
     65} // ?|?
     66
     67forall( dtype ostype | ostream( ostype ) )
     68ostype * ?|?( ostype *os, unsigned int ui ) {
     69        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
     70        prtfmt( os, "%u", ui );
     71        return os;
     72} // ?|?
     73
     74forall( dtype ostype | ostream( ostype ) )
     75ostype * ?|?( ostype *os, long int li ) {
     76        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
     77        prtfmt( os, "%ld", li );
     78        return os;
     79} // ?|?
     80
     81forall( dtype ostype | ostream( ostype ) )
     82ostype * ?|?( ostype *os, unsigned long int uli ) {
     83        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
     84        prtfmt( os, "%lu", uli );
     85        return os;
     86} // ?|?
     87
     88forall( dtype ostype | ostream( ostype ) )
     89ostype * ?|?( ostype *os, long long int lli ) {
     90        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
     91        prtfmt( os, "%lld", lli );
     92        return os;
     93} // ?|?
     94
     95forall( dtype ostype | ostream( ostype ) )
     96ostype * ?|?( ostype *os, unsigned long long int ulli ) {
     97        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
     98        prtfmt( os, "%llu", ulli );
     99        return os;
     100} // ?|?
     101
     102forall( dtype ostype | ostream( ostype ) )
     103ostype * ?|?( ostype *os, float f ) {
     104        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
     105        prtfmt( os, "%g", f );
     106        return os;
     107} // ?|?
     108
     109forall( dtype ostype | ostream( ostype ) )
     110ostype * ?|?( ostype *os, double d ) {
     111        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
     112        prtfmt( os, "%.*lg", DBL_DIG, d );
     113        return os;
     114} // ?|?
     115
     116forall( dtype ostype | ostream( ostype ) )
     117ostype * ?|?( ostype *os, long double ld ) {
     118        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
     119        prtfmt( os, "%.*Lg", LDBL_DIG, ld );
     120        return os;
     121} // ?|?
     122
     123forall( dtype ostype | ostream( ostype ) )
     124ostype * ?|?( ostype *os, float _Complex fc ) {
    125125        os | crealf( fc );
    126126        _Bool temp = sepDisable( os );                                          // disable separators within complex value
     
    132132
    133133forall( dtype ostype | ostream( ostype ) )
    134 ostype * ?|?( ostype * os, double _Complex dc ) {
     134ostype * ?|?( ostype *os, double _Complex dc ) {
    135135        os | creal( dc );
    136136        _Bool temp = sepDisable( os );                                          // disable separators within complex value
     
    142142
    143143forall( dtype ostype | ostream( ostype ) )
    144 ostype * ?|?( ostype * os, long double _Complex ldc ) {
     144ostype * ?|?( ostype *os, long double _Complex ldc ) {
    145145        os | creall( ldc );
    146146        _Bool temp = sepDisable( os );                                          // disable separators within complex value
     
    152152
    153153forall( dtype ostype | ostream( ostype ) )
    154 ostype * ?|?( ostype * os, const char * cp ) {
     154ostype * ?|?( ostype *os, const char *cp ) {
    155155        enum { Open = 1, Close, OpenClose };
    156156        static const unsigned char mask[256] = {
    157157                // opening delimiters, no space after
    158158                ['('] : Open, ['['] : Open, ['{'] : Open,
    159                 ['='] : Open, ['$'] : Open, [(unsigned char)'£'] : Open, [(unsigned char)'¥'] : Open,
     159                ['$'] : Open, ['='] : Open, [(unsigned char)'£'] : Open, [(unsigned char)'¥'] : Open,
    160160                [(unsigned char)'¡'] : Open, [(unsigned char)'¿'] : Open, [(unsigned char)'«'] : Open,
    161161                // closing delimiters, no space before
    162162                [','] : Close, ['.'] : Close, [':'] : Close, [';'] : Close, ['!'] : Close, ['?'] : Close,
     163                [')'] : Close, [']'] : Close, ['}'] : Close,
    163164                ['%'] : Close, [(unsigned char)'¢'] : Close, [(unsigned char)'»'] : Close,
    164                 [')'] : Close, [']'] : Close, ['}'] : Close,
    165165                // opening-closing delimiters, no space before or after
    166166                ['\''] : OpenClose, ['`'] : OpenClose, ['"'] : OpenClose,
     
    173173        unsigned char ch = cp[0];                                                       // must make unsigned
    174174        if ( sepPrt( os ) && mask[ ch ] != Close && mask[ ch ] != OpenClose ) {
    175                 fmt( os, "%s", sepGetCur( os ) );
     175                prtfmt( os, "%s", sepGet( os ) );
    176176        } // if
    177177
     
    191191
    192192forall( dtype ostype | ostream( ostype ) )
    193 ostype * ?|?( ostype * os, const void * p ) {
    194         if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
    195         fmt( os, "%p", p );
     193ostype * ?|?( ostype *os, const void *p ) {
     194        if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) );
     195        prtfmt( os, "%p", p );
    196196        return os;
    197197} // ?|?
     
    201201forall( dtype ostype, otype T, ttype Params | ostream( ostype ) | writeable( T ) | { ostype * ?|?( ostype *, Params ); } )
    202202ostype * ?|?( ostype * os, T arg, Params rest ) {
    203         forall( ttype Params ) ostype * prtTuple( ostype * os, T arg, Params rest ) {
    204                 os | arg;                                                                               // print first argument
    205                 os | rest;                                                                              // print remaining arguments
    206                 return os;
    207         } // prtTuple
    208         sepSetCur( os, sepGetTuple( os ) );                                     // switch to tuple separator
    209         prtTuple( os, arg, rest );                                                      // recursively print tuple
    210         sepSetCur( os, sepGet( os ) );                                          // switch to regular separator
     203        os | arg | ", ";
     204        os | rest;
    211205        return os;
    212206} // ?|?
     
    254248
    255249forall( otype elttype | writeable( elttype ), otype iteratortype | iterator( iteratortype, elttype ), dtype ostype | ostream( ostype ) )
    256 void write( iteratortype begin, iteratortype end, ostype * os ) {
     250void write( iteratortype begin, iteratortype end, ostype *os ) {
    257251        void print( elttype i ) { os | i; }
    258252        for_each( begin, end, print );
     
    260254
    261255forall( otype elttype | writeable( elttype ), otype iteratortype | iterator( iteratortype, elttype ), dtype ostype | ostream( ostype ) )
    262 void write_reverse( iteratortype begin, iteratortype end, ostype * os ) {
     256void write_reverse( iteratortype begin, iteratortype end, ostype *os ) {
    263257        void print( elttype i ) { os | i; }
    264258        for_each_reverse( begin, end, print );
     
    269263forall( dtype istype | istream( istype ) )
    270264istype * ?|?( istype * is, char * c ) {
    271         fmt( is, "%c", c );
     265        scanfmt( is, "%c", c );
    272266        return is;
    273267} // ?|?
     
    275269forall( dtype istype | istream( istype ) )
    276270istype * ?|?( istype * is, short int * si ) {
    277         fmt( is, "%hd", si );
     271        scanfmt( is, "%hd", si );
    278272        return is;
    279273} // ?|?
     
    281275forall( dtype istype | istream( istype ) )
    282276istype * ?|?( istype * is, unsigned short int * usi ) {
    283         fmt( is, "%hu", usi );
     277        scanfmt( is, "%hu", usi );
    284278        return is;
    285279} // ?|?
     
    287281forall( dtype istype | istream( istype ) )
    288282istype * ?|?( istype * is, int * i ) {
    289         fmt( is, "%d", i );
     283        scanfmt( is, "%d", i );
    290284        return is;
    291285} // ?|?
     
    293287forall( dtype istype | istream( istype ) )
    294288istype * ?|?( istype * is, unsigned int * ui ) {
    295         fmt( is, "%u", ui );
     289        scanfmt( is, "%u", ui );
    296290        return is;
    297291} // ?|?
     
    299293forall( dtype istype | istream( istype ) )
    300294istype * ?|?( istype * is, long int * li ) {
    301         fmt( is, "%ld", li );
     295        scanfmt( is, "%ld", li );
    302296        return is;
    303297} // ?|?
     
    305299forall( dtype istype | istream( istype ) )
    306300istype * ?|?( istype * is, unsigned long int * ulli ) {
    307         fmt( is, "%lu", ulli );
     301        scanfmt( is, "%lu", ulli );
    308302        return is;
    309303} // ?|?
     
    311305forall( dtype istype | istream( istype ) )
    312306istype * ?|?( istype * is, long long int * lli ) {
    313         fmt( is, "%lld", lli );
     307        scanfmt( is, "%lld", lli );
    314308        return is;
    315309} // ?|?
     
    317311forall( dtype istype | istream( istype ) )
    318312istype * ?|?( istype * is, unsigned long long int * ulli ) {
    319         fmt( is, "%llu", ulli );
     313        scanfmt( is, "%llu", ulli );
    320314        return is;
    321315} // ?|?
     
    324318forall( dtype istype | istream( istype ) )
    325319istype * ?|?( istype * is, float * f ) {
    326         fmt( is, "%f", f );
     320        scanfmt( is, "%f", f );
    327321        return is;
    328322} // ?|?
     
    330324forall( dtype istype | istream( istype ) )
    331325istype * ?|?( istype * is, double * d ) {
    332         fmt( is, "%lf", d );
     326        scanfmt( is, "%lf", d );
    333327        return is;
    334328} // ?|?
     
    336330forall( dtype istype | istream( istype ) )
    337331istype * ?|?( istype * is, long double * ld ) {
    338         fmt( is, "%Lf", ld );
     332        scanfmt( is, "%Lf", ld );
    339333        return is;
    340334} // ?|?
     
    344338istype * ?|?( istype * is, float _Complex * fc ) {
    345339        float re, im;
    346         fmt( is, "%g%gi", &re, &im );
     340        scanfmt( is, "%g%gi", &re, &im );
    347341        *fc = re + im * _Complex_I;
    348342        return is;
     
    352346istype * ?|?( istype * is, double _Complex * dc ) {
    353347        double re, im;
    354         fmt( is, "%lf%lfi", &re, &im );
     348        scanfmt( is, "%lf%lfi", &re, &im );
    355349        *dc = re + im * _Complex_I;
    356350        return is;
     
    360354istype * ?|?( istype * is, long double _Complex * ldc ) {
    361355        long double re, im;
    362         fmt( is, "%Lf%Lfi", &re, &im );
     356        scanfmt( is, "%Lf%Lfi", &re, &im );
    363357        *ldc = re + im * _Complex_I;
    364358        return is;
     
    368362forall( dtype istype | istream( istype ) )
    369363istype * ?|?( istype * is, _Istream_cstrUC cstr ) {
    370         fmt( is, "%s", cstr.s );
     364        scanfmt( is, "%s", cstr.s );
    371365        return is;
    372366} // cstr
     
    377371        char buf[16];
    378372        sprintf( buf, "%%%ds", cstr.size );
    379         fmt( is, buf, cstr.s );
     373        scanfmt( is, buf, cstr.s );
    380374        return is;
    381375} // cstr
  • src/tests/.expect/io.txt

    r37f9860 rc4187df  
    1818abc, $xyz
    1919
    20 v(27 v[27 v{27 $27 =27 £27 ¥27 ¡27 ¿27 «27
    21 25, 25. 25: 25; 25! 25? 25% 25¢ 25» 25) 25] 25}
     20v(27 v[27 v{27 $27 £27 ¥27 ¡27 ¿27 «27
     2125, 25. 25: 25; 25! 25? 25) 25] 25} 25% 25¢ 25»
    222225'27 25`27 25"27 25 27 25
    232327 25
     
    252527 25   27 25
    262627
    27 3, 4, a, 7.2
    28 3, 4, a, 7.2
    29 3 4 a 7.2
    30  3 4 a 7.234a7.2 3 4 a 7.2
    31 3-4-a-7.2^3^4-3-4-a-7.2
  • src/tests/io.c

    r37f9860 rc4187df  
    1010// Created On       : Wed Mar  2 16:56:02 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Mar 21 22:36:06 2017
    13 // Update Count     : 48
     12// Last Modified On : Tue Jul  5 18:29:23 2016
     13// Update Count     : 31
    1414//
    1515
     
    6262
    6363        sepSet( sout, ", $" );                                                                          // change separator, maximum of 15 characters
    64         sout | f | d | ld | endl
    65                  | fc | dc | ldc | endl
     64        sout | f | d | ld | endl                                                                        // floating point without separator
     65                 | fc | dc | ldc | endl                                                                 // complex without separator
    6666                 | s1 | s2 | endl;
    6767        sout | endl;
     
    7474                | "v{" | 27
    7575                | "$" | 27
    76                 | "=" | 27
    7776                | "£" | 27
    7877                | "¥" | 27
     
    8887                | 25 | "!"
    8988                | 25 | "?"
     89                | 25 | ")"
     90                | 25 | "]"
     91                | 25 | "}"
    9092                | 25 | "%"
    9193                | 25 | "¢"
    9294                | 25 | "»"
    93                 | 25 | ")"
    94                 | 25 | "]"
    95                 | 25 | "}"
    9695                | endl
    9796                // opening-closing delimiters
     
    106105                | 25 | "\v" | 27
    107106                | endl;
    108 
    109         [int, int, const char *, double] t = { 3, 4, "a", 7.2 };
    110         sout | [ 3, 4, "a", 7.2 ] | endl;
    111         sout | t | endl;
    112         sepSetTuple( sout, " " );
    113         sout | t | endl;
    114         sout | sepOn | t | sepDisable | t | sepEnable | t | endl;
    115         sepSet( sout, "^" );
    116         sepSetTuple( sout, "-" );
    117         sout | t | 3 | 4 | t | endl;
    118107}
    119108
Note: See TracChangeset for help on using the changeset viewer.