Beispiel #1
0
WStatBar *WCreateStatusLine( HWND parent, HINSTANCE inst )
{
    WStatBar            *wsb;
    RECT                rect;
    status_block_desc   sbd;

    wsb = (WStatBar *)WMemAlloc( sizeof( WStatBar ) );
    if( wsb != NULL ) {
        wsb->stat = StatusWndStart();
        if( wsb->stat == NULL ) {
            return( NULL );
        }
    } else {
        return( NULL );
    }

    GetClientRect( parent, &rect );

    rect.top = rect.bottom - WStatusDepth;

    sbd.separator_width = STATUS_LINE_PAD;
    sbd.width = STATUS1_WIDTH;
    sbd.width_is_percent = FALSE;
    sbd.width_is_pixels = TRUE;

    StatusWndSetSeparators( wsb->stat, 1, &sbd );

    if( (wsb->win = StatusWndCreate( wsb->stat, parent, &rect, inst, NULL )) == NULL ) {
        WDisplayErrorMsg( W_STATUSNOTCREATED );
        WDestroyStatusLine( wsb );
        return( NULL );
    }

    WSetStatusReadyText( wsb );

    GetWindowRect( wsb->win, &rect );
    WStatusDepth = rect.bottom - rect.top;

    return( wsb );
}
Beispiel #2
0
char *WLoadSymbols( WRHashTable **table, char *file_name, HWND parent, bool prompt )
{
    char                *name;
    int                 c;
    unsigned            flags;
    char                *inc_path;
    WGetFileStruct      gf;
    bool                ret;
    bool                ok;

    name = NULL;

    ok = (table != NULL);

    if( ok ) {
        if( file_name == NULL || prompt ) {
            gf.file_name = file_name;
            gf.title = AllocRCString( W_LOADSYMTITLE );
            gf.filter = AllocRCString( W_SYMFILTER );
            WMassageFilter( gf.filter );
            name = WGetOpenFileName( parent, &gf );
            if( gf.title != NULL ) {
                FreeRCString( gf.title );
            }
            if( gf.filter != NULL ) {
                FreeRCString( gf.filter );
            }
        } else {
            name = WStrDup( file_name );
        }
        ok = (name != NULL);
    }

    WSetWaitCursor( parent, TRUE );

    if( ok ) {
        flags = PPFLAG_IGNORE_INCLUDE | PPFLAG_EMIT_LINE;
        inc_path = NULL;
        ret = setjmp( SymEnv ) != 0;
        if( ret ) {
            PP_Fini();
            WDisplayErrorMsg( W_SYMOUTOFMEM );
            ok = false;
        }
    }

    if( ok ) {
        ok = !PP_Init( name, flags, inc_path );
        if( !ok ) {
            WDisplayErrorMsg( W_NOOPENSYMFILE );
        }
    }

    if( ok ) {
        do {
            c = PP_Char();
        } while( c != EOF );
        if( *table == NULL ) {
            *table = WRInitHashTable();
        }
        addSymbols( *table );
        WRMakeHashTableClean( *table );
        PP_Fini();
    }

    if( !ok ) {
        if( name != NULL ) {
            WRMemFree( name );
            name = NULL;
        }
    }

    WSetWaitCursor( parent, FALSE );

    return( name );
}
Beispiel #3
0
bool WSaveObjectInto( WAccelEditInfo *einfo )
{
    char                *fname;
    WGetFileStruct      gf;
    bool                dup;
    WRSaveIntoData      idata;
    WRFileType          ftype;
    bool                ok;

    fname = NULL;
    dup = false;

    ok = (einfo != NULL);

    if( ok ) {
        idata.next = NULL;
        idata.type = WResIDFromNum( RESOURCE2INT( RT_ACCELERATOR ) );
        ok = (idata.type != NULL);
    }

    if( ok ) {
        gf.file_name = NULL;
        gf.title = AllocRCString( W_SAVERESINTO );
        gf.filter = AllocRCString( W_SAVERESFILTER );
        WMassageFilter( gf.filter );
        fname = WGetOpenFileName ( einfo->win, &gf );
        if( gf.title != NULL ) {
            FreeRCString( gf.title );
        }
        if( gf.filter != NULL ) {
            FreeRCString( gf.filter );
        }
        ok = (fname != NULL);
    }

    if( ok ) {
        ftype = WSelectFileType( einfo->win, fname, einfo->info->is32bit,
                                 TRUE, WGetEditInstance(), WAccHelpRoutine );
        if( ftype == WR_WIN_RC_ACCEL ) {
            ok = WSaveObjectToRC( einfo, fname, FALSE, TRUE );
        } else {
            idata.name = einfo->info->res_name;
            idata.data = einfo->info->data;
            idata.lang = einfo->info->lang;
            idata.size = (uint_32)einfo->info->data_size;
            idata.MemFlags = einfo->info->MemFlags;
            ok = WRSaveObjectInto( fname, &idata, &dup ) && !dup;
        }
    }

    if( dup ) {
        WDisplayErrorMsg( W_RESDUPNAMEINFILE );
    }

    if( fname != NULL ) {
        WRMemFree( fname );
    }

    if( idata.type != NULL ) {
        WRMemFree( idata.type );
    }

    return( ok );
}
Beispiel #4
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 );
}