dbgpaint.c

来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 551 行 · 第 1/2 页

C
551
字号
/****************************************************************************
*
*                            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:  Paint debugger windows.
*
****************************************************************************/


#include "dbgdefn.h"
#include "dbgtoggl.h"
#include "dbgtoken.h"
#include "dbgwind.h"
#include "dbgerr.h"
#include <string.h>



extern void             ReqEOC( void );
extern wnd_class        ReqWndName( void );
extern void             Scan( void );
extern unsigned int     ScanCmd( char * );
extern void             ConfigLine( char * );
extern char             *GetCmdEntry( char *, int, char * );
extern char             *Format( char *, char *, ... );
extern bool             WndDlgTxt( char *buff );
extern char             *StrCopy( char *, char * );
extern char             *GetWndFont( a_window * );
extern bool             ScanStatus( void );
extern char             *GetCmdName( int );


extern char             *TxtBuff;
extern char             WndNameTab[];

static gui_colour_set   *WndClassColour[ WND_NUM_CLASSES ];
gui_colour_set          WndStatusColour = { GUI_BRIGHT_WHITE, GUI_BLUE };

extern wnd_attr WndPlainAttr = WND_PLAIN;
extern wnd_attr WndSelectedAttr = WND_SELECTED;
extern wnd_attr WndCursorAttr = WND_SELECTED;

static gui_colour_set   WndDlgColours[] = {
    { GUI_WHITE,        GUI_BLUE },     // GUI_DLG_NORMAL
    { GUI_BLUE,         GUI_CYAN },     // GUI_DLG_FRAME
    { GUI_BLACK,        GUI_BLUE },     // GUI_DLG_SHADOW
    { GUI_WHITE,        GUI_BLUE },     // GUI_DLG_SCROLL_ICON
    { GUI_WHITE,        GUI_BLUE },     // GUI_DLG_SCROLL_BAR
    { GUI_BLUE,         GUI_WHITE },    // GUI_DLG_BUTTON_PLAIN
    { GUI_BRIGHT_WHITE, GUI_WHITE },    // GUI_DLG_BUTTON_STANDOUT
    { GUI_BLUE,         GUI_CYAN },     // GUI_DLG_BUTTON_ACTIVE
    { GUI_BRIGHT_WHITE, GUI_CYAN },     // GUI_DLG_BUTTON_ACTIVE_STANDOUT
};

extern gui_colour_set WndColours[] = {

    { GUI_WHITE,        GUI_BLUE },             /* GUI_MENU_PLAIN    */
    { GUI_BRIGHT_WHITE, GUI_BLUE },             /* GUI_MENU_STANDOUT */
    { GUI_GREY,         GUI_BLUE },             /* GUI_MENU_GRAYED */
    { GUI_BRIGHT_WHITE, GUI_BLACK },            /* GUI_MENU_ACTIVE    */
    { GUI_BRIGHT_YELLOW,GUI_BLACK },            /* GUI_MENU_ACTIVE_STANDOUT */
    { GUI_BLACK,        GUI_BRIGHT_WHITE },     /* GUI_BACKGROUND */
    { GUI_BRIGHT_YELLOW,GUI_BLUE },             /* GUI_MENU_FRAME */
    { GUI_GREY,         GUI_BRIGHT_WHITE },     /* GUI_TITLE_INACTIVE    */
    { GUI_BLUE,         GUI_CYAN },             /* GUI_FRAME_ACTIVE    */
    { GUI_GREY,         GUI_BRIGHT_WHITE },     /* GUI_FRAME_INACTIVE    */
    { GUI_BRIGHT_WHITE, GUI_RED },              /* GUI_ICON    */
    { GUI_GREY,         GUI_BLACK },            /* GUI_MENU_GRAYED_ACTIVE */
    { GUI_GREY,         GUI_CYAN },             /* GUI_FRAME_RESIZE    */
    { GUI_BLACK,        GUI_BRIGHT_WHITE },     /* WND_PLAIN    */
    { GUI_BRIGHT_WHITE, GUI_BLACK },            /* WND_TABSTOP == ACTIVE  */
    { GUI_BRIGHT_WHITE, GUI_RED },              /* WND_SELECTED */
    { GUI_RED,          GUI_BRIGHT_WHITE },     /* WND_STANDOUT */
    { GUI_RED,          GUI_BRIGHT_WHITE },     /* WND_HOTSPOT */
    { GUI_BRIGHT_RED,   GUI_BLACK },            /* WND_STANDOUT_TABSTOP */
};
extern int WndNumColours = { ArraySize( WndColours ) };



typedef enum {
    ATTR_ACTIVE         = 0x0001,
    ATTR_SELECTED       = 0x0002,
    ATTR_STANDOUT       = 0x0004,
    ATTR_DISABLED       = 0x0008,
    ATTR_PLAIN          = 0x0010,
    ATTR_FRAME          = 0x0020,
    ATTR_ICON           = 0x0040,
    ATTR_MENU           = 0x0080,
    ATTR_TITLE          = 0x0100,
    ATTR_BUTTON         = 0x0200,
    ATTR_SHADOW         = 0x0400,
} attr_bits;

static char AttrNameTab[] = {
    "Active\0"
    "SElected\0"
    "STandout\0"
    "Disabled\0"
    "Plain\0"
    "Frame\0"
    "ICon\0"
    "MEnu\0"
    "TItle\0"
    "BUtton\0"
    "SHadow\0"
};

static attr_bits AttrBits[] = {
    ATTR_ACTIVE,
    ATTR_SELECTED,
    ATTR_STANDOUT,
    ATTR_DISABLED,
    ATTR_PLAIN,
    ATTR_FRAME,
    ATTR_ICON,
    ATTR_MENU,
    ATTR_TITLE,
    ATTR_BUTTON,
    ATTR_SHADOW,
};

typedef struct {
        wnd_attr        attr;
        attr_bits       bits;
} attr_map;

static attr_map AttrMap[] = {
    { GUI_MENU_PLAIN,           ATTR_MENU+ATTR_PLAIN },
    { GUI_MENU_STANDOUT,        ATTR_MENU+ATTR_STANDOUT },
    { GUI_MENU_GRAYED,          ATTR_MENU+ATTR_DISABLED },
    { GUI_MENU_ACTIVE,          ATTR_MENU+ATTR_ACTIVE },
    { GUI_MENU_ACTIVE_STANDOUT, ATTR_MENU+ATTR_ACTIVE+ATTR_STANDOUT },
    { 0,                        0 }, // background
    { GUI_MENU_FRAME,           ATTR_FRAME+ATTR_MENU },
    { GUI_TITLE_INACTIVE,       ATTR_TITLE+ATTR_DISABLED },
    { GUI_FRAME_ACTIVE,         ATTR_FRAME+ATTR_ACTIVE },
    { GUI_FRAME_INACTIVE,       ATTR_FRAME+ATTR_DISABLED },
    { GUI_ICON,                 ATTR_ICON },
    { GUI_MENU_GRAYED_ACTIVE,   ATTR_MENU+ATTR_DISABLED+ATTR_ACTIVE },
    { GUI_FRAME_RESIZE,         0 },
    { WND_PLAIN,                ATTR_PLAIN },
    { WND_TABSTOP,              ATTR_ACTIVE },
    { WND_SELECTED,             ATTR_SELECTED },
    { WND_STANDOUT,             ATTR_STANDOUT },
    { WND_HOTSPOT,              ATTR_BUTTON },
    { WND_STANDOUT_TABSTOP,     ATTR_ACTIVE+ATTR_STANDOUT },
};

static attr_map DlgAttrMap[] = {
    { GUI_DLG_NORMAL,                   ATTR_PLAIN },
    { GUI_DLG_FRAME,                    ATTR_FRAME },
    { GUI_DLG_SHADOW,                   ATTR_SHADOW },
    { 0,                        0 }, // scroll icon
    { 0,                        0 }, // scroll bar
    { GUI_DLG_BUTTON_PLAIN,             ATTR_BUTTON+ATTR_PLAIN },
    { GUI_DLG_BUTTON_STANDOUT,          ATTR_BUTTON+ATTR_STANDOUT },
    { GUI_DLG_BUTTON_ACTIVE,            ATTR_BUTTON+ATTR_ACTIVE },
    { GUI_DLG_BUTTON_ACTIVE_STANDOUT,   ATTR_BUTTON+ATTR_ACTIVE+ATTR_STANDOUT },
};

typedef enum {
    CLR_NONE = 0,
    CLR_BLACK           = 0x0001,
    CLR_BLUE            = 0x0002,
    CLR_BRIGHT          = 0x0004,
    CLR_BROWN           = 0x0008,
    CLR_CYAN            = 0x0010,
    CLR_GRAY            = 0x0020,
    CLR_GREEN           = 0x0040,
    CLR_GREY            = 0x0080,
    CLR_MAGENTA         = 0x0100,
    CLR_RED             = 0x0200,
    CLR_WHITE           = 0x0400,
    CLR_YELLOW          = 0x0800,
} colour_bits;

static char ColourNameTab[] = {
    "BLAck\0"
    "BLUe\0"
    "BRIght\0"
    "BROwn\0"
    "Cyan\0"
    "GRAy\0"
    "GREEn\0"
    "GREY\0"
    "MAgenta\0"
    "Red\0"
    "White\0"
    "Yellow\0"
};

static colour_bits ColourBits[] = {
    CLR_BLACK,
    CLR_BLUE,
    CLR_BRIGHT,
    CLR_BROWN,
    CLR_CYAN,
    CLR_GRAY,
    CLR_GREEN,
    CLR_GREY,
    CLR_MAGENTA,
    CLR_RED,
    CLR_WHITE,
    CLR_YELLOW,
};

typedef struct {
        gui_colour      colour;
        colour_bits     bits;
} colour_map;

static colour_map ColourMap[] = {
    { GUI_BLACK,                CLR_BLACK },
    { GUI_BLUE,                 CLR_BLUE },
    { GUI_GREEN,                CLR_GREEN },
    { GUI_CYAN,                 CLR_CYAN },
    { GUI_RED,                  CLR_RED },
    { GUI_MAGENTA,              CLR_MAGENTA },
    { GUI_BROWN,                CLR_BROWN },
    { GUI_WHITE,                CLR_WHITE },
    { GUI_GREY,                 CLR_GREY },
    { GUI_BRIGHT_BLUE,          CLR_BRIGHT+CLR_BLUE },
    { GUI_BRIGHT_GREEN,         CLR_BRIGHT+CLR_GREEN },
    { GUI_BRIGHT_CYAN,          CLR_BRIGHT+CLR_CYAN },
    { GUI_BRIGHT_RED,           CLR_BRIGHT+CLR_RED },
    { GUI_BRIGHT_MAGENTA,       CLR_BRIGHT+CLR_MAGENTA },
    { GUI_BRIGHT_YELLOW,        CLR_YELLOW },
    { GUI_BRIGHT_YELLOW,        CLR_BRIGHT+CLR_BROWN },
    { GUI_BRIGHT_WHITE,         CLR_BRIGHT+CLR_WHITE },
};

wnd_attr WndMapTabAttr( wnd_attr attr )
{
    if( attr == WND_STANDOUT ) return( WND_STANDOUT_TABSTOP );
    return( WND_TABSTOP );
}

extern wnd_attr WndTabStopAttr = WND_TABSTOP;
static wnd_attr ScanAttr( attr_map *map, int size )
{
    attr_bits   bits;
    int         i;

    bits = 0;
    for( ;; ) {
        i = ScanCmd( AttrNameTab );
        if( i == 0 ) break;
        bits |= AttrBits[ i-1 ];
    }
    for( i = 0; i < size; ++i ) {
        if( map[i].bits == bits ) {
            return( map[i].attr );
        }

⌨️ 快捷键说明

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