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 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; } }
void CheckBPErrors( void ) { brkp *bp; brkp *next; for( bp = BrkList; bp != NULL; bp = next ) { next = bp->next; if( bp->status.b.expr_error || bp->status.b.cmd_error ) { DlgBreak( bp->loc.addr ); } } }