static void CallMenuItem( a_window *wnd, gui_ctl_id id, int row, int piece ) { call_chain *chain; call_window *call = WndCall( wnd ); piece=piece; chain = GetCallChain( &call->tb, row ); switch( id ) { case MENU_INITIALIZE: if( chain == NULL ) { WndMenuGrayAll( wnd ); } else { WndMenuEnableAll( wnd ); WndMenuEnable( wnd, MENU_CALL_EXECUTE_TO_RETURN, ( row != 0 ) ); WndMenuEnable( wnd, MENU_CALL_SOURCE, ( chain->source_line != NULL ) ); } break; case MENU_CALL_BREAK: DlgBreak( row == 0 ? chain->lc.execution : FindNextIns( chain->lc.execution ) ); break; case MENU_CALL_SOURCE: WndSrcInspect( chain->lc.execution ); break; case MENU_CALL_UNWIND: UnWindToFrame( chain, row, CallNumRows( wnd ) ); break; case MENU_CALL_ASSEMBLY: WndAsmInspect( chain->lc.execution ); break; case MENU_CALL_EXECUTE_TO_RETURN: GoToAddr( FindNextIns( chain->lc.execution ) ); break; } }
static void FuncMenuItem( a_window *wnd, gui_ctl_id id, int row, int piece ) { address addr; func_window *func = WndFunc( wnd ); piece=piece; addr = ( row == WND_NO_ROW ) ? NilAddr : NameListAddr( NameList( func ), row ); switch( id ) { case MENU_INITIALIZE: if( IS_NIL_ADDR( addr ) ) { WndMenuGrayAll( wnd ); } else { WndMenuEnableAll( wnd ); WndMenuEnable( wnd, MENU_FUNCTIONS_SOURCE, HasLineInfo( addr ) ); } WndMenuEnable( wnd, MENU_FUNCTIONS_D2_ONLY, TRUE ); WndMenuCheck( wnd, MENU_FUNCTIONS_D2_ONLY, func->d2_only ); break; case MENU_FUNCTIONS_SOURCE: WndSrcInspect( addr ); break; case MENU_FUNCTIONS_ASSEMBLY: WndAsmInspect( addr ); break; case MENU_FUNCTIONS_BREAK: DlgBreak( addr ); break; case MENU_FUNCTIONS_D2_ONLY: func->d2_only = !func->d2_only; FuncNewOptions( wnd ); break; } }
static void RepMenuItem( a_window *wnd, gui_ctl_id id, int row, int piece ) { event_record *ev; ev = RepGetEvent( row ); wnd=wnd;piece=piece; switch( id ) { case MENU_INITIALIZE: WndMenuGrayAll( wnd ); if( ev != NULL ) { WndMenuEnable( wnd, MENU_REPLAY_GOTO, true ); if( !IS_NIL_ADDR( ev->ip ) ) { WndMenuEnable( wnd, MENU_REPLAY_SOURCE, true ); WndMenuEnable( wnd, MENU_REPLAY_ASSEMBLY, true ); } } break; case MENU_REPLAY_SOURCE: WndSrcInspect( ev->ip ); break; case MENU_REPLAY_ASSEMBLY: WndAsmInspect( ev->ip ); break; case MENU_REPLAY_GOTO: ReplayTo( ev ); break; } }
static void BrkModify( a_window *wnd, int row, int piece ) { brkp *bp; if( row < 0 ) { BrkMenuItem( wnd, MENU_BREAK_CREATE_NEW, row, piece ); return; } bp = BrkGetBP( row ); if( bp == NULL ) return; if( piece == PIECE_ACTIVE ) { WndRowDirty( wnd, row ); WndBreak( wnd )->toggled_break = true; ActPoint( bp, !bp->status.b.active ); #ifdef OPENER_GADGET } else if( piece == PIECE_OPENER ) { if( bp->size == 0 ) { if( bp->source_line != NULL ) { WndSrcInspect( bp->loc.addr ); } else { WndAsmInspect( bp->loc.addr ); } } #endif } else { WndFirstMenuItem( wnd, row, piece ); } }
extern a_window *WndSrcOrAsmInspect( address addr ) { a_window *wnd; wnd = DoWndSrcInspect( addr, true ); if( wnd != NULL ) return( wnd ); wnd = WndAsmInspect( addr ); return( wnd ); }
static void ModMenuItem( a_window *wnd, unsigned id, int row, int piece ) { address addr; mod_handle handle; mod_window *mod = WndMod( wnd ); piece=piece; handle = NO_MOD; addr = NilAddr; if( ModListNumRows( ModList( mod ) ) != 0 && row >= 0 ) { handle = ModListMod( ModList( mod ), row ); if( handle != NO_MOD ) { addr = ModFirstAddr( handle ); } } switch( id ) { case MENU_INITIALIZE: WndMenuGrayAll( wnd ); if( handle != NO_MOD ) { WndMenuEnable( wnd, MENU_MODULES_BREAK_SET_ALL, TRUE ); WndMenuEnable( wnd, MENU_MODULES_BREAK_CLEAR_ALL, TRUE ); WndMenuEnable( wnd, MENU_MODULES_ASSEMBLY, !IS_NIL_ADDR( addr ) ); WndMenuEnable( wnd, MENU_MODULES_FUNCTIONS, TRUE ); if( ModHasSourceInfo( handle ) ) { WndMenuEnable( wnd, MENU_MODULES_SOURCE, TRUE ); } } WndMenuEnable( wnd, MENU_MODULES_SHOW_ALL, TRUE ); WndMenuCheck( wnd, MENU_MODULES_SHOW_ALL, mod->all_modules ); break; case MENU_MODULES_BREAK_SET_ALL: BreakAllModEntries( handle ); break; case MENU_MODULES_BREAK_CLEAR_ALL: ClearAllModBreaks( handle ); break; case MENU_MODULES_SOURCE: if( IS_NIL_ADDR( addr ) ) { ModName( handle, TxtBuff, TXT_LEN ); WndFileInspect( TxtBuff, FALSE ); } else { WndSrcInspect( addr ); } break; case MENU_MODULES_ASSEMBLY: WndAsmInspect( addr ); break; case MENU_MODULES_FUNCTIONS: WndFuncInspect( handle ); break; case MENU_MODULES_SHOW_ALL: mod->all_modules = !mod->all_modules; ModInit( wnd ); break; } }
void AsmExam( void ) { address addr; // bool prompt; addr = GetCodeDot(); OptMemAddr( EXPR_CODE, &addr ); // prompt = true; ReqEOC(); WndAsmInspect( addr ); }
void DlgCmd( void ) { char buff[256]; printf( "DBG>" ); fflush( stdout ); // not really necessary gets( buff ); if( buff[0] != NULLCHAR && buff[1] == NULLCHAR ) { switch( tolower( buff[0] ) ) { case 'u': WndAsmInspect( GetCodeDot() ); break; case 's': DumpSource(); break; case 'l': DumpLocals(); break; case 'i': RunRequest( REQ_TRACE_INTO ); break; case 'o': RunRequest( REQ_TRACE_OVER ); break; case 'g': RunRequest( REQ_GO ); break; case 'x': if( _IsOn( SW_REMOTE_LINK ) ) { printf( "Can't break remote task!\n" ); } else { HMODULE hmod; PFN proc = NULL; DosQueryModuleHandle( TrapParms, &hmod ); DosQueryProcAddr( hmod, 5, 0, &proc ); // if( proc != NULL ) // proc(); } // break the task break; default: printf( "Error - unrecognized command\n" ); } } else { DoCmd( DupStr( buff ) ); DoInput(); } }
void DlgCmd( void ) { char buff[256]; printf( "DBG>" ); fflush( stdout ); gets( buff ); if( buff[0] != NULLCHAR && buff[1] == NULLCHAR ) { switch( tolower( buff[0] ) ) { case 'u': WndAsmInspect( GetCodeDot() ); break; case 's': DumpSource(); break; case 'l': DumpLocals(); break; case 'i': RunRequest( REQ_TRACE_INTO ); break; case 'o': RunRequest( REQ_TRACE_OVER ); break; case 'g': RunRequest( REQ_GO ); break; case 'x': if( _IsOn( SW_REMOTE_LINK ) ) { printf( "Can't break remote task!\n" ); } else { HANDLE hmod; FARPROC proc; hmod = GetModuleHandle( TrapParms ); proc = GetProcAddress( hmod, (LPSTR)5 ); if( proc != NULL ) proc(); CloseHandle( hmod ); } // break the task break; default: printf( "Error - unrecognized command\n" ); } } else { DoCmd( DupStr( buff ) ); DoInput(); } }
static void BrkMenuItem( a_window *wnd, gui_ctl_id id, int row, int piece ) { brkp *bp; piece=piece; if( row < 0 ) { bp = NULL; } else { bp = BrkGetBP( row ); } switch( id ) { case MENU_INITIALIZE: if( bp != NULL ) { WndMenuEnableAll( wnd ); WndMenuEnable( wnd, MENU_BREAK_ENABLE, !bp->status.b.active ); WndMenuEnable( wnd, MENU_BREAK_DISABLE, bp->status.b.active ); WndMenuEnable( wnd, MENU_BREAK_SOURCE, bp != NULL && IS_BP_EXECUTE( bp->th ) ); WndMenuEnable( wnd, MENU_BREAK_ASSEMBLY, bp != NULL && IS_BP_EXECUTE( bp->th ) ); } else { WndMenuGrayAll( wnd ); } WndMenuEnable( wnd, MENU_BREAK_CREATE_NEW, true ); break; case MENU_BREAK_ENABLE: ActPoint( bp, true ); break; case MENU_BREAK_DISABLE: ActPoint( bp, false ); break; case MENU_BREAK_CREATE_NEW: if( DlgBreak( NilAddr ) ) WndScrollBottom( wnd ); break; case MENU_BREAK_CLEAR: RemoveBreak( bp->loc.addr ); break; case MENU_BREAK_MODIFY: DlgBreak( bp->loc.addr ); break; case MENU_BREAK_SOURCE: WndSrcInspect( bp->loc.addr ); break; case MENU_BREAK_ASSEMBLY: WndAsmInspect( bp->loc.addr ); break; } }