static void WndDownOne( a_window *wnd ) { if( !WndAtTop( wnd ) ) { if( WndScroll( wnd, 1 ) != 0 ) { if( WndHasCurrent( wnd ) ) WndMoveUp( wnd ); } } else { WndScroll( wnd, 1 ); } }
static void WndUpOne( a_window *wnd ) { if( !WndAtBottom( wnd ) ) { if( WndScroll( wnd, -1 ) != 0 ) { if( WndHasCurrent( wnd ) ) WndMoveDown( wnd ); } } else { WndScroll( wnd, -1 ); } }
static void WndMoveDown( a_window *wnd ) { if( WndAtBottom( wnd ) ) { WndDirtyCurr( wnd ); WndScroll( wnd, 1 ); if( !WndFindCloseTab( wnd, wnd->current.row ) ) { wnd->current.row--; } WndCurrVisible( wnd ); WndDirtyCurr( wnd ); } else if( WndHasCurrent( wnd ) ) { WndDirtyCurr( wnd ); if( WndFindCloseTab( wnd, wnd->current.row+1 ) ) { wnd->current.row++; } WndCurrVisible( wnd ); WndDirtyCurr( wnd ); } else { if( WndFirstCurrent( wnd ) ) { WndDirtyCurr( wnd ); } } }
static void FileTrack( a_window *wnd, cue_handle *ch ) { unsigned active, old_active; unsigned end_line; int slack; file_window *file = WndFile( wnd ); mod_handle mod; cue_fileid id; wnd_row curr_row; int curr_piece; if( ch == NULL ) { mod = NO_MOD; id = 0; } else { mod = CueMod( ch ); id = CueFileId( ch ); } if( file->viewhndl == NULL || file->mod != mod || file->file_id != id ) { if( file->viewhndl != NULL ) { FDoneSource( file->viewhndl ); } file->mod = mod; file->file_id = id; FileSetDotAddr( wnd, GetCodeDot() ); if( file->mod == NO_MOD ) { file->viewhndl = NULL; } else { file->viewhndl = OpenSrcFile( ch ); } FileSetTitle( wnd, mod ); SeekToTheEnd( file ); file->eof = UINT_MAX; WndZapped( wnd ); FilePosInit( wnd ); file->active = NOT_ACTIVE; FilePos( wnd, 0 ); DbgUpdate( UP_OPEN_CHANGE ); } active = ActiveLine(); if( active != file->active ) { FileSetDotAddr( wnd, GetCodeDot() ); WndGetCurrent( wnd, &curr_row, &curr_piece ); WndNoCurrent( wnd ); if( curr_row != WND_NO_ROW ) { WndRowDirty( wnd, curr_row ); } } old_active = file->active; file->active = NOT_ACTIVE; slack = WndRows( wnd ) / 4; if( slack > 2 ) slack = 2; end_line = WndTop( wnd ) + WndRows( wnd ) - 1; if( old_active == NOT_ACTIVE || active > end_line ) { WndZapped( wnd ); WndScroll( wnd, active - slack - WndTop( wnd ) ); } else if( active > end_line - slack ) { WndRowDirtyImmed( wnd, old_active ); WndScroll( wnd, WndRows( wnd ) - 2 * slack ); } else if( active < WndTop( wnd ) ) { WndRowDirtyImmed( wnd, old_active ); WndScroll( wnd, active - WndTop( wnd ) - slack ); } else { WndRowDirty( wnd, old_active ); } WndNewCurrent( wnd, active, PIECE_SOURCE ); WndRowDirty( wnd, active ); file->active = active; }
static void Centre( a_window *wnd, unsigned line ) { WndZapped( wnd ); WndScroll( wnd, line - ( WndRows( wnd ) / 2 ) - WndTop( wnd ) ); }
void WndPageDown( a_window *wnd ) { WndScroll( wnd, WndPageSize( wnd ) ); }
void WndPageUp( a_window *wnd ) { WndScroll( wnd, -WndPageSize( wnd ) ); }