Example #1
0
HDDEDATA WdeCreateResData( WdeResDlgItem *ditem )
{
    HDDEDATA    hdata;
    void        *data;
    uint_32     size;

    hdata = (HDDEDATA)NULL;

    if( WdeGetItemData( ditem, &data, &size ) ) {
        hdata = DdeCreateDataHandle( IdInst, (LPBYTE)data, size, 0,
                                     hDataItem, WdeDataClipbdFormat, 0 );
        WRMemFree( data );
    }

    return( hdata );
}
Example #2
0
bool WdeInfoToData( WdeResInfo *info )
{
    WResTypeNode        *dnode;
    WResResNode         *rnode;
    LIST                *dlist;
    WdeResDlgItem       *ditem;
    void                *data;
    uint_32             size;
    WResLangType        def_lang;


    if( info == NULL ) {
        return( FALSE );
    }

    def_lang.lang = DEF_SUBLANG;
    def_lang.sublang = DEF_SUBLANG;
    dnode = info->dlg_entry;
    dlist = info->dlg_item_list;

    while( dlist != NULL ) {
        ditem = (WdeResDlgItem *)ListElement( dlist );

        data = NULL;
        size = 0;

        if( ditem->object != NULL || ditem->dialog_info != NULL ) {
            if( !WdeGetItemData( ditem, &data, &size ) ) {
                return( FALSE );
            }
        }

        if( ditem->rnode != NULL && ditem->lnode != NULL ) {
            if( data != NULL ) {
                rnode = WdeRenameWResResNode( dnode, ditem->rnode, ditem->dialog_name );
                if( rnode == NULL ) {
                    WRMemFree( data );
                    return( FALSE );
                }
                ditem->rnode = rnode;
                ditem->lnode->data = data;
                ditem->lnode->Info.Length = size;
                ditem->lnode->Info.Offset = 0;
                ditem->lnode->Info.MemoryFlags = ditem->dialog_info->MemoryFlags;
            }
        } else {
            rnode = WdeCreateWResResNode( 1, ditem->dialog_name, &def_lang,
                                          ditem->dialog_info->MemoryFlags, 0,
                                          size, data );
            if( rnode != NULL ) {
                if( info->info->dir == NULL ) {
                    info->info->dir = WResInitDir();
                }
                if( dnode == NULL ) {
                    dnode = WdeAddTypeToDir( info->info->dir, (uint_16)(pointer_int)RT_DIALOG );
                    info->dlg_entry = dnode;
                }
                if( info->info->dir != NULL && dnode != NULL ) {
                    WdeAddResToType( dnode, rnode );
                    ditem->rnode = rnode;
                    ditem->lnode = rnode->Head;
                } else {
                    WRMemFree( rnode->Head );
                    WRMemFree( rnode );
                    WRMemFree( data );
                    return( FALSE );
                }
            } else {
                WRMemFree( data );
                return( FALSE );
            }

            info->info->dir->NumResources++;
        }

        dlist = ListNext( dlist );
    }

    return( TRUE );
}