/* * StatDialog - show task status */ BOOL CALLBACK StatDialog( HWND hwnd, UINT msg,WPARAM wparam, LPARAM lparam ) { WORD cmd; FARPROC fp; StatData *statdata; statdata = (StatData *)GetWindowLong( hwnd, DWL_USER ); fp = fp; switch( msg ) { case STAT_FOREGROUND: #ifdef __NT__ SetForegroundWindow( hwnd ); #else SetActiveWindow( hwnd ); #endif break; case WM_INITDIALOG: InitStatDialog( hwnd ); return( FALSE ); case STAT_MAD_NOTIFY: switch( wparam ) { case MNT_REDRAW_REG: case MNT_MODIFY_REG: DoUpdateWalk( hwnd, (mad_reg_set_data *)lparam ); break; case MNT_MODIFY_IP: case MNT_REDRAW_DISASM: DisplayAsmLines( hwnd, &( statdata->curr_addr ) ); break; } break; case WM_VSCROLL: ScrollAsmDisplay( hwnd, wparam, &( statdata->curr_addr ) ); break; case WM_CLOSE: PostMessage( hwnd, WM_COMMAND, IDCANCEL, 0L ); return( TRUE ); case WM_DESTROY: StatHdl = NULL; MemFree( statdata ); break; case WM_COMMAND: if( HIWORD( wparam ) == CBN_SELCHANGE ) { SwitchRegSets( hwnd, statdata ); break; } cmd = LOWORD( wparam ); switch( cmd ) { #ifndef __NT__ case STAT_SEG_MAP: fp = MakeProcInstance( SegMapDlgProc, Instance ); JDialogBox( Instance, "SEG_MAP_DLG", hwnd, fp ); FreeProcInstance( fp ); break; case STAT_STACK_TRACE: StartStackTraceDialog( hwnd ); break; #else case STAT_SEG_MAP: { HANDLE hdl; ExceptDlgInfo * info; info = StatGetExceptDlgInfo( hwnd ); DuplicateHandle( GetCurrentProcess(), info->procinfo->prochdl, GetCurrentProcess(), &hdl, 0, FALSE, DUPLICATE_SAME_ACCESS ); WalkMemory( hwnd, hdl, info->procinfo->procid ); } break; #endif case STAT_SYMBOLS: if( StatShowSymbols == TRUE ) { StatShowSymbols = FALSE; } else { StatShowSymbols = TRUE; } DisplayAsmLines( hwnd, &( statdata->curr_addr ) ); break; case IDCANCEL: EndDialog( hwnd, 0 ); return( TRUE ); case IDOK: EndDialog( hwnd, 1 ); return( TRUE ); } } return( FALSE ); } /* StatDialog */
/* * StatDialog - show task status */ BOOL FAR PASCAL StatDialog( HWND hwnd, UINT msg, UINT wparam, DWORD lparam ) { WORD cmd; FARPROC fp; fp = fp; lparam = lparam; switch( msg ) { case WM_INITDIALOG: InitStatDialog( hwnd ); oldIntData = IntData; return( TRUE ); break; case WM_VSCROLL: ScrollAsmDisplay( hwnd, wparam, &currAddr, &firstAddr, STAT_DISASM_1, STAT_DISASM_8, STAT_SCROLL ); break; case WM_USER: /* an owned window is being destroyed make sure * Windows doesn't take the focus away from us*/ SetFocus( hwnd ); break; case WM_CLOSE: PostMessage( hwnd, WM_COMMAND, STAT_CANCEL, 0L ); return( TRUE ); case WM_COMMAND: cmd = LOWORD( wparam ); switch( cmd ) { #ifndef __NT__ case STAT_SEG_MAP: fp = MakeProcInstance( SegMapDlgProc, Instance ); JDialogBox( Instance, "SEG_MAP_DLG", hwnd, fp ); FreeProcInstance( fp ); break; case STAT_STACK_TRACE: StartStackTraceDialog( hwnd ); break; #else case STAT_SEG_MAP: { HANDLE hdl; DuplicateHandle( GetCurrentProcess(), processHdl, GetCurrentProcess(), &hdl, 0, FALSE, DUPLICATE_SAME_ACCESS ); WalkMemory( hwnd, hdl, processID ); } break; #endif case STAT_SYMBOLS: StatShowSymbols = !StatShowSymbols; CheckDlgButton( hwnd, STAT_SYMBOLS, ( StatShowSymbols ) ? BST_CHECKED : BST_UNCHECKED ); DisplayAsmLines( hwnd, &currAddr, &firstAddr, STAT_DISASM_1, STAT_DISASM_8, STAT_SCROLL ); break; case STAT_APPLY: GetStatRegisters( hwnd ); InitStatDialog( hwnd ); return( TRUE ); case IDCANCEL: IntData = oldIntData; EndDialog( hwnd, 0 ); return( TRUE ); case IDOK: GetStatRegisters( hwnd ); EndDialog( hwnd, 0 ); return( TRUE ); } } return( FALSE ); } /* StatDialog */