⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wderes.c

📁 开放源码的编译器open watcom 1.6.0版的源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
/****************************************************************************
*
*                            Open Watcom Project
*
*    Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
*
*  ========================================================================
*
*    This file contains Original Code and/or Modifications of Original
*    Code as defined in and that are subject to the Sybase Open Watcom
*    Public License version 1.0 (the 'License'). You may not use this file
*    except in compliance with the License. BY USING THIS FILE YOU AGREE TO
*    ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is
*    provided with the Original Code and Modifications, and is also
*    available at www.sybase.com/developer/opensource.
*
*    The Original Code and all software distributed under the License are
*    distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
*    EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM
*    ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF
*    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR
*    NON-INFRINGEMENT. Please see the License for the specific language
*    governing rights and limitations under the License.
*
*  ========================================================================
*
* Description:  WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE
*               DESCRIBE IT HERE!
*
****************************************************************************/


#include <windows.h>
#include <win1632.h>
#include <string.h>

#include "wdeglbl.h"
#include "wdemem.h"
#include "wderes.h"
#include "wdeinfo.h"
#include "wdereq.h"
#include "wdeobjid.h"
#include "wdemsgbx.h"
#include "wdemsgs.gh"
#include "wdeldres.h"
#include "wdefinit.h"
#include "wdeedit.h"
#include "wdemain.h"
#include "wdesvres.h"
#include "wdesdlg.h"
#include "wdelist.h"
#include "wdegetfn.h"
#include "wdewait.h"
#include "wdesym.h"
#include "wde_wres.h"
#include "wdesdup.h"
#include "wdefdiag.h"
#include "wdetfile.h"
#include "wdectool.h"
#include "wdeselft.h"
#include "wdefmenu.h"
#include "wdedebug.h"
#include "wdestat.h"
#include "wdefbase.h"
#include "wdedde.h"
#include "wdefont.h"
#include "wde_rc.h"
#include "wrutil.h"

/****************************************************************************/
/* external function prototypes                                             */
/****************************************************************************/
extern LRESULT WINEXPORT WdeResWndProc   ( HWND, UINT, WPARAM, LPARAM );
extern void    WINEXPORT WdeMouseRtn     ( HWND, RECT * );

/****************************************************************************/
/* static function prototypes                                               */
/****************************************************************************/
static void   WdeSetCurrentRes           ( WdeResInfo * );
static Bool   WdeCreateResourceWindow    ( WdeResInfo *, int, char * );
static Bool   WdeAddDlgItems             ( WdeResInfo * );
static Bool   WdeRemoveResource          ( WdeResInfo * );
static char  *WdeGetQueryName            ( WdeResInfo * );
static Bool   WdeQuerySaveResOnDeleteRes ( WdeResInfo *, Bool );
static Bool   WdeQuerySaveSymOnDeleteRes ( WdeResInfo *, Bool );
static int    WdeIncNumRes               ( void );
static int    WdeDecNumRes               ( void );
static WdeResInfo *WdeResInfoFromWin     ( HWND );

/****************************************************************************/
/* external variables                                                       */
/****************************************************************************/
char    *WdeResUntitled         = NULL;
char    *WdeResOpenTitle        = NULL;
char    *WdeResSaveTitle        = NULL;
char    *WdeResOpenFilter       = NULL;
char    *WdeResSaveFilter       = NULL;
char    *WdeResSaveFilterEXE    = NULL;
char    *WdeResSaveFilterDLL    = NULL;
char    *WdeResSaveFilterALL    = NULL;
char    *WdeSymSaveFilter       = NULL;
char    *WdeLoadHeaderTitle     = NULL;
char    *WdeWriteHeaderTitle    = NULL;
char    *WdeDlgSaveIntoTitle    = NULL;
char    *WdeDlgSaveAsTitle      = NULL;
char    *WdeDlgSaveTitle        = NULL;
char    *WdeNoSym               = NULL;
char    *WdeCustOpenTitle       = NULL;
char    *WdeCustFilter          = NULL;

/****************************************************************************/
/* static variables                                                         */
/****************************************************************************/
static LIST       *WdeResList       = NULL;
static unsigned    WdeResCounter    = 0;
static int         WdeNumRes        = 0;
static WdeResInfo *WdeCurrentRes    = NULL;
static Bool        WdeOldStickyMode = FALSE;

static void WdeMassageFilter( char *filter )
{
    WRMassageFilter( filter );
}

void WdeFiniResStrings( void )
{
    if( WdeResUntitled != NULL ) {
        WdeFreeRCString( WdeResUntitled );
        WdeResUntitled = NULL;
    }
    if( WdeResOpenTitle != NULL ) {
        WdeFreeRCString( WdeResOpenTitle );
        WdeResOpenTitle = NULL;
    }
    if( WdeResSaveTitle != NULL ) {
        WdeFreeRCString( WdeResSaveTitle );
        WdeResSaveTitle = NULL;
    }
    if( WdeResOpenFilter != NULL ) {
        WdeFreeRCString( WdeResOpenFilter );
        WdeResOpenFilter = NULL;
    }
    if( WdeResSaveFilter != NULL ) {
        WdeFreeRCString( WdeResSaveFilter );
        WdeResSaveFilter = NULL;
    }
    if( WdeResSaveFilterEXE != NULL ) {
        WdeFreeRCString( WdeResSaveFilterEXE );
        WdeResSaveFilterEXE = NULL;
    }
    if( WdeResSaveFilterDLL != NULL ) {
        WdeFreeRCString( WdeResSaveFilterDLL );
        WdeResSaveFilterDLL = NULL;
    }
    if( WdeResSaveFilterALL != NULL ) {
        WdeFreeRCString( WdeResSaveFilterALL );
        WdeResSaveFilterALL = NULL;
    }
    if( WdeSymSaveFilter != NULL ) {
        WdeFreeRCString( WdeSymSaveFilter );
        WdeSymSaveFilter = NULL;
    }
    if( WdeLoadHeaderTitle != NULL ) {
        WdeFreeRCString( WdeLoadHeaderTitle );
        WdeLoadHeaderTitle = NULL;
    }
    if( WdeWriteHeaderTitle != NULL ) {
        WdeFreeRCString( WdeWriteHeaderTitle );
        WdeWriteHeaderTitle = NULL;
    }
    if( WdeDlgSaveIntoTitle != NULL ) {
        WdeFreeRCString( WdeDlgSaveIntoTitle );
        WdeDlgSaveIntoTitle = NULL;
    }
    if( WdeDlgSaveAsTitle != NULL ) {
        WdeFreeRCString( WdeDlgSaveAsTitle );
        WdeDlgSaveAsTitle = NULL;
    }
    if( WdeDlgSaveTitle != NULL ) {
        WdeFreeRCString( WdeDlgSaveTitle );
        WdeDlgSaveTitle = NULL;
    }
    if( WdeNoSym != NULL ) {
        WdeFreeRCString( WdeNoSym );
        WdeNoSym = NULL;
    }
    if( WdeCustOpenTitle != NULL ) {
        WdeFreeRCString( WdeCustOpenTitle );
        WdeCustOpenTitle = NULL;
    }
    if( WdeCustFilter != NULL ) {
        WdeFreeRCString( WdeCustFilter );
        WdeCustFilter = NULL;
    }
}

Bool WdeInitResStrings( void )
{
    Bool        ok;

    WdeResUntitled = WdeAllocRCString( WDE_UNTITLEDPROJECT );
    ok = ( WdeResUntitled != NULL );

    if( ok ) {
        WdeResOpenTitle = WdeAllocRCString( WDE_OPENPROJECT );
        ok = ( WdeResOpenTitle != NULL );
    }
    if( ok ) {
        WdeResSaveTitle = WdeAllocRCString( WDE_SAVEPROJECT );
        ok = ( WdeResSaveTitle != NULL );
    }
    if( ok ) {
        WdeResOpenFilter = WdeAllocRCString( WDE_OPENFILTER );
        ok = ( WdeResOpenFilter != NULL );
        if( ok ) {
            WdeMassageFilter( WdeResOpenFilter );
        }
    }
    if( ok ) {
        WdeResSaveFilter = WdeAllocRCString( WDE_SAVEFILTER );
        ok = ( WdeResSaveFilter != NULL );
        if( ok ) {
            WdeMassageFilter( WdeResSaveFilter );
        }
    }
    if( ok ) {
        WdeResSaveFilterEXE = WdeAllocRCString( WDE_SAVEFILTEREXE );
        ok = ( WdeResSaveFilterEXE != NULL );
        if( ok ) {
            WdeMassageFilter( WdeResSaveFilterEXE );
        }
    }
    if( ok ) {
        WdeResSaveFilterDLL = WdeAllocRCString( WDE_SAVEFILTERDLL );
        ok = ( WdeResSaveFilterDLL != NULL );
        if( ok ) {
            WdeMassageFilter( WdeResSaveFilterDLL );
        }
    }
    if( ok ) {
        WdeResSaveFilterALL = WdeAllocRCString( WDE_SAVEFILTERALL );
        ok = ( WdeResSaveFilterALL != NULL );
        if( ok ) {
            WdeMassageFilter( WdeResSaveFilterALL );
        }
    }
    if( ok ) {
        WdeSymSaveFilter = WdeAllocRCString( WDE_SYMFILTER );
        ok = ( WdeSymSaveFilter != NULL );
        if( ok ) {
            WdeMassageFilter( WdeSymSaveFilter );
        }
    }
    if( ok ) {
        WdeLoadHeaderTitle = WdeAllocRCString( WDE_LOADSYMTITLE );
        ok = ( WdeLoadHeaderTitle != NULL );
    }
    if( ok ) {
        WdeWriteHeaderTitle = WdeAllocRCString( WDE_WRITESYMTITLE );
        ok = ( WdeWriteHeaderTitle != NULL );
    }
    if( ok ) {
        WdeDlgSaveIntoTitle = WdeAllocRCString( WDE_SAVEDLGINTOTITLE );
        ok = ( WdeDlgSaveIntoTitle != NULL );
    }
    if( ok ) {
        WdeDlgSaveAsTitle = WdeAllocRCString( WDE_SAVEDLGASTITLE );
        ok = ( WdeDlgSaveAsTitle != NULL );
    }
    if( ok ) {
        WdeDlgSaveTitle = WdeAllocRCString( WDE_SAVEDLGTITLE );
        ok = ( WdeDlgSaveTitle != NULL );
    }
    if( ok ) {
        WdeNoSym = WdeAllocRCString( WDE_NOSYMBOL );
        ok = ( WdeNoSym != NULL );
    }
    if( ok ) {
        WdeCustOpenTitle = WdeAllocRCString( WDE_OPENCUSTTITLE );
        ok = ( WdeCustOpenTitle != NULL );
    }
    if( ok ) {
        WdeCustFilter = WdeAllocRCString( WDE_OPENCUSTFILTER );
        ok = ( WdeCustFilter != NULL );
        if( ok ) {
            WdeMassageFilter( WdeCustFilter );
        }
    }

    if( !ok ) {
        WdeFiniResStrings();
    }

    return( ok );
}

void WdeSetCurrentRes ( WdeResInfo *res_info )
{
    WdeCurrentRes = res_info;
}

WdeResInfo *WdeGetCurrentRes ( void )
{
    return ( WdeCurrentRes );
}

Bool WdeRegisterResClass ( HINSTANCE app_inst )
{
    WNDCLASS wc;

    /* fill in the WINDOW CLASS structure for the edit window */
    wc.style         = CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW;
    wc.lpfnWndProc   = WdeResWndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = sizeof (WdeResInfo *);
    wc.hInstance     = app_inst;
    wc.hIcon         = LoadIcon ( app_inst, "ResIcon" );
    wc.hCursor       = NULL;
    wc.hbrBackground = GetStockObject ( WHITE_BRUSH );
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = "WdeResClass";

    /* register the edit window class */
    if( !RegisterClass( &wc ) ) {
        WdeDisplayErrorMsg( WDE_REGISTEREDITFAILED );
        return( FALSE );
    }

    return ( TRUE );
}

int WdeIncNumRes ( void )
{
    WdeNumRes++;
    return ( WdeNumRes );
}

int WdeDecNumRes( void )
{
    if( WdeNumRes ) {
        WdeNumRes--;
    }
    return( WdeNumRes );
}

int WdeGetNumRes( void )
{
    return( WdeNumRes );
}

void WdeShowResourceWindows( int show )
{
    LIST       *rlist;
    WdeResInfo *res_info;

    for( rlist = WdeResList; rlist; rlist = ListNext(rlist) ) {
        res_info = (WdeResInfo *) ListElement(rlist);
        if( show == SW_HIDE ) {
            WdeSetEditMode( res_info, FALSE );
        }
        ShowWindow( res_info->res_win, show );
        EnableWindow( res_info->res_win, show != SW_HIDE );
        if( show != SW_HIDE ) {
            WdeSetEditMode( res_info, TRUE );
        }
    }

    return;
}

void WdeAddResDlgItemToResInfo( WdeResInfo *info, WdeResDlgItem *item )
{
    WdeInsertObject( &info->dlg_item_list, item );
}

WdeResInfo *WdeCreateNewResource( char *title )
{
    WdeResInfo *res_info;
    Bool        ok;

    ok = ( ( res_info = WdeAllocResInfo() ) != NULL );

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

    if( ok ) {
        res_info->hash_table = WRInitHashTable();
        ok = ( res_info->hash_table != NULL );
    }

    if( ok ) {
        if( title ) {
            res_info->info->save_name = WdeStrDup( title );
            ok = ( res_info->info->save_name != NULL );
        }
    }

    if ( ok ) {
#ifdef __NT__
        res_info->is32bit = TRUE;
#else
        res_info->is32bit = FALSE;
#endif
        ok = WdeCreateResourceWindow( res_info, 0, title );
    }

    if( ok ) {
        ListAddElt( &WdeResList, (void *) res_info );
        if( !WdeIsDDE() || title == NULL ) {
            ok = ( WdeCreateNewDialog( NULL, res_info->is32bit ) != NULL );
        }
    }

    if( ok ) {
        WdeCheckBaseScrollbars( FALSE );
    }

    if( res_info ) {
        if( ok ) {
            WdeSetResModified( res_info, FALSE );
        } else {
            WdeRemoveResource( res_info );
            res_info = NULL;
        }
    }

    return( res_info );
}

Bool WdeAddDlgItems( WdeResInfo *res_info )
{
    WResResNode         *rnode;
    WResLangNode        *lnode;
    WdeResDlgItem       *dlg_item;

    if( !res_info ) {
        return( FALSE );
    }

    if( res_info->dlg_entry != NULL ) {
        rnode = res_info->dlg_entry->Head;
    } else {
        rnode = NULL;
    }

    while( rnode ) {
        lnode = rnode->Head;
        while( lnode ) {
            dlg_item = WdeAllocResDlgItem();
            if( !dlg_item ) {
                return( FALSE );
            }
            dlg_item->is32bit   = res_info->is32bit;
            dlg_item->rnode     = rnode;
            dlg_item->lnode     = lnode;
            WdeAddResDlgItemToResInfo( res_info, dlg_item );
            lnode = lnode->Next;
        }
        rnode = rnode->Next;
    }

    return( TRUE );
}

Bool WdeOpenResource ( char *fn )
{
    char             *name;
    WdeResInfo       *res_info;
    WdeGetFileStruct  gf;
    Bool              ok, got_name;

    WdeSetWaitCursor ( TRUE );

    res_info = NULL;
    name     = NULL;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -