void ReMapPoints( image_entry *image ) { brkp *bp; for( bp = BrkList; bp != NULL; bp = bp->next ) { switch( ReMapOnePoint( bp, image ) ) { case REMAP_ERROR: ActPoint( bp, false ); bp->status.b.activate_on_remap = true; break; case REMAP_REMAPPED: bp->countdown = bp->initial_countdown; bp->total_hits = 0; break; } } if( UserTmpBrk.status.b.has_address ) { switch( ReMapOnePoint( &UserTmpBrk, image ) ) { case REMAP_ERROR: // nobody cares about this warning!! Warn( LIT_ENG( WARN_Unable_To_Remap_Tmp ) ); UserTmpBrk.status.b.active = false; 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 ); } }
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; } }
static remap_return ReMapOnePoint( brkp *bp, image_entry *image ) { mod_handle himage, mod; bool ok; address addr; DIPHDL( cue, ch ); DIPHDL( cue, ch2 ); remap_return rc = REMAP_REMAPPED; if( !bp->status.b.unmapped ) return( REMAP_WRONG_IMAGE ); if( bp->image_name == NULL || bp->mod_name == NULL ) { if( image == NULL ) { if( ReMapAddress( &bp->loc ) ) { rc = REMAP_REMAPPED; } else { rc = REMAP_ERROR; } } else { rc = ReMapImageAddress( &bp->loc, image ); } } else { himage = LookupImageName( bp->image_name, strlen( bp->image_name ) ); if( himage == NO_MOD ) return( REMAP_ERROR ); mod = LookupModName( himage, bp->mod_name, strlen( bp->mod_name ) ); if( mod == NO_MOD ) return( REMAP_ERROR ); ok = GetBPSymAddr( bp, &addr ); if( !ok ) return( REMAP_ERROR ); if( bp->cue_diff != 0 ) { if( DeAliasAddrCue( mod, addr, ch ) != SR_EXACT ) return( REMAP_ERROR ); if( LineCue( mod, CueFileId( ch ), CueLine( ch ) + bp->cue_diff, 0, ch2 ) != SR_EXACT ) return( REMAP_ERROR ); addr = CueAddr( ch2 ); } if( bp->addr_diff != 0 ) { addr.mach.offset += bp->addr_diff; } bp->loc.addr = addr; rc = REMAP_REMAPPED; } if( rc == REMAP_REMAPPED ) { bp->status.b.unmapped = false; } SetPointAddr( bp, bp->loc.addr ); if( bp->status.b.activate_on_remap ) { ActPoint( bp, true ); } return( rc ); }
extern void ToggleBreak( address addr ) { brkp *bp; if( IS_NIL_ADDR( addr ) ) return; bp = FindBreak( addr ); if( bp == NULL ) { AddBreak( addr ); } else if( bp->status.b.active ) { ActPoint( bp, FALSE ); } else { RemovePoint( bp ); } }