📄 accmisc.c
字号:
break;
case STATUS_ARRAY_BOUNDS_EXCEEDED:
strcpy( err_txt, TRP_EXC_bounds_check );
break;
case STATUS_FLOAT_DENORMAL_OPERAND:
strcpy( err_txt, TRP_EXC_floating_point_denormal_operand );
break;
case STATUS_FLOAT_DIVIDE_BY_ZERO:
strcpy( err_txt, TRP_EXC_floating_point_divide_by_zero );
break;
case STATUS_FLOAT_INEXACT_RESULT:
strcpy( err_txt, TRP_EXC_floating_point_inexact_result );
break;
case STATUS_FLOAT_INVALID_OPERATION:
strcpy( err_txt, TRP_EXC_floating_point_invalid_operation );
break;
case STATUS_FLOAT_OVERFLOW:
strcpy( err_txt, TRP_EXC_floating_point_overflow );
break;
case STATUS_FLOAT_STACK_CHECK:
strcpy( err_txt, TRP_EXC_floating_point_stack_check );
break;
case STATUS_FLOAT_UNDERFLOW:
strcpy( err_txt, TRP_EXC_floating_point_underflow );
break;
case STATUS_INTEGER_DIVIDE_BY_ZERO:
strcpy( err_txt, TRP_EXC_integer_divide_by_zero );
break;
case STATUS_INTEGER_OVERFLOW:
strcpy( err_txt, TRP_EXC_integer_overflow );
break;
case STATUS_PRIVILEGED_INSTRUCTION:
strcpy( err_txt, TRP_EXC_privileged_instruction );
break;
case STATUS_STACK_OVERFLOW:
strcpy( err_txt, TRP_NT_status_stack_overflow );
break;
default:
strcpy( err_txt, TRP_EXC_unknown );
wsprintf( err_txt, "%s (0x%8.8lx)", TRP_EXC_unknown,
LastExceptionCode );
}
LastExceptionCode = -1;
}
return( sizeof( *ret ) + strlen( err_txt ) + 1 );
}
unsigned ReqGet_next_alias( void )
{
get_next_alias_ret *ret;
ret = GetOutPtr( 0 );
ret->seg = 0;
ret->alias = 0;
return( sizeof( *ret ) );
}
static DWORD DoFmtMsg( LPTSTR *p, DWORD err, ... )
{
va_list args;
DWORD len;
LPSTR q;
DWORD options;
va_start( args, err );
options = FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM;
len = FormatMessage( options, NULL, err,
MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), ( LPSTR )p, 0, &args );
while( ( q = strchr( *p, '\r' ) ) != NULL ) {
*q = ' ';
}
while( ( q = strchr( *p, '\n' ) ) != NULL ) {
*q = ' ';
}
va_end( args );
return( len );
}
void AddMessagePrefix( char *buff, int len )
/******************************************/
{
if( len == 0 ) {
len = strlen( buff ) + 1;
}
if( MsgPrefix != NULL ) {
LocalFree( MsgPrefix );
}
MsgPrefix = LocalAlloc( LMEM_FIXED, len );
strcpy( MsgPrefix, buff );
}
unsigned ReqGet_err_text( void )
{
get_err_text_req *acc;
char *err_txt;
LPTSTR lpMessageBuffer;
DWORD len;
char buff[20];
acc = GetInPtr( 0 );
err_txt = GetOutPtr( 0 );
if( acc->err >= 0x30000000L || acc->err < 0x20000000L ) {
len = DoFmtMsg( &lpMessageBuffer, acc->err, "%1", "%2", "%3", "%4" );
if( len > 0 ) {
if( MsgPrefix != NULL ) {
strcpy( err_txt, MsgPrefix );
strcat( err_txt, ": " );
strcat( err_txt, lpMessageBuffer );
LocalFree( MsgPrefix );
MsgPrefix = NULL;
} else {
strcpy( err_txt, lpMessageBuffer );
}
LocalFree( lpMessageBuffer );
}
} else {
strcpy( err_txt, "Unknown error code: " );
itoa( acc->err, buff, 16 );
strcat( err_txt, buff );
}
return( strlen( err_txt ) + 1 );
}
static int tryPath( char *name, char *end, char *ext_list )
{
char *p;
BOOL done;
HANDLE h;
done = FALSE;
do {
if( *ext_list == 0 ) {
done = 1;
}
for( p = end; (*p = *ext_list) != 0; ++p,++ext_list ) {
}
h = CreateFile( name, GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
if( h != ( HANDLE ) - 1 ) {
CloseHandle( h );
return( 0 );
}
++ext_list;
} while( !done );
return( -1 );
}
int FindFilePath( char *pgm, char *buffer, char *ext_list )
{
char *p;
char *p2;
char *p3;
BOOL have_ext;
BOOL have_path;
char envbuf[512];
have_ext = FALSE;
have_path = FALSE;
for( p = pgm, p2 = buffer; (*p2 = *p) != 0; ++p, ++p2 ) {
switch( *p ) {
case '\\':
case '/':
case ':':
have_path = TRUE;
have_ext = FALSE;
break;
case '.':
have_ext = TRUE;
break;
}
}
if( have_ext ) {
ext_list = "";
}
if( !tryPath( buffer, p2, ext_list ) ) {
return( 0 );
}
if( have_path ) {
return( TRUE );
}
GetEnvironmentVariable( "PATH", envbuf, sizeof( envbuf ) );
p = envbuf;
for( ;; ) {
if( *p == '\0' ) {
break;
}
p2 = buffer;
while( *p ) {
if( *p == ';' ) {
break;
}
*p2++ = *p++;
}
if( p2[ -1] != '\\' && p2[ -1] != '/' ) {
*p2++ = '\\';
}
for( p3 = pgm; (*p2 = *p3) != 0; ++p2, ++p3 ) {
}
if( !tryPath( buffer, p2, ext_list ) ) {
return( 0 );
}
if( *p == '\0' ) {
break;
}
++p;
}
return( -1 );
}
unsigned ReqSplit_cmd( void )
{
char *cmd;
char *start;
split_cmd_ret *ret;
unsigned len;
cmd = GetInPtr( sizeof( split_cmd_req ) );
len = GetTotalSize() - sizeof( split_cmd_req );
start = cmd;
ret = GetOutPtr( 0 );
ret->parm_start = 0;
for( ;; ) {
if( len == 0 )
goto done;
switch( *cmd ) {
case '/':
case '=':
case '(':
case ';':
case ',':
goto done;
case '\0':
case ' ':
case '\t':
ret->parm_start = 1;
goto done;
case '\"':
while( --len && (*++cmd != '\"') )
;
if( len == 0 ) {
ret->parm_start = 1;
goto done;
}
}
++cmd;
--len;
}
done:
ret->parm_start += cmd - start;
ret->cmd_end = cmd - start;
return( sizeof( *ret ) );
}
unsigned ReqRead_io( void )
{
return( 0 );
}
unsigned ReqWrite_io( void )
{
write_io_ret *ret;
ret = GetOutPtr( 0 );
ret->len = 0;
return( sizeof( *ret ) );
}
unsigned ReqSet_user_screen( void )
{
return( 0 );
}
unsigned ReqSet_debug_screen( void )
{
ProcessQueuedRepaints();
return( 0 );
}
void say( char *fmt, ... )
{
va_list args;
char buff[512];
va_start( args, fmt );
vsprintf( buff, fmt, args );
va_end( args );
MessageBox( NULL, buff, TRP_The_WATCOM_Debugger, MB_SYSTEMMODAL + MB_OK );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -