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 */
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 */