Пример #1
0
static int CompareOneResource( WResFileID fid1, WResDirWindow wind1,
                                WResFileID fid2, WResDirWindow wind2 )
/********************************************************************/
{
    int             retcode;
    int             oldretcode;
    WResResInfo     *res1;
    WResResInfo     *res2;
    WResLangInfo    *lang1;
    WResLangInfo    *lang2;
    char *          resname1;

    oldretcode = 0;

    res1 = WResGetResInfo( wind1 );
    res2 = WResGetResInfo( wind2 );
    lang1 = WResGetLangInfo( wind1 );
    lang2 = WResGetLangInfo( wind2 );

    if (lang1->MemoryFlags != lang2->MemoryFlags) {
        if (!CmdLineParms.Quiet) {
            resname1 = WResIDToStr( &(res1->ResName) );
            printf( "Error: memory flags for resource %s are not the same\n",
                            resname1 );
            RESFREE( resname1 );
        }
        oldretcode = 1;
    }
    if (lang1->Length != lang2->Length) {
        if (!CmdLineParms.Quiet) {
            resname1 = WResIDToStr( &(res1->ResName) );
            printf( "Error: resource %s does not have the same length\n",
                            resname1 );
            RESFREE( resname1 );
        }
        oldretcode = 1;
    } else {
        retcode = BinaryCompare( fid1, lang1->Offset, fid2,
                        lang2->Offset, lang1->Length );
        switch (retcode) {
        case 1:
            if (!CmdLineParms.Quiet) {
                resname1 = WResIDToStr( &(res1->ResName) );
                printf( "Error: contents of resource %s are different.\n",
                                resname1 );
                RESFREE( resname1 );
            }
            oldretcode = retcode;
            break;
        case -1:
            oldretcode = retcode;
            break;
        }
    }

    return( oldretcode );
}
Пример #2
0
static WResDirWindow LookUpResource( WResDirWindow wind1, WResDir dir2 )
/**********************************************************************/
{
    WResDirWindow   wind2;
    WResTypeInfo    *type1;
    WResResInfo     *res1;
    WResLangInfo    *lang1;
    char            *resname1;

    type1 = WResGetTypeInfo( wind1 );
    res1 = WResGetResInfo( wind1 );
    lang1 = WResGetLangInfo( wind1 );

    wind2 = WResFindResource( &(type1->TypeName), &(res1->ResName), dir2,
                              &(lang1->lang) );
    if (WResIsEmptyWindow( wind2 ) && !CmdLineParms.Quiet) {
        resname1 = WResIDToStr( &(res1->ResName) );
        printf( "Error: Resource %s (lang 0x%X SubLang 0x%X) not in file %s\n",
                        resname1, (int)lang1->lang.lang,
                        (int)lang1->lang.sublang,
                        CmdLineParms.FileName2 );
        RESFREE( resname1 );
    }

    return( wind2 );
}
Пример #3
0
/* Build OS/2 NE style resource table. Each resource gets one entry, and
 * resources > 64K will get an additional entry for each 64K chunk.
 */
static void buildOS2ResTable( OS2ResTable *res_tbl, WResDir dir )
/***************************************************************/
{
    WResDirWindow   wind;
    WResLangInfo    *lang;
    OS2ResEntry     *entry;
    WResTypeInfo    *res_type;
    WResResInfo     *resinfo;
    uint_16         type;
    uint_16         id;
    int_32          length;

    entry = res_tbl->resources;

    /* Walk through the WRes directory */
    for( wind = WResFirstResource( dir ); !WResIsEmptyWindow( wind ); wind = WResNextResource( wind, dir ) ) {
        lang = WResGetLangInfo( wind );
        res_type = WResGetTypeInfo( wind );
        resinfo  = WResGetResInfo( wind );

        // RT_DEFAULTICON is not written into the executable, ignore
        if( res_type->TypeName.ID.Num == OS2_RT_DEFAULTICON ) {
            wind = WResNextResource( wind, dir );
            continue;
        }

        if( res_type->TypeName.IsName )
            type = 0;
        else
            type = res_type->TypeName.ID.Num;

        if( resinfo->ResName.IsName )
            id = 0;
        else
            id = resinfo->ResName.ID.Num;

        /* Fill in resource entries */
        entry->res_type   = type;
        entry->res_id     = id;
        entry->wind       = wind;
        entry->mem_flags  = lang->MemoryFlags;
        entry->seg_length = 0;  /* Zero means 64K */
        entry->first_part = true;

        for( length = lang->Length; length > 0x10000; length -= 0x10000 ) {
            entry++;
            entry->res_type   = type;
            entry->res_id     = id;
            entry->wind       = wind;
            entry->mem_flags  = lang->MemoryFlags;
            entry->seg_length = 0;
            entry->first_part = false;
        }
        entry->seg_length = lang->Length % 0x10000;
        entry++;
    }
}
Пример #4
0
static bool copyAResource( WResFileID fid, WResDirWindow *wind,
                            char *buffer, const char *filename )
/****************************************************************/
{
    ResLocation         loc;
    WResLangInfo        *langinfo;
    WResTypeInfo        *typeinfo;
    WResResInfo         *resinfo;
//    RcStatus            rc;
    int                 err_code;

    langinfo = WResGetLangInfo( *wind );
    resinfo = WResGetResInfo( *wind );
    typeinfo = WResGetTypeInfo( *wind );
    loc.start = SemStartResource();
    /* rc = */ CopyData( langinfo->Offset, langinfo->Length, fid, buffer, BUFFER_SIZE, &err_code );
    loc.len = SemEndResource( loc.start );
    SemAddResource2( &resinfo->ResName, &typeinfo->TypeName, langinfo->MemoryFlags, loc, filename );
    return( false );
}
Пример #5
0
static bool DumpResource( WResDirWindow wind, WResFileID handle, uint_16 os )
/***************************************************************************/
{
    bool            error;
    char            resname[15];
    char            typename[20];
    WResTypeInfo    *type;
    WResResInfo     *res;
    WResLangInfo    *lang;

    type = WResGetTypeInfo( wind );
    res = WResGetResInfo( wind );
    lang = WResGetLangInfo( wind );

    if( CmdLineParms.Type != NULL ) {
        if( !WResIDCmp( CmdLineParms.Type, &(type->TypeName) ) ) {
            return( false );
        }
    }
    if( CmdLineParms.Name != NULL ) {
        if( !WResIDCmp( CmdLineParms.Name, &(res->ResName) ) ) {
            return( false );
        }
    }

    ConvertIDToStr( &(res->ResName), resname, 15 );
    ConvertTypeIDToStr( &(type->TypeName), typename, 20 );

    fprintf( stdout, "%-20.20s  %-15.15s  0x%04X 0x%02X  ", typename,
                resname, (int)lang->lang.lang, (int)lang->lang.sublang );
    PrintUint16Flags( lang->MemoryFlags, MemFlagsOnList, MemFlagsOffList, 53 );

    if( CmdLineParms.DumpContents ) {
        error = DumpContents( type, res, lang, handle, os );
        if( error ) {
            return( true );
        }
    }

    return( false );
}