X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Fdrv%2Fvterm_output.c;h=532d2686376cbcd04f9072ffa47390f3259cd941;hb=e67143f45c221a11825e573c77ca0de0163fe7be;hp=357132c03ecdd00a7f2544805236ea8f214dfa9b;hpb=533ed3e53b3b16da86c4e792eb52e0570e2cd21f;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/drv/vterm_output.c b/KernelLand/Kernel/drv/vterm_output.c index 357132c0..532d2686 100644 --- a/KernelLand/Kernel/drv/vterm_output.c +++ b/KernelLand/Kernel/drv/vterm_output.c @@ -96,8 +96,6 @@ void VT_int_UpdateCursor( tVTerm *Term, int bShow ) } else if( Term->Mode == TERM_MODE_TEXT ) { - int offset; - // if( !(Term->Flags & VT_FLAG_SHOWCSR) // && ( (Term->Flags & VT_FLAG_HIDECSR) || !Term->Node.ReadThreads) // ) @@ -108,13 +106,9 @@ void VT_int_UpdateCursor( tVTerm *Term, int bShow ) } else { - if(Term->Flags & VT_FLAG_ALTBUF) - offset = Term->AltWritePos; - else - offset = Term->WritePos - Term->ViewPos; - - csr_pos.x = offset % Term->TextWidth; - csr_pos.y = offset / Term->TextWidth; + const tVT_Pos *wrpos = VT_int_GetWritePosPtr(Term); + csr_pos.x = wrpos->Col; + csr_pos.y = wrpos->Row - (Term->Flags & VT_FLAG_ALTBUF ? 0 : Term->ViewTopRow); if( 0 > csr_pos.y || csr_pos.y >= Term->TextHeight ) csr_pos.y = -1, csr_pos.x = -1; } @@ -133,17 +127,15 @@ void VT_int_UpdateCursor( tVTerm *Term, int bShow ) */ void VT_int_UpdateScreen( tVTerm *Term, int UpdateAll ) { - tVT_Char *buffer; - int view_pos, write_pos; // Only update if this is the current terminal if( Term != gpVT_CurTerm ) return; switch( Term->Mode ) { - case TERM_MODE_TEXT: - view_pos = (Term->Flags & VT_FLAG_ALTBUF) ? 0 : Term->ViewPos; - write_pos = (Term->Flags & VT_FLAG_ALTBUF) ? Term->AltWritePos : Term->WritePos; - buffer = (Term->Flags & VT_FLAG_ALTBUF) ? Term->AltBuf : Term->Text; + case TERM_MODE_TEXT: { + size_t view_pos = (Term->Flags & VT_FLAG_ALTBUF) ? 0 : Term->ViewTopRow*Term->TextWidth; + const tVT_Pos *wrpos = VT_int_GetWritePosPtr(Term); + const tVT_Char *buffer = (Term->Flags & VT_FLAG_ALTBUF) ? Term->AltBuf : Term->Text; // Re copy the entire screen? if(UpdateAll) { VFS_WriteAt( @@ -155,7 +147,7 @@ void VT_int_UpdateScreen( tVTerm *Term, int UpdateAll ) } // Only copy the current line else { - int ofs = write_pos - write_pos % Term->TextWidth; + size_t ofs = wrpos->Row * Term->TextWidth; VFS_WriteAt( giVT_OutputDevHandle, (ofs - view_pos)*sizeof(tVT_Char), @@ -163,7 +155,7 @@ void VT_int_UpdateScreen( tVTerm *Term, int UpdateAll ) &buffer[ofs] ); } - break; + break; } case TERM_MODE_FB: break; }