BOOL __export FAR PASCAL SegMapDlgProc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam ) { char buff[128]; WORD i; WORD seg; lparam = lparam; switch( msg ) { case WM_INITDIALOG: /* * fill out segment mappings */ SetDlgCourierFont( hwnd, SEGMAP_LIST ); SendDlgItemMessage( hwnd, SEGMAP_LIST, LB_RESETCONTENT, 0, 0L ); for( i=0; i<= 1024; i++ ) { seg = NumToAddr( DTTaskEntry.hModule, i ); if( seg != 0 ) { sprintf( buff,"%04d->%04x", i, seg ); SendDlgItemMessage( hwnd, SEGMAP_LIST, LB_ADDSTRING, 0, (LONG)(LPSTR)buff ); } } break; case WM_COMMAND: switch( wparam ) { case IDOK: EndDialog( hwnd, 0 ); break; case SEGMAP_LIST: if( HIWORD( lparam ) == LBN_DBLCLK ) { GLOBALENTRY ge; char str[100]; int sel; sel = SendDlgItemMessage( hwnd, SEGMAP_LIST, LB_GETCURSEL, 0, 0L ); SendDlgItemMessage( hwnd, SEGMAP_LIST, LB_GETTEXT, sel, (DWORD) (LPSTR) str ); str[4] = 0; seg = atoi( str ); if( DoGlobalEntryModule( &ge, DTTaskEntry.hModule, seg ) ) { DispMem( Instance, hwnd, ge.hBlock, (ge.dwSize == 1) ); } } break; default: return( FALSE ); } break; default: return( FALSE ); } return( TRUE ); }
static void fillExceptionDlg( HWND hwnd, ExceptDlgInfo *info ) { char buf[BUF_SIZE]; char fname[ FNAME_BUFLEN ]; DWORD line; ProcStats stats; HWND ctl; address addr; GetCurrAddr(&addr,info->regs); SetDlgCourierFont( hwnd, INT_TASK_NAME ); SetDlgCourierFont( hwnd, INT_TASK_PATH ); SetDlgCourierFont( hwnd, INT_FAULT_TYPE ); SetDlgCourierFont( hwnd, INT_CS_IP ); SetDlgCourierFont( hwnd, INT_SOURCE_INFO ); SetDlgCourierFont( hwnd, INT_SOURCE_INFO2 ); RCsprintf( buf, STR_EXCEPTION_ENCOUNTERED, AppName ); SetWindowText( hwnd, buf ); CopyRCString( STR_PROCESS_NAME, buf, BUF_SIZE ); SetDlgItemText( hwnd, INT_TASK_NAME_TEXT, buf ); if( !info->dbinfo->u.Exception.dwFirstChance ) { if( ConfigData.exception_action == INT_CHAIN_TO_NEXT ) { ConfigData.exception_action = INT_TERMINATE; } ctl = GetDlgItem( hwnd, INT_CHAIN_TO_NEXT ); EnableWindow( ctl, FALSE ); } CheckDlgButton( hwnd, ConfigData.exception_action, BST_CHECKED ); CopyRCString( STR_PROCESS_ID, buf, BUF_SIZE ); SetDlgItemText( hwnd, INT_TASK_PATH_TEXT, buf ); while( !GetProcessInfo( info->procinfo->procid, &stats ) ) { Sleep( 100 ); RefreshInfo(); } SetDlgItemText( hwnd, INT_TASK_NAME, stats.name ); sprintf( buf, "%08lX", info->procinfo->procid ); SetDlgItemText( hwnd, INT_TASK_PATH, buf ); FormatException( buf, info->dbinfo->u.Exception.ExceptionRecord.ExceptionCode ); SetDlgItemText( hwnd, INT_FAULT_TYPE, buf ); if( info->threadinfo != NULL ) { strcpy( buf, "Fault " ); MADRegSpecialName( MSR_IP, info->regs, MAF_FULL, BUF_SIZE - 7, buf+6 ); SetDlgItemText( hwnd, INT_IP_NAME, buf ); SetIp( hwnd, &addr ); } if( info->got_dbginfo && GetLineNum( &addr,fname, FNAME_BUFLEN, &line ) ) { RCsprintf( buf, STR_LINE_X_OF, line ); SetDlgItemText( hwnd, INT_SOURCE_INFO, buf ); SetDlgItemText( hwnd, INT_SOURCE_INFO2, fname ); } else { CopyRCString( STR_N_A, buf, BUF_SIZE ); SetDlgItemText( hwnd, INT_SOURCE_INFO, buf ); SetDlgItemText( hwnd, INT_SOURCE_INFO2, "" ); } }
/* * InitStatDialog */ static void InitStatDialog( HWND hwnd ) { int i; char buff[256]; ExceptDlgInfo *info; syminfo si; CreateRegListData data; StatData *statdata; RECT c_rect; HWND combo; info = StatGetExceptDlgInfo( hwnd ); StatHdl = hwnd; statdata = MemAlloc( sizeof( StatData ) ); /* * fill in source information */ GetCurrAddr( &( statdata->curr_addr ), info->regs ); if( FindWatSymbol( &( statdata->curr_addr ), &si, TRUE ) == FOUND ) { RCsprintf( buff, STR_SRC_INFO_FMT, si.linenum, si.filename ); StatShowSymbols = TRUE; CheckDlgButton( hwnd, STAT_SYMBOLS, ( StatShowSymbols ) ? BST_CHECKED : BST_UNCHECKED ); } else { RCsprintf( buff, STR_N_A ); StatShowSymbols = FALSE; EnableWindow( GetDlgItem( hwnd, STAT_SYMBOLS ), FALSE ); } SetDlgMonoFont( hwnd, STAT_SRC_INFO ); SetDlgItemText( hwnd, STAT_SRC_INFO, buff ); #ifdef __NT__ { ProcStats procinfo; HWND button; if( GetProcessInfo( info->procinfo->procid, &procinfo ) ) { RCsprintf( buff, STR_STATUS_4_PROC_X, info->procinfo->procid, procinfo.name ); SetWindowText( hwnd, buff ); } CopyRCString( STR_VIEW_MEM_HT_KEY, buff, sizeof( buff ) ); SetDlgItemText( hwnd, STAT_SEG_MAP, buff ); button = GetDlgItem( hwnd, STAT_STACK_TRACE ); ShowWindow( button, SW_HIDE ); } #endif InstructionBackward( 2, &( statdata->curr_addr ) ); for( i = STAT_DISASM_1;i <= STAT_DISASM_8; i++ ) { SetDlgCourierFont( hwnd, i ); } DisplayAsmLines( hwnd, &( statdata->curr_addr ) ); data.index = 0; data.parent = hwnd; data.max_len = 0; combo = GetDlgItem( hwnd, STAT_REGISTER_COMBO ); MADRegSetWalk( MTK_ALL, CreateAllRegLists, &data ); if( data.index == 1 ) { SendMessage( combo, CB_GETLBTEXT, (WPARAM)0, (LPARAM)buff ); SetDlgItemText( hwnd, STAT_REGISTER_SET, buff ); DestroyWindow( combo ); } else { GetChildPos( hwnd, combo, &c_rect ); SendMessage( combo, CB_SETCURSEL, (WPARAM)0, (LPARAM)0 ); c_rect.right += data.max_len; c_rect.bottom += SendMessage( combo, CB_GETITEMHEIGHT, 0, 0 ) * ( data.index + 1); MoveWindow( combo, c_rect.left, c_rect.top, c_rect.right, c_rect.bottom, FALSE ); } SetFocus( GetDlgItem( hwnd, IDOK ) ); statdata->reg_set_index = 0; SetWindowLong(hwnd,DWL_USER,(LONG)statdata); } /* InitStatDialog */
/* * InitStatDialog */ static void InitStatDialog( HWND hwnd ) { int i; char buff[256]; syminfo si; ADDRESS addr; SetDWORDEditField( hwnd, STAT_AX, IntData.EAX ); SetDWORDEditField( hwnd, STAT_BX, IntData.EBX ); SetDWORDEditField( hwnd, STAT_CX, IntData.ECX ); SetDWORDEditField( hwnd, STAT_DX, IntData.EDX ); SetDWORDEditField( hwnd, STAT_SI, IntData.ESI ); SetDWORDEditField( hwnd, STAT_DI, IntData.EDI ); SetDWORDEditField( hwnd, STAT_BP, IntData.EBP ); SetWORDEditField( hwnd, STAT_DS, IntData.DS ); SetWORDEditField( hwnd, STAT_ES, IntData.ES ); SetWORDEditField( hwnd, STAT_FS, IntData.FS ); SetWORDEditField( hwnd, STAT_GS, IntData.GS ); SetWORDEditField( hwnd, STAT_CS, IntData.CS ); SetDWORDEditField( hwnd, STAT_IP, IntData.EIP ); SetWORDEditField( hwnd, STAT_SS, IntData.SS ); SetDWORDEditField( hwnd, STAT_SP, IntData.ESP ); CheckDlgButton( hwnd, STAT_FLAG_A, ( IntData.EFlags & FLAG_A_MASK ) ? BST_CHECKED : BST_UNCHECKED ); CheckDlgButton( hwnd, STAT_FLAG_C, ( IntData.EFlags & FLAG_C_MASK ) ? BST_CHECKED : BST_UNCHECKED ); CheckDlgButton( hwnd, STAT_FLAG_D, ( IntData.EFlags & FLAG_D_MASK ) ? BST_CHECKED : BST_UNCHECKED ); CheckDlgButton( hwnd, STAT_FLAG_I, ( IntData.EFlags & FLAG_I_MASK ) ? BST_CHECKED : BST_UNCHECKED ); CheckDlgButton( hwnd, STAT_FLAG_Z, ( IntData.EFlags & FLAG_Z_MASK ) ? BST_CHECKED : BST_UNCHECKED ); CheckDlgButton( hwnd, STAT_FLAG_S, ( IntData.EFlags & FLAG_S_MASK ) ? BST_CHECKED : BST_UNCHECKED ); CheckDlgButton( hwnd, STAT_FLAG_P, ( IntData.EFlags & FLAG_P_MASK ) ? BST_CHECKED : BST_UNCHECKED ); CheckDlgButton( hwnd, STAT_FLAG_O, ( IntData.EFlags & FLAG_O_MASK ) ? BST_CHECKED : BST_UNCHECKED ); CheckDlgButton( hwnd, STAT_SYMBOLS, ( StatShowSymbols ) ? BST_CHECKED : BST_UNCHECKED ); /* * fill in source information */ addr.seg = IntData.CS; addr.offset = IntData.EIP; if( FindWatSymbol( &addr, &si, TRUE ) == FOUND ) { RCsprintf( buff, STR_SRC_INFO_FMT, si.linenum, si.filename ); } else { RCsprintf( buff, STR_N_A ); } SetDlgMonoFont( hwnd, STAT_SRC_INFO ); SetDlgItemText( hwnd, STAT_SRC_INFO, buff ); #ifdef __NT__ { ProcStats procinfo; HWND button; if( GetProcessInfo( processID, &procinfo ) ) { RCsprintf( buff, STR_STATUS_4_PROC_X, processID, procinfo.name ); SetWindowText( hwnd, buff ); } CopyRCString( STR_VIEW_MEM_HT_KEY, buff, sizeof( buff ) ); SetDlgItemText( hwnd, STAT_SEG_MAP, buff ); button = GetDlgItem( hwnd, STAT_STACK_TRACE ); ShowWindow( button, SW_HIDE ); } #endif /* * display code, starting 2 instructions before hand */ currAddr.seg = IntData.CS; currAddr.offset = IntData.EIP; firstAddr = currAddr; InstructionBackup( 2, &currAddr ); for( i=STAT_DISASM_1;i<=STAT_DISASM_8;i++ ) { SetDlgCourierFont( hwnd, i ); } DisplayAsmLines( hwnd, &currAddr, &firstAddr, STAT_DISASM_1, STAT_DISASM_8, STAT_SCROLL ); } /* InitStatDialog */