static a_window *DoWndSrcInspect( address addr, bool existing ) { a_window *wnd; // bool nil; mod_handle mod; DIPHDL( cue, ch ); a_window *active; active = WndFindActive(); // nil = false; if( IS_NIL_ADDR( addr ) ) { // nil = true; addr = Context.execution; } wnd = NULL; if( existing ) { wnd = WndFindExisting( WND_SOURCE ); } if( wnd == NULL ) { if( DeAliasAddrMod( addr, &mod ) == SR_NONE || DeAliasAddrCue( mod, addr, ch ) == SR_NONE ) { ch = NULL; } wnd = DoWndSrcOpen( ch, existing ); } if( !SrcMoveDot( wnd, addr ) || !SrcHasFileOpen( wnd ) ) { if( active != NULL ) WndRestoreToFront( active ); return( NULL ); } return( wnd ); }
extern a_window *WndModInspect( mod_handle mod ) { a_window *wnd; DIPHDL( cue, ch ); wnd = WndFindExisting( WND_SOURCE ); if( wnd == NULL && LineCue( mod, 0, 0, 0, ch ) != SR_NONE ) { wnd = DoWndSrcOpen( ch, true ); } if( wnd != NULL ) { SrcMoveDot( wnd, ModFirstAddr( mod ) ); } return( wnd ); }
static void AsmSetDotAddr( a_window *wnd, address addr ) { mod_handle mod; asm_window *asw = WndAsm( wnd ); if( AddrComp( asw->dotaddr, addr ) != 0 ) { WndRowDirty( wnd, -TITLE_SIZE ); asw->dotaddr = addr; DeAliasAddrMod( addr, &mod ); if( mod != asw->mod ) { DbgUpdate( UP_OPEN_CHANGE ); asw->mod = mod; AsmSetTitle( wnd ); } if( IS_NIL_ADDR( addr ) ) return; if( wnd == WndFindActive() ) { SrcMoveDot( asw->src, addr ); SetCodeDot( addr ); } } }