static void RegRefresh( a_window *wnd ) { int row,rows; int reg_num; int i; reg_window *reg = WndReg( wnd ); reg_display_piece disp; // if register type changes, from 16 to 32-bit, // this will force the mad to call back NOW, setting UP_REG_RESIZE GetDisplayPiece( &disp, reg, DbgRegs, 0 ); if( UpdateFlags & UP_REG_RESIZE ) { RegResize( wnd ); WndZapped( wnd ); return; } if( UpdateFlags & UP_MAD_CHANGE ) { WndZapped( wnd ); return; } rows = RegNumRows( wnd ); for( row = 0; row < rows; ++row ) { for( reg_num = 0; reg_num < reg->up; ++reg_num ) { i = GetRegIdx( reg, row, reg_num ); if( i == -1 ) break; if( reg->info[i].standout || ( reg->info[i].info != NULL && MADRegModified( reg->data, reg->info[i].info, &PrevRegs->mr, &DbgRegs->mr ) != MS_OK ) ) { WndPieceDirty( wnd, row, reg_num*2+1 ); } } } }
static void BrkRefresh( a_window *wnd ) { brkp *bp; int row; if( UpdateFlags & BrkInfo.flags & ~(UP_OPEN_CHANGE|UP_MEM_CHANGE) ) { BrkInit( wnd ); } else if( UpdateFlags & UP_MEM_CHANGE ) { row = 0; for( bp = BrkList; bp != NULL; bp = bp->next ) { if( !IS_BP_EXECUTE( bp->th ) ) { WndPieceDirty( wnd, row, PIECE_SOURCE ); } ++row; } } #ifdef OPENER_GADGET { int i; brkp *bp; mod_handle mh; if( UpdateFlags & UP_OPEN_CHANGE ) { for( i = 0, bp = BrkList; bp != NULL; bp = bp->next, ++i ) { DeAliasAddrMod( bp->loc.addr, &mh ); bp->status.b.source_open = CheckOpenGadget( wnd, i, bp->status.b.source_open, mh, bp->source_line != NULL, PIECE_OPENER ); } } } #endif }
OVL_EXTERN void IOMenuItem( a_window wnd, gui_ctl_id id, wnd_row row, wnd_piece piece ) { io_window *io = WndIO( wnd ); address addr; bool ok; item_mach item; io_location *curr; mad_radix old_radix; /* unused parameters */ (void)piece; if( row < io->num_rows && row >= 0 ) { curr = &io->list[row]; } else { curr = NULL; } switch( id ) { case MENU_INITIALIZE: if( curr == NULL ) { WndMenuGrayAll( wnd ); } else { WndMenuEnableAll( wnd ); } WndMenuEnable( wnd, MENU_IO_NEW_ADDRESS, true ); break; case MENU_IO_DELETE: io->num_rows--; memcpy( &io->list[row], &io->list[row + 1], ( io->num_rows - row ) * sizeof( io_location ) ); WndNoSelect( wnd ); WndSetRepaint( wnd ); break; case MENU_IO_NEW_ADDRESS: addr = NilAddr; if( !DlgGivenAddr( LIT_DUI( New_Port_Addr ), &addr ) ) return; WndRowDirty( wnd, io->num_rows ); IOAddNewAddr( wnd, &addr, MENU_IO_FIRST_TYPE ); WndScrollBottom( wnd ); break; case MENU_IO_MODIFY: if( row >= io->num_rows || row < 0 ) break; if( piece == PIECE_VALUE ) { old_radix = NewCurrRadix( IOData.info[curr->type].piece_radix ); item.ud = curr->value_known ? curr->value.ud : 0; ok = DlgMadTypeExpr( TxtBuff, &item, IOData.info[curr->type].mth ); if( ok ) { curr->value = item; curr->value_known = true; } NewCurrRadix( old_radix ); } else { addr = curr->addr; if( !DlgGivenAddr( LIT_DUI( New_Port_Addr ), &addr ) ) return; curr->addr = addr; curr->value_known = false; } WndRowDirty( wnd, row ); break; case MENU_IO_READ: curr->value_known = true; if( ItemGetMAD( &curr->addr, &curr->value, IT_IO, IOData.info[curr->type].mth ) == IT_NIL ) { curr->value_known = false; } WndPieceDirty( wnd, row, PIECE_VALUE ); break; case MENU_IO_WRITE: if( curr->value_known ) { ItemPutMAD( &curr->addr, &curr->value, IT_IO, IOData.info[curr->type].mth ); } break; default: curr->type = PIECE_TYPE( id ); WndZapped( wnd ); break; } }