static void FileNotify( a_window *wnd, wnd_row row, int piece ) { file_window *file = WndFile( wnd ); address addr; piece = piece; addr = GetRowAddr( file, row, FALSE ); if( IS_NIL_ADDR( addr ) ) return; FileSetDotAddr( wnd, addr ); }
static void FileModify( a_window *wnd, int row, int piece ) { file_window *file = WndFile( wnd ); address addr; if( piece == PIECE_BREAK ) { addr = GetRowAddr( file, row, TRUE ); if( IS_NIL_ADDR( addr ) ) return; file->toggled_break = ( ( WndFlags & UP_BREAK_CHANGE ) == 0 ); ToggleBreak( addr ); WndRowDirty( wnd, row ); } else { WndFirstMenuItem( wnd, row, piece ); } }
static bool FileGetLine( a_window *wnd, int row, int piece, wnd_line_piece *line ) { int len; file_window *file = WndFile( wnd ); address addr; brkp *bp; bool curr; DIPHDL( cue, ch ); line->text = LIT_ENG( Empty ); if( file->viewhndl == NULL && ModHasInfo( file->mod, HK_CUE ) != DS_OK ) { return( false ); } curr = ( row == file->active && ContextMod == file->mod ); switch( piece ) { case PIECE_BREAK: line->tabstop = false; if( row >= file->eof ) return( false ); if( file->mod == NO_MOD ) return( true ); addr = NilAddr; if( !WndDoingSearch ) { // too expensive addr = GetRowAddr( file, row, true ); } if( !IS_NIL_ADDR( addr ) ) { bp = FindBreakByLine( file->mod, file->file_id, row+1 ); FileBreakGadget( wnd, line, curr, bp ); } return( true ); case PIECE_SOURCE: line->text = TxtBuff; line->extent = WND_MAX_EXTEND; if( curr ) line->attr = WND_STANDOUT; if( file->mod != NO_MOD ) { line->indent = MaxGadgetLength; } if( file->viewhndl == NULL ) { Format( TxtBuff, LIT_DUI( No_Source_Line ), row+1 ); if( LineCue( file->mod, file->file_id, 0, 0, ch ) != SR_NONE ) { if( (CueAdjust( ch, -1, ch ) & DS_ERR) ) { file->eof = CueLine( ch ); } } return( true ); } len = FReadLine( file->viewhndl, row+1, 0, TxtBuff, MAX_LINE_LEN ); if( len < 0 ) { file->eof = row; return( false ); } if( len == MAX_LINE_LEN ) { StrCopy( " ...", TxtBuff + MAX_LINE_LEN ); } else { TxtBuff[len] = NULLCHAR; } if( row >= file->rows ) { file->rows = row + 1; file->rows_offset = FLastOffset( file->viewhndl ); } return( true ); default: return( false ); } }
static void FileMenuItem( a_window *wnd, gui_ctl_id id, int row, int piece ) { address addr; mod_handle mod; bool has_addr; bool has_popitem; file_window *file = WndFile( wnd ); piece=piece; addr = GetRowAddr( file, row, id != MENU_FILE_ASSEMBLY ); has_addr = !IS_NIL_ADDR( addr ); switch( id ) { case MENU_INITIALIZE: has_popitem = ( *WndPopItem( wnd ) != NULLCHAR ); if( has_popitem && !ScanSelectedExpr( WndPopItem( wnd ) ) ) { has_popitem = false; } WndMenuEnable( wnd, MENU_FILE_SHOW, true ); WndMenuEnable( wnd, MENU_FILE_SHOW_ADDRESS, true ); WndMenuEnable( wnd, MENU_FILE_SHOW_MODULE, true ); WndMenuEnable( wnd, MENU_FILE_FUNCTIONS, file->mod != NO_MOD ); WndMenuEnable( wnd, MENU_FILE_HOME, true ); addr = GetRowAddr( file, row, false ); WndMenuEnable( wnd, MENU_FILE_ASSEMBLY, !IS_NIL_ADDR( addr ) ); WndMenuEnable( wnd, MENU_FILE_WATCH, has_popitem ); WndMenuEnable( wnd, MENU_FILE_INSPECT, has_popitem ); WndMenuEnable( wnd, MENU_FILE_STEP_INTO, file->mod != NO_MOD && has_popitem ); WndMenuEnable( wnd, MENU_FILE_BREAK, has_popitem ); WndMenuEnable( wnd, MENU_FILE_RUN, has_addr ); WndMenuEnable( wnd, MENU_FILE_SKIP_TO_CURSOR, has_addr ); break; case MENU_FILE_RUN: GoToAddr( addr ); break; case MENU_FILE_SKIP_TO_CURSOR: SkipToAddr( addr ); break; case MENU_FILE_BREAK: BreakOnSelected( WndPopItem( wnd ) ); break; case MENU_FILE_HOME: GoHome(); break; case MENU_FILE_SHOW_MODULE: mod = file->mod; if( DlgModName( LIT_DUI( New_Module ), &mod ) ) { WndModInspect( mod ); } break; case MENU_FILE_SHOW_ADDRESS: if( DlgCodeAddr( LIT_DUI( New_Addr ), &addr ) ) { WndSrcInspect( addr ); } break; case MENU_FILE_STEP_INTO: StepIntoFunction( WndPopItem( wnd ) ); break; case MENU_FILE_INSPECT: WndInspect( WndPopItem( wnd ) ); break; case MENU_FILE_WATCH: WndVarInspect( WndPopItem( wnd ) ); break; case MENU_FILE_SEARCH: WndSaveToHistory( SrchHistory, WndPopItem( wnd ) ); DbgWndSearch( wnd, false, DlgSearch( wnd, SrchHistory ) ); break; case MENU_FILE_ASSEMBLY: AsmWndFind( file->asw, addr, file->track ); break; case MENU_FILE_LINE: GotoLine( wnd ); break; case MENU_FILE_FUNCTIONS: WndFuncInspect( file->mod ); break; } }