Beispiel #1
0
static int ConvertMResources( WResFileID infile, WResFileID outfile,
                        WResDir outdir )
/******************************************************************/
{
    MResResourceHeader *    mheader;
    WResID *                name;
    WResID *                type;
    int                     error;
    int                     lastheader;     /*TRUE if lastheader has been read*/
    uint_32                 offset;
    int                     duplicate;

    mheader = MResReadResourceHeader( infile );
    /* assume that any error reading here means end of file */
    lastheader = (mheader == NULL);
    error = FALSE;

    while (!lastheader && !error) {
        name = ConvertNameOrOrdToID( mheader->Name );
        type = ConvertNameOrOrdToID( mheader->Type );
        offset = tell( outfile );

        /* copy the resource if it isn't a name table or if the user */
        /* requested that name tables be copied */
        if (type->IsName || type->ID.Num != RT_NAMETABLE ||
                        CmdLineParms.KeepNameTable ) {
            error = WResAddResource( type, name, mheader->MemoryFlags, offset,
                        mheader->Size, outdir, NULL, &(duplicate) );
            if (duplicate) {
                /* print message and continue */
                puts( "Error: duplicate entry" );
                error = FALSE;
            } else {
                error = BinaryCopy( infile, outfile, mheader->Size );
            }
        } else {
            lseek( infile, mheader->Size, SEEK_CUR );
        }

        WResIDFree( name );
        WResIDFree( type );
        MResFreeResourceHeader( mheader );

        mheader = MResReadResourceHeader( infile );
        /* assume that any error reading here means end of file */
        lastheader = (mheader == NULL);
    }

    return( error );
} /* ConvertMResources */
Beispiel #2
0
static bool ConvertMResources( FILE *in_fp, FILE *out_fp, WResDir outdir )
/************************************************************************/
{
    MResResourceHeader *    mheader;
    WResID *                name;
    WResID *                type;
    bool                    error;
    bool                    lastheader; /* true if lastheader has been read */
    uint_32                 offset;
    bool                    duplicate;

    mheader = MResReadResourceHeader( in_fp );
    /* assume that any error reading here means end of file */
    lastheader = ( mheader == NULL );
    error = false;

    while( !lastheader && !error ) {
        name = ConvertNameOrOrdToID( mheader->Name );
        type = ConvertNameOrOrdToID( mheader->Type );
        offset = RESTELL( out_fp );

        /* copy the resource if it isn't a name table or if the user */
        /* requested that name tables be copied */
        if( type->IsName || type->ID.Num != RESOURCE2INT( RT_NAMETABLE ) ||
                        CmdLineParms.KeepNameTable ) {
            error = WResAddResource( type, name, mheader->MemoryFlags, offset,
                        mheader->Size, outdir, NULL, &duplicate );
            if( duplicate ) {
                /* print message and continue */
                puts( "Error: duplicate entry" );
                error = false;
            } else {
                error = BinaryCopy( in_fp, out_fp, mheader->Size );
            }
        } else {
            RESSEEK( in_fp, mheader->Size, SEEK_CUR );
        }

        WResIDFree( name );
        WResIDFree( type );
        MResFreeResourceHeader( mheader );

        mheader = MResReadResourceHeader( in_fp );
        /* assume that any error reading here means end of file */
        lastheader = ( mheader == NULL );
    }

    return( error );
} /* ConvertMResources */