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

📄 accmisc.c

📁 开放源码的编译器open watcom 1.6.0版的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
            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 + -