From 2cf4b55f0122b2d755f7a7dbb180e7dcd624b0bb Mon Sep 17 00:00:00 2001 From: marco Date: Sat, 11 Mar 2006 22:06:12 +0000 Subject: [PATCH] Merged revisions 1353,2869 via svnmerge from svn+ssh://marco@svn.freepascal.org/FPC/svn/fpc/trunk ........ r1353 | peter | 2005-10-11 08:36:07 +0200 (Tue, 11 Oct 2005) | 2 lines * support for MCBS from bug #4211 ........ r2869 | marco | 2006-03-11 22:33:51 +0100 (Sat, 11 Mar 2006) | 2 lines * fix for double-write bug, probably in since r1353 ........ git-svn-id: branches/fixes_2_0@2871 - --- rtl/win32/crt.pp | 42 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/rtl/win32/crt.pp b/rtl/win32/crt.pp index c89ec067a0..7386c7e448 100644 --- a/rtl/win32/crt.pp +++ b/rtl/win32/crt.pp @@ -638,21 +638,57 @@ begin end; { while } end; + +procedure WriteStr(const s: string); +var + WritePos: Coord; { Upper-left cell to write from } + numWritten : DWord; + WinAttr : word; + i: integer; +begin + WritePos.X := currX - 1; + WritePos.Y := currY - 1; + + WriteConsoleOutputCharacter(GetStdhandle(STD_OUTPUT_HANDLE), @s[1], Length(s), writePos, numWritten); + + WinAttr:=TextAttr; + dec(WritePos.X); + for i:=0 to Length(s)-1 do + begin + inc(WritePos.X); + WriteConsoleOutputAttribute(GetStdhandle(STD_OUTPUT_HANDLE),@WinAttr, 1, writePos, numWritten); + end; + Inc(CurrX,Length(s)); +end; + + Function CrtWrite(var f : textrec) : integer; var i : longint; + s : string; begin GetScreenCursor(CurrX, CurrY); - + s:=''; for i:=0 to f.bufpos-1 do - WriteChar(f.buffer[i]); + if f.buffer[i] in [#7,#8,#10,#13] then // special chars directly. + begin + if s<>'' then + begin + WriteStr(s); + s:=''; + end; + WriteChar(f.buffer[i]); + end + else + s:=s+f.buffer[i]; + if s<>'' then + WriteStr(s); SetScreenCursor(CurrX, CurrY); f.bufpos:=0; CrtWrite:=0; end; - Function CrtRead(Var F: TextRec): Integer; procedure BackSpace;