extern void GlobMenuItem( a_window *wnd, unsigned id, int row, int piece ) { glob_window *glob = WndGlob( wnd ); address addr; char buff[TXT_LEN]; piece=piece; addr = NameListAddr( NameList( glob ), row ); switch( id ) { case MENU_INITIALIZE: if( IS_NIL_ADDR( addr ) ) { WndMenuGrayAll( wnd ); } else { WndMenuEnableAll( wnd ); } WndMenuEnable( wnd, MENU_GLOB_D2_ONLY, TRUE ); WndMenuCheck( wnd, MENU_GLOB_D2_ONLY, glob->d2_only ); break; case MENU_GLOB_INSPECT_MEMORY: WndAddrInspect( addr ); break; case MENU_GLOB_WATCH: NameListName( NameList( glob ), row, buff, SN_QUALIFIED ); WndVarInspect( buff ); break; case MENU_GLOB_D2_ONLY: glob->d2_only = !glob->d2_only; GlobInit( wnd ); break; default: 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 bool FuncGetLine( a_window *wnd, int row, int piece, wnd_line_piece *line ) { address addr; func_window *func = WndFunc( wnd ); if( row >= NameListNumRows( NameList( func ) ) ) return( FALSE ); addr = NameListAddr( NameList( func ), row ); switch( piece ) { case PIECE_BREAK: FileBreakGadget( wnd, line, FALSE, FindBreak( addr ) ); return( TRUE ); case PIECE_NAME: line->indent = MaxGadgetLength; line->text = TxtBuff; line->extent = WND_MAX_EXTEND; FuncGetSourceName( wnd, row ); return( TRUE ); case PIECE_DEMANGLED: if( NameListName( NameList( func ), row, TxtBuff, SN_DEMANGLED ) == 0 ) { return( FALSE ); } line->text = TxtBuff; line->use_prev_attr = TRUE; line->indent = MaxGadgetLength + func->max_name + 2 * WndAvgCharX( wnd ); return( TRUE ); default: return( FALSE ); } }
void BreakAllModEntries( mod_handle handle ) { name_list list; address addr; int i; bool have_mod_cue; sym_info sinfo; DIPHDL( cue, ch ); DIPHDL( cue, ch_mod ); NameListInit( &list, WF_CODE ); NameListAddModules( &list, handle, false, true ); have_mod_cue = FindFirstCue( handle, ch_mod ); for( i = 0; i < NameListNumRows( &list ); ++i ) { addr = NameListAddr( &list, i ); SymInfo( NameListHandle( &list, i ), NULL, &sinfo ); if( !sinfo.is_global && !sinfo.is_public ) continue; if( have_mod_cue && DeAliasAddrCue( handle, addr, ch ) != SR_NONE ) { if( CueFileId( ch ) != CueFileId( ch_mod ) ) { continue; } } if( FindBreak( addr ) != NULL ) { continue; } AddBreak( addr ); } NameListFree( &list ); }
static void FuncModify( a_window *wnd, int row, int piece ) { address addr; func_window *func = WndFunc( wnd ); if( piece == PIECE_BREAK ) { if( row < 0 ) return; if( row >= NameListNumRows( NameList( func ) ) ) return; addr = NameListAddr( NameList( func ), row ); func->toggled_break = ( ( UpdateFlags & UP_BREAK_CHANGE ) == 0 ); ToggleBreak( addr ); WndRowDirty( wnd, row ); } else { WndFirstMenuItem( wnd, row, piece ); } }