Пример #1
0
WAccelInfo *WAccelGetEInfo( WAccelHandle hndl, bool keep )
{
    WAccelEditInfo  *einfo;
    WAccelInfo      *info;
    bool            ok;

    info = NULL;

    einfo = (WAccelEditInfo *)WGetEditSessionInfo( hndl );

    ok = (einfo != NULL);

    if( ok ) {
        info = einfo->info;
        ok = (info != NULL);
    }

    if( ok ) {
        if( einfo->info->modified ) {
            if( info->data != NULL ) {
                WRMemFree( info->data );
            }
            info->data = NULL;
            info->data_size = 0;
            WMakeDataFromAccelTable( einfo->tbl, &info->data, &info->data_size );
        }
        if( !keep ) {
            WUnRegisterEditSession( hndl );
            WFreeAccelEInfo( einfo );
        }
    }

    return( info );
}
Пример #2
0
bool WSaveObject( WAccelEditInfo *einfo, bool get_name, bool save_into )
{
    bool    ok, data_saved;
    void    *old_data;
    size_t  old_size;

    data_saved = FALSE;

    WSetWaitCursor( einfo->win, TRUE );

    ok = (einfo != NULL);

    if( ok ) {
        if( einfo->info->res_name == NULL ) {
            WDisplayErrorMsg( W_RESHASNONAME );
            ok = false;
        } else {
            if( !WRIsDefaultHashTable( einfo->info->symbol_table ) &&
                (get_name || WRIsHashTableDirty( einfo->info->symbol_table )) ) {
                if( einfo->info->symbol_file == NULL ) {
                    char    *fname;
                    if( einfo->file_name == NULL ) {
                        fname = einfo->info->file_name;
                    } else {
                        fname = einfo->file_name;
                    }
                    einfo->info->symbol_file = WCreateSymName( fname );
                }
                ok = WSaveSymbols( einfo, einfo->info->symbol_table,
                               &einfo->info->symbol_file, get_name );
            }
            if( ok ) {
                old_data = einfo->info->data;
                old_size = einfo->info->data_size;
                data_saved = TRUE;
                WMakeDataFromAccelTable( einfo->tbl, &einfo->info->data, &einfo->info->data_size );
                ok = (einfo->info->data != NULL && einfo->info->data_size != 0);
                if( !ok ) {
                    WDisplayErrorMsg( W_ACCELISEMPTY );
                } else {
                    if( save_into ) {
                        ok = WSaveObjectInto( einfo );
                    } else {
                        ok = WSaveObjectAs( get_name, einfo );
                    }
                    if( einfo->info->data != NULL ) {
                        WRMemFree( einfo->info->data );
                        einfo->info->data = NULL;
                        einfo->info->data_size = 0;
                    }
                }
            }
        }
    }

    if( ok && einfo->info->stand_alone ) {
        einfo->info->modified = false;
    }

    if( data_saved ) {
        einfo->info->data = old_data;
        einfo->info->data_size = old_size;
    }

    WSetWaitCursor( einfo->win, FALSE );

    return( ok );
}