wndsys.c
来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 693 行 · 第 1/2 页
C
693 行
/****************************************************************************
*
* 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: Windowing 'system' routines.
*
****************************************************************************/
#include "dbgdefn.h"
#include "dbgtoggl.h"
#include "dbginfo.h"
#include "dbginp.h"
#include "dbgtoken.h"
#include "dbgerr.h"
#include "dbgwind.h"
#include "dbgadget.h"
#include "dbghook.h"
#include "dbgio.h"
#include <stdio.h>
#include <ctype.h>
extern screen_state ScrnState;
extern tokens CurrToken;
extern wnd_posn WndPosition[ WND_NUM_CLASSES ];
extern void *SrchHistory;
extern char *TxtBuff;
extern a_window *WndMain;
extern gui_rect WndMainRect;
extern bool UsrScrnMode( void );
extern bool UserScreen( void );
extern bool DebugScreen( void );
extern bool DebugScreenRecover( void );
extern void RemoteSetUserScreen( void );
extern void RemoteSetDebugScreen( void );
extern void PushCmdList( cmd_list * );
extern void NewLang( char *lang );
extern void ProcACmd( void );
extern void CheckBPErrors( void );
extern void Ring( void );
extern int DlgSearch( a_window *, void * );
extern bool DlgSearchAll( char **, void * );
extern unsigned int ScanCmd( char * );
extern void ReqEOC( void );
extern gui_colour_set *GetWndColours( wnd_class class );
extern bool ScanItem( bool, char **, unsigned int * );
extern bool WndDlgTxt( char * );
extern a_window *WndSrchOpen( char * );
extern void *GetWndFont( a_window * );
extern bool AsmOpenGadget( a_window *, wnd_line_piece *, mod_handle );
extern bool FileOpenGadget( a_window *, wnd_line_piece *, mod_handle );
extern bool HookPendingPush( void );
extern void WndPosToRect( wnd_posn*, gui_rect *, gui_coord * );
extern bool IsInternalMod( mod_handle );
extern void AccelMenuItem( gui_menu_struct *menu, bool is_main );
extern char LookUpCtrlKey( unsigned key );
extern bool MacKeyHit( a_window *wnd, unsigned key );
extern gui_coord *WndMainClientSize( void );
extern char *StrCopy( char *src, char *dest );
extern void FingClose( void );
extern char *GetCmdName( int );
extern void SetUpdateFlags( update_list );
extern void ScrnSpawnStart( void );
extern void ScrnSpawnEnd( void );
extern void WndDumpFile( a_window * );
extern void WndDumpLog( a_window * );
extern void ProcWndSearch( a_window * );
extern void ProcWndFindNext( a_window * );
extern void ProcWndFindPrev( a_window * );
extern void ProcWndPopUp( a_window * );
extern void ProcWndTabLeft( a_window * );
extern void ProcWndTabRight( a_window * );
extern void ProcPUINYI( a_window * );
extern void XDumpMenus( void );
static void WndBadCmd( a_window * );
#include "menudef.h"
char *WndGadgetHint[] =
{
#define pick( a,b,c,d,e,f ) f,
#include "gadgets.h"
};
gui_resource WndGadgetArray[] = {
#define pick( a,b,c,d,e,f ) { b, d },
#include "gadgets.h"
#define pick( a,b,c,d,e,f ) { c, e },
#include "gadgets.h"
{ BITMAP_SPLASH, "splash" },
};
int WndGadgetArraySize = ArraySize( WndGadgetArray );
int WndGadgetSecondary = GADGET_FIRST_SECONDARY;
wnd_attr WndGadgetAttr = WND_HOTSPOT;
int MaxGadgetLength;
static char WindowNameTab[] =
{
"CLose\0"
"CURSORStart\0"
"CURSOREnd\0"
"CURSORDown\0"
"CURSORLeft\0"
"CURSORRight\0"
"CURSORUp\0"
"Dump\0"
"Log\0"
"FINDNext\0"
"FINDPrev\0"
"Next\0"
"PAGEDown\0"
"PAGEUp\0"
"POpup\0"
"SEarch\0"
"SCROLLDown\0"
"SCROLLUp\0"
"SCROLLTop\0"
"SCROLLBottom\0"
"TABLeft\0"
"TABRight\0"
"MAXimize\0"
"MINimize\0"
"REStore\0"
"TIle\0"
"CAscade\0"
"Move\0"
"SIze\0"
"PRevious\0"
};
static void ToWndChooseNew( a_window *p )
{
WndChooseNew();
}
static void (*WndJmpTab[])( a_window * ) =
{
&WndBadCmd,
&WndClose,
&WndCursorStart,
&WndCursorEnd,
&WndCursorDown,
&WndCursorLeft,
&WndCursorRight,
&WndCursorUp,
&WndDumpFile,
&WndDumpLog,
&ProcWndFindNext,
&ProcWndFindPrev,
&ToWndChooseNew,
&WndPageDown,
&WndPageUp,
&ProcWndPopUp,
&ProcWndSearch,
&WndScrollDown,
&WndScrollUp,
&WndScrollTop,
&WndScrollBottom,
&ProcWndTabLeft,
&ProcWndTabRight,
&WndMaximizeWindow,
&WndMinimizeWindow,
&WndRestoreWindow,
&ProcPUINYI,
&ProcPUINYI,
&ProcPUINYI,
&ProcPUINYI,
&ProcPUINYI,
};
wnd_metrics WndNormal = { 5, 25, 0, 0 };
wnd_metrics WndLong = { 5, 25, 20, 0 };
wnd_metrics WndMemMetrics = { 5, 25, 5, 0 };
wnd_metrics WndWide = { 5, 25, 0, 60 };
wnd_metrics WndWideLong = { 5, 25, 20, 60 };
wnd_metrics WndFileMetrics = { 5, 25, 70, 70 };
wnd_metrics *WndMetrics[] = {
#define pick(a,b,c,d,e,f) &e,
#include "wndnames.h"
};
wnd_metrics NoMetrics = { 0, 0, 0, 0 };
bool DbgWndSearch( a_window * wnd, bool from_top, int direction )
{
bool rc;
rc = WndSearch( wnd, from_top, direction );
return( rc );
}
void ProcPUINYI( a_window *wnd )
{
wnd=wnd;
Say( "NYI" );
}
void ProcWndSearch( a_window *wnd )
{
DbgWndSearch( wnd, FALSE, DlgSearch( wnd, SrchHistory ) );
}
void ProcWndTabLeft( a_window *wnd )
{
WndTabLeft( wnd, TRUE );
}
void ProcWndTabRight( a_window *wnd )
{
WndTabRight( wnd, TRUE );
}
void ProcSearchAll( void )
{
char *expr;
if( !DlgSearchAll( &expr, SrchHistory ) ) return;
WndSrchOpen( expr );
}
void ProcWndPopUp( a_window *wnd )
{
WndKeyPopUp( wnd, NULL );
}
void ProcWndFindNext( a_window *wnd )
{
DbgWndSearch( wnd, FALSE, 1 );
}
void ProcWndFindPrev( a_window *wnd )
{
DbgWndSearch( wnd, FALSE, -1 );
}
static void WndBadCmd( a_window *wnd )
{
wnd=wnd;
Error( ERR_LOC, LIT( ERR_BAD_SUBCOMMAND ), GetCmdName( CMD_WINDOW ) );
}
void ProcWindow( void )
{
a_window *wnd = WndFindActive();
unsigned cmd;
cmd = ScanCmd( &WindowNameTab );
ReqEOC();
if( wnd != NULL ) {
WndJmpTab[ cmd ]( wnd );
}
}
void WndSysStart( void )
{
#if defined(__UNIX__)
ScrnSpawnStart();
#endif
GUISpawnStart();
}
void WndSysEnd( bool pause )
{
GUISpawnEnd();
#if defined(__UNIX__)
ScrnSpawnEnd();
#endif
pause=pause; // NYI - PUI
}
static bool DoScreenSwap( void )
{
#if defined(__GUI__) && defined(__WINDOWS__)
return( FALSE );
#else
return( _IsOff( SW_REMOTE_LINK ) );
#endif
}
void WndStop( void )
{
if( DoScreenSwap() ) {
WndUser();
}
}
void WndUser( void )
{
if( !(ScrnState & USR_SCRN_ACTIVE) ) {
if( !(ScrnState & USR_SCRN_VISIBLE) ) RemoteSetUserScreen();
ScrnState |= USR_SCRN_ACTIVE | USR_SCRN_VISIBLE;
GUIGMouseOff();
if( UserScreen() ) {
ScrnState |= DBG_SCRN_VISIBLE;
} else {
ScrnState &= ~DBG_SCRN_VISIBLE;
}
}
ScrnState &= ~DBG_SCRN_ACTIVE;
}
void WndDebug( void )
{
if( _IsOn( SW_MIGHT_HAVE_LOST_DISPLAY ) ) {
if( ScrnState & DBG_SCRN_ACTIVE ) {
if( !DebugScreenRecover() ) {
ScrnState &= ~DBG_SCRN_ACTIVE;
}
}
_SwitchOff( SW_MIGHT_HAVE_LOST_DISPLAY );
}
if( !(ScrnState & DBG_SCRN_ACTIVE) ) {
if( !(ScrnState & DBG_SCRN_VISIBLE) ) RemoteSetDebugScreen();
ScrnState |= DBG_SCRN_ACTIVE | DBG_SCRN_VISIBLE;
if( DebugScreen() ) {
ScrnState |= USR_SCRN_VISIBLE;
} else {
ScrnState &= ~USR_SCRN_VISIBLE;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?