* Escape Escape and chars ord(char)<=16

This commit is contained in:
pierre 2002-03-25 11:51:43 +00:00
parent e4ab38f687
commit a70d49311c
2 changed files with 53 additions and 5 deletions

View File

@ -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

View File

@ -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