Exemplo n.º 1
0
static char MakeNewOutFile(     // MAKE NEW TEST/ERROR FILE
    ofstream& of,               // - output stream
    MsgDscr& file_des,          // - files descriptor
    int msg_ctr )               // - message no.
{
    char filename[ _MAX_PATH ];

    MakeTestFileName( filename
                    , file_des
                    , msg_ctr
                    , file_des.AddFile( msg_ctr ) );
    if( WOpenForWrite( of, filename ) ) {
        //error
        cout << "Error - could not create \"" << filename << "\"." << endl;
        DieInFlames( );
        return( 1 );
    } else {
        return( 0 );
    }
}
Exemplo n.º 2
0
void ProcessModelFile(          // PROCESS MODEL FILE
    MsgDscr& file_ok,           // - description of good files
    MsgDscr& file_er,           // - description of bad files
    GMLfilestat g )             // - statistics
{
    char filename[ _MAX_PATH ];         // - test file name
    char            buffer[ 256 ];
    char *          buf = buffer;
    int             counter = 0;
    bool            dotflag = FALSE;
    strstream       out_text;

    char *          sub;
    int             idx, jdx, kdx;

    int             tot;
    GoodBad         gb;                 // - indicates type of test file name

    cout << "Processing model file..." << endl;

    if( WOpenForRead( ModelFile, model_file ) ) {
        cout << "Error - could not open \"" << model_file << "\"." << endl;
        DieInFlames( );
    };
    if( WOpenForWrite( DestFile, dest_file ) ) {
        cout << "Error - could not open \"" << dest_file << "\"." << endl;
        DieInFlames( );
    };

    memset( buffer, 0, 256 );

    for( ;; ) {

//      for( idx = 0; idx < 20; idx ++ ) {
//          sublocs[ idx ] = 0;
//      };

        ModelFile.getline( buffer, 252 );
        buf = buffer;
        counter++;
        if( counter == 1000 ) {
            counter = 0;
            dotflag = TRUE;
            cout << '.' << flush;
        };

        if( ( ModelFile.eof( ) ) || ( ModelFile.fail( ) ) ) {
            break;
        };
        if( strchr( buffer, '\n' ) == NULL ) {
            strcat( buffer, "\n" );
        };

        if( ( sub = strchr( buffer, subchar ) ) != NULL ) {
            if( sub[ 1 ] == subgoodchar ) {
                if( g.last_good == 0 ) {
                    cout << "Warning: Model file, line " << counter << ":" << endl;
                    cout << "There are no GOOD.CPP files to process" << endl;
                    continue;
                };
                gb = GOOD;
            } else if( sub[ 1 ] == subbadchar ) {
                if( g.last_bad == 0 ) {
                    cout << "Warning: Model file, line " << counter << ":" << endl;
                    cout << "There are no BAD.CPP files to process" << endl;
                    continue;
                };
                gb = BAD;
            } else {
                DestFile << buffer;
                continue;
            };
            kdx = strlen( buffer );
            for( idx = 0; idx <= kdx; idx++ ) {
                if( buffer[ idx ] == subchar ) {
                    if( ( ( buffer[ idx + 1 ] == subgoodchar )
                            &&( gb == GOOD ) )
                            ||( ( buffer[ idx + 1 ] == subbadchar )
                                &&( gb == BAD ) )
                      ) {
                        buffer[ idx ] = 0;
                    } else if( ( buffer[ idx + 1 ] == subgoodchar )
                               ||( buffer[ idx + 1 ] == subbadchar  ) ) {
                        TooManyTypeError( );
                    };
                };
            }; // Substitution strings done.
            buffer[ idx ] = 'E';
            buffer[ idx + 1 ] = '\0';
            {
                MsgDscr& descr = (gb == GOOD ) ? file_ok : file_er;
                tot = descr.GetMaxMsgNo();
                for( jdx = 1; jdx < tot; jdx++ ) {
                    for( int fdx = 0; ; ) {
                        fdx = descr.GetNextFile( jdx, fdx );
                        if( fdx == 0 ) break;
                        MakeTestFileName( filename, descr, jdx, fdx );
                        kdx = 0;
                        sub = buffer;
                        for( ;; ) {
                            out_text << sub;
                            kdx = strlen( sub );
                            if( sub[ kdx + 1 ] == 'E' ) {
                                break;
                            } else {
                                out_text << filename;
                            };
                            sub = &sub[ kdx + 2 ];
                        }
                    }
                    out_text << ends;
                    Write( DestFile, out_text );
                    Purge( out_text );
                }
            }
        } else {
            DestFile << buffer;
        };
    };
    if( dotflag ) {
        cout << endl;
    };
};