Esempio n. 1
0
static bool WRSetWinInfo( HWND hdlg, WRSelectImageInfo *info )
{
    WResTypeNode        *tnode;
    bool                lbox_set;

    if( info == NULL || hdlg == (HWND)NULL ) {
        return( false );
    }

    lbox_set = false;

    tnode = WRFindTypeNode( info->info->dir, (uint_16)(pointer_int)RT_BITMAP, NULL );
    if( tnode != NULL ) {
        CheckDlgButton( hdlg, IDM_SELIMGBMP, BST_CHECKED );
        info->type = (uint_16)(pointer_int)RT_BITMAP;
        WRSetEntries( hdlg, info );
        lbox_set = true;
    } else {
        EnableWindow( GetDlgItem( hdlg, IDM_SELIMGBMP ), FALSE );
    }

    tnode = WRFindTypeNode( info->info->dir, (uint_16)(pointer_int)RT_GROUP_CURSOR, NULL );
    if( tnode != NULL ) {
        if( !lbox_set ) {
            CheckDlgButton( hdlg, IDM_SELIMGCUR, BST_CHECKED );
            info->type = (uint_16)(pointer_int)RT_GROUP_CURSOR;
            WRSetEntries( hdlg, info );
            lbox_set = true;
        }
    } else {
        EnableWindow( GetDlgItem( hdlg, IDM_SELIMGCUR ), FALSE );
    }

    tnode = WRFindTypeNode( info->info->dir, (uint_16)(pointer_int)RT_GROUP_ICON, NULL );
    if( tnode != NULL ) {
        if( !lbox_set ) {
            CheckDlgButton( hdlg, IDM_SELIMGICO, BST_CHECKED );
            info->type = (uint_16)(pointer_int)RT_GROUP_ICON;
            WRSetEntries( hdlg, info );
            lbox_set = true;
        }
    } else {
        EnableWindow( GetDlgItem( hdlg, IDM_SELIMGICO ), FALSE );
    }

    if( !lbox_set ) {
        WRDisplayErrorMsg( WR_PRJNOIMAGES );
    }

    return( lbox_set );
}
Esempio n. 2
0
static char *WREFindDLGInclude( WRInfo *info )
{
    WResTypeNode        *tnode;
    WResResNode         *rnode;
    WResLangNode        *lnode;
    WResLangType        lang;
    char                *include;
    bool                ok;

    include = NULL;
    ok = (info != NULL);

    if( ok ) {
        tnode = WRFindTypeNode( info->dir, (uint_16)(pointer_int)RT_RCDATA, NULL );
        ok = (tnode != NULL);
    }

    if( ok ) {
        rnode = WRFindResNode( tnode, 0, "DLGINCLUDE" );
        ok = (rnode != NULL);
    }

    if( ok ) {
        lang.lang = DEF_LANG;
        lang.sublang = DEF_SUBLANG;
        lnode = WRFindLangNodeFromLangType( rnode, &lang );
        ok = (lnode != NULL);
    }

    if( ok ) {
        include = (char *)WRCopyResData( info, lnode );
    }

    return( include );
}
Esempio n. 3
0
void WRSetEntries( HWND hdlg, WRSelectImageInfo *info )
{
    HWND                lbox;
    WResTypeNode        *tnode;
    char                *empty_str;

    if( info == NULL || info->info == NULL || hdlg == (HWND)NULL ) {
        return;
    }

    lbox = GetDlgItem( hdlg, IDM_SELIMGLBOX );
    if( lbox == (HWND)NULL ) {
        return;
    }
    SendMessage( lbox, LB_RESETCONTENT, 0, 0 );

    tnode = WRFindTypeNode( info->info->dir, info->type, NULL );
    if( tnode == NULL ) {
        empty_str = WRAllocRCString( WR_EMPTY );
        if( empty_str != NULL ) {
            WRSetLBoxWithStr( lbox, empty_str, NULL );
            WRFreeRCString( empty_str );
        }
        return;
    }

    WRSetResNamesFromTypeNode( lbox, tnode );
    SendMessage( lbox, LB_SETCURSEL, 0, 0 );
}
Esempio n. 4
0
int WRSaveIconResource( WRInfo *info, int backup )
{
    WResTypeNode        *tnode;
    WResResNode         *rnode;
    WResLangNode        *lnode;
    WResLangType        lang;
    BYTE                *data;
    uint_32             size;
    int                 use_rename;
    int                 ok;

    data = NULL;
    lang.lang = DEF_LANG;
    lang.sublang = DEF_SUBLANG;

    ok = ( info && info->dir );

    if( ok ) {
        if( backup && WRFileExists ( info->save_name ) ) {
            use_rename = ( info->file_name &&
                           stricmp( info->file_name, info->save_name ) );
            ok = WRBackupFile( info->save_name, use_rename );
        }
    }

    if( ok ) {
        tnode = WRFindTypeNode( info->dir, (uint_16)RT_GROUP_ICON, NULL );
        ok = ( tnode != NULL );
        if( !ok ) {
            WRDisplayErrorMsg( WR_PRJNOICON );
        }
    }

    if( ok ) {
        rnode = tnode->Head;
        ok = ( rnode != NULL );
    }

    if( ok ) {
        lnode = WRFindLangNodeFromLangType( rnode, &lang );
        ok = ( lnode != NULL );
    }

    if( ok ) {
        ok = WRCreateIconData( info, lnode, &data, &size );
    }

    if( ok ) {
        ok = WRSaveDataToFile( info->save_name, data, size );
    }

    if( data ) {
        WRMemFree( data );
    }

    return( ok );
}
Esempio n. 5
0
WResTypeNode * WRAPI WRFindTypeNodeFromWResID( WResDir dir, WResID *type )
{
    WResTypeNode *type_node;
    char         *type_name;

    type_node = NULL;

    if( dir != NULL && type != NULL ) {
        if( type->IsName ) {
            type_name = WResIDToStr( type );
            if( type_name != NULL ) {
                type_node = WRFindTypeNode( dir, 0, type_name );
                MemFree( type_name );
            }
        } else {
            type_node = WRFindTypeNode( dir, type->ID.Num, NULL );
        }
    }

    return( type_node );
}
Esempio n. 6
0
bool WRAPI WRFindImageId( WRInfo *info, WResTypeNode **otnode,
                             WResResNode **ornode, WResLangNode **lnode,
                             uint_16 type, uint_16 id, WResLangType *ltype )
{
    WResTypeNode        *tnode;
    WResResNode         *rnode;
    WResLangType        lang;
    bool                ok;

    ok = (info != NULL && lnode != NULL &&
          (type == RESOURCE2INT( RT_ICON ) || type == RESOURCE2INT( RT_CURSOR )));

    if( ok ) {
        tnode = WRFindTypeNode( info->dir, type, NULL );
        ok = (tnode != NULL);
    }

    if( ok ) {
        if( otnode != NULL ) {
            *otnode = tnode;
        }
        rnode = WRFindResNode( tnode, id, NULL );
        ok = (rnode != NULL);
    }

    if( ok ) {
        if( ornode != NULL ) {
            *ornode = rnode;
        }
        if( ltype != NULL ) {
            lang = *ltype;
        } else {
            lang.lang = DEF_LANG;
            lang.sublang = DEF_SUBLANG;
        }
        *lnode = WRFindLangNodeFromLangType( rnode, &lang );
        ok = (*lnode != NULL);
    }

    if( !ok ) {
        *lnode = NULL;
    }

    return( ok );
}
Esempio n. 7
0
bool WREDeleteStringResources( WRECurrentResInfo *curr, bool removing )
{
    WResTypeNode        *tnode;
    char                *text;
    bool                ok;

    ok = true;

    if( !removing ) {
        text = AllocRCString( WRE_ALLSTRINGS );
        ok = WREQueryDeleteName( text );
        if( text != NULL ) {
            FreeRCString( text );
        }
    }

    if( ok ) {
        tnode = curr->type;
        if( tnode == NULL ) {
            tnode = WRFindTypeNode( curr->info->info->dir, RESOURCE2INT( RT_STRING ), NULL );
        }
        if( tnode != NULL ) {
            curr->info->modified = true;
            ok = WRRemoveTypeNodeFromDir( curr->info->info->dir, tnode );
        }
    }

    // nuke any edit sessions on these string resources
    if( ok ) {
        curr->type = NULL;
        if( !removing ) {
            WREEndResStringSessions( curr->info );
        }
        curr->info->current_type = 0;
        ok = WREInitResourceWindow( curr->info, 0 );
    }

    return( ok );
}
Esempio n. 8
0
uint_32 WRReadNameTable( WResDir dir, WResFileID file_handle, uint_8 **name_table,
                         uint_32 num_leftover, uint_8 *leftover )
{
    static WResTypeNode *type_node;
    static WResResNode  *res_node;
    static uint_32      res_len;
    static uint_32      res_offset;
    static uint_32      num_read;
    uint_32             len;

    if( dir != NULL ) {
        type_node = WRFindTypeNode( dir, (uint_16)WR_RT_NAMETABLE, NULL );
        if( type_node != NULL ) {
            res_node = type_node->Head;
            /* if there are two name tables we ignore all but the first */
            res_len = res_node->Head->Info.Length;
            res_offset = res_node->Head->Info.Offset;
            if( ResSeek( file_handle, res_offset, SEEK_SET ) == -1 ) {
                return( FALSE );
            }
        } else {
            res_len = 0;
        }
        num_read = 0;
    }

    if( num_read == res_len ) {
        return( 0 );
    }

    *name_table = NULL;

    if( num_read + NAME_TABLE_MAX < res_len ) {
        len = NAME_TABLE_MAX;
    } else {
        len = res_len - num_read;
    }

    num_read += len;

    /* If there was data left over but we have a NULL pointer to the
     * leftover data then we are in a very bad situation.
     * What we shall do is skip the left over data.
     * If the seek to skip the data fails then we are totally SNAFU
     * and must abort the reading of the name resource!!
     */
    if( num_leftover != 0 && leftover == NULL ) {
        if( ResSeek( file_handle, num_leftover, SEEK_CUR ) == -1 ) {
            return( 0 );
        }
        num_read += num_leftover;
        num_leftover = 0;
    }

    *name_table = (uint_8 *)WRMemAlloc( len + num_leftover );
    if( *name_table == NULL ) {
        return( FALSE );
    }

    if( num_leftover != 0 ) {
        memcpy( *name_table, leftover, num_leftover );
    }

    if( read( file_handle, *name_table + num_leftover, len ) != len ) {
        /* hmmmm... the read failed */
    }

    return( len + num_leftover );
}
Esempio n. 9
0
int WRSaveBitmapResource( WRInfo *info, int backup )
{
    int                 ok;
    WResTypeNode        *tnode;
    WResLangNode        *lnode;
    BYTE                *data;
    uint_32             dsize;

    ok = ( info && info->dir );

    if( ok ) {
        tnode = WRFindTypeNode( info->dir, (uint_16)RT_BITMAP, NULL );
        ok = ( tnode != NULL );
        if( !ok ) {
            WRDisplayErrorMsg( WR_PRJNOBMP );
        }
    }

    if( ok ) {
        ok = ((info->dir->NumTypes == 1) && (info->dir->NumResources == 1));
        if( !ok ) {
            WRDisplayErrorMsg( WR_PRJMORETHANONE );
        }
    }

    if( ok ) {
        lnode = NULL;
        if( tnode->Head && tnode->Head->Head ) {
            lnode = tnode->Head->Head;
        }
        ok = ( lnode != NULL );
    }

    if( ok ) {
        if( lnode->data == NULL ) {
            lnode->data = WRLoadResData( info->file_name, lnode->Info.Offset,
                                         lnode->Info.Length );
        }
        ok = ( lnode->data && lnode->Info.Length );
    }

    if( ok ) {
        data = lnode->data;
        dsize = lnode->Info.Length;
        ok = WRAddBitmapFileHeader( &data, &dsize );
    }

    if( ok ) {
        lnode->data = data;
        lnode->Info.Length = dsize;
        ok = WRSaveImageToFile( info, tnode, backup );
    }

    if( ok ) {
        data = lnode->data;
        dsize = lnode->Info.Length;
        ok = WRStripBitmapFileHeader( &data, &dsize );
    }

    if( ok ) {
        lnode->data = data;
        lnode->Info.Length = dsize;
    }

    return( ok );
}
Esempio n. 10
0
WResTypeNode *WdeFindTypeNode( WResDir dir, uint_16 type, char *type_name )
{
    return( WRFindTypeNode( dir, type, type_name ) );
}