dbgwset.c
来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 683 行 · 第 1/2 页
C
683 行
if( alt->key == key ) break;
}
return( alt->name );
}
static char *AddOn( char *buff, key_desc desc )
{
switch( desc & STATE ) {
case CTRL:
return( StrCopy( STR_CTRL, buff ) );
case SHIFT:
return( StrCopy( STR_SHIFT, buff ) );
case ALT:
return( StrCopy( STR_ALT, buff ) );
default:
return( buff );
}
}
char *KeyName( unsigned key )
{
static char buff[20];
key_name *k;
char *p;
alt_key_name *alt;
for( k = KeyNames; k->key != 0; ++k ) {
if( k->key == key ) {
p = AddOn( buff, k->desc );
StrCopy( KeyNamePieces[ k->desc & ~STATE ], p );
return( buff );
}
}
if( key <= 255 && isprint( key ) ) {
buff[0] = key;
buff[1] = '\0';
return( buff );
}
for( alt = CtrlKeyNames; alt->name != 0; ++alt ) {
if( alt->key == key ) {
p = AddOn( buff, CTRL );
*p++ = alt->name;
*p = '\0';
return( buff );
}
}
for( alt = AltKeyNames; alt->name != 0; ++alt ) {
if( alt->key == key ) {
p = AddOn( buff, ALT );
*p++ = alt->name;
*p = '\0';
return( buff );
}
}
return( NULL );
}
static key_desc StripOff( char **start, unsigned *len,
char *test, key_desc desc )
{
int tlen;
tlen = strlen( test );
if( strnicmp( *start, test, tlen ) == 0 ) {
*start += tlen;
*len -= tlen;
return( desc );
}
return( 0 );
}
static unsigned MapKey( char *start, unsigned len )
{
key_name *k;
key_desc desc;
int i;
alt_key_name *alt;
char ch;
if( len == 1 ) {
return( *start );
}
desc = StripOff( &start, &len, STR_CTRL, CTRL );
desc |= StripOff( &start, &len, STR_SHIFT, SHIFT );
desc |= StripOff( &start, &len, STR_ALT, ALT );
if( len == 1 ) {
alt = NULL;
if( desc == CTRL ) {
alt = CtrlKeyNames;
}
if( desc == ALT ) {
alt = AltKeyNames;
}
if( alt != NULL ) {
ch = tolower( *start );
while( alt->name != 0 ) {
if( alt->name == ch ) {
return( alt->key );
}
++alt;
}
}
}
for( i = 0; i < ArraySize( KeyNamePieces ); ++i ) {
if( strnicmp( KeyNamePieces[i], start, len ) == 0 ) {
if( strlen( KeyNamePieces[i] ) == len ) {
desc += i;
for( k = KeyNames; k->key != 0; ++k ) {
if( k->desc == desc ) return( k->key );
}
return( 0 );
}
}
}
return( 0 );
}
wnd_macro *MacAddDel( unsigned key, wnd_class class, cmd_list *cmds )
{
wnd_macro **owner,*curr;
bool is_main;
owner = &WndMacroList;
for( ;; ) {
curr = *owner;
if( curr == NULL ) break;
if( curr->key == key && curr->class == class ) break;
owner = &curr->link;
}
if( cmds != NULL ) {
if( curr == NULL ) {
_Alloc( curr, sizeof( wnd_macro ) );
if( curr == NULL ) {
FreeCmdList( cmds );
Error( ERR_NONE, LIT( ERR_NO_MEMORY ) );
}
curr->key = key;
curr->class = class;
curr->link = NULL;
curr->menu = NULL;
*owner = curr;
} else {
WndMenuSetHotKey( curr->menu, curr->type == MACRO_MAIN_MENU, LIT( Empty ) );
FreeCmdList( curr->cmd );
}
curr->cmd = cmds;
curr->menu = AddMenuAccel( KeyName( key ), cmds->buff, class, &is_main );
if( curr->menu == NULL ) {
curr->type = MACRO_COMMAND;
} else if( is_main ) {
curr->type = MACRO_MAIN_MENU;
} else {
curr->type = MACRO_POPUP_MENU;
}
} else {
if( curr != NULL ) {
*owner = curr->link;
WndMenuSetHotKey( curr->menu, curr->type == MACRO_MAIN_MENU, LIT( Empty ) );
FreeCmdList( curr->cmd );
_Free( curr );
}
}
DbgUpdate( UP_MACRO_CHANGE );
return( curr );
}
extern void MacroSet( void )
{
wnd_class class;
cmd_list *cmds;
unsigned key;
char *start;
unsigned len;
bool scanned;
char *p,*q;
int i;
class = ReqWndName();
key = 0;
if( ScanItem( TRUE, &start, &len ) ) {
key = MapKey( start, len );
}
if( key == 0 ) Error( ERR_NONE, LIT( ERR_MACRO_NOT_VALID ) );
scanned = ScanItem( TRUE, &start, &len );
ReqEOC();
if( scanned ) {
p = TxtBuff;
q = start;
i = len;
while( isspace( *q ) ) {
++q;
--i;
}
while( --i >= 0 ) {
if( *q != '\r' ) *p++ = *q;
++q;
}
*p = '\0';
cmds = AllocCmdList( TxtBuff, strlen( TxtBuff ) );
} else {
cmds = NULL;
}
MacAddDel( key, class, cmds );
}
extern void MacroConf( void )
{
char wnd_name[20];
wnd_macro *mac;
char *fmt;
for( mac = WndMacroList; mac != NULL; mac = mac->link ) {
GetCmdEntry( WndNameTab, mac->class+1, wnd_name );
if( TxtBuff[ 0 ] == NULLCHAR ) break;
fmt = isspace( mac->key ) ? "%s {%s} {" : "%s %s {";
Format( TxtBuff, fmt, wnd_name, KeyName( mac->key ) );
ConfigLine( TxtBuff );
ConfigCmdList( ((cmd_list*)mac->cmd)->buff, 0 );
WndDlgTxt( "}" );
}
}
extern void FiniMacros( void )
{
wnd_macro *mac;
wnd_macro *junk;
mac = WndMacroList;
while( mac != NULL ) {
junk = mac;
WndMenuSetHotKey( mac->menu, mac->type == MACRO_MAIN_MENU, LIT( Empty ) );
mac = mac->link;
FreeCmdList( junk->cmd );
_Free( junk );
}
WndMacroList = NULL;
}
int TabIntervalGet( void )
{
return( TabInterval );
}
void TabIntervalSet( int new )
{
TabInterval = new;
WndRedraw( WND_FILE );
WndRedraw( WND_SOURCE );
}
extern void TabSet( void )
{
int new;
unsigned old;
old = SetCurrRadix( 10 );
new = ReqExpr();
ReqEOC();
if( new < 0 || new > MAX_TAB ) Error( ERR_NONE, LIT( ERR_BAD_TAB ) );
TabIntervalSet( new );
SetCurrRadix( old );
}
extern void TabConf( void )
{
CnvULongDec( TabInterval, TxtBuff );
ConfigLine( TxtBuff );
}
static char SearchSettings[] = {
"CASEIgnore\0"
"CASEREspect\0"
"Rx\0"
"NORx\0"
};
enum {
SEARCH_IGNORE = 1,
SEARCH_RESPECT,
SEARCH_RX,
SEARCH_NORX
};
extern void SearchSet( void )
{
char *start;
unsigned len;
while( CurrToken == T_DIV ) {
Scan();
switch( ScanCmd( SearchSettings ) ) {
case SEARCH_IGNORE:
SrchIgnoreCase = TRUE;
break;
case SEARCH_RESPECT:
SrchIgnoreCase = FALSE;
break;
case SEARCH_RX:
SrchRX = TRUE;
break;
case SEARCH_NORX:
SrchRX = FALSE;
break;
default:
Error( ERR_LOC, LIT( ERR_BAD_SUBCOMMAND ), GetCmdName( CMD_SET ) );
break;
}
}
if( ScanItem( TRUE, &start, &len ) ) {
if( len > MAX_MAGIC_STR ) len = MAX_MAGIC_STR;
memcpy( SrchMagicChars, start, len );
SrchMagicChars[len] = '\0';
}
ReqEOC();
}
extern void SearchConf( void )
{
char *ptr;
ptr = TxtBuff;
*ptr++ = '/';
ptr = GetCmdEntry( SearchSettings,
SrchIgnoreCase ? SEARCH_IGNORE : SEARCH_RESPECT, ptr );
*ptr++ = '/';
ptr = GetCmdEntry( SearchSettings,
SrchRX ? SEARCH_RX : SEARCH_NORX, ptr );
ptr = StrCopy( " {", ptr );
ptr = StrCopy( SrchMagicChars, ptr );
ptr = StrCopy( "}", ptr );
ConfigLine( TxtBuff );
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?