mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-19 00:39:34 +02:00
* Escape Escape and chars ord(char)<=16
This commit is contained in:
parent
e4ab38f687
commit
a70d49311c
@ -102,6 +102,9 @@ begin
|
||||
textattr:=Buffer[i*linesize+j] shr 8;
|
||||
if (textattr<>CurColor) and not SaveAsText then
|
||||
ChangeColor(textattr);
|
||||
{ Escape escape, by printing two #27 PM }
|
||||
if (ch=#27) or (ord(ch)<=16) then
|
||||
Write(f,#27);
|
||||
Write(f,ch);
|
||||
end;
|
||||
writeln(f);
|
||||
@ -112,7 +115,10 @@ end;
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.2 2001-11-15 13:30:14 pierre
|
||||
Revision 1.3 2002-03-25 11:51:43 pierre
|
||||
* Escape Escape and chars ord(char)<=16
|
||||
|
||||
Revision 1.2 2001/11/15 13:30:14 pierre
|
||||
+ save ansi dump as text is filename suffix is '.txt'
|
||||
|
||||
Revision 1.1 2001/08/04 11:30:23 peter
|
||||
|
@ -93,6 +93,7 @@ type
|
||||
procedure Write(Const S: string); virtual;
|
||||
procedure WriteLn(Const S: string); virtual;
|
||||
procedure WriteChar(C: char); virtual;
|
||||
procedure WriteCharRaw(C: char); virtual;
|
||||
procedure DelLine(LineCount: integer); virtual;
|
||||
procedure InsLine(LineCount: integer); virtual;
|
||||
procedure HighVideo; virtual;
|
||||
@ -169,6 +170,7 @@ type
|
||||
procedure ClrScr; virtual;
|
||||
procedure ClrEol; virtual;
|
||||
procedure WriteChar(C: char); virtual;
|
||||
procedure WriteCharRaw(C: char); virtual;
|
||||
procedure DelLine(LineCount: integer); virtual;
|
||||
procedure InsLine(LineCount: integer); virtual;
|
||||
procedure UpdateCursor; virtual;
|
||||
@ -294,6 +296,11 @@ begin
|
||||
Abstract;
|
||||
end;
|
||||
|
||||
procedure TConsoleObject.WriteCharRaw(C: char);
|
||||
begin
|
||||
Abstract;
|
||||
end;
|
||||
|
||||
procedure TConsoleObject.Write(Const S: string); {assembler;
|
||||
asm
|
||||
push ds
|
||||
@ -501,14 +508,38 @@ var SkipThis : boolean;
|
||||
X,Y,Z : integer;
|
||||
begin
|
||||
SkipThis:=false;
|
||||
if C=Esc then begin ANSILevel:=1; SkipThis:=true; end else
|
||||
if (ANSILevel=1) then
|
||||
if C=Esc then
|
||||
begin
|
||||
{ Treat EscEsc as a request to print a single Escape #27 char PM }
|
||||
if AnsiLevel=0 then
|
||||
begin
|
||||
ANSILevel:=1;
|
||||
SkipThis:=true;
|
||||
end
|
||||
else
|
||||
begin
|
||||
AnsiLevel:=0;
|
||||
WriteCharRaw(c);
|
||||
SkipThis:=true;
|
||||
end;
|
||||
end
|
||||
else if (ANSILevel=1) then
|
||||
begin
|
||||
ANSILevel:=0;
|
||||
case C of
|
||||
'[' : begin ANSILevel:=2; SkipThis:=true; end;
|
||||
'[' : begin
|
||||
ANSILevel:=2;
|
||||
SkipThis:=true;
|
||||
end;
|
||||
else
|
||||
{ Treat Esc+ AnyChar as a request to print that single char raw PM }
|
||||
begin
|
||||
WriteCharRaw(c);
|
||||
SkipThis:=true;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
if SkipThis=false then
|
||||
if (ANSILevel=2)
|
||||
then begin
|
||||
@ -708,6 +739,14 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TANSIViewConsole.WriteCharRaw(C: char);
|
||||
var Pos: longint;
|
||||
begin
|
||||
Pos:=(CurPos.Y-1)*MaxViewWidth+(WhereX-1);
|
||||
Owner^.Buffer^[Pos]:=ord(C)+256*word(TextAttr);
|
||||
GotoXY(WhereX+1,WhereY);
|
||||
end;
|
||||
|
||||
procedure TANSIViewConsole.DelLine(LineCount: integer);
|
||||
begin
|
||||
Abstract;
|
||||
@ -1052,7 +1091,10 @@ end;
|
||||
END.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.2 2001-08-12 00:04:50 pierre
|
||||
Revision 1.3 2002-03-25 11:51:43 pierre
|
||||
* Escape Escape and chars ord(char)<=16
|
||||
|
||||
Revision 1.2 2001/08/12 00:04:50 pierre
|
||||
* some speed improvements for string operations
|
||||
|
||||
Revision 1.1 2001/08/04 11:30:25 peter
|
||||
|
Loading…
Reference in New Issue
Block a user