2
0
Michaël Van Canneyt 2 жил өмнө
parent
commit
a8a778395b
37 өөрчлөгдсөн 654 нэмэгдсэн , 654 устгасан
  1. 20 20
      packages/rtl-console/src/amicommon/crt.pp
  2. 5 5
      packages/rtl-console/src/amicommon/keyboard.pp
  3. 8 8
      packages/rtl-console/src/amicommon/vidcrt.pp
  4. 13 13
      packages/rtl-console/src/amicommon/video.pp
  5. 12 12
      packages/rtl-console/src/emx/crt.pp
  6. 6 6
      packages/rtl-console/src/go32v2/crt.pp
  7. 2 2
      packages/rtl-console/src/go32v2/vesamode.pp
  8. 3 3
      packages/rtl-console/src/inc/crt.inc
  9. 1 1
      packages/rtl-console/src/inc/crth.inc
  10. 8 8
      packages/rtl-console/src/inc/keyboard.inc
  11. 11 11
      packages/rtl-console/src/inc/keybrdh.inc
  12. 1 1
      packages/rtl-console/src/inc/keyscan.inc
  13. 4 4
      packages/rtl-console/src/inc/video.inc
  14. 6 6
      packages/rtl-console/src/msdos/crt.pp
  15. 2 2
      packages/rtl-console/src/msdos/vesamode.pp
  16. 4 4
      packages/rtl-console/src/netware/crt.pp
  17. 37 37
      packages/rtl-console/src/netware/nwsys.inc
  18. 6 6
      packages/rtl-console/src/netwlibc/crt.pp
  19. 8 8
      packages/rtl-console/src/os2/crt.pp
  20. 29 29
      packages/rtl-console/src/unix/crt.pp
  21. 362 362
      packages/rtl-console/src/unix/keyboard.pp
  22. 1 1
      packages/rtl-console/src/unix/mouse.pp
  23. 37 37
      packages/rtl-console/src/unix/terminfo.pp
  24. 1 1
      packages/rtl-console/src/unix/unixkvmbase.pp
  25. 30 30
      packages/rtl-console/src/unix/video.pp
  26. 6 6
      packages/rtl-console/src/watcom/crt.pp
  27. 7 7
      packages/rtl-console/src/win/crt.pp
  28. 6 6
      packages/rtl-console/src/win/keyboard.pp
  29. 1 1
      packages/rtl-console/src/win/video.pp
  30. 5 5
      packages/rtl-console/src/win16/crt.pp
  31. 1 1
      packages/rtl-console/tests/kbd1.pp
  32. 2 2
      packages/rtl-console/tests/kbd2.pp
  33. 1 1
      packages/rtl-console/tests/kbdbdump.pp
  34. 1 1
      packages/rtl-console/tests/kbddump.pp
  35. 4 4
      packages/rtl-console/tests/kbdutil.pp
  36. 1 1
      packages/rtl-console/tests/video4.pp
  37. 2 2
      packages/rtl-console/tests/vidutil.pp

+ 20 - 20
packages/rtl-console/src/amicommon/crt.pp

@@ -65,15 +65,15 @@ const
 
 var
   // multiple keys
-  LastKeys: string = '';
+  LastKeys: Shortstring = '';
   Pens: array[0..15] of LongInt;
   FGPen: Byte = Black;
   BGPen: Byte = LightGray;
 
 
-function IntToStr(i: LongInt): AnsiString;
+function IntToStr(i: LongInt): ShortString;
 var
-  s: AnsiString;
+  s: ShortString;
 begin
   Str(i, s);
   IntToStr := s;
@@ -187,7 +187,7 @@ var
   fh: BPTR;
   Actual: Integer;
   Width, Height: LongInt;
-  report: array[0..25] of Char;
+  report: array[0..25] of AnsiChar;
   ToSend: AnsiString;
   Start, Ende: LongInt;
 begin
@@ -220,13 +220,13 @@ begin
           Inc(Ende);
         end;
         // skip over #$9b'1;1;'
-        if GetIntValues(PChar(@report[Start + 5]), Height, Width) then
+        if GetIntValues(PAnsiChar(@report[Start + 5]), Height, Width) then
         begin
           Pt.X := Width + 1;
           Pt.Y := Height + 1;
         end
         else
-          sysdebugln('scan failed. ' + PChar(@report[Start + 5]));
+          sysdebugln('scan failed. ' + PAnsiChar(@report[Start + 5]));
       end;
       //SetMode(fh, 0); // Normal mode
     end;
@@ -263,7 +263,7 @@ var
   fh: BPTR;
   Actual: Integer;
   PosX, PosY: LongInt;
-  report: array[0..25] of Char;
+  report: array[0..25] of AnsiChar;
   ToSend: AnsiString;
   Start, Ende: LongInt;
 begin
@@ -296,13 +296,13 @@ begin
           Inc(Ende);
         end;
         // skip over #$9b
-        if GetIntValues(PChar(@report[Start + 1]), PosY, PosX) then
+        if GetIntValues(PAnsiChar(@report[Start + 1]), PosY, PosX) then
         begin
           Pt.X := PosX;
           Pt.Y := PosY;
         end
         else
-          sysdebugln('scan failed. ' +  PChar(@report[Start + 1]));
+          sysdebugln('scan failed. ' +  PAnsiChar(@report[Start + 1]));
       end;
       //SetMode(fh, 0); // Normal mode
     end;
@@ -397,11 +397,11 @@ begin
   GotoXY(1, 1);
 end;
 
-function WaitForKey: string;
+function WaitForKey: ShortString;
 var
   OutP: BPTR; // Output file handle
-  Res: Char; // Char to get from console
-  Key: string; // result
+  Res: AnsiChar; // AnsiChar to get from console
+  Key: ShortString; // result
 begin
   Key := '';
   OutP := DosOutput();
@@ -442,9 +442,9 @@ end;
 
 type
   TKeyMap = record
-    con: string;
-    c1: Char;
-    c2: Char;
+    con: ShortString;
+    c1: AnsiChar;
+    c2: AnsiChar;
   end;
 const
   KeyMapping: array[0..37] of TKeyMap =
@@ -492,9 +492,9 @@ const
      (con: #155' @'; c1: #0; c2:#68;)  // Shift Cursor Left
      );
 
-function ReadKey: Char;
+function ReadKey: AnsiChar;
 var
-  Res: string;
+  Res: ShortString;
   i: Integer;
 begin
   // we got a key to sent
@@ -704,7 +704,7 @@ begin
   WindMaxY := MaxRows - 1;
 end;
 
-procedure WriteChar(c: Char; var Curr: TPoint; var s: AnsiString);
+procedure WriteChar(c: AnsiChar; var Curr: TPoint; var s: AnsiString);
 //var
 //  i: Integer;
 var
@@ -730,7 +730,7 @@ begin
     begin
       // all other Chars
       s := s + c;
-      //sysdebugln(' Char: ' + c + ' ' + IntToStr(Curr.X) + ' ' + IntToStr(Curr.Y) + ' - ' + IntToStr(WindMinY) + ' ' + IntToStr(WindMaxY));
+      //sysdebugln(' AnsiChar: ' + c + ' ' + IntToStr(Curr.X) + ' ' + IntToStr(Curr.Y) + ' - ' + IntToStr(WindMinY) + ' ' + IntToStr(WindMaxY));
       case c of
         #10: begin
           if WindMinX > 0 then
@@ -788,7 +788,7 @@ end;
 
 Procedure CrtRead(Var F: TextRec);
 var
-  ch : Char;
+  ch : AnsiChar;
 
   procedure BackSpace;
   begin

+ 5 - 5
packages/rtl-console/src/amicommon/keyboard.pp

@@ -184,7 +184,7 @@ begin
     LastShiftState := LastShiftState or $40;
 end;
 
-procedure AnsiToIBMChar(var c: Char); inline;
+procedure AnsiToIBMChar(var c: AnsiChar); inline;
 begin
   // https://en.wikipedia.org/wiki/Code_page_437
   case c of
@@ -232,7 +232,7 @@ begin
   end;
 end;
 
-procedure IBMToAnsiChar(var c: Char); inline;
+procedure IBMToAnsiChar(var c: AnsiChar); inline;
 begin
   case c of
     // line 8
@@ -314,7 +314,7 @@ var
   MouseX: LongInt;
   MouseY: LongInt;
   KeyUp: Boolean;        // Event is a key up event
-  Buff: array[0..19] of Char;
+  Buff: array[0..19] of AnsiChar;
   ie: TInputEvent;       // for mapchar
   IAddr: Pointer;
 begin
@@ -454,7 +454,7 @@ begin
             ICode := 72;
           if ICode = 123 then
             ICode := 73;
-          // get char from rawkey
+          // get AnsiChar from rawkey
           KeyUp := (ICode and IECODE_UP_PREFIX) <> 0;   // is key up
           ICode := ICode and not IECODE_UP_PREFIX;      // remove key up from ICode
           ie.ie_Class := IECLASS_RAWKEY;
@@ -718,7 +718,7 @@ end;
 procedure InitSystemEventWait;
 var
   initOK: boolean;
-  envBuf: array[0..15] of char;
+  envBuf: array[0..15] of AnsiChar;
 begin
   {.$if not defined(AMIGA_V1_2_ONLY)}
   if GetVar('FPC_DOKEYCONVERSION',@envBuf,sizeof(envBuf),0) > -1 then

+ 8 - 8
packages/rtl-console/src/amicommon/vidcrt.pp

@@ -16,7 +16,7 @@ var
   BGPen: Byte = 0;
   WinRect: TRect;
 
-  LastKeys: array[0..1] of Char;
+  LastKeys: array[0..1] of AnsiChar;
   LastKeysIdx: Integer = -1;
 
 
@@ -25,26 +25,26 @@ begin
   PosToArray := px + py * ScreenWidth;
 end;
 
-procedure SetChar(p: Integer; c: Char); overload;
+procedure SetChar(p: Integer; c: AnsiChar); overload;
 begin
   if (p >= 0) and (p < VideoBufSize) then
     VideoBuf^[p] := (BGPen shl 12) or (FGPen shl 8) or Byte(c);
 end;
 
-procedure SetChar(x,y: Integer; c: Char); overload;
+procedure SetChar(x,y: Integer; c: AnsiChar); overload;
 begin
   SetChar(PosToArray(x,y), c);
 end;
 
 procedure ProcessKeyEvent(NKey: TKeyEvent);
 var
-  c1: Char;
+  c1: AnsiChar;
 begin
   c1 := GetKeyEventChar(NKey);
   if c1 = #0 then
   begin
     LastKeys[1] := #0;
-    LastKeys[0] := Char((NKey shr 8) and $FF);
+    LastKeys[0] := AnsiChar((NKey shr 8) and $FF);
     LastKeysIdx := 1;
     case LastKeys[0] of
       #28: begin LastKeys[0] := #13; LastKeysIdx := 0; end; // Enter
@@ -63,7 +63,7 @@ begin
   KeyPressed := (LastKeysIdx >= 0) or (PollKeyEvent <> 0);
 end;
 
-function ReadKey: Char;
+function ReadKey: AnsiChar;
 var
   NKey: TKeyEvent;
 begin
@@ -243,7 +243,7 @@ begin
   end;
 end;
 
-procedure WriteChar(c: Char);
+procedure WriteChar(c: AnsiChar);
 var
   NX,NY: Integer;
 begin
@@ -293,7 +293,7 @@ end;
 
 Procedure CrtRead(Var F: TextRec);
 var
-  ch : Char;
+  ch : AnsiChar;
 
   procedure BackSpace;
   begin

+ 13 - 13
packages/rtl-console/src/amicommon/video.pp

@@ -122,12 +122,12 @@ end;
 Function GetScreen: pScreen;
 begin
   GetScreen:=_OpenScreenTags(nil,[
-    SA_Title          , PtrUInt(PChar(VIDEOSCREENNAME)),
+    SA_Title          , PtrUInt(PAnsiChar(VIDEOSCREENNAME)),
     SA_Left           , 0,
     SA_Top            , 0,
     SA_ShowTitle      , 0,    // Do not show the screen's TitleBar
     SA_Type           , PUBLICSCREEN_F, // pubscreen
-    SA_PubName        , PtrUInt(PChar(VIDEOSCREENNAME)),
+    SA_PubName        , PtrUInt(PAnsiChar(VIDEOSCREENNAME)),
     SA_Draggable      , 1,
     SA_Quiet          , 1,
     SA_LikeWorkbench  , 1,     // Let OS
@@ -175,7 +175,7 @@ const
 
 Function GetWindow: PWindow;
 var
-  envBuf: array[0..15] of char;
+  envBuf: array[0..15] of AnsiChar;
   videoDefaultFlags: PtrUInt;
 begin
   videoDefaultFlags:=VIDEO_WFLG_DEFAULTS;
@@ -216,7 +216,7 @@ begin
       WA_InnerHeight, LastH*VideoFontHeight,
       WA_MaxWidth   , 32768,
       WA_MaxHeight  , 32768,
-      WA_Title      , PtrUInt(PChar('FPC Video Window Output')),
+      WA_Title      , PtrUInt(PAnsiChar('FPC Video Window Output')),
       WA_Activate   , 1,
       WA_FLAGS      , (videoDefaultFlags or
                        WFLG_DRAGBAR       or WFLG_DEPTHGADGET   or WFLG_SIZEGADGET or
@@ -253,7 +253,7 @@ var
   P: PWord;
   flags: DWord;
   i: LongInt;
-  envBuf: array[0..15] of char;
+  envBuf: array[0..15] of AnsiChar;
 begin
 {$IFDEF MORPHOS}
   InitGraphicsLibrary;
@@ -552,7 +552,7 @@ begin
 
   if crType = crUnderLine then
   begin
-    { draw two lines at the bottom of the char, in case of underline cursor }
+    { draw two lines at the bottom of the AnsiChar, in case of underline cursor }
     if videoFontHeight = 8 then
       begin
         GfxMove(rp, sX, sY + 7); Draw(rp, sX + 7, sY + 7);
@@ -649,7 +649,7 @@ begin
     end;
     {$ifdef VideoSpeedTest}
     if NumChanged > 100 then
-      writeln('redraw time: ', floattoStrF((Now-t)* 24 * 60 * 60 * 1000000 / NumChanged, fffixed, 8,3), ' us/char' ); // ms
+      writeln('redraw time: ', floattoStrF((Now-t)* 24 * 60 * 60 * 1000000 / NumChanged, fffixed, 8,3), ' us/AnsiChar' ); // ms
     {$endif}
   end;
 
@@ -817,21 +817,21 @@ var
 
 procedure SetWindowTitle(const winTitle: AnsiString; const screenTitle: AnsiString);
 var
-  winT: PChar;
-  screenT: PChar;
+  winT: PAnsiChar;
+  screenT: PAnsiChar;
 begin
   globWinT:=winTitle;
   globScreenT:=screenTitle;
   if VideoWindow <> nil then
   begin
     if globWinT = '' then
-      winT:=PChar(PtrInt(-1))
+      winT:=PAnsiChar(PtrInt(-1))
     else
-      winT:=PChar(globWinT);
+      winT:=PAnsiChar(globWinT);
     if globScreenT = '' then
-      screenT:=PChar(PtrInt(-1))
+      screenT:=PAnsiChar(PtrInt(-1))
     else
-      screenT:=PChar(globScreenT);
+      screenT:=PAnsiChar(globScreenT);
     SetWindowTitles(VideoWindow, winT, screenT);
   end;
 end;

+ 12 - 12
packages/rtl-console/src/emx/crt.pp

@@ -30,13 +30,13 @@ var
 
 implementation
 
-const   extkeycode:char=#0;
+const   extkeycode:AnsiChar=#0;
 
 var maxrows,maxcols:word;
     calibration:longint;
 
 type    Tkbdkeyinfo=record
-            charcode,scancode:char;
+            charcode,scancode:AnsiChar;
             fbstatus,bnlsshift:byte;
             fsstate:word;
             time:longint;
@@ -105,9 +105,9 @@ function viogetcurpos(var row,column:word;viohandle:longint):word; cdecl;
                       external 'EMXWRAP' index 109;
 function viosetcurpos(row,column,viohandle:longint):word; cdecl;
                       external 'EMXWRAP' index 115;
-function viowrtTTY(s:Pchar;len,viohandle:longint):word; cdecl;
+function viowrtTTY(s:PAnsiChar;len,viohandle:longint):word; cdecl;
                       external 'EMXWRAP' index 119;
-function viowrtcharstratt(s:Pchar;len,row,col:longint;var attr:byte;
+function viowrtcharstratt(s:PAnsiChar;len,row,col:longint;var attr:byte;
                           viohandle:longint):word; cdecl;
                           external 'EMXWRAP' index 148;
 function viogetmode(var Amodeinfo:viomodeinfo;viohandle:longint):word; cdecl;
@@ -314,12 +314,12 @@ begin
         end;
 end;
 
-function readkey:char;
+function readkey:AnsiChar;
 
 {Reads the next character from the keyboard.}
 
 var Akeyrec:Tkbdkeyinfo;
-    c,s:char;
+    c,s:AnsiChar;
 
 begin
     if extkeycode<>#0 then
@@ -543,17 +543,17 @@ begin
 end;
 
 {$ASMMODE INTEL}
-procedure writePchar(s:Pchar;len:word);
+procedure writePchar(s:PAnsiChar;len:word);
 
 {Write a series of characters to the screen.
 
  Not very fast, but is just text-mode isn't it?}
 
 var x,y:word;
-    c:char;
+    c:AnsiChar;
     i,n:integer;
     screl:word;
-    ca:Pchar;
+    ca:PAnsiChar;
 
 begin
     i:=0;
@@ -624,8 +624,8 @@ function crtread(var f:textrec):word;
 {Read a series of characters from the console.}
 
 var max,curpos:integer;
-    c:char;
-    clist:array[0..2] of char;
+    c:AnsiChar;
+    clist:array[0..2] of AnsiChar;
 
 begin
     max:=f.bufsize-2;
@@ -671,7 +671,7 @@ function crtwrite(var f:textrec):word;
 {Write a series of characters to the console.}
 
 begin
-    writePchar(Pchar(f.bufptr),f.bufpos);
+    writePchar(PAnsiChar(f.bufptr),f.bufpos);
     f.bufpos:=0;
     crtwrite:=0;
 end;

+ 6 - 6
packages/rtl-console/src/go32v2/crt.pp

@@ -309,12 +309,12 @@ End;
 
 var
    is_last : boolean;
-   last    : char;
+   last    : AnsiChar;
 
-function readkey : char;
+function readkey : AnsiChar;
 var
-  char2 : char;
-  char1 : char;
+  char2 : AnsiChar;
+  char1 : AnsiChar;
   regs : trealregs;
 begin
   if is_last then
@@ -550,7 +550,7 @@ end;
 var
   CurrX,CurrY : longint;
 
-Procedure WriteChar(c:char);
+Procedure WriteChar(c:AnsiChar);
 var
   regs : trealregs;
 begin
@@ -612,7 +612,7 @@ Procedure CrtRead(Var F: TextRec);
   end;
 
 var
-  ch : Char;
+  ch : AnsiChar;
 Begin
   GetScreenCursor(CurrX,CurrY);
   f.bufpos:=0;

+ 2 - 2
packages/rtl-console/src/go32v2/vesamode.pp

@@ -27,9 +27,9 @@ unit vesamode;
 
        pwordarray = ^twordarray;
        TVESAInfoBlock = record
-         VESASignature   : ARRAY[0..3] OF CHAR;
+         VESASignature   : ARRAY[0..3] OF AnsiChar;
          VESAVersion     : WORD;
-         OEMStringPtr    : PChar;
+         OEMStringPtr    : PAnsiChar;
          Capabilities    : LONGINT;
          VideoModePtr    : pwordarray;
          TotalMemory     : WORD;

+ 3 - 3
packages/rtl-console/src/inc/crt.inc

@@ -204,7 +204,7 @@ threadvar
  CurrX, CurrY: dword;
 
 
-procedure WriteChar (C: char);
+procedure WriteChar (C: AnsiChar);
 begin
  case C of
   #7: WriteBell;
@@ -241,7 +241,7 @@ begin
   begin
    GetScreenCursor (CurrX, CurrY);
    for I := 0 to Pred (F.BufPos) do
-    WriteChar ((PChar (F.BufPtr) + I)^);
+    WriteChar ((PAnsiChar (F.BufPtr) + I)^);
    SetScreenCursor (CurrX, CurrY);
    F.BufPos := 0;
   end;
@@ -252,7 +252,7 @@ end;
 function CrtRead (var F: TextRec): integer;
 {Read a series of characters from the console.}
 var
- C: char;
+ C: AnsiChar;
 begin
  GetScreenCursor (CurrX, CurrY);
  F.BufPos := 0;

+ 1 - 1
packages/rtl-console/src/inc/crth.inc

@@ -73,7 +73,7 @@ type
 { Interface procedures }
 procedure AssignCrt(var F: Text);
 function KeyPressed: Boolean;
-function ReadKey: Char;
+function ReadKey: AnsiChar;
 procedure TextMode (Mode: word);
 { Window parameters not changed to tcrtcoord, because the window() procedure
   does nothing if (x1 > x2) or (y1 > y2), and some people may set x2 or y2

+ 8 - 8
packages/rtl-console/src/inc/keyboard.inc

@@ -25,7 +25,7 @@ begin
   GetKeyEventFlags := (KeyEvent and $FF000000) shr 24;
 end;
 
-function GetKeyEventChar(KeyEvent: TKeyEvent): Char;
+function GetKeyEventChar(KeyEvent: TKeyEvent): AnsiChar;
 begin
   if KeyEvent and $03000000 = $00000000 then
     GetKeyEventChar := Chr(KeyEvent and $000000FF)
@@ -387,7 +387,7 @@ end;
     KeyEvent to String representation section.
   ---------------------------------------------------------------------}
 
-Procedure AddToString (Var S : String; Const A : String);
+Procedure AddToString (Var S : shortstring; Const A : shortstring);
 
 begin
   If Length(S)=0 then
@@ -396,17 +396,17 @@ begin
     S:=S+' '+A;
 end;
 
-Function IntToStr(Int : Longint) : String;
+Function IntToStr(Int : Longint) : shortstring;
 
 begin
   Str(Int,IntToStr);
 end;
 
-Function ShiftStateToString(KeyEvent : TKeyEvent; UseLeftRight : Boolean) : String;
+Function ShiftStateToString(KeyEvent : TKeyEvent; UseLeftRight : Boolean) : shortstring;
 
 Var
   S : Integer;
-  T : String;
+  T : shortstring;
 
 begin
   S:=GetKeyEventShiftState(KeyEvent);
@@ -428,7 +428,7 @@ begin
   ShiftStateToString:=T;
 end;
 
-Function FunctionKeyName (KeyCode : Word) : String;
+Function FunctionKeyName (KeyCode : Word) : shortstring;
 
 begin
   If ((KeyCode-KbdF1)<$1F) Then
@@ -442,10 +442,10 @@ begin
     end;
 end;
 
-Function KeyEventToString(KeyEvent : TKeyEvent) : String;
+Function KeyEventToString(KeyEvent : TKeyEvent) : shortstring;
 
 Var
-  T : String;
+  T : shortstring;
 
 begin
   T:=ShiftStateToString(KeyEvent,False);

+ 11 - 11
packages/rtl-console/src/inc/keybrdh.inc

@@ -38,7 +38,7 @@ type
            bit0-1
                    0: the lowest two bytes is the translated ASCII value
                    1: the lowest two bytes is the translated Unicode value
-                      (wide-char)
+                      (wide-AnsiChar)
                    2: the lowest two bytes is a function key, and the lowest
                       two bytes contains its platform independent code
                    3: the lowest two bytes is the physical representation
@@ -48,7 +48,7 @@ type
            bit3-7  undefined, should be 0
 
 
-  If there are two keys returning the same char-code, there's no way to find
+  If there are two keys returning the same AnsiChar-code, there's no way to find
   out which one was pressed (Gray+ and Simple+). If you need to know which
   was pressed, you'll need to use the untranslated keycodes, which is system
   dependent. System dependent constants may be defined to cover those, with
@@ -128,7 +128,7 @@ type
     VirtualKeyCode: Word;    { device-independent identifier of the key }
     VirtualScanCode: Word;   { device-dependent value, generated by the keyboard }
     UnicodeChar: WideChar;   { the translated Unicode character }
-    AsciiChar: Char;         { the translated ASCII character }
+    AsciiChar: AnsiChar;         { the translated ASCII character }
     ShiftState: TEnhancedShiftState;
     Flags: Byte;
   end;
@@ -204,10 +204,10 @@ const
   ---------------------------------------------------------------------}
   SShift       : Array [1..3] of string[5] = ('SHIFT','CTRL','ALT');
   SLeftRight   : Array [1..2] of string[5] = ('LEFT','RIGHT');
-  SUnicodeChar : String = 'Unicode character ';
-  SScanCode    : String = 'Key with scancode ';
-  SUnknownFunctionKey : String = 'Unknown function key : ';
-  SAnd         : String = 'AND';
+  SUnicodeChar : Shortstring = 'Unicode character ';
+  SScanCode    : Shortstring = 'Key with scancode ';
+  SUnknownFunctionKey : Shortstring = 'Unknown function key : ';
+  SAnd         : Shortstring = 'AND';
   SKeyPad      : Array [0..($FF2F-kbdHome)] of string[6] =
                  ('Home','Up','PgUp','Left',
                   'Middle','Right','End','Down',
@@ -258,7 +258,7 @@ function TranslateKeyEventUniCode(KeyEvent: TKeyEvent): TKeyEvent;
 function GetKeyEventFlags(KeyEvent: TKeyEvent): Byte;
 { Returns the flags part of the given KeyEvent }
 
-function GetKeyEventChar(KeyEvent: TKeyEvent): Char;
+function GetKeyEventChar(KeyEvent: TKeyEvent): AnsiChar;
 { Returns the charcode part of the given KeyEvent, if it contains a translated
   keycode }
 
@@ -282,12 +282,12 @@ Function SetKeyboardDriver (Const Driver : TKeyboardDriver) : Boolean;
 Procedure GetKeyboardDriver (Var Driver : TKeyboardDriver);
 { Returns the currently active keyboard driver }
 
-Function ShiftStateToString(KeyEvent : TKeyEvent; UseLeftRight : Boolean) : String;
+Function ShiftStateToString(KeyEvent : TKeyEvent; UseLeftRight : Boolean) : Shortstring;
 { Returns a string representation of a shift state as returned by
   pollshiftstate }
-Function FunctionKeyName (KeyCode : Word) : String;
+Function FunctionKeyName (KeyCode : Word) : Shortstring;
 { Returns the name of a function key if the key is one of the special keys . }
-Function KeyEventToString(KeyEvent : TKeyEvent) : String;
+Function KeyEventToString(KeyEvent : TKeyEvent) : Shortstring;
 { Returns a string representation of the pressed key }
 
 function GetEnhancedKeyEvent: TEnhancedKeyEvent;

+ 1 - 1
packages/rtl-console/src/inc/keyscan.inc

@@ -1,4 +1,4 @@
-{ list of all dos scancode for key giving 0 as char }
+{ list of all dos scancode for key giving 0 as AnsiChar }
 Const
    kbNoKey       = $00;
    kbAltEsc      = $01;  {Alt+Esc = scancode 01, ascii code 0.}

+ 4 - 4
packages/rtl-console/src/inc/video.inc

@@ -400,9 +400,9 @@ begin
     end;
 end;
 
-function ExtendedGraphemeCluster2LegacyChar(const EGC: UnicodeString; CodePage: TSystemCodePage): Char;
+function ExtendedGraphemeCluster2LegacyChar(const EGC: UnicodeString; CodePage: TSystemCodePage): AnsiChar;
 
-  function GenConvert: Char;
+  function GenConvert: AnsiChar;
     var
       tmpS: RawByteString;
     begin
@@ -415,7 +415,7 @@ function ExtendedGraphemeCluster2LegacyChar(const EGC: UnicodeString; CodePage:
     end;
 
 var
-  Ch: Char;
+  Ch: AnsiChar;
 begin
   if (Length(EGC) = 1) then
     begin
@@ -438,7 +438,7 @@ begin
     Result:=GenConvert;
 end;
 
-function LegacyChar2ExtendedGraphemeCluster(const Ch: Char): UnicodeString;
+function LegacyChar2ExtendedGraphemeCluster(const Ch: AnsiChar): UnicodeString;
 var
   tmpS: RawByteString;
 begin

+ 6 - 6
packages/rtl-console/src/msdos/crt.pp

@@ -344,7 +344,7 @@ End;
 var
    keyboard_type: byte;  { 0=83/84-key keyboard, $10=101/102+ keyboard }
    is_last : boolean;
-   last    : char;
+   last    : AnsiChar;
 
 procedure DetectKeyboard;
 var
@@ -360,10 +360,10 @@ begin
     end;
 end;
 
-function readkey : char;
+function readkey : AnsiChar;
 var
-  char2 : char;
-  char1 : char;
+  char2 : AnsiChar;
+  char1 : AnsiChar;
   regs : registers;
 begin
   if is_last then
@@ -659,7 +659,7 @@ no_snow:
 done:
 end;
 
-Procedure WriteChar(c:char);
+Procedure WriteChar(c:AnsiChar);
 var
   regs : registers;
 begin
@@ -721,7 +721,7 @@ Procedure CrtRead(Var F: TextRec);
   end;
 
 var
-  ch : Char;
+  ch : AnsiChar;
 Begin
   GetScreenCursor(CurrX,CurrY);
   f.bufpos:=0;

+ 2 - 2
packages/rtl-console/src/msdos/vesamode.pp

@@ -23,12 +23,12 @@ unit vesamode;
        dos,video,mouse;
 
     type
-       PFarChar = ^Char; far;
+       PFarChar = ^AnsiChar; far;
        twordarray = array[0..0] of word;
 
        pwordarray = ^twordarray; far;
        TVESAInfoBlock = packed record
-         VESASignature   : ARRAY[0..3] OF CHAR;
+         VESASignature   : ARRAY[0..3] OF AnsiChar;
          VESAVersion     : WORD;
          OEMStringPtr    : PFarChar;
          Capabilities    : LONGINT;

+ 4 - 4
packages/rtl-console/src/netware/crt.pp

@@ -305,9 +305,9 @@ End;
 var
    is_last : boolean;
 
-function readkey : char;
+function readkey : AnsiChar;
 var
-  char1 : char;
+  char1 : AnsiChar;
 begin
   if is_last then
   begin
@@ -449,7 +449,7 @@ end;
 var
   CurrX,CurrY : longint;
 
-Procedure WriteChar(c:char);
+Procedure WriteChar(c:AnsiChar);
 var
   w    : word;
 begin
@@ -511,7 +511,7 @@ Function CrtRead(Var F: TextRec): Integer;
   end;
 
 var
-  ch : Char;
+  ch : AnsiChar;
 Begin
   GetScreenCursor(CurrX,CurrY);
   f.bufpos:=0;

+ 37 - 37
packages/rtl-console/src/netware/nwsys.inc

@@ -48,7 +48,7 @@ TYPE
                  : unsignedshort; (* inherited rights mask *)
    st_originatingNameSpace
                  : BYTE;          (* namespace of creation       *)
-   st_name       : ARRAY [0..255] OF CHAR;
+   st_name       : ARRAY [0..255] OF AnsiChar;
                                   (* TARGET_NAMESPACE name *)
    st_blksize    : LONGINT;
    st_blocks     : LONGINT;
@@ -56,7 +56,7 @@ TYPE
    st_spare      : ARRAY [0..3] OF LONGINT;
   END;
 
-FUNCTION  _stat  (path : PCHAR; VAR buf : NWStatBufT) : LONGINT; CDECL; EXTERNAL Clib NAME 'stat_411';
+FUNCTION  _stat  (path : PAnsiChar; VAR buf : NWStatBufT) : LONGINT; CDECL; EXTERNAL Clib NAME 'stat_411';
 FUNCTION  _fstat (Fileno : LONGINT; VAR buf : NWStatBufT) : LONGINT; CDECL; EXTERNAL CLib NAME 'fstat_411';
 
 PROCEDURE NWFree   (P : POINTER); CDECL; EXTERNAL Clib NAME 'free';
@@ -75,20 +75,20 @@ procedure _ThreadSwitchWithDelay; cdecl;external ThreadsNlm name 'ThreadSwitchWi
 function _GetThreadName(threadID:longint; var tName):longint; cdecl;external ThreadsNlm name 'GetThreadName';
 function GetNLMHandle:dword;  cdecl;external ThreadsNlm name 'GetNLMHandle';
 (*
-PROCEDURE ConsolePrintf (FormatStr : PCHAR; Param : LONGINT); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
-PROCEDURE ConsolePrintf (FormatStr : PCHAR; Param : pchar); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
-PROCEDURE ConsolePrintf (FormatStr : PCHAR; P1,P2 : LONGINT); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
-PROCEDURE ConsolePrintf (FormatStr : PCHAR; P1,P2,P3 : LONGINT); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
-PROCEDURE ConsolePrintf (FormatStr : PCHAR; P1,P2,P3,P4 : LONGINT); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
-PROCEDURE ConsolePrintf (FormatStr : PCHAR); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
+PROCEDURE ConsolePrintf (FormatStr : PAnsiChar; Param : LONGINT); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
+PROCEDURE ConsolePrintf (FormatStr : PAnsiChar; Param : PAnsiChar); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
+PROCEDURE ConsolePrintf (FormatStr : PAnsiChar; P1,P2 : LONGINT); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
+PROCEDURE ConsolePrintf (FormatStr : PAnsiChar; P1,P2,P3 : LONGINT); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
+PROCEDURE ConsolePrintf (FormatStr : PAnsiChar; P1,P2,P3,P4 : LONGINT); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
+PROCEDURE ConsolePrintf (FormatStr : PAnsiChar); CDecl; EXTERNAL CLib Name 'ConsolePrintf';
 *)
 // this gives internal compiler error 1234124 ??
-//PROCEDURE ConsolePrintf (FormatStr : PCHAR; Param : array of const); CDecl; EXTERNAL CLib;
+//PROCEDURE ConsolePrintf (FormatStr : PAnsiChar; Param : array of const); CDecl; EXTERNAL CLib;
 
-PROCEDURE _printf (FormatStr : PCHAR; Param : LONGINT); CDecl; EXTERNAL CLib;
-PROCEDURE _printf (FormatStr : PCHAR); CDecl; EXTERNAL CLib;
+PROCEDURE _printf (FormatStr : PAnsiChar; Param : LONGINT); CDecl; EXTERNAL CLib;
+PROCEDURE _printf (FormatStr : PAnsiChar); CDecl; EXTERNAL CLib;
 // this gives internet compiler error 1234124 ??
-// PROCEDURE _printf (FormatStr : PCHAR; Param : array of const); CDecl; EXTERNAL CLib;
+// PROCEDURE _printf (FormatStr : PAnsiChar; Param : array of const); CDecl; EXTERNAL CLib;
 
 // values for __action_code used with ExitThread()
 CONST
@@ -102,7 +102,7 @@ FUNCTION _GetStdOut : POINTER; CDECL; EXTERNAL Clib NAME '__get_stdout';
 FUNCTION _GetStdErr : POINTER; CDECL; EXTERNAL Clib NAME '__get_stderr';
 
 // FileIO by Fileno
-FUNCTION _open   (FileName : PCHAR; access, mode : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'open';
+FUNCTION _open   (FileName : PAnsiChar; access, mode : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'open';
 FUNCTION _close  (FileNo : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'close';
 FUNCTION _lseek  (FileNo,Pos,whence :LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'lseek';
 FUNCTION _chsize (FileNo,Pos : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'chsize';
@@ -116,7 +116,7 @@ FUNCTION _unlock (filedes : LONGINT; Offset, Length : Cardinal) : LONGINT; CDECL
 TYPE
   NWModifyStructure =
     RECORD
-       MModifyName            : PCHAR;
+       MModifyName            : PAnsiChar;
        MFileAttributes        : LONGINT;
        MFileAttributesMask    : LONGINT;
        MCreateDate            : WORD;
@@ -152,11 +152,11 @@ CONST MModifyNameBit                 = $0001;
       MLastUpdatedInSecondsBit       = $4000;
 
 // Directory
-FUNCTION _chdir  (path : PCHAR) : LONGINT; CDECL; EXTERNAL CLib NAME 'chdir';
-FUNCTION _getcwd (path : PCHAR; pathlen : LONGINT) : PCHAR; CDECL; EXTERNAL CLib NAME 'getcwd';
-FUNCTION _mkdir  (path : PCHAR) : LONGINT; CDECL; EXTERNAL CLib NAME 'mkdir';
-FUNCTION _rmdir  (path : PCHAR) : LONGINT; CDECL; EXTERNAL CLib NAME 'rmdir';
-FUNCTION _ChangeDirectoryEntry (PathName : PCHAR; VAR ModyStruct : NWModifyStructure; ModifyBits, AllowWildcard : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'ChangeDirectoryEntry';
+FUNCTION _chdir  (path : PAnsiChar) : LONGINT; CDECL; EXTERNAL CLib NAME 'chdir';
+FUNCTION _getcwd (path : PAnsiChar; pathlen : LONGINT) : PAnsiChar; CDECL; EXTERNAL CLib NAME 'getcwd';
+FUNCTION _mkdir  (path : PAnsiChar) : LONGINT; CDECL; EXTERNAL CLib NAME 'mkdir';
+FUNCTION _rmdir  (path : PAnsiChar) : LONGINT; CDECL; EXTERNAL CLib NAME 'rmdir';
+FUNCTION _ChangeDirectoryEntry (PathName : PAnsiChar; VAR ModyStruct : NWModifyStructure; ModifyBits, AllowWildcard : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'ChangeDirectoryEntry';
 
 // get fileno from stream
 FUNCTION _fileno (Handle : LONGINT) : LONGINT; CDECL; EXTERNAL Clib NAME 'fileno';
@@ -179,8 +179,8 @@ CONST O_RDONLY     = $0000;   (* open for read only *)
 
 
 // File Utils
-FUNCTION _unlink (FileName : PCHAR) : LONGINT; CDECL; EXTERNAL CLib NAME 'unlink';
-FUNCTION _rename (oldpath, newpath : PCHAR) : LONGINT; CDECL; EXTERNAL Clib NAME 'rename';
+FUNCTION _unlink (FileName : PAnsiChar) : LONGINT; CDECL; EXTERNAL CLib NAME 'unlink';
+FUNCTION _rename (oldpath, newpath : PAnsiChar) : LONGINT; CDECL; EXTERNAL Clib NAME 'rename';
 
 // Error
 TYPE _PLONGINT = ^LONGINT;
@@ -196,7 +196,7 @@ FUNCTION _stackavail : CARDINAL; CDECL; EXTERNAL CLib NAME 'stackavail';
 PROCEDURE _EnterDebugger; CDECL; EXTERNAL Clib NAME 'EnterDebugger';
 
 // String
-FUNCTION _strlen (P : PCHAR) : LONGINT; CDECL; EXTERNAL Clib NAME 'strlen';
+FUNCTION _strlen (P : PAnsiChar) : LONGINT; CDECL; EXTERNAL Clib NAME 'strlen';
 
 // Time/Date
 TYPE NWTM = RECORD
@@ -227,7 +227,7 @@ FUNCTION  SetFileServerDateAndTime(year:WORD; month:WORD; day:WORD; hour:WORD; m
                second:WORD):longint;cdecl; EXTERNAL CLib Name 'SetFileServerDateAndTime';
 
 TYPE   FILE_SERV_INFO = record
-            serverName              : array[0..47] of char;
+            serverName              : array[0..47] of AnsiChar;
             netwareVersion          : BYTE;
             netwareSubVersion       : BYTE;
             maxConnectionsSupported : WORD;
@@ -268,29 +268,29 @@ TYPE NWDirEnt =
     d_uid                 : LONGINT;        {owner id (object id) }
     d_archivedID          : LONGINT;
     d_updatedID           : LONGINT;
-    d_nameDOS             : ARRAY [0..12] OF CHAR;
+    d_nameDOS             : ARRAY [0..12] OF AnsiChar;
     d_inheritedRightsMask : WORD;
     d_originatingNameSpace: BYTE;
     d_ddatetime           : time_t;         {deleted date time}
     d_deletedID           : LONGINT;
     {---- new fields starting in v4.11 ----}
-    d_name                : ARRAY [0..255] OF CHAR;  { enty's namespace name }
+    d_name                : ARRAY [0..255] OF AnsiChar;  { enty's namespace name }
   END;
   PNWDirEnt = ^NWDirEnt;
 
-  FUNCTION _opendir (pathname : PCHAR) : PNWDirEnt; CDECL; EXTERNAL CLib NAME 'opendir_411';
+  FUNCTION _opendir (pathname : PAnsiChar) : PNWDirEnt; CDECL; EXTERNAL CLib NAME 'opendir_411';
   FUNCTION _closedir (dirH : PNWDirEnt) : LONGINT; CDECL; EXTERNAL CLib NAME 'closedir';
   FUNCTION _readdir  (dirH : PNWDirEnt) : PNWDirEnt; CDECL; EXTERNAL CLib NAME 'readdir';
   FUNCTION _SetReaddirAttribute (dirH : PNWDirEnt; Attribute : LONGINT) : LONGINT; EXTERNAL CLib NAME 'SetReaddirAttribute';
 
 // Environment
-  FUNCTION _getenv (name : PCHAR) : PCHAR; CDECL; EXTERNAL CLib NAME 'getenv';
+  FUNCTION _getenv (name : PAnsiChar) : PAnsiChar; CDECL; EXTERNAL CLib NAME 'getenv';
 
 // Volumes
-  FUNCTION _GetVolumeName (volumeNumber : LONGINT; volumeName : PCHAR) : LONGINT; CDECL; EXTERNAL CLib NAME 'GetVolumeName';
-  FUNCTION _GetVolumeNumber (volumeName : PCHAR; VAR volumeNumber : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'GetVolumeNumber';
+  FUNCTION _GetVolumeName (volumeNumber : LONGINT; volumeName : PAnsiChar) : LONGINT; CDECL; EXTERNAL CLib NAME 'GetVolumeName';
+  FUNCTION _GetVolumeNumber (volumeName : PAnsiChar; VAR volumeNumber : LONGINT) : LONGINT; CDECL; EXTERNAL CLib NAME 'GetVolumeNumber';
   FUNCTION _GetVolumeInfoWithNumber (VolumeNumber : BYTE;
-                                     VolumeName   : PCHAR;
+                                     VolumeName   : PAnsiChar;
                                  VAR TotalBlocks  : WORD;
                                  VAR SectorsPerBlock : WORD;
                                  VAR availableBlocks : WORD;
@@ -315,7 +315,7 @@ FUNCTION  _wherex : WORD; CDECL; EXTERNAL CLib NAME 'wherex';
 FUNCTION  _wherey : WORD; CDECL; EXTERNAL CLib NAME 'wherey';
 PROCEDURE _clrscr; CDECL; EXTERNAL CLib NAME 'clrscr';
 FUNCTION  _kbhit : LONGINT; CDECL; EXTERNAL Clib NAME 'kbhit';
-FUNCTION  _getch : CHAR; CDECL; EXTERNAL CLib NAME 'getch';
+FUNCTION  _getch : AnsiChar; CDECL; EXTERNAL CLib NAME 'getch';
 PROCEDURE _delay (miliseconds : longint); CDECL; EXTERNAL Clib NAME 'delay';
 FUNCTION  _SetCtrlCharCheckMode (Enabled : BOOLEAN) : BOOLEAN; CDECL; EXTERNAL CLib NAME 'SetCtrlCharCheckMode';
 FUNCTION  _SetAutoScreenDestructionMode (Enabled : BOOLEAN) : BOOLEAN; CDECL; EXTERNAL CLib NAME 'SetAutoScreenDestructionMode';
@@ -348,10 +348,10 @@ CONST
   NW_NS_FTAM    = 3;
   NW_NS_LONG    = 4;
 
-function _NWAddSearchPathAtEnd (searchPath : pchar; var number : longint) : longint; cdecl; external Clib name 'NWAddSearchPathAtEnd';
+function _NWAddSearchPathAtEnd (searchPath : PAnsiChar; var number : longint) : longint; cdecl; external Clib name 'NWAddSearchPathAtEnd';
 function _NWDeleteSearchPath (searchPathNumber : longint) : longint; cdecl; external Clib name 'NWDeleteSearchPath';
-function _NWInsertSearchPath (searchPathNumber : longint; path : pchar) : longint; cdecl; external Clib name 'NWInsertSearchPath';
-function _NWGetSearchPathElement (searchPathNumber : longint; var isDOSSearchPath : longint; searchPath : pchar) : longint; cdecl; external Clib name 'NWGetSearchPathElement';
+function _NWInsertSearchPath (searchPathNumber : longint; path : PAnsiChar) : longint; cdecl; external Clib name 'NWInsertSearchPath';
+function _NWGetSearchPathElement (searchPathNumber : longint; var isDOSSearchPath : longint; searchPath : PAnsiChar) : longint; cdecl; external Clib name 'NWGetSearchPathElement';
 
 
 // values for __mode used with spawnxx()
@@ -363,9 +363,9 @@ CONST
    P_SPAWN_IN_CURRENT_DOMAIN = 8;
 
 
-//function spawnlp(mode:longint; path:Pchar; arg0:Pchar; args:array of const):longint;cdecl;external CLib name 'spawnlp';
-function spawnlp(mode:longint; path:Pchar; arg0:Pchar):longint;cdecl;external Clib name 'spawnlp';
-function spawnvp(mode:longint; path:Pchar; argv:PPchar):longint;cdecl;external Clib name 'spawnvp';
+//function spawnlp(mode:longint; path:PAnsiChar; arg0:PAnsiChar; args:array of const):longint;cdecl;external CLib name 'spawnlp';
+function spawnlp(mode:longint; path:PAnsiChar; arg0:PAnsiChar):longint;cdecl;external Clib name 'spawnlp';
+function spawnvp(mode:longint; path:PAnsiChar; argv:PPAnsiChar):longint;cdecl;external Clib name 'spawnvp';
 
 
 

+ 6 - 6
packages/rtl-console/src/netwlibc/crt.pp

@@ -277,7 +277,7 @@ var
    is_last : boolean;
 
 {
-function readkey : char;
+function readkey : AnsiChar;
 var
   keytype,modifier,scancode : longint;
 begin
@@ -297,9 +297,9 @@ begin
 end;
 }
 
-function readkey : char;  // for now
+function readkey : AnsiChar;  // for now
 begin
-  readkey := char(getcharacter);
+  readkey := AnsiChar(getcharacter);
 end;
 
 
@@ -414,8 +414,8 @@ end;
 var
   CurrX,CurrY : longint;
 
-Procedure WriteChar(c:char);
-var st : array [0..1] of char;
+Procedure WriteChar(c:AnsiChar);
+var st : array [0..1] of AnsiChar;
 begin
   case c of
    #10 : inc(CurrY);
@@ -477,7 +477,7 @@ Function CrtRead(Var F: TextRec): Integer;
   end;
 
 var
-  ch : Char;
+  ch : AnsiChar;
 Begin
   GetScreenCursor(CurrX,CurrY);
   f.bufpos:=0;

+ 8 - 8
packages/rtl-console/src/os2/crt.pp

@@ -39,7 +39,7 @@ const
 
 type
  TKbdKeyInfo = record
-  CharCode, ScanCode: char;
+  CharCode, ScanCode: AnsiChar;
   fbStatus, bNlsShift: byte;
   fsState: word;
   Time: longint;
@@ -104,7 +104,7 @@ function VioGetCurPos (var Row, Column: word; VioHandle: word): word; cdecl;
                        external 'EMXWRAP' index 109;
 function VioSetCurPos (Row, Column, VioHandle: word): word; cdecl;
                        external 'EMXWRAP' index 115;
-function VioWrtCharStrAtt (S: PChar; Len, Row, Col: longint; var Attr: byte;
+function VioWrtCharStrAtt (S: PAnsiChar; Len, Row, Col: longint; var Attr: byte;
                            VioHandle: word): word; cdecl;
                            external 'EMXWRAP' index 148;
 function VioGetMode (var AModeInfo: VioModeInfo; VioHandle: word): word; cdecl;
@@ -219,7 +219,7 @@ begin
 end;
 
 
-procedure WriteNormal (C: char; X, Y: dword); inline;
+procedure WriteNormal (C: AnsiChar; X, Y: dword); inline;
 (* Write C to console at X, Y (0-based). *)
 begin
  VioWrtCharStrAtt (@C, 1, Y, X, TextAttr, VioHandle);
@@ -296,22 +296,22 @@ begin
 end;
 
 
-function ReadKey: char;
+function ReadKey: AnsiChar;
 {Reads the next character from the keyboard.}
 var
  AKeyRec: TKbdKeyInfo;
- C, S: char;
+ C, S: AnsiChar;
 begin
  if SpecialKey then
   begin
    SpecialKey := false;
-   ReadKey := char (ScanCode);
+   ReadKey := AnsiChar (ScanCode);
    ScanCode := 0;
   end
  else
   if ScanCode <> 0 then
    begin
-    ReadKey := char (ScanCode);
+    ReadKey := AnsiChar (ScanCode);
     ScanCode := 0;
    end
   else
@@ -334,7 +334,7 @@ begin
      end
     else
      begin
-      ReadKey := char (ScanCode);
+      ReadKey := AnsiChar (ScanCode);
       ScanCode := 0;
      end;
    end;

+ 29 - 29
packages/rtl-console/src/unix/crt.pp

@@ -27,7 +27,7 @@ Const
 
 Type
   TCharAttr=packed record
-    ch   : char;
+    ch   : AnsiChar;
     attr : byte;
   end;
   TConsoleBuf=Array[0..ConsoleMaxX*ConsoleMaxY-1] of TCharAttr;
@@ -53,14 +53,14 @@ Var
 *****************************************************************************}
 
 {$ifdef debugcrt}
-Procedure Debug(Msg : string);
+Procedure Debug(Msg : shortstring);
 
 begin
   Writeln(DebugFile,Msg);
 end;
 {$endif}
 
-Function Str(l:longint):string;
+Function Str(l:longint):shortstring;
 {
   Return a String of the longint
 }
@@ -102,7 +102,7 @@ end;
                       Optimal AnsiString Conversion Routines
 *****************************************************************************}
 
-Function XY2Ansi(x,y,ox,oy:longint):String;
+Function XY2Ansi(x,y,ox,oy:longint):shortstring;
 {
   Returns a string with the escape sequences to go to X,Y on the screen
 }
@@ -166,7 +166,7 @@ End;
 
 const
   AnsiTbl : string[8]='04261537';
-Function Attr2Ansi(Attr,OAttr:longint):string;
+Function Attr2Ansi(Attr,OAttr:longint):shortstring;
 {
   Convert Attr to an Ansi String, the Optimal code is calculate
   with use of the old OAttr
@@ -175,7 +175,7 @@ var
   hstr : string[16];
   OFg,OBg,Fg,Bg : longint;
 
-  procedure AddSep(ch:char);
+  procedure AddSep(ch:AnsiChar);
   begin
     if length(hstr)>0 then
      hstr:=hstr+';';
@@ -226,7 +226,7 @@ end;
 
 
 
-Function Ansi2Attr(Const HStr:String;oattr:longint):longint;
+Function Ansi2Attr(Const HStr:shortstring;oattr:longint):longint;
 {
   Convert an Escape sequence to an attribute value, uses Oattr as the last
   color written
@@ -276,11 +276,11 @@ const
   InSize=256;
   OutSize=1024;
 var
-  InBuf  : array[0..InSize-1] of char;
+  InBuf  : array[0..InSize-1] of AnsiChar;
   InCnt,
   InHead,
   InTail : longint;
-  OutBuf : array[0..OutSize-1] of char;
+  OutBuf : array[0..OutSize-1] of AnsiChar;
   OutCnt : longint;
 
 
@@ -305,8 +305,8 @@ begin
 end;
 
 
-{Send Char to Remote}
-Procedure ttySendChar(c:char);
+{Send AnsiChar to Remote}
+Procedure ttySendChar(c:AnsiChar);
 Begin
   if OutCnt<OutSize then
    begin
@@ -321,7 +321,7 @@ End;
 
 
 {Send String to Remote}
-procedure ttySendStr(const hstr:string);
+procedure ttySendStr(const hstr:shortstring);
 var
   i : longint;
 begin
@@ -333,8 +333,8 @@ end;
 
 
 
-{Get Char from Remote}
-function ttyRecvChar:char;
+{Get AnsiChar from Remote}
+function ttyRecvChar:AnsiChar;
 var
   Readed,i : longint;
 begin
@@ -417,7 +417,7 @@ end;
 
 
 
-procedure ttyWrite(const s:string);
+procedure ttyWrite(const s:shortstring);
 {
   Write a string to the output, memory copy and Current X&Y are also updated
 }
@@ -455,7 +455,7 @@ begin
 end;
 
 
-procedure LineWrite(const temp:String);
+procedure LineWrite(const temp:shortstring);
 {
   Write a Line to the screen, doesn't write on 80,25 under Dos
   the Current CurrX is set to WindMax. NO MEMORY UPDATE!
@@ -489,7 +489,7 @@ procedure DoScrollLine(y1,y2,xl,xh:longint);
   Move Line y1 to y2, use only columns Xl-Xh, Memory is updated also
 }
 var
-  Temp    : string;
+  Temp    : shortstring;
   idx,
   OldAttr,
   x,attr  : longint;
@@ -778,11 +778,11 @@ End;
 Const
   KeyBufferSize = 20;
 var
-  KeyBuffer : Array[0..KeyBufferSize-1] of Char;
+  KeyBuffer : Array[0..KeyBufferSize-1] of AnsiChar;
   KeyPut,
   KeySend   : longint;
 
-Procedure PushKey(Ch:char);
+Procedure PushKey(Ch:AnsiChar);
 Var
   Tmp : Longint;
 Begin
@@ -798,7 +798,7 @@ End;
 
 
 
-Function PopKey:char;
+Function PopKey:AnsiChar;
 Begin
   If KeyPut<>KeySend Then
    Begin
@@ -825,7 +825,7 @@ const
   AltKeyStr  : string[38]='qwertyuiopasdfghjklzxcvbnm1234567890-=';
   AltCodeStr : string[38]=#016#017#018#019#020#021#022#023#024#025#030#031#032#033#034#035#036#037#038+
                           #044#045#046#047#048#049#050#120#121#122#123#124#125#126#127#128#129#130#131;
-Function FAltKey(ch:char):byte;
+Function FAltKey(ch:AnsiChar):byte;
 var
   Idx : longint;
 Begin
@@ -858,9 +858,9 @@ Begin
   Keypressed := (KeySend<>KeyPut) or sysKeyPressed;
 End;
 
-Function ReadKey:char;
+Function ReadKey:AnsiChar;
 Var
-  ch       : char;
+  ch       : AnsiChar;
   OldState,
   State    : longint;
   FDS      : TFDSet;
@@ -1106,8 +1106,8 @@ end;
 
 var
   Lastansi  : boolean;
-  AnsiCode  : string;
-Procedure DoWrite(const s:String);
+  AnsiCode  : shortstring;
+Procedure DoWrite(const s:shortstring);
 {
   Write string to screen, parse most common AnsiCodes
 }
@@ -1118,7 +1118,7 @@ var
   i,j,
   SendBytes : longint;
 
-  function AnsiPara(var hstr:string):byte;
+  function AnsiPara(var hstr:shortstring):byte;
   var
     k,j  : longint;
     code : word;
@@ -1252,7 +1252,7 @@ Procedure CrtWrite(Var F: TextRec);
   Top level write function for CRT
 }
 Var
-  Temp : String;
+  Temp : shortstring;
   idx,i : Longint;
   oldflush : boolean;
 Begin
@@ -1279,7 +1279,7 @@ Procedure CrtRead(Var F: TextRec);
   Read from CRT associated file.
 }
 var
-  c : char;
+  c : AnsiChar;
   i : longint;
 Begin
   if isATTY(F.Handle)=1 then
@@ -1530,7 +1530,7 @@ var
   fds    : tfdSet;
   i,j,
   readed : longint;
-  buf    : array[0..255] of char;
+  buf    : array[0..255] of AnsiChar;
   s      : string[16];
 begin
   x:=0;

+ 362 - 362
packages/rtl-console/src/unix/keyboard.pp

@@ -35,21 +35,21 @@ type
   TTreeElement = record
     Next,Parent,Child :  PTreeElement;
     CanBeTerminal : boolean;
-    char : byte;
+    AnsiChar : byte;
     ScanValue : byte;
     CharValue : byte;
     ShiftValue : TEnhancedShiftState;
     SpecialHandler : Tprocedure;
   end;
 
-function RawReadKey:char;
-function RawReadString : String;
+function RawReadKey:AnsiChar;
+function RawReadString : ShortString;
 function KeyPressed : Boolean;
-procedure AddSequence(const St : String; AChar,AScan :byte);inline;
-function FindSequence(const St : String;var AChar, Ascan : byte) : boolean;
+procedure AddSequence(const St : ShortString; AChar,AScan :byte);inline;
+function FindSequence(const St : ShortString;var AChar, Ascan : byte) : boolean;
 procedure RestoreStartMode;
 
-function AddSpecialSequence(const St : string;Proc : Tprocedure) : PTreeElement; platform;
+function AddSpecialSequence(const St : Shortstring;Proc : Tprocedure) : PTreeElement; platform;
 
 
 {*****************************************************************************}
@@ -86,7 +86,7 @@ var
 const
   InSize=256;
 var
-  InBuf  : array [0..InSize-1] of char;
+  InBuf  : array [0..InSize-1] of AnsiChar;
 {  InCnt,}
   InHead,
   InTail : longint;
@@ -174,7 +174,7 @@ type
   end;
   kbsentry=packed record
     kb_func:byte;
-    kb_string:array[0..511] of char;
+    kb_string:array[0..511] of AnsiChar;
   end;
   vt_mode=packed record
     mode,          {vt mode}
@@ -405,7 +405,7 @@ begin
 end;
 {$endif}
 
-function ttyRecvChar:char;
+function ttyRecvChar:AnsiChar;
 
 var Readed,i : longint;
 
@@ -435,7 +435,7 @@ begin
 end;
 
 { returns an already read character back into InBuf }
-procedure PutBackIntoInBuf(ch: Char);
+procedure PutBackIntoInBuf(ch: AnsiChar);
 begin
   If InTail=0 then
     InTail:=InSize-1
@@ -514,7 +514,7 @@ const
 
   procedure GenMouseEvent;
   var MouseEvent: TMouseEvent;
-      ch : char;
+      ch : AnsiChar;
       fdsin : tfdSet;
       buttonval:byte;
   begin
@@ -603,10 +603,10 @@ const
         prepared to handle both types of messages }
   procedure GenMouseEvent_ExtendedSGR1006;
   var MouseEvent: TMouseEvent;
-      ch : char;
+      ch : AnsiChar;
       fdsin : tfdSet;
       buttonval: LongInt;
-      tempstr: string;
+      tempstr: shortstring;
       code: LongInt;
       X, Y: LongInt;
       ButtonMask: Word;
@@ -706,7 +706,7 @@ const
     LastMouseEvent:=MouseEvent;
   end;
 
-var roottree:array[char] of PTreeElement;
+var roottree:array[AnsiChar] of PTreeElement;
 
 procedure FreeElement (PT:PTreeElement);
 var next : PTreeElement;
@@ -722,7 +722,7 @@ end;
 
 procedure FreeTree;
 
-var i:char;
+var i:AnsiChar;
 
 begin
   for i:=low(roottree) to high(roottree) do
@@ -735,13 +735,13 @@ end;
 function NewPTree(ch : byte;Pa : PTreeElement) : PTreeElement;
 begin
   newPtree:=allocmem(sizeof(Ttreeelement));
-  newPtree^.char:=ch;
+  newPtree^.AnsiChar:=ch;
   newPtree^.Parent:=Pa;
   if Assigned(Pa) and (Pa^.Child=nil) then
     Pa^.Child:=newPtree;
 end;
 
-function DoAddSequence(const St : String; AChar,AScan :byte; const AShift: TEnhancedShiftState) : PTreeElement;
+function DoAddSequence(const St : shortstring; AChar,AScan :byte; const AShift: TEnhancedShiftState) : PTreeElement;
 var
   CurPTree,NPT : PTreeElement;
   c : byte;
@@ -765,13 +765,13 @@ begin
       if NPT=nil then
         NPT:=NewPTree(c,CurPTree);
       CurPTree:=nil;
-      while assigned(NPT) and (NPT^.char<c) do
+      while assigned(NPT) and (NPT^.AnsiChar<c) do
         begin
           CurPTree:=NPT;
           NPT:=NPT^.Next;
         end;
 
-      if assigned(NPT) and (NPT^.char=c) then
+      if assigned(NPT) and (NPT^.AnsiChar=c) then
         CurPTree:=NPT
       else
         begin
@@ -801,7 +801,7 @@ begin
           if (ScanValue<>AScan) then
             Writeln(system.stderr,'Scan was ',ScanValue,' now ',AScan);
           if (CharValue<>AChar) then
-            Writeln(system.stderr,'Char was ',chr(CharValue),' now ',chr(AChar));
+            Writeln(system.stderr,'AnsiChar was ',chr(CharValue),' now ',chr(AChar));
 {$endif DEBUG}
           ScanValue:=AScan;
           CharValue:=AChar;
@@ -819,26 +819,26 @@ begin
 end;
 
 
-procedure AddSequence(const St : String; AChar,AScan :byte);inline;
+procedure AddSequence(const St : shortstring; AChar,AScan :byte);inline;
 begin
   DoAddSequence(St,AChar,AScan,[]);
 end;
 
-{ Returns the Child that as c as char if it exists }
+{ Returns the Child that as c as AnsiChar if it exists }
 function FindChild(c : byte;Root : PTreeElement) : PTreeElement;
 var
   NPT : PTreeElement;
 begin
   NPT:=Root^.Child;
-  while assigned(NPT) and (NPT^.char<c) do
+  while assigned(NPT) and (NPT^.AnsiChar<c) do
     NPT:=NPT^.Next;
-  if assigned(NPT) and (NPT^.char=c) then
+  if assigned(NPT) and (NPT^.AnsiChar=c) then
     FindChild:=NPT
   else
     FindChild:=nil;
 end;
 
-function AddSpecialSequence(const St : string;Proc : Tprocedure) : PTreeElement;
+function AddSpecialSequence(const St : shortstring;Proc : Tprocedure) : PTreeElement;
 var
   NPT : PTreeElement;
 begin
@@ -847,7 +847,7 @@ begin
   AddSpecialSequence:=NPT;
 end;
 
-function FindSequence(const St : String;var AChar,AScan :byte) : boolean;
+function FindSequence(const St : shortstring;var AChar,AScan :byte) : boolean;
 var
   NPT : PTreeElement;
   i,p : byte;
@@ -884,136 +884,136 @@ begin
 end;
 
 type  key_sequence=packed record
-        char:0..127;
+        AnsiChar:0..127;
         scan:byte;
         shift:TEnhancedShiftState;
         st:string[7];
       end;
 
 const key_sequences:array[0..302] of key_sequence=(
-       (char:0;scan:kbAltA;shift:[essAlt];st:#27'A'),
-       (char:0;scan:kbAltA;shift:[essAlt];st:#27'a'),
-       (char:0;scan:kbAltB;shift:[essAlt];st:#27'B'),
-       (char:0;scan:kbAltB;shift:[essAlt];st:#27'b'),
-       (char:0;scan:kbAltC;shift:[essAlt];st:#27'C'),
-       (char:0;scan:kbAltC;shift:[essAlt];st:#27'c'),
-       (char:0;scan:kbAltD;shift:[essAlt];st:#27'D'),
-       (char:0;scan:kbAltD;shift:[essAlt];st:#27'd'),
-       (char:0;scan:kbAltE;shift:[essAlt];st:#27'E'),
-       (char:0;scan:kbAltE;shift:[essAlt];st:#27'e'),
-       (char:0;scan:kbAltF;shift:[essAlt];st:#27'F'),
-       (char:0;scan:kbAltF;shift:[essAlt];st:#27'f'),
-       (char:0;scan:kbAltG;shift:[essAlt];st:#27'G'),
-       (char:0;scan:kbAltG;shift:[essAlt];st:#27'g'),
-       (char:0;scan:kbAltH;shift:[essAlt];st:#27'H'),
-       (char:0;scan:kbAltH;shift:[essAlt];st:#27'h'),
-       (char:0;scan:kbAltI;shift:[essAlt];st:#27'I'),
-       (char:0;scan:kbAltI;shift:[essAlt];st:#27'i'),
-       (char:0;scan:kbAltJ;shift:[essAlt];st:#27'J'),
-       (char:0;scan:kbAltJ;shift:[essAlt];st:#27'j'),
-       (char:0;scan:kbAltK;shift:[essAlt];st:#27'K'),
-       (char:0;scan:kbAltK;shift:[essAlt];st:#27'k'),
-       (char:0;scan:kbAltL;shift:[essAlt];st:#27'L'),
-       (char:0;scan:kbAltL;shift:[essAlt];st:#27'l'),
-       (char:0;scan:kbAltM;shift:[essAlt];st:#27'M'),
-       (char:0;scan:kbAltM;shift:[essAlt];st:#27'm'),
-       (char:0;scan:kbAltN;shift:[essAlt];st:#27'N'),
-       (char:0;scan:kbAltN;shift:[essAlt];st:#27'n'),
-       (char:0;scan:kbAltO;shift:[essAlt];st:#27'O'),
-       (char:0;scan:kbAltO;shift:[essAlt];st:#27'o'),
-       (char:0;scan:kbAltP;shift:[essAlt];st:#27'P'),
-       (char:0;scan:kbAltP;shift:[essAlt];st:#27'p'),
-       (char:0;scan:kbAltQ;shift:[essAlt];st:#27'Q'),
-       (char:0;scan:kbAltQ;shift:[essAlt];st:#27'q'),
-       (char:0;scan:kbAltR;shift:[essAlt];st:#27'R'),
-       (char:0;scan:kbAltR;shift:[essAlt];st:#27'r'),
-       (char:0;scan:kbAltS;shift:[essAlt];st:#27'S'),
-       (char:0;scan:kbAltS;shift:[essAlt];st:#27's'),
-       (char:0;scan:kbAltT;shift:[essAlt];st:#27'T'),
-       (char:0;scan:kbAltT;shift:[essAlt];st:#27't'),
-       (char:0;scan:kbAltU;shift:[essAlt];st:#27'U'),
-       (char:0;scan:kbAltU;shift:[essAlt];st:#27'u'),
-       (char:0;scan:kbAltV;shift:[essAlt];st:#27'V'),
-       (char:0;scan:kbAltV;shift:[essAlt];st:#27'v'),
-       (char:0;scan:kbAltW;shift:[essAlt];st:#27'W'),
-       (char:0;scan:kbAltW;shift:[essAlt];st:#27'w'),
-       (char:0;scan:kbAltX;shift:[essAlt];st:#27'X'),
-       (char:0;scan:kbAltX;shift:[essAlt];st:#27'x'),
-       (char:0;scan:kbAltY;shift:[essAlt];st:#27'Y'),
-       (char:0;scan:kbAltY;shift:[essAlt];st:#27'y'),
-       (char:0;scan:kbAltZ;shift:[essAlt];st:#27'Z'),
-       (char:0;scan:kbAltZ;shift:[essAlt];st:#27'z'),
-       (char:0;scan:kbAltMinus;shift:[essAlt];st:#27'-'),
-       (char:0;scan:kbAltEqual;shift:[essAlt];st:#27'='),
-       (char:0;scan:kbAlt0;shift:[essAlt];st:#27'0'),
-       (char:0;scan:kbAlt1;shift:[essAlt];st:#27'1'),
-       (char:0;scan:kbAlt2;shift:[essAlt];st:#27'2'),
-       (char:0;scan:kbAlt3;shift:[essAlt];st:#27'3'),
-       (char:0;scan:kbAlt4;shift:[essAlt];st:#27'4'),
-       (char:0;scan:kbAlt5;shift:[essAlt];st:#27'5'),
-       (char:0;scan:kbAlt6;shift:[essAlt];st:#27'6'),
-       (char:0;scan:kbAlt7;shift:[essAlt];st:#27'7'),
-       (char:0;scan:kbAlt8;shift:[essAlt];st:#27'8'),
-       (char:0;scan:kbAlt9;shift:[essAlt];st:#27'9'),
-
-       (char:0;scan:kbF1;shift:[];st:#27'[[A'),                   {linux,konsole,xterm}
-       (char:0;scan:kbF2;shift:[];st:#27'[[B'),                   {linux,konsole,xterm}
-       (char:0;scan:kbF3;shift:[];st:#27'[[C'),                   {linux,konsole,xterm}
-       (char:0;scan:kbF4;shift:[];st:#27'[[D'),                   {linux,konsole,xterm}
-       (char:0;scan:kbF5;shift:[];st:#27'[[E'),                   {linux,konsole}
-       (char:0;scan:kbF1;shift:[];st:#27'[11~'),                  {Eterm,rxvt}
-       (char:0;scan:kbF2;shift:[];st:#27'[12~'),                  {Eterm,rxvt}
-       (char:0;scan:kbF3;shift:[];st:#27'[13~'),                  {Eterm,rxvt}
-       (char:0;scan:kbF4;shift:[];st:#27'[14~'),                  {Eterm,rxvt}
-       (char:0;scan:kbF5;shift:[];st:#27'[15~'),                  {xterm,Eterm,gnome,rxvt}
-       (char:0;scan:kbF6;shift:[];st:#27'[17~'),                  {linux,xterm,Eterm,konsole,gnome,rxvt}
-       (char:0;scan:kbF7;shift:[];st:#27'[18~'),                  {linux,xterm,Eterm,konsole,gnome,rxvt}
-       (char:0;scan:kbF8;shift:[];st:#27'[19~'),                  {linux,xterm,Eterm,konsole,gnome,rxvt}
-       (char:0;scan:kbF9;shift:[];st:#27'[20~'),                  {linux,xterm,Eterm,konsole,gnome,rxvt}
-       (char:0;scan:kbF10;shift:[];st:#27'[21~'),                 {linux,xterm,Eterm,konsole,gnome,rxvt}
-       (char:0;scan:kbF11;shift:[];st:#27'[23~'),                 {linux,xterm,Eterm,konsole,gnome,rxvt}
-       (char:0;scan:kbF12;shift:[];st:#27'[24~'),                 {linux,xterm,Eterm,konsole,gnome,rxvt}
-       (char:0;scan:kbF1;shift:[];st:#27'[M'),                    {FreeBSD}
-       (char:0;scan:kbF2;shift:[];st:#27'[N'),                    {FreeBSD}
-       (char:0;scan:kbF3;shift:[];st:#27'[O'),                    {FreeBSD}
-       (char:0;scan:kbF4;shift:[];st:#27'[P'),                    {FreeBSD}
-       (char:0;scan:kbF5;shift:[];st:#27'[Q'),                    {FreeBSD}
-       (char:0;scan:kbF6;shift:[];st:#27'[R'),                    {FreeBSD}
-       (char:0;scan:kbF7;shift:[];st:#27'[S'),                    {FreeBSD}
-       (char:0;scan:kbF8;shift:[];st:#27'[T'),                    {FreeBSD}
-       (char:0;scan:kbF9;shift:[];st:#27'[U'),                    {FreeBSD}
-       (char:0;scan:kbF10;shift:[];st:#27'[V'),                   {FreeBSD}
-       (char:0;scan:kbF11;shift:[];st:#27'[W'),                   {FreeBSD}
-       (char:0;scan:kbF12;shift:[];st:#27'[X'),                   {FreeBSD}
-       (char:0;scan:kbF1;shift:[];st:#27'OP'),                    {vt100,gnome,konsole}
-       (char:0;scan:kbF2;shift:[];st:#27'OQ'),                    {vt100,gnome,konsole}
-       (char:0;scan:kbF3;shift:[];st:#27'OR'),                    {vt100,gnome,konsole}
-       (char:0;scan:kbF4;shift:[];st:#27'OS'),                    {vt100,gnome,konsole}
-       (char:0;scan:kbF5;shift:[];st:#27'Ot'),                    {vt100}
-       (char:0;scan:kbF6;shift:[];st:#27'Ou'),                    {vt100}
-       (char:0;scan:kbF7;shift:[];st:#27'Ov'),                    {vt100}
-       (char:0;scan:kbF8;shift:[];st:#27'Ol'),                    {vt100}
-       (char:0;scan:kbF9;shift:[];st:#27'Ow'),                    {vt100}
-       (char:0;scan:kbF10;shift:[];st:#27'Ox'),                   {vt100}
-       (char:0;scan:kbF11;shift:[];st:#27'Oy'),                   {vt100}
-       (char:0;scan:kbF12;shift:[];st:#27'Oz'),                   {vt100}
-       (char:27;scan:kbEsc;shift:[];st:#27'[0~'),                 {if linux keyboard patched, escape
+       (AnsiChar:0;scan:kbAltA;shift:[essAlt];st:#27'A'),
+       (AnsiChar:0;scan:kbAltA;shift:[essAlt];st:#27'a'),
+       (AnsiChar:0;scan:kbAltB;shift:[essAlt];st:#27'B'),
+       (AnsiChar:0;scan:kbAltB;shift:[essAlt];st:#27'b'),
+       (AnsiChar:0;scan:kbAltC;shift:[essAlt];st:#27'C'),
+       (AnsiChar:0;scan:kbAltC;shift:[essAlt];st:#27'c'),
+       (AnsiChar:0;scan:kbAltD;shift:[essAlt];st:#27'D'),
+       (AnsiChar:0;scan:kbAltD;shift:[essAlt];st:#27'd'),
+       (AnsiChar:0;scan:kbAltE;shift:[essAlt];st:#27'E'),
+       (AnsiChar:0;scan:kbAltE;shift:[essAlt];st:#27'e'),
+       (AnsiChar:0;scan:kbAltF;shift:[essAlt];st:#27'F'),
+       (AnsiChar:0;scan:kbAltF;shift:[essAlt];st:#27'f'),
+       (AnsiChar:0;scan:kbAltG;shift:[essAlt];st:#27'G'),
+       (AnsiChar:0;scan:kbAltG;shift:[essAlt];st:#27'g'),
+       (AnsiChar:0;scan:kbAltH;shift:[essAlt];st:#27'H'),
+       (AnsiChar:0;scan:kbAltH;shift:[essAlt];st:#27'h'),
+       (AnsiChar:0;scan:kbAltI;shift:[essAlt];st:#27'I'),
+       (AnsiChar:0;scan:kbAltI;shift:[essAlt];st:#27'i'),
+       (AnsiChar:0;scan:kbAltJ;shift:[essAlt];st:#27'J'),
+       (AnsiChar:0;scan:kbAltJ;shift:[essAlt];st:#27'j'),
+       (AnsiChar:0;scan:kbAltK;shift:[essAlt];st:#27'K'),
+       (AnsiChar:0;scan:kbAltK;shift:[essAlt];st:#27'k'),
+       (AnsiChar:0;scan:kbAltL;shift:[essAlt];st:#27'L'),
+       (AnsiChar:0;scan:kbAltL;shift:[essAlt];st:#27'l'),
+       (AnsiChar:0;scan:kbAltM;shift:[essAlt];st:#27'M'),
+       (AnsiChar:0;scan:kbAltM;shift:[essAlt];st:#27'm'),
+       (AnsiChar:0;scan:kbAltN;shift:[essAlt];st:#27'N'),
+       (AnsiChar:0;scan:kbAltN;shift:[essAlt];st:#27'n'),
+       (AnsiChar:0;scan:kbAltO;shift:[essAlt];st:#27'O'),
+       (AnsiChar:0;scan:kbAltO;shift:[essAlt];st:#27'o'),
+       (AnsiChar:0;scan:kbAltP;shift:[essAlt];st:#27'P'),
+       (AnsiChar:0;scan:kbAltP;shift:[essAlt];st:#27'p'),
+       (AnsiChar:0;scan:kbAltQ;shift:[essAlt];st:#27'Q'),
+       (AnsiChar:0;scan:kbAltQ;shift:[essAlt];st:#27'q'),
+       (AnsiChar:0;scan:kbAltR;shift:[essAlt];st:#27'R'),
+       (AnsiChar:0;scan:kbAltR;shift:[essAlt];st:#27'r'),
+       (AnsiChar:0;scan:kbAltS;shift:[essAlt];st:#27'S'),
+       (AnsiChar:0;scan:kbAltS;shift:[essAlt];st:#27's'),
+       (AnsiChar:0;scan:kbAltT;shift:[essAlt];st:#27'T'),
+       (AnsiChar:0;scan:kbAltT;shift:[essAlt];st:#27't'),
+       (AnsiChar:0;scan:kbAltU;shift:[essAlt];st:#27'U'),
+       (AnsiChar:0;scan:kbAltU;shift:[essAlt];st:#27'u'),
+       (AnsiChar:0;scan:kbAltV;shift:[essAlt];st:#27'V'),
+       (AnsiChar:0;scan:kbAltV;shift:[essAlt];st:#27'v'),
+       (AnsiChar:0;scan:kbAltW;shift:[essAlt];st:#27'W'),
+       (AnsiChar:0;scan:kbAltW;shift:[essAlt];st:#27'w'),
+       (AnsiChar:0;scan:kbAltX;shift:[essAlt];st:#27'X'),
+       (AnsiChar:0;scan:kbAltX;shift:[essAlt];st:#27'x'),
+       (AnsiChar:0;scan:kbAltY;shift:[essAlt];st:#27'Y'),
+       (AnsiChar:0;scan:kbAltY;shift:[essAlt];st:#27'y'),
+       (AnsiChar:0;scan:kbAltZ;shift:[essAlt];st:#27'Z'),
+       (AnsiChar:0;scan:kbAltZ;shift:[essAlt];st:#27'z'),
+       (AnsiChar:0;scan:kbAltMinus;shift:[essAlt];st:#27'-'),
+       (AnsiChar:0;scan:kbAltEqual;shift:[essAlt];st:#27'='),
+       (AnsiChar:0;scan:kbAlt0;shift:[essAlt];st:#27'0'),
+       (AnsiChar:0;scan:kbAlt1;shift:[essAlt];st:#27'1'),
+       (AnsiChar:0;scan:kbAlt2;shift:[essAlt];st:#27'2'),
+       (AnsiChar:0;scan:kbAlt3;shift:[essAlt];st:#27'3'),
+       (AnsiChar:0;scan:kbAlt4;shift:[essAlt];st:#27'4'),
+       (AnsiChar:0;scan:kbAlt5;shift:[essAlt];st:#27'5'),
+       (AnsiChar:0;scan:kbAlt6;shift:[essAlt];st:#27'6'),
+       (AnsiChar:0;scan:kbAlt7;shift:[essAlt];st:#27'7'),
+       (AnsiChar:0;scan:kbAlt8;shift:[essAlt];st:#27'8'),
+       (AnsiChar:0;scan:kbAlt9;shift:[essAlt];st:#27'9'),
+
+       (AnsiChar:0;scan:kbF1;shift:[];st:#27'[[A'),                   {linux,konsole,xterm}
+       (AnsiChar:0;scan:kbF2;shift:[];st:#27'[[B'),                   {linux,konsole,xterm}
+       (AnsiChar:0;scan:kbF3;shift:[];st:#27'[[C'),                   {linux,konsole,xterm}
+       (AnsiChar:0;scan:kbF4;shift:[];st:#27'[[D'),                   {linux,konsole,xterm}
+       (AnsiChar:0;scan:kbF5;shift:[];st:#27'[[E'),                   {linux,konsole}
+       (AnsiChar:0;scan:kbF1;shift:[];st:#27'[11~'),                  {Eterm,rxvt}
+       (AnsiChar:0;scan:kbF2;shift:[];st:#27'[12~'),                  {Eterm,rxvt}
+       (AnsiChar:0;scan:kbF3;shift:[];st:#27'[13~'),                  {Eterm,rxvt}
+       (AnsiChar:0;scan:kbF4;shift:[];st:#27'[14~'),                  {Eterm,rxvt}
+       (AnsiChar:0;scan:kbF5;shift:[];st:#27'[15~'),                  {xterm,Eterm,gnome,rxvt}
+       (AnsiChar:0;scan:kbF6;shift:[];st:#27'[17~'),                  {linux,xterm,Eterm,konsole,gnome,rxvt}
+       (AnsiChar:0;scan:kbF7;shift:[];st:#27'[18~'),                  {linux,xterm,Eterm,konsole,gnome,rxvt}
+       (AnsiChar:0;scan:kbF8;shift:[];st:#27'[19~'),                  {linux,xterm,Eterm,konsole,gnome,rxvt}
+       (AnsiChar:0;scan:kbF9;shift:[];st:#27'[20~'),                  {linux,xterm,Eterm,konsole,gnome,rxvt}
+       (AnsiChar:0;scan:kbF10;shift:[];st:#27'[21~'),                 {linux,xterm,Eterm,konsole,gnome,rxvt}
+       (AnsiChar:0;scan:kbF11;shift:[];st:#27'[23~'),                 {linux,xterm,Eterm,konsole,gnome,rxvt}
+       (AnsiChar:0;scan:kbF12;shift:[];st:#27'[24~'),                 {linux,xterm,Eterm,konsole,gnome,rxvt}
+       (AnsiChar:0;scan:kbF1;shift:[];st:#27'[M'),                    {FreeBSD}
+       (AnsiChar:0;scan:kbF2;shift:[];st:#27'[N'),                    {FreeBSD}
+       (AnsiChar:0;scan:kbF3;shift:[];st:#27'[O'),                    {FreeBSD}
+       (AnsiChar:0;scan:kbF4;shift:[];st:#27'[P'),                    {FreeBSD}
+       (AnsiChar:0;scan:kbF5;shift:[];st:#27'[Q'),                    {FreeBSD}
+       (AnsiChar:0;scan:kbF6;shift:[];st:#27'[R'),                    {FreeBSD}
+       (AnsiChar:0;scan:kbF7;shift:[];st:#27'[S'),                    {FreeBSD}
+       (AnsiChar:0;scan:kbF8;shift:[];st:#27'[T'),                    {FreeBSD}
+       (AnsiChar:0;scan:kbF9;shift:[];st:#27'[U'),                    {FreeBSD}
+       (AnsiChar:0;scan:kbF10;shift:[];st:#27'[V'),                   {FreeBSD}
+       (AnsiChar:0;scan:kbF11;shift:[];st:#27'[W'),                   {FreeBSD}
+       (AnsiChar:0;scan:kbF12;shift:[];st:#27'[X'),                   {FreeBSD}
+       (AnsiChar:0;scan:kbF1;shift:[];st:#27'OP'),                    {vt100,gnome,konsole}
+       (AnsiChar:0;scan:kbF2;shift:[];st:#27'OQ'),                    {vt100,gnome,konsole}
+       (AnsiChar:0;scan:kbF3;shift:[];st:#27'OR'),                    {vt100,gnome,konsole}
+       (AnsiChar:0;scan:kbF4;shift:[];st:#27'OS'),                    {vt100,gnome,konsole}
+       (AnsiChar:0;scan:kbF5;shift:[];st:#27'Ot'),                    {vt100}
+       (AnsiChar:0;scan:kbF6;shift:[];st:#27'Ou'),                    {vt100}
+       (AnsiChar:0;scan:kbF7;shift:[];st:#27'Ov'),                    {vt100}
+       (AnsiChar:0;scan:kbF8;shift:[];st:#27'Ol'),                    {vt100}
+       (AnsiChar:0;scan:kbF9;shift:[];st:#27'Ow'),                    {vt100}
+       (AnsiChar:0;scan:kbF10;shift:[];st:#27'Ox'),                   {vt100}
+       (AnsiChar:0;scan:kbF11;shift:[];st:#27'Oy'),                   {vt100}
+       (AnsiChar:0;scan:kbF12;shift:[];st:#27'Oz'),                   {vt100}
+       (AnsiChar:27;scan:kbEsc;shift:[];st:#27'[0~'),                 {if linux keyboard patched, escape
                                                                    returns this}
-       (char:0;scan:kbIns;shift:[];st:#27'[2~'),                  {linux,Eterm,rxvt}
-       (char:0;scan:kbDel;shift:[];st:#27'[3~'),                  {linux,Eterm,rxvt}
-       (char:0;scan:kbHome;shift:[];st:#27'[1~'),                 {linux}
-       (char:0;scan:kbHome;shift:[];st:#27'[7~'),                 {Eterm,rxvt}
-       (char:0;scan:kbHome;shift:[];st:#27'[H'),                  {FreeBSD}
-       (char:0;scan:kbHome;shift:[];st:#27'OH'),                  {some xterm configurations}
-       (char:0;scan:kbEnd;shift:[];st:#27'[4~'),                  {linux,Eterm}
-       (char:0;scan:kbEnd;shift:[];st:#27'[8~'),                  {rxvt}
-       (char:0;scan:kbEnd;shift:[];st:#27'[F'),                   {FreeBSD}
-       (char:0;scan:kbEnd;shift:[];st:#27'OF'),                   {some xterm configurations}
-       (char:0;scan:kbPgUp;shift:[];st:#27'[5~'),                 {linux,Eterm,rxvt}
-       (char:0;scan:kbPgUp;shift:[];st:#27'[I'),                  {FreeBSD}
-       (char:0;scan:kbPgDn;shift:[];st:#27'[6~'),                 {linux,Eterm,rxvt}
+       (AnsiChar:0;scan:kbIns;shift:[];st:#27'[2~'),                  {linux,Eterm,rxvt}
+       (AnsiChar:0;scan:kbDel;shift:[];st:#27'[3~'),                  {linux,Eterm,rxvt}
+       (AnsiChar:0;scan:kbHome;shift:[];st:#27'[1~'),                 {linux}
+       (AnsiChar:0;scan:kbHome;shift:[];st:#27'[7~'),                 {Eterm,rxvt}
+       (AnsiChar:0;scan:kbHome;shift:[];st:#27'[H'),                  {FreeBSD}
+       (AnsiChar:0;scan:kbHome;shift:[];st:#27'OH'),                  {some xterm configurations}
+       (AnsiChar:0;scan:kbEnd;shift:[];st:#27'[4~'),                  {linux,Eterm}
+       (AnsiChar:0;scan:kbEnd;shift:[];st:#27'[8~'),                  {rxvt}
+       (AnsiChar:0;scan:kbEnd;shift:[];st:#27'[F'),                   {FreeBSD}
+       (AnsiChar:0;scan:kbEnd;shift:[];st:#27'OF'),                   {some xterm configurations}
+       (AnsiChar:0;scan:kbPgUp;shift:[];st:#27'[5~'),                 {linux,Eterm,rxvt}
+       (AnsiChar:0;scan:kbPgUp;shift:[];st:#27'[I'),                  {FreeBSD}
+       (AnsiChar:0;scan:kbPgDn;shift:[];st:#27'[6~'),                 {linux,Eterm,rxvt}
 {$ifdef FREEBSD}
-       (char:0;scan:kbPgDn;shift:[];st:#27'[G'),                  {FreeBSD, conflicts with linux.
+       (AnsiChar:0;scan:kbPgDn;shift:[];st:#27'[G'),                  {FreeBSD, conflicts with linux.
                                                                    Note: new FreeBSD versions seem
                                                                    to use xterm-like sequences, so
                                                                    this one is not needed for them.
@@ -1023,220 +1023,220 @@ const key_sequences:array[0..302] of key_sequence=(
                                                                    it'll work over SSH across platforms
                                                                    too.}
 {$else FREEBSD}
-       (char:0;scan:kbCenter;shift:[];st:#27'[G'),                {linux}
+       (AnsiChar:0;scan:kbCenter;shift:[];st:#27'[G'),                {linux}
 {$endif FREEBSD}
-       (char:0;scan:kbCenter;shift:[];st:#27'[E'),                {xterm,gnome3}
-       (char:0;scan:kbUp;shift:[];st:#27'[A'),                    {linux,FreeBSD,rxvt}
-       (char:0;scan:kbDown;shift:[];st:#27'[B'),                  {linux,FreeBSD,rxvt}
-       (char:0;scan:kbRight;shift:[];st:#27'[C'),                 {linux,FreeBSD,rxvt}
-       (char:0;scan:kbLeft;shift:[];st:#27'[D'),                  {linux,FreeBSD,rxvt}
-       (char:0;scan:kbUp;shift:[];st:#27'OA'),                    {xterm}
-       (char:0;scan:kbDown;shift:[];st:#27'OB'),                  {xterm}
-       (char:0;scan:kbRight;shift:[];st:#27'OC'),                 {xterm}
-       (char:0;scan:kbLeft;shift:[];st:#27'OD'),                  {xterm}
+       (AnsiChar:0;scan:kbCenter;shift:[];st:#27'[E'),                {xterm,gnome3}
+       (AnsiChar:0;scan:kbUp;shift:[];st:#27'[A'),                    {linux,FreeBSD,rxvt}
+       (AnsiChar:0;scan:kbDown;shift:[];st:#27'[B'),                  {linux,FreeBSD,rxvt}
+       (AnsiChar:0;scan:kbRight;shift:[];st:#27'[C'),                 {linux,FreeBSD,rxvt}
+       (AnsiChar:0;scan:kbLeft;shift:[];st:#27'[D'),                  {linux,FreeBSD,rxvt}
+       (AnsiChar:0;scan:kbUp;shift:[];st:#27'OA'),                    {xterm}
+       (AnsiChar:0;scan:kbDown;shift:[];st:#27'OB'),                  {xterm}
+       (AnsiChar:0;scan:kbRight;shift:[];st:#27'OC'),                 {xterm}
+       (AnsiChar:0;scan:kbLeft;shift:[];st:#27'OD'),                  {xterm}
 (* Already recognized above as F11!
-       (char:0;scan:kbShiftF1;shift:[essShift];st:#27'[23~'),     {rxvt}
-       (char:0;scan:kbShiftF2;shift:[essShift];st:#27'[24~'),     {rxvt}
+       (AnsiChar:0;scan:kbShiftF1;shift:[essShift];st:#27'[23~'),     {rxvt}
+       (AnsiChar:0;scan:kbShiftF2;shift:[essShift];st:#27'[24~'),     {rxvt}
 *)
 (* These seem to be shifted. Probably something changed with linux's default keymaps.
-       (char:0;scan:kbShiftF3;shift:[essShift];st:#27'[25~'),     {linux,rxvt}
-       (char:0;scan:kbShiftF4;shift:[essShift];st:#27'[26~'),     {linux,rxvt}
-       (char:0;scan:kbShiftF5;shift:[essShift];st:#27'[28~'),     {linux,rxvt}
-       (char:0;scan:kbShiftF6;shift:[essShift];st:#27'[29~'),     {linux,rxvt}
-       (char:0;scan:kbShiftF7;shift:[essShift];st:#27'[31~'),     {linux,rxvt}
-       (char:0;scan:kbShiftF8;shift:[essShift];st:#27'[32~'),     {linux,rxvt}
-       (char:0;scan:kbShiftF9;shift:[essShift];st:#27'[33~'),     {linux,rxvt}
-       (char:0;scan:kbShiftF10;shift:[essShift];st:#27'[34~'),    {linux,rxvt}*)
-       (char:0;scan:kbShiftF1;shift:[essShift];st:#27'[25~'),     {linux}
-       (char:0;scan:kbShiftF2;shift:[essShift];st:#27'[26~'),     {linux}
-       (char:0;scan:kbShiftF3;shift:[essShift];st:#27'[28~'),     {linux}
-       (char:0;scan:kbShiftF4;shift:[essShift];st:#27'[29~'),     {linux}
-       (char:0;scan:kbShiftF5;shift:[essShift];st:#27'[31~'),     {linux}
-       (char:0;scan:kbShiftF6;shift:[essShift];st:#27'[32~'),     {linux}
-       (char:0;scan:kbShiftF7;shift:[essShift];st:#27'[33~'),     {linux}
-       (char:0;scan:kbShiftF8;shift:[essShift];st:#27'[34~'),     {linux}
-       (char:0;scan:kbShiftF11;shift:[essShift];st:#27'[23$'),    {rxvt}
-       (char:0;scan:kbShiftF12;shift:[essShift];st:#27'[24$'),    {rxvt}
-       (char:0;scan:kbShiftF1;shift:[essShift];st:#27'[11;2~'),   {konsole in vt420pc mode}
-       (char:0;scan:kbShiftF2;shift:[essShift];st:#27'[12;2~'),   {konsole in vt420pc mode}
-       (char:0;scan:kbShiftF3;shift:[essShift];st:#27'[13;2~'),   {konsole in vt420pc mode}
-       (char:0;scan:kbShiftF4;shift:[essShift];st:#27'[14;2~'),   {konsole in vt420pc mode}
-       (char:0;scan:kbShiftF5;shift:[essShift];st:#27'[15;2~'),   {xterm}
-       (char:0;scan:kbShiftF6;shift:[essShift];st:#27'[17;2~'),   {xterm}
-       (char:0;scan:kbShiftF7;shift:[essShift];st:#27'[18;2~'),   {xterm}
-       (char:0;scan:kbShiftF8;shift:[essShift];st:#27'[19;2~'),   {xterm}
-       (char:0;scan:kbShiftF9;shift:[essShift];st:#27'[20;2~'),   {xterm}
-       (char:0;scan:kbShiftF10;shift:[essShift];st:#27'[21;2~'),  {xterm}
-       (char:0;scan:kbShiftF11;shift:[essShift];st:#27'[23;2~'),  {xterm}
-       (char:0;scan:kbShiftF12;shift:[essShift];st:#27'[24;2~'),  {xterm}
-       (char:0;scan:kbShiftF1;shift:[essShift];st:#27'O2P'),      {konsole,xterm}
-       (char:0;scan:kbShiftF2;shift:[essShift];st:#27'O2Q'),      {konsole,xterm}
-       (char:0;scan:kbShiftF3;shift:[essShift];st:#27'O2R'),      {konsole,xterm}
-       (char:0;scan:kbShiftF4;shift:[essShift];st:#27'O2S'),      {konsole,xterm}
-       (char:0;scan:kbShiftF1;shift:[essShift];st:#27'[1;2P'),    {xterm,gnome3}
-       (char:0;scan:kbShiftF2;shift:[essShift];st:#27'[1;2Q'),    {xterm,gnome3}
-       (char:0;scan:kbShiftF3;shift:[essShift];st:#27'[1;2R'),    {xterm,gnome3}
-       (char:0;scan:kbShiftF4;shift:[essShift];st:#27'[1;2S'),    {xterm,gnome3}
-       (char:0;scan:kbCtrlF1;shift:[essCtrl];st:#27'O5P'),        {konsole,xterm}
-       (char:0;scan:kbCtrlF2;shift:[essCtrl];st:#27'O5Q'),        {konsole,xterm}
-       (char:0;scan:kbCtrlF3;shift:[essCtrl];st:#27'O5R'),        {konsole,xterm}
-       (char:0;scan:kbCtrlF4;shift:[essCtrl];st:#27'O5S'),        {konsole,xterm}
-       (char:0;scan:kbCtrlF1;shift:[essCtrl];st:#27'[1;5P'),      {xterm,gnome3}
-       (char:0;scan:kbCtrlF2;shift:[essCtrl];st:#27'[1;5Q'),      {xterm,gnome3}
-       (char:0;scan:kbCtrlF3;shift:[essCtrl];st:#27'[1;5R'),      {xterm,gnome3}
-       (char:0;scan:kbCtrlF4;shift:[essCtrl];st:#27'[1;5S'),      {xterm,gnome3}
-       (char:0;scan:kbCtrlF1;shift:[essCtrl];st:#27'[11;5~'),     {none, but expected}
-       (char:0;scan:kbCtrlF2;shift:[essCtrl];st:#27'[12;5~'),     {none, but expected}
-       (char:0;scan:kbCtrlF3;shift:[essCtrl];st:#27'[13;5~'),     {none, but expected}
-       (char:0;scan:kbCtrlF4;shift:[essCtrl];st:#27'[14;5~'),     {none, but expected}
-       (char:0;scan:kbCtrlF5;shift:[essCtrl];st:#27'[15;5~'),     {xterm}
-       (char:0;scan:kbCtrlF6;shift:[essCtrl];st:#27'[17;5~'),     {xterm}
-       (char:0;scan:kbCtrlF7;shift:[essCtrl];st:#27'[18;5~'),     {xterm}
-       (char:0;scan:kbCtrlF8;shift:[essCtrl];st:#27'[19;5~'),     {xterm}
-       (char:0;scan:kbCtrlF9;shift:[essCtrl];st:#27'[20;5~'),     {xterm}
-       (char:0;scan:kbCtrlF10;shift:[essCtrl];st:#27'[21;5~'),    {xterm}
-       (char:0;scan:kbCtrlF11;shift:[essCtrl];st:#27'[23;5~'),    {xterm}
-       (char:0;scan:kbCtrlF12;shift:[essCtrl];st:#27'[24;5~'),    {xterm}
-       (char:0;scan:kbCtrlF1;shift:[essCtrl];st:#27'[11^'),       {rxvt}
-       (char:0;scan:kbCtrlF2;shift:[essCtrl];st:#27'[12^'),       {rxvt}
-       (char:0;scan:kbCtrlF3;shift:[essCtrl];st:#27'[13^'),       {rxvt}
-       (char:0;scan:kbCtrlF4;shift:[essCtrl];st:#27'[14^'),       {rxvt}
-       (char:0;scan:kbCtrlF5;shift:[essCtrl];st:#27'[15^'),       {rxvt}
-       (char:0;scan:kbCtrlF6;shift:[essCtrl];st:#27'[17^'),       {rxvt}
-       (char:0;scan:kbCtrlF7;shift:[essCtrl];st:#27'[18^'),       {rxvt}
-       (char:0;scan:kbCtrlF8;shift:[essCtrl];st:#27'[19^'),       {rxvt}
-       (char:0;scan:kbCtrlF9;shift:[essCtrl];st:#27'[20^'),       {rxvt}
-       (char:0;scan:kbCtrlF10;shift:[essCtrl];st:#27'[21^'),      {rxvt}
-       (char:0;scan:kbCtrlF11;shift:[essCtrl];st:#27'[23^'),      {rxvt}
-       (char:0;scan:kbCtrlF12;shift:[essCtrl];st:#27'[24^'),      {rxvt}
-       (char:0;scan:kbShiftIns;shift:[essShift];st:#27'[2;2~'),   {should be the code, but shift+ins
+       (AnsiChar:0;scan:kbShiftF3;shift:[essShift];st:#27'[25~'),     {linux,rxvt}
+       (AnsiChar:0;scan:kbShiftF4;shift:[essShift];st:#27'[26~'),     {linux,rxvt}
+       (AnsiChar:0;scan:kbShiftF5;shift:[essShift];st:#27'[28~'),     {linux,rxvt}
+       (AnsiChar:0;scan:kbShiftF6;shift:[essShift];st:#27'[29~'),     {linux,rxvt}
+       (AnsiChar:0;scan:kbShiftF7;shift:[essShift];st:#27'[31~'),     {linux,rxvt}
+       (AnsiChar:0;scan:kbShiftF8;shift:[essShift];st:#27'[32~'),     {linux,rxvt}
+       (AnsiChar:0;scan:kbShiftF9;shift:[essShift];st:#27'[33~'),     {linux,rxvt}
+       (AnsiChar:0;scan:kbShiftF10;shift:[essShift];st:#27'[34~'),    {linux,rxvt}*)
+       (AnsiChar:0;scan:kbShiftF1;shift:[essShift];st:#27'[25~'),     {linux}
+       (AnsiChar:0;scan:kbShiftF2;shift:[essShift];st:#27'[26~'),     {linux}
+       (AnsiChar:0;scan:kbShiftF3;shift:[essShift];st:#27'[28~'),     {linux}
+       (AnsiChar:0;scan:kbShiftF4;shift:[essShift];st:#27'[29~'),     {linux}
+       (AnsiChar:0;scan:kbShiftF5;shift:[essShift];st:#27'[31~'),     {linux}
+       (AnsiChar:0;scan:kbShiftF6;shift:[essShift];st:#27'[32~'),     {linux}
+       (AnsiChar:0;scan:kbShiftF7;shift:[essShift];st:#27'[33~'),     {linux}
+       (AnsiChar:0;scan:kbShiftF8;shift:[essShift];st:#27'[34~'),     {linux}
+       (AnsiChar:0;scan:kbShiftF11;shift:[essShift];st:#27'[23$'),    {rxvt}
+       (AnsiChar:0;scan:kbShiftF12;shift:[essShift];st:#27'[24$'),    {rxvt}
+       (AnsiChar:0;scan:kbShiftF1;shift:[essShift];st:#27'[11;2~'),   {konsole in vt420pc mode}
+       (AnsiChar:0;scan:kbShiftF2;shift:[essShift];st:#27'[12;2~'),   {konsole in vt420pc mode}
+       (AnsiChar:0;scan:kbShiftF3;shift:[essShift];st:#27'[13;2~'),   {konsole in vt420pc mode}
+       (AnsiChar:0;scan:kbShiftF4;shift:[essShift];st:#27'[14;2~'),   {konsole in vt420pc mode}
+       (AnsiChar:0;scan:kbShiftF5;shift:[essShift];st:#27'[15;2~'),   {xterm}
+       (AnsiChar:0;scan:kbShiftF6;shift:[essShift];st:#27'[17;2~'),   {xterm}
+       (AnsiChar:0;scan:kbShiftF7;shift:[essShift];st:#27'[18;2~'),   {xterm}
+       (AnsiChar:0;scan:kbShiftF8;shift:[essShift];st:#27'[19;2~'),   {xterm}
+       (AnsiChar:0;scan:kbShiftF9;shift:[essShift];st:#27'[20;2~'),   {xterm}
+       (AnsiChar:0;scan:kbShiftF10;shift:[essShift];st:#27'[21;2~'),  {xterm}
+       (AnsiChar:0;scan:kbShiftF11;shift:[essShift];st:#27'[23;2~'),  {xterm}
+       (AnsiChar:0;scan:kbShiftF12;shift:[essShift];st:#27'[24;2~'),  {xterm}
+       (AnsiChar:0;scan:kbShiftF1;shift:[essShift];st:#27'O2P'),      {konsole,xterm}
+       (AnsiChar:0;scan:kbShiftF2;shift:[essShift];st:#27'O2Q'),      {konsole,xterm}
+       (AnsiChar:0;scan:kbShiftF3;shift:[essShift];st:#27'O2R'),      {konsole,xterm}
+       (AnsiChar:0;scan:kbShiftF4;shift:[essShift];st:#27'O2S'),      {konsole,xterm}
+       (AnsiChar:0;scan:kbShiftF1;shift:[essShift];st:#27'[1;2P'),    {xterm,gnome3}
+       (AnsiChar:0;scan:kbShiftF2;shift:[essShift];st:#27'[1;2Q'),    {xterm,gnome3}
+       (AnsiChar:0;scan:kbShiftF3;shift:[essShift];st:#27'[1;2R'),    {xterm,gnome3}
+       (AnsiChar:0;scan:kbShiftF4;shift:[essShift];st:#27'[1;2S'),    {xterm,gnome3}
+       (AnsiChar:0;scan:kbCtrlF1;shift:[essCtrl];st:#27'O5P'),        {konsole,xterm}
+       (AnsiChar:0;scan:kbCtrlF2;shift:[essCtrl];st:#27'O5Q'),        {konsole,xterm}
+       (AnsiChar:0;scan:kbCtrlF3;shift:[essCtrl];st:#27'O5R'),        {konsole,xterm}
+       (AnsiChar:0;scan:kbCtrlF4;shift:[essCtrl];st:#27'O5S'),        {konsole,xterm}
+       (AnsiChar:0;scan:kbCtrlF1;shift:[essCtrl];st:#27'[1;5P'),      {xterm,gnome3}
+       (AnsiChar:0;scan:kbCtrlF2;shift:[essCtrl];st:#27'[1;5Q'),      {xterm,gnome3}
+       (AnsiChar:0;scan:kbCtrlF3;shift:[essCtrl];st:#27'[1;5R'),      {xterm,gnome3}
+       (AnsiChar:0;scan:kbCtrlF4;shift:[essCtrl];st:#27'[1;5S'),      {xterm,gnome3}
+       (AnsiChar:0;scan:kbCtrlF1;shift:[essCtrl];st:#27'[11;5~'),     {none, but expected}
+       (AnsiChar:0;scan:kbCtrlF2;shift:[essCtrl];st:#27'[12;5~'),     {none, but expected}
+       (AnsiChar:0;scan:kbCtrlF3;shift:[essCtrl];st:#27'[13;5~'),     {none, but expected}
+       (AnsiChar:0;scan:kbCtrlF4;shift:[essCtrl];st:#27'[14;5~'),     {none, but expected}
+       (AnsiChar:0;scan:kbCtrlF5;shift:[essCtrl];st:#27'[15;5~'),     {xterm}
+       (AnsiChar:0;scan:kbCtrlF6;shift:[essCtrl];st:#27'[17;5~'),     {xterm}
+       (AnsiChar:0;scan:kbCtrlF7;shift:[essCtrl];st:#27'[18;5~'),     {xterm}
+       (AnsiChar:0;scan:kbCtrlF8;shift:[essCtrl];st:#27'[19;5~'),     {xterm}
+       (AnsiChar:0;scan:kbCtrlF9;shift:[essCtrl];st:#27'[20;5~'),     {xterm}
+       (AnsiChar:0;scan:kbCtrlF10;shift:[essCtrl];st:#27'[21;5~'),    {xterm}
+       (AnsiChar:0;scan:kbCtrlF11;shift:[essCtrl];st:#27'[23;5~'),    {xterm}
+       (AnsiChar:0;scan:kbCtrlF12;shift:[essCtrl];st:#27'[24;5~'),    {xterm}
+       (AnsiChar:0;scan:kbCtrlF1;shift:[essCtrl];st:#27'[11^'),       {rxvt}
+       (AnsiChar:0;scan:kbCtrlF2;shift:[essCtrl];st:#27'[12^'),       {rxvt}
+       (AnsiChar:0;scan:kbCtrlF3;shift:[essCtrl];st:#27'[13^'),       {rxvt}
+       (AnsiChar:0;scan:kbCtrlF4;shift:[essCtrl];st:#27'[14^'),       {rxvt}
+       (AnsiChar:0;scan:kbCtrlF5;shift:[essCtrl];st:#27'[15^'),       {rxvt}
+       (AnsiChar:0;scan:kbCtrlF6;shift:[essCtrl];st:#27'[17^'),       {rxvt}
+       (AnsiChar:0;scan:kbCtrlF7;shift:[essCtrl];st:#27'[18^'),       {rxvt}
+       (AnsiChar:0;scan:kbCtrlF8;shift:[essCtrl];st:#27'[19^'),       {rxvt}
+       (AnsiChar:0;scan:kbCtrlF9;shift:[essCtrl];st:#27'[20^'),       {rxvt}
+       (AnsiChar:0;scan:kbCtrlF10;shift:[essCtrl];st:#27'[21^'),      {rxvt}
+       (AnsiChar:0;scan:kbCtrlF11;shift:[essCtrl];st:#27'[23^'),      {rxvt}
+       (AnsiChar:0;scan:kbCtrlF12;shift:[essCtrl];st:#27'[24^'),      {rxvt}
+       (AnsiChar:0;scan:kbShiftIns;shift:[essShift];st:#27'[2;2~'),   {should be the code, but shift+ins
                                                                    is paste X clipboard in many
                                                                    terminal emulators :(}
-       (char:0;scan:kbShiftDel;shift:[essShift];st:#27'[3;2~'),   {xterm,konsole}
-       (char:0;scan:kbCtrlIns;shift:[essCtrl];st:#27'[2;5~'),     {xterm}
-       (char:0;scan:kbCtrlDel;shift:[essCtrl];st:#27'[3;5~'),     {xterm}
-       (char:0;scan:kbShiftDel;shift:[essShift];st:#27'[3$'),     {rxvt}
-       (char:0;scan:kbCtrlIns;shift:[essCtrl];st:#27'[2^'),       {rxvt}
-       (char:0;scan:kbCtrlDel;shift:[essCtrl];st:#27'[3^'),       {rxvt}
-       (char:0;scan:kbAltF1;shift:[essAlt];st:#27#27'[[A'),
-       (char:0;scan:kbAltF2;shift:[essAlt];st:#27#27'[[B'),
-       (char:0;scan:kbAltF3;shift:[essAlt];st:#27#27'[[C'),
-       (char:0;scan:kbAltF4;shift:[essAlt];st:#27#27'[[D'),
-       (char:0;scan:kbAltF5;shift:[essAlt];st:#27#27'[[E'),
-       (char:0;scan:kbAltF1;shift:[essAlt];st:#27#27'[11~'),      {rxvt}
-       (char:0;scan:kbAltF2;shift:[essAlt];st:#27#27'[12~'),      {rxvt}
-       (char:0;scan:kbAltF3;shift:[essAlt];st:#27#27'[13~'),      {rxvt}
-       (char:0;scan:kbAltF4;shift:[essAlt];st:#27#27'[14~'),      {rxvt}
-       (char:0;scan:kbAltF5;shift:[essAlt];st:#27#27'[15~'),      {rxvt}
-       (char:0;scan:kbAltF6;shift:[essAlt];st:#27#27'[17~'),      {rxvt}
-       (char:0;scan:kbAltF7;shift:[essAlt];st:#27#27'[18~'),      {rxvt}
-       (char:0;scan:kbAltF8;shift:[essAlt];st:#27#27'[19~'),      {rxvt}
-       (char:0;scan:kbAltF9;shift:[essAlt];st:#27#27'[20~'),      {rxvt}
-       (char:0;scan:kbAltF10;shift:[essAlt];st:#27#27'[21~'),     {rxvt}
-       (char:0;scan:kbAltF11;shift:[essAlt];st:#27#27'[23~'),     {rxvt}
-       (char:0;scan:kbAltF12;shift:[essAlt];st:#27#27'[24~'),     {rxvt}
-       (char:0;scan:kbAltF1;shift:[essAlt];st:#27#27'OP'),        {xterm}
-       (char:0;scan:kbAltF2;shift:[essAlt];st:#27#27'OQ'),        {xterm}
-       (char:0;scan:kbAltF3;shift:[essAlt];st:#27#27'OR'),        {xterm}
-       (char:0;scan:kbAltF4;shift:[essAlt];st:#27#27'OS'),        {xterm}
-       (char:0;scan:kbAltF5;shift:[essAlt];st:#27#27'Ot'),        {xterm}
-       (char:0;scan:kbAltF6;shift:[essAlt];st:#27#27'Ou'),        {xterm}
-       (char:0;scan:kbAltF7;shift:[essAlt];st:#27#27'Ov'),        {xterm}
-       (char:0;scan:kbAltF8;shift:[essAlt];st:#27#27'Ol'),        {xterm}
-       (char:0;scan:kbAltF9;shift:[essAlt];st:#27#27'Ow'),        {xterm}
-       (char:0;scan:kbAltF10;shift:[essAlt];st:#27#27'Ox'),       {xterm}
-       (char:0;scan:kbAltF11;shift:[essAlt];st:#27#27'Oy'),       {xterm}
-       (char:0;scan:kbAltF12;shift:[essAlt];st:#27#27'Oz'),       {xterm}
-       (char:0;scan:kbAltF1;shift:[essAlt];st:#27'[1;3P'),        {xterm,gnome3}
-       (char:0;scan:kbAltF2;shift:[essAlt];st:#27'[1;3Q'),        {xterm,gnome3}
-       (char:0;scan:kbAltF3;shift:[essAlt];st:#27'[1;3R'),        {xterm,gnome3}
-       (char:0;scan:kbAltF4;shift:[essAlt];st:#27'[1;3S'),        {xterm,gnome3}
-       (char:0;scan:kbAltF1;shift:[essAlt];st:#27'O3P'),          {xterm on FreeBSD}
-       (char:0;scan:kbAltF2;shift:[essAlt];st:#27'O3Q'),          {xterm on FreeBSD}
-       (char:0;scan:kbAltF3;shift:[essAlt];st:#27'O3R'),          {xterm on FreeBSD}
-       (char:0;scan:kbAltF4;shift:[essAlt];st:#27'O3S'),          {xterm on FreeBSD}
-       (char:0;scan:kbAltF5;shift:[essAlt];st:#27'[15;3~'),       {xterm on FreeBSD}
-       (char:0;scan:kbAltF6;shift:[essAlt];st:#27'[17;3~'),       {xterm on FreeBSD}
-       (char:0;scan:kbAltF7;shift:[essAlt];st:#27'[18;3~'),       {xterm on FreeBSD}
-       (char:0;scan:kbAltF8;shift:[essAlt];st:#27'[19;3~'),       {xterm on FreeBSD}
-       (char:0;scan:kbAltF9;shift:[essAlt];st:#27'[20;3~'),       {xterm on FreeBSD}
-       (char:0;scan:kbAltF10;shift:[essAlt];st:#27'[21;3~'),      {xterm on FreeBSD}
-       (char:0;scan:kbAltF11;shift:[essAlt];st:#27'[23;3~'),      {xterm on FreeBSD}
-       (char:0;scan:kbAltF12;shift:[essAlt];st:#27'[24;3~'),      {xterm on FreeBSD}
-
-       (char:0;scan:kbShiftTab;shift:[essShift];st:#27#9),        {linux - 'Meta_Tab'}
-       (char:0;scan:kbShiftTab;shift:[essShift];st:#27'[Z'),
-       (char:0;scan:kbShiftUp;shift:[essShift];st:#27'[1;2A'),    {xterm}
-       (char:0;scan:kbShiftDown;shift:[essShift];st:#27'[1;2B'),  {xterm}
-       (char:0;scan:kbShiftRight;shift:[essShift];st:#27'[1;2C'), {xterm}
-       (char:0;scan:kbShiftLeft;shift:[essShift];st:#27'[1;2D'),  {xterm}
-       (char:0;scan:kbShiftPgUp;shift:[essShift];st:#27'[5;2~'),  {fpterm, xterm-compatible sequence (but xterm uses shift+pgup/pgdn for scrollback)}
-       (char:0;scan:kbShiftPgDn;shift:[essShift];st:#27'[6;2~'),  {fpterm, xterm-compatible sequence (but xterm uses shift+pgup/pgdn for scrollback)}
-       (char:0;scan:kbShiftUp;shift:[essShift];st:#27'[a'),       {rxvt}
-       (char:0;scan:kbShiftDown;shift:[essShift];st:#27'[b'),     {rxvt}
-       (char:0;scan:kbShiftRight;shift:[essShift];st:#27'[c'),    {rxvt}
-       (char:0;scan:kbShiftLeft;shift:[essShift];st:#27'[d'),     {rxvt}
-       (char:0;scan:kbShiftEnd;shift:[essShift];st:#27'[1;2F'),   {xterm}
-       (char:0;scan:kbShiftEnd;shift:[essShift];st:#27'[8$'),     {rxvt}
-       (char:0;scan:kbShiftHome;shift:[essShift];st:#27'[1;2H'),  {xterm}
-       (char:0;scan:kbShiftHome;shift:[essShift];st:#27'[7$'),    {rxvt}
-
-       (char:0;scan:KbCtrlShiftUp;shift:[essCtrl,essShift];st:#27'[1;6A'),    {xterm}
-       (char:0;scan:KbCtrlShiftDown;shift:[essCtrl,essShift];st:#27'[1;6B'),  {xterm}
-       (char:0;scan:KbCtrlShiftRight;shift:[essCtrl,essShift];st:#27'[1;6C'), {xterm, xfce4}
-       (char:0;scan:KbCtrlShiftLeft;shift:[essCtrl,essShift];st:#27'[1;6D'),  {xterm, xfce4}
-       (char:0;scan:KbCtrlShiftHome;shift:[essCtrl,essShift];st:#27'[1;6H'),  {xterm}
-       (char:0;scan:KbCtrlShiftEnd;shift:[essCtrl,essShift];st:#27'[1;6F'),   {xterm}
-       (char:0;scan:kbCtrlShiftPgUp;shift:[essCtrl,essShift];st:#27'[5;6~'),  {fpterm, xterm-compatible sequence (but xterm uses shift+pgup/pgdn for scrollback)}
-       (char:0;scan:kbCtrlShiftPgDn;shift:[essCtrl,essShift];st:#27'[6;6~'),  {fpterm, xterm-compatible sequence (but xterm uses shift+pgup/pgdn for scrollback)}
-
-       (char:0;scan:kbCtrlPgDn;shift:[essCtrl];st:#27'[6;5~'),    {xterm}
-       (char:0;scan:kbCtrlPgUp;shift:[essCtrl];st:#27'[5;5~'),    {xterm}
-       (char:0;scan:kbCtrlUp;shift:[essCtrl];st:#27'[1;5A'),      {xterm}
-       (char:0;scan:kbCtrlDown;shift:[essCtrl];st:#27'[1;5B'),    {xterm}
-       (char:0;scan:kbCtrlRight;shift:[essCtrl];st:#27'[1;5C'),   {xterm}
-       (char:0;scan:kbCtrlLeft;shift:[essCtrl];st:#27'[1;5D'),    {xterm}
-       (char:0;scan:kbCtrlUp;shift:[essCtrl];st:#27'[Oa'),        {rxvt}
-       (char:0;scan:kbCtrlDown;shift:[essCtrl];st:#27'[Ob'),      {rxvt}
-       (char:0;scan:kbCtrlRight;shift:[essCtrl];st:#27'[Oc'),     {rxvt}
-       (char:0;scan:kbCtrlLeft;shift:[essCtrl];st:#27'[Od'),      {rxvt}
-       (char:0;scan:kbCtrlEnd;shift:[essCtrl];st:#27'[1;5F'),     {xterm}
-       (char:0;scan:kbCtrlEnd;shift:[essCtrl];st:#27'[8^'),       {rxvt}
-       (char:0;scan:kbCtrlHome;shift:[essCtrl];st:#27'[1;5H'),    {xterm}
-       (char:0;scan:kbCtrlHome;shift:[essCtrl];st:#27'[7^'),      {rxvt}
-
-       (char:0;scan:kbAltUp;shift:[essAlt];st:#27#27'[A'),        {rxvt}
-       (char:0;scan:kbAltDown;shift:[essAlt];st:#27#27'[B'),      {rxvt}
-       (char:0;scan:kbAltLeft;shift:[essAlt];st:#27#27'[D'),      {rxvt}
-       (char:0;scan:kbAltRight;shift:[essAlt];st:#27#27'[C'),     {rxvt}
+       (AnsiChar:0;scan:kbShiftDel;shift:[essShift];st:#27'[3;2~'),   {xterm,konsole}
+       (AnsiChar:0;scan:kbCtrlIns;shift:[essCtrl];st:#27'[2;5~'),     {xterm}
+       (AnsiChar:0;scan:kbCtrlDel;shift:[essCtrl];st:#27'[3;5~'),     {xterm}
+       (AnsiChar:0;scan:kbShiftDel;shift:[essShift];st:#27'[3$'),     {rxvt}
+       (AnsiChar:0;scan:kbCtrlIns;shift:[essCtrl];st:#27'[2^'),       {rxvt}
+       (AnsiChar:0;scan:kbCtrlDel;shift:[essCtrl];st:#27'[3^'),       {rxvt}
+       (AnsiChar:0;scan:kbAltF1;shift:[essAlt];st:#27#27'[[A'),
+       (AnsiChar:0;scan:kbAltF2;shift:[essAlt];st:#27#27'[[B'),
+       (AnsiChar:0;scan:kbAltF3;shift:[essAlt];st:#27#27'[[C'),
+       (AnsiChar:0;scan:kbAltF4;shift:[essAlt];st:#27#27'[[D'),
+       (AnsiChar:0;scan:kbAltF5;shift:[essAlt];st:#27#27'[[E'),
+       (AnsiChar:0;scan:kbAltF1;shift:[essAlt];st:#27#27'[11~'),      {rxvt}
+       (AnsiChar:0;scan:kbAltF2;shift:[essAlt];st:#27#27'[12~'),      {rxvt}
+       (AnsiChar:0;scan:kbAltF3;shift:[essAlt];st:#27#27'[13~'),      {rxvt}
+       (AnsiChar:0;scan:kbAltF4;shift:[essAlt];st:#27#27'[14~'),      {rxvt}
+       (AnsiChar:0;scan:kbAltF5;shift:[essAlt];st:#27#27'[15~'),      {rxvt}
+       (AnsiChar:0;scan:kbAltF6;shift:[essAlt];st:#27#27'[17~'),      {rxvt}
+       (AnsiChar:0;scan:kbAltF7;shift:[essAlt];st:#27#27'[18~'),      {rxvt}
+       (AnsiChar:0;scan:kbAltF8;shift:[essAlt];st:#27#27'[19~'),      {rxvt}
+       (AnsiChar:0;scan:kbAltF9;shift:[essAlt];st:#27#27'[20~'),      {rxvt}
+       (AnsiChar:0;scan:kbAltF10;shift:[essAlt];st:#27#27'[21~'),     {rxvt}
+       (AnsiChar:0;scan:kbAltF11;shift:[essAlt];st:#27#27'[23~'),     {rxvt}
+       (AnsiChar:0;scan:kbAltF12;shift:[essAlt];st:#27#27'[24~'),     {rxvt}
+       (AnsiChar:0;scan:kbAltF1;shift:[essAlt];st:#27#27'OP'),        {xterm}
+       (AnsiChar:0;scan:kbAltF2;shift:[essAlt];st:#27#27'OQ'),        {xterm}
+       (AnsiChar:0;scan:kbAltF3;shift:[essAlt];st:#27#27'OR'),        {xterm}
+       (AnsiChar:0;scan:kbAltF4;shift:[essAlt];st:#27#27'OS'),        {xterm}
+       (AnsiChar:0;scan:kbAltF5;shift:[essAlt];st:#27#27'Ot'),        {xterm}
+       (AnsiChar:0;scan:kbAltF6;shift:[essAlt];st:#27#27'Ou'),        {xterm}
+       (AnsiChar:0;scan:kbAltF7;shift:[essAlt];st:#27#27'Ov'),        {xterm}
+       (AnsiChar:0;scan:kbAltF8;shift:[essAlt];st:#27#27'Ol'),        {xterm}
+       (AnsiChar:0;scan:kbAltF9;shift:[essAlt];st:#27#27'Ow'),        {xterm}
+       (AnsiChar:0;scan:kbAltF10;shift:[essAlt];st:#27#27'Ox'),       {xterm}
+       (AnsiChar:0;scan:kbAltF11;shift:[essAlt];st:#27#27'Oy'),       {xterm}
+       (AnsiChar:0;scan:kbAltF12;shift:[essAlt];st:#27#27'Oz'),       {xterm}
+       (AnsiChar:0;scan:kbAltF1;shift:[essAlt];st:#27'[1;3P'),        {xterm,gnome3}
+       (AnsiChar:0;scan:kbAltF2;shift:[essAlt];st:#27'[1;3Q'),        {xterm,gnome3}
+       (AnsiChar:0;scan:kbAltF3;shift:[essAlt];st:#27'[1;3R'),        {xterm,gnome3}
+       (AnsiChar:0;scan:kbAltF4;shift:[essAlt];st:#27'[1;3S'),        {xterm,gnome3}
+       (AnsiChar:0;scan:kbAltF1;shift:[essAlt];st:#27'O3P'),          {xterm on FreeBSD}
+       (AnsiChar:0;scan:kbAltF2;shift:[essAlt];st:#27'O3Q'),          {xterm on FreeBSD}
+       (AnsiChar:0;scan:kbAltF3;shift:[essAlt];st:#27'O3R'),          {xterm on FreeBSD}
+       (AnsiChar:0;scan:kbAltF4;shift:[essAlt];st:#27'O3S'),          {xterm on FreeBSD}
+       (AnsiChar:0;scan:kbAltF5;shift:[essAlt];st:#27'[15;3~'),       {xterm on FreeBSD}
+       (AnsiChar:0;scan:kbAltF6;shift:[essAlt];st:#27'[17;3~'),       {xterm on FreeBSD}
+       (AnsiChar:0;scan:kbAltF7;shift:[essAlt];st:#27'[18;3~'),       {xterm on FreeBSD}
+       (AnsiChar:0;scan:kbAltF8;shift:[essAlt];st:#27'[19;3~'),       {xterm on FreeBSD}
+       (AnsiChar:0;scan:kbAltF9;shift:[essAlt];st:#27'[20;3~'),       {xterm on FreeBSD}
+       (AnsiChar:0;scan:kbAltF10;shift:[essAlt];st:#27'[21;3~'),      {xterm on FreeBSD}
+       (AnsiChar:0;scan:kbAltF11;shift:[essAlt];st:#27'[23;3~'),      {xterm on FreeBSD}
+       (AnsiChar:0;scan:kbAltF12;shift:[essAlt];st:#27'[24;3~'),      {xterm on FreeBSD}
+
+       (AnsiChar:0;scan:kbShiftTab;shift:[essShift];st:#27#9),        {linux - 'Meta_Tab'}
+       (AnsiChar:0;scan:kbShiftTab;shift:[essShift];st:#27'[Z'),
+       (AnsiChar:0;scan:kbShiftUp;shift:[essShift];st:#27'[1;2A'),    {xterm}
+       (AnsiChar:0;scan:kbShiftDown;shift:[essShift];st:#27'[1;2B'),  {xterm}
+       (AnsiChar:0;scan:kbShiftRight;shift:[essShift];st:#27'[1;2C'), {xterm}
+       (AnsiChar:0;scan:kbShiftLeft;shift:[essShift];st:#27'[1;2D'),  {xterm}
+       (AnsiChar:0;scan:kbShiftPgUp;shift:[essShift];st:#27'[5;2~'),  {fpterm, xterm-compatible sequence (but xterm uses shift+pgup/pgdn for scrollback)}
+       (AnsiChar:0;scan:kbShiftPgDn;shift:[essShift];st:#27'[6;2~'),  {fpterm, xterm-compatible sequence (but xterm uses shift+pgup/pgdn for scrollback)}
+       (AnsiChar:0;scan:kbShiftUp;shift:[essShift];st:#27'[a'),       {rxvt}
+       (AnsiChar:0;scan:kbShiftDown;shift:[essShift];st:#27'[b'),     {rxvt}
+       (AnsiChar:0;scan:kbShiftRight;shift:[essShift];st:#27'[c'),    {rxvt}
+       (AnsiChar:0;scan:kbShiftLeft;shift:[essShift];st:#27'[d'),     {rxvt}
+       (AnsiChar:0;scan:kbShiftEnd;shift:[essShift];st:#27'[1;2F'),   {xterm}
+       (AnsiChar:0;scan:kbShiftEnd;shift:[essShift];st:#27'[8$'),     {rxvt}
+       (AnsiChar:0;scan:kbShiftHome;shift:[essShift];st:#27'[1;2H'),  {xterm}
+       (AnsiChar:0;scan:kbShiftHome;shift:[essShift];st:#27'[7$'),    {rxvt}
+
+       (AnsiChar:0;scan:KbCtrlShiftUp;shift:[essCtrl,essShift];st:#27'[1;6A'),    {xterm}
+       (AnsiChar:0;scan:KbCtrlShiftDown;shift:[essCtrl,essShift];st:#27'[1;6B'),  {xterm}
+       (AnsiChar:0;scan:KbCtrlShiftRight;shift:[essCtrl,essShift];st:#27'[1;6C'), {xterm, xfce4}
+       (AnsiChar:0;scan:KbCtrlShiftLeft;shift:[essCtrl,essShift];st:#27'[1;6D'),  {xterm, xfce4}
+       (AnsiChar:0;scan:KbCtrlShiftHome;shift:[essCtrl,essShift];st:#27'[1;6H'),  {xterm}
+       (AnsiChar:0;scan:KbCtrlShiftEnd;shift:[essCtrl,essShift];st:#27'[1;6F'),   {xterm}
+       (AnsiChar:0;scan:kbCtrlShiftPgUp;shift:[essCtrl,essShift];st:#27'[5;6~'),  {fpterm, xterm-compatible sequence (but xterm uses shift+pgup/pgdn for scrollback)}
+       (AnsiChar:0;scan:kbCtrlShiftPgDn;shift:[essCtrl,essShift];st:#27'[6;6~'),  {fpterm, xterm-compatible sequence (but xterm uses shift+pgup/pgdn for scrollback)}
+
+       (AnsiChar:0;scan:kbCtrlPgDn;shift:[essCtrl];st:#27'[6;5~'),    {xterm}
+       (AnsiChar:0;scan:kbCtrlPgUp;shift:[essCtrl];st:#27'[5;5~'),    {xterm}
+       (AnsiChar:0;scan:kbCtrlUp;shift:[essCtrl];st:#27'[1;5A'),      {xterm}
+       (AnsiChar:0;scan:kbCtrlDown;shift:[essCtrl];st:#27'[1;5B'),    {xterm}
+       (AnsiChar:0;scan:kbCtrlRight;shift:[essCtrl];st:#27'[1;5C'),   {xterm}
+       (AnsiChar:0;scan:kbCtrlLeft;shift:[essCtrl];st:#27'[1;5D'),    {xterm}
+       (AnsiChar:0;scan:kbCtrlUp;shift:[essCtrl];st:#27'[Oa'),        {rxvt}
+       (AnsiChar:0;scan:kbCtrlDown;shift:[essCtrl];st:#27'[Ob'),      {rxvt}
+       (AnsiChar:0;scan:kbCtrlRight;shift:[essCtrl];st:#27'[Oc'),     {rxvt}
+       (AnsiChar:0;scan:kbCtrlLeft;shift:[essCtrl];st:#27'[Od'),      {rxvt}
+       (AnsiChar:0;scan:kbCtrlEnd;shift:[essCtrl];st:#27'[1;5F'),     {xterm}
+       (AnsiChar:0;scan:kbCtrlEnd;shift:[essCtrl];st:#27'[8^'),       {rxvt}
+       (AnsiChar:0;scan:kbCtrlHome;shift:[essCtrl];st:#27'[1;5H'),    {xterm}
+       (AnsiChar:0;scan:kbCtrlHome;shift:[essCtrl];st:#27'[7^'),      {rxvt}
+
+       (AnsiChar:0;scan:kbAltUp;shift:[essAlt];st:#27#27'[A'),        {rxvt}
+       (AnsiChar:0;scan:kbAltDown;shift:[essAlt];st:#27#27'[B'),      {rxvt}
+       (AnsiChar:0;scan:kbAltLeft;shift:[essAlt];st:#27#27'[D'),      {rxvt}
+       (AnsiChar:0;scan:kbAltRight;shift:[essAlt];st:#27#27'[C'),     {rxvt}
 {$ifdef HAIKU}
-       (char:0;scan:kbAltUp;shift:[essAlt];st:#27#27'OA'),
-       (char:0;scan:kbAltDown;shift:[essAlt];st:#27#27'OB'),
-       (char:0;scan:kbAltRight;shift:[essAlt];st:#27#27'OC'),
+       (AnsiChar:0;scan:kbAltUp;shift:[essAlt];st:#27#27'OA'),
+       (AnsiChar:0;scan:kbAltDown;shift:[essAlt];st:#27#27'OB'),
+       (AnsiChar:0;scan:kbAltRight;shift:[essAlt];st:#27#27'OC'),
 {$else}
-       (char:0;scan:kbAltUp;shift:[essAlt];st:#27'OA'),
-       (char:0;scan:kbAltDown;shift:[essAlt];st:#27'OB'),
-       (char:0;scan:kbAltRight;shift:[essAlt];st:#27'OC'),
+       (AnsiChar:0;scan:kbAltUp;shift:[essAlt];st:#27'OA'),
+       (AnsiChar:0;scan:kbAltDown;shift:[essAlt];st:#27'OB'),
+       (AnsiChar:0;scan:kbAltRight;shift:[essAlt];st:#27'OC'),
 {$endif}
-       (char:0;scan:kbAltLeft;shift:[essAlt];st:#27#27'OD'),
-       (char:0;scan:kbAltPgUp;shift:[essAlt];st:#27#27'[5~'),     {rxvt}
-       (char:0;scan:kbAltPgDn;shift:[essAlt];st:#27#27'[6~'),     {rxvt}
-       (char:0;scan:kbAltEnd;shift:[essAlt];st:#27#27'[4~'),
-       (char:0;scan:kbAltEnd;shift:[essAlt];st:#27#27'[8~'),      {rxvt}
-       (char:0;scan:kbAltHome;shift:[essAlt];st:#27#27'[1~'),
-       (char:0;scan:kbAltHome;shift:[essAlt];st:#27#27'[7~'),     {rxvt}
-       (char:0;scan:kbAltIns;shift:[essAlt];st:#27#27'[2~'),      {rxvt}
-       (char:0;scan:kbAltDel;shift:[essAlt];st:#27#27'[3~'),      {rxvt}
+       (AnsiChar:0;scan:kbAltLeft;shift:[essAlt];st:#27#27'OD'),
+       (AnsiChar:0;scan:kbAltPgUp;shift:[essAlt];st:#27#27'[5~'),     {rxvt}
+       (AnsiChar:0;scan:kbAltPgDn;shift:[essAlt];st:#27#27'[6~'),     {rxvt}
+       (AnsiChar:0;scan:kbAltEnd;shift:[essAlt];st:#27#27'[4~'),
+       (AnsiChar:0;scan:kbAltEnd;shift:[essAlt];st:#27#27'[8~'),      {rxvt}
+       (AnsiChar:0;scan:kbAltHome;shift:[essAlt];st:#27#27'[1~'),
+       (AnsiChar:0;scan:kbAltHome;shift:[essAlt];st:#27#27'[7~'),     {rxvt}
+       (AnsiChar:0;scan:kbAltIns;shift:[essAlt];st:#27#27'[2~'),      {rxvt}
+       (AnsiChar:0;scan:kbAltDel;shift:[essAlt];st:#27#27'[3~'),      {rxvt}
 
   { xterm default values }
   { xterm alternate default values }
   { ignored sequences }
-       (char:0;scan:0;shift:[];st:#27'[?1;0c'),
-       (char:0;scan:0;shift:[];st:#27'[?1l'),
-       (char:0;scan:0;shift:[];st:#27'[?1h'),
-       (char:0;scan:0;shift:[];st:#27'[?1;2c'),
-       (char:0;scan:0;shift:[];st:#27'[?7l'),
-       (char:0;scan:0;shift:[];st:#27'[?7h')
+       (AnsiChar:0;scan:0;shift:[];st:#27'[?1;0c'),
+       (AnsiChar:0;scan:0;shift:[];st:#27'[?1l'),
+       (AnsiChar:0;scan:0;shift:[];st:#27'[?1h'),
+       (AnsiChar:0;scan:0;shift:[];st:#27'[?1;2c'),
+       (AnsiChar:0;scan:0;shift:[];st:#27'[?7l'),
+       (AnsiChar:0;scan:0;shift:[];st:#27'[?7h')
       );
 
 procedure LoadDefaultSequences;
@@ -1261,10 +1261,10 @@ begin
   { all Esc letter }
   for i:=low(key_sequences) to high(key_sequences) do
     with key_sequences[i] do
-      DoAddSequence(st,char,scan,shift);
+      DoAddSequence(st,AnsiChar,scan,shift);
 end;
 
-function RawReadKey:char;
+function RawReadKey:AnsiChar;
 var
   fdsin    : tfdSet;
 begin
@@ -1285,11 +1285,11 @@ begin
 end;
 
 
-function RawReadString : String;
+function RawReadString : shortstring;
 var
-  ch : char;
+  ch : AnsiChar;
   fdsin : tfdSet;
-  St : String;
+  St : shortstring;
 begin
   St:=RawReadKey;
   fpFD_ZERO (fdsin);
@@ -1372,7 +1372,7 @@ procedure force_linuxtty;
 
 var s:string[15];
     handle:sizeint;
-    thistty:string;
+    thistty:shortstring;
 
 begin
   is_console:=false;
@@ -1404,7 +1404,7 @@ end;
 {$endif linux}
 
 
-function DetectUtf8ByteSequenceStart(ch: Char): LongInt;
+function DetectUtf8ByteSequenceStart(ch: AnsiChar): LongInt;
 begin
   if Ord(ch)<128 then
     DetectUtf8ByteSequenceStart:=1
@@ -1419,7 +1419,7 @@ begin
 end;
 
 
-function IsValidUtf8ContinuationByte(ch: Char): Boolean;
+function IsValidUtf8ContinuationByte(ch: AnsiChar): Boolean;
 begin
   IsValidUtf8ContinuationByte:=(Ord(ch) and %11000000)=%10000000;
 end;
@@ -1429,7 +1429,7 @@ function ReadKey:TEnhancedKeyEvent;
 const
   ReplacementAsciiChar='?';
 var
-  store    : array [0..8] of char;
+  store    : array [0..8] of AnsiChar;
   arrayind : byte;
   SState: TEnhancedShiftState;
 
@@ -1450,7 +1450,7 @@ var
         end;
       end;
 
-    function ReadUtf8(ch: Char): LongInt;
+    function ReadUtf8(ch: AnsiChar): LongInt;
       const
         ErrorCharacter = $FFFD; { U+FFFD = REPLACEMENT CHARACTER }
       var
@@ -1503,7 +1503,7 @@ var
       end;
 
 var
-  ch       : char;
+  ch       : AnsiChar;
   fdsin    : tfdSet;
   NPT,NNPT : PTreeElement;
   k: TEnhancedKeyEvent;
@@ -1601,7 +1601,7 @@ begin
              End
            else
              begin
-               { Put that unused char back into InBuf? }
+               { Put that unused AnsiChar back into InBuf? }
                if ch<>#0 then
                  PutBackIntoInBuf(ch);
                break;
@@ -1763,7 +1763,7 @@ const
 
 var
   MyScan:byte;
-  MyChar : char;
+  MyChar : AnsiChar;
   MyUniChar: WideChar;
   MyKey: TEnhancedKeyEvent;
   EscUsed,AltPrefixUsed,CtrlPrefixUsed,ShiftPrefixUsed,Again : boolean;

+ 1 - 1
packages/rtl-console/src/unix/mouse.pp

@@ -157,7 +157,7 @@ const mouse_terminals:array[0..6] of string[7]=('cons','eterm','gnome',
       xterm=6;
       mouse_1003_capable=[xterm]; {xterm only for now}
 
-var term:string;
+var term:shortstring;
     i,t:shortint;
 
 begin

+ 37 - 37
packages/rtl-console/src/unix/terminfo.pp

@@ -544,18 +544,18 @@ type
   TermIOS = record
     c_iflag, c_oflag, c_cflag, c_lflag: TCFlag_t;
     c_line: Byte;
-    c_cc: array [0..NCCS-1] of Char;
+    c_cc: array [0..NCCS-1] of AnsiChar;
     c_ispeed, c_ospeed: Speed_t;
     Pad: word;
   end;
 
   TT_BoolArray = array [0..BoolCount - 1] of Boolean;
   TT_WordArray = array [0..NumCount - 1] of Word;
-  TT_PCharArray = array [0..StrCount - 1] of PChar;
+  TT_PCharArray = array [0..StrCount - 1] of PAnsiChar;
 
   TermType4 = record
-    Term_Names: PChar;
-    Str_Table: PChar;
+    Term_Names: PAnsiChar;
+    Str_Table: PAnsiChar;
     Booleans: TT_BoolArray;
     Numbers: TT_WordArray;
     Strings: TT_PCharArray;
@@ -570,8 +570,8 @@ type
   end;
 
   TermType5 = record
-    Term_Names: PChar;
-    Str_Table: PChar;
+    Term_Names: PAnsiChar;
+    Str_Table: PAnsiChar;
     Booleans: ^TT_BoolArray;
     Numbers: ^TT_WordArray;
     Strings: ^TT_PCharArray;
@@ -587,8 +587,8 @@ type
 
   TerminalCommon_ptr1 = ^TerminalCommon1;
   TerminalCommon1 = record
-    Term_Names: PChar;
-    Str_Table: PChar;
+    Term_Names: PAnsiChar;
+    Str_Table: PAnsiChar;
   end;
 
   TerminalCommon_ptr2 = ^TerminalCommon2;
@@ -598,7 +598,7 @@ type
     Pad: longint;
   end;
 
-  WriterFunc = function (P: PChar): Longint;
+  WriterFunc = function (P: PAnsiChar): Longint;
 
 var
 {$ifndef darwin}
@@ -627,21 +627,21 @@ procedure use_env(B: Longint); cdecl; external curseslib name 'use_env';
 function putp(Ndx: Longint): Longint;
 
 { this function must be called before any terminal properties are accessed }
-function setupterm(Term: PChar; fd: Longint; var ErrCode: Longint): Longint;
+function setupterm(Term: PAnsiChar; fd: Longint; var ErrCode: Longint): Longint;
 
 { reinitialize lib }
-function restartterm(Term: PChar; fd: Longint; var ErrCode: Longint): Longint; cdecl; external curseslib name 'restartterm';
-
-{function tgetent(P1, P2: PChar): Longint;
-function tgetflag(P: PChar): Longint;
-function tgetnum(P: PChar): Longint;
-function tgoto(P: PChar; L1, L2: Longint): PChar;
-function tgetstr(P: PChar; var R: PChar): PChar;
-function tigetflag(P: PChar): Longint;
-function tigetnum(P: PChar): Longint;
-function tigetstr(P: PChar): PChar;
-function tparm(P: PChar, ...): PChar;
-function tparam(const char *, char *, int, ...): PChar;}
+function restartterm(Term: PAnsiChar; fd: Longint; var ErrCode: Longint): Longint; cdecl; external curseslib name 'restartterm';
+
+{function tgetent(P1, P2: PAnsiChar): Longint;
+function tgetflag(P: PAnsiChar): Longint;
+function tgetnum(P: PAnsiChar): Longint;
+function tgoto(P: PAnsiChar; L1, L2: Longint): PAnsiChar;
+function tgetstr(P: PAnsiChar; var R: PAnsiChar): PAnsiChar;
+function tigetflag(P: PAnsiChar): Longint;
+function tigetnum(P: PAnsiChar): Longint;
+function tigetstr(P: PAnsiChar): PAnsiChar;
+function tparm(P: PAnsiChar, ...): PAnsiChar;
+function tparam(const AnsiChar *, AnsiChar *, int, ...): PAnsiChar;}
 function tputs(Ndx: Word; L1: Longint; F: WriterFunc): Longint;
 
 implementation
@@ -651,7 +651,7 @@ uses
 
 function putp(Ndx: Longint): Longint;
 var
-  P: PChar;
+  P: PAnsiChar;
 begin
   if not assigned(cur_term) then
     RunError(219);
@@ -661,7 +661,7 @@ end;
 
 function tputs(Ndx: Word; L1: Longint; F: WriterFunc): Longint;
 var
-  P: PChar;
+  P: PAnsiChar;
 begin
   if not assigned(cur_term) then
     RunError(219);
@@ -672,11 +672,11 @@ end;
 
 //function set_curterm(term: TerminalCommon_ptr1): TerminalCommon_ptr1; cdecl; external curseslib;
 
-// function restartterm(Term: PChar; fd: Longint; var ErrCode: Longint): Longint; cdecl; external curseslib;
+// function restartterm(Term: PAnsiChar; fd: Longint; var ErrCode: Longint): Longint; cdecl; external curseslib;
 
-function setuptermC(Term: PChar; fd: Longint; var ErrCode: Longint): Longint; cdecl; external curseslib name 'setupterm';
+function setuptermC(Term: PAnsiChar; fd: Longint; var ErrCode: Longint): Longint; cdecl; external curseslib name 'setupterm';
 
-function setupterm(Term: PChar; fd: Longint; var ErrCode: Longint): Longint;
+function setupterm(Term: PAnsiChar; fd: Longint; var ErrCode: Longint): Longint;
 var
   versioncheck: longint;
 begin
@@ -730,15 +730,15 @@ begin
     cur_term_valid := false;
 end;
 
-{function tgetent(P1, P2: PChar): Longint; cdecl; external;
-function tgetflag(P: PChar): Longint; cdecl; external;
-function tgetnum(P: PChar): Longint; cdecl; external;
-function tgoto(P: PChar; L1, L2: Longint): PChar; cdecl; external;
-function tgetstr(P: PChar; var R: PChar): PChar; cdecl; external;
-function tigetflag(P: PChar): Longint; cdecl; external;
-function tigetnum(P: PChar): Longint; cdecl; external;
-function tigetstr(P: PChar): PChar; cdecl; external;
-function tparm(P: PChar; ...): PChar; cdecl; external;
-function tparam(const char *, char *, int, ...): PChar; cdecl; external;}
+{function tgetent(P1, P2: PAnsiChar): Longint; cdecl; external;
+function tgetflag(P: PAnsiChar): Longint; cdecl; external;
+function tgetnum(P: PAnsiChar): Longint; cdecl; external;
+function tgoto(P: PAnsiChar; L1, L2: Longint): PAnsiChar; cdecl; external;
+function tgetstr(P: PAnsiChar; var R: PAnsiChar): PAnsiChar; cdecl; external;
+function tigetflag(P: PAnsiChar): Longint; cdecl; external;
+function tigetnum(P: PAnsiChar): Longint; cdecl; external;
+function tigetstr(P: PAnsiChar): PAnsiChar; cdecl; external;
+function tparm(P: PAnsiChar; ...): PAnsiChar; cdecl; external;
+function tparam(const AnsiChar *, AnsiChar *, int, ...): PAnsiChar; cdecl; external;}
 
 end.

+ 1 - 1
packages/rtl-console/src/unix/unixkvmbase.pp

@@ -37,7 +37,7 @@ end;
 {$else}
 function UTF8Enabled: Boolean;
 var
-  lang:string;
+  lang:shortstring;
 begin
 {$ifdef OpenBSD}
   lang:=upcase(fpgetenv('LC_CTYPE'));

+ 30 - 30
packages/rtl-console/src/unix/video.pp

@@ -60,7 +60,7 @@ type  Tconsole_type=(ttyNetwork
         exit_am_mode,
         ena_acs
       );
-      Ttermcodes=array[Ttermcode] of Pchar;
+      Ttermcodes=array[Ttermcode] of PAnsiChar;
       Ptermcodes=^Ttermcodes;
 
 const term_codes_ansi:Ttermcodes=
@@ -199,9 +199,9 @@ var
   f: file;
 
 const
-  logstart: string = '';
-  nl: char = #10;
-  logend: string = #10#10;
+  logstart: shortstring = '';
+  nl: AnsiChar = #10;
+  logend: shortstring = #10#10;
 {$endif logging}
 
 {$ifdef cpui386}
@@ -211,8 +211,8 @@ const
 const
 
 {  can_delete_term : boolean = false;}
-  ACSIn : string = '';
-  ACSOut : string = '';
+  ACSIn : shortstring = '';
+  ACSOut : shortstring = '';
   in_ACS : boolean =false;
 
   TerminalSupportsHighIntensityColors: boolean = false;
@@ -231,7 +231,7 @@ begin
   end;
 end;
 
-function Unicode2DecSpecialGraphics(Ch: WideChar): Char;
+function Unicode2DecSpecialGraphics(Ch: WideChar): AnsiChar;
 begin
   case Ch of
     #$25C6:
@@ -301,7 +301,7 @@ begin
   end;
 end;
 
-function convert_vga_to_acs(ch:char):word;
+function convert_vga_to_acs(ch:AnsiChar):word;
 
 {Ch contains a character in the VGA character set (i.e. codepage 437).
  This routine tries to convert some VGA symbols as well as possible to the
@@ -359,7 +359,7 @@ end;
 
 procedure SendEscapeSeqNdx(ndx:Ttermcode);
 
-var p:PChar;
+var p:PAnsiChar;
 
 begin
 { Always true because of vt100 default.
@@ -371,20 +371,20 @@ begin
 end;
 
 
-procedure SendEscapeSeq(const S: String);
+procedure SendEscapeSeq(const S: shortstring);
 begin
   fpWrite(stdoutputhandle, S[1], Length(S));
 end;
 
 
-function IntStr(l:longint):string;
+function IntStr(l:longint):shortstring;
 
 begin
   Str(l,intstr);
 end;
 
 
-Function XY2Ansi(x,y,ox,oy:longint):String;
+Function XY2Ansi(x,y,ox,oy:longint):shortstring;
 {
   Returns a string with the escape sequences to go to X,Y on the screen.
 
@@ -394,7 +394,7 @@ Function XY2Ansi(x,y,ox,oy:longint):String;
 }
 
 var delta:longint;
-    direction:char;
+    direction:AnsiChar;
     movement:string[32];
 
 begin
@@ -417,12 +417,12 @@ begin
         exit;
       end;
      delta:=ox-x;
-     direction:=char(byte('C')+byte(x<=ox));
+     direction:=AnsiChar(byte('C')+byte(x<=ox));
    end;
   if x=ox then
    begin
      delta:=oy-y;
-     direction:=char(byte('A')+byte(y>oy));
+     direction:=AnsiChar(byte('A')+byte(y>oy));
    end;
 
   if direction='H' then
@@ -433,11 +433,11 @@ begin
   xy2ansi:=#27'['+movement+direction;
 end;
 
-const  ansitbl:array[0..7] of char='04261537';
+const  ansitbl:array[0..7] of AnsiChar='04261537';
 
-function attr2ansi(Fg,Bg:byte;Attr:TEnhancedVideoAttributes;OFg,OBg:byte;OAttr:TEnhancedVideoAttributes):string;
+function attr2ansi(Fg,Bg:byte;Attr:TEnhancedVideoAttributes;OFg,OBg:byte;OAttr:TEnhancedVideoAttributes):shortstring;
 const
-  AttrOnOffStr: array [TEnhancedVideoAttribute, Boolean] of string = (
+  AttrOnOffStr: array [TEnhancedVideoAttribute, Boolean] of shortstring = (
     ('22;','1;'),
     ('22;','2;'),
     ('23;','3;'),
@@ -449,7 +449,7 @@ const
     ('29;','9;'),
     ('24;','21;'));
 var
-  tmpS: string;
+  tmpS: shortstring;
   A: TEnhancedVideoAttribute;
 begin
   attr2ansi:=#27'[';
@@ -531,7 +531,7 @@ end;
 
 procedure UpdateTTY(Force:boolean);
 var
-  outbuf   : array[0..1023+255] of char;
+  outbuf   : array[0..1023+255] of AnsiChar;
   chattr   : tenhancedvideocell;
   skipped  : boolean;
   outptr,
@@ -550,7 +550,7 @@ var
 
   function transform(const hstr:UnicodeString):RawByteString;
   var
-    DecSpecialGraphicsCharacter: Char;
+    DecSpecialGraphicsCharacter: AnsiChar;
   begin
     if external_codepage=CP_UTF8 then
       result:=Utf8Encode(hstr)
@@ -649,9 +649,9 @@ var
   end;
 
 (*
-function GetTermString(ndx:Ttermcode):String;
+function GetTermString(ndx:Ttermcode):shortstring;
 var
-   P{,pdelay}: PChar;
+   P{,pdelay}: PAnsiChar;
 begin
   GetTermString:='';
   if not assigned(cur_term_Strings) then
@@ -783,7 +783,7 @@ begin
    begin
     OutData(XY2Ansi(ScreenWidth,ScreenHeight,LastX,LastY));
     OutData(#8);
-    {Output last char}
+    {Output last AnsiChar}
     chattr:=p[1];
     if (LastFg<>chattr.ForegroundColor) or (LastBg<>chattr.BackgroundColor) or (LastAttr<>chattr.EnhancedVideoAttributes) then
      OutClr(chattr.ForegroundColor,chattr.BackgroundColor,chattr.EnhancedVideoAttributes);
@@ -918,7 +918,7 @@ end;
 
 procedure decide_codepages;
 
-var s:string;
+var s:shortstring;
 
 begin
   if is_vga_code_page(external_codepage) then
@@ -980,14 +980,14 @@ end;
 procedure SysInitVideo;
 var
 {$ifdef linux}
-  FName: String;
+  FName: shortstring;
 {$endif linux}
   WS: packed record
     ws_row, ws_col, ws_xpixel, ws_ypixel: Word;
   end;
 {  Err: Longint;}
 {  prev_term : TerminalCommon_ptr1;}
-  term:string;
+  term:shortstring;
   i:word;
 {$ifdef Linux}
   s:string[15];
@@ -996,8 +996,8 @@ var
   ThisTTY: String[30];
 {$endif}
 
-const font_vga:array[0..11] of char=#15#27'%@'#27'(U'#27'[3h';
-      font_lat1:array[0..5] of char=#27'%@'#27'(B';
+const font_vga:array[0..11] of AnsiChar=#15#27'%@'#27'(U'#27'[3h';
+      font_lat1:array[0..5] of AnsiChar=#27'%@'#27'(B';
 
 begin
   { check for tty }
@@ -1158,7 +1158,7 @@ end;
 
 procedure SysDoneVideo;
 
-var font_custom:array[0..2] of char=#27'(K';
+var font_custom:array[0..2] of AnsiChar=#27'(K';
 
 begin
   prepareDoneVideo;

+ 6 - 6
packages/rtl-console/src/watcom/crt.pp

@@ -298,12 +298,12 @@ End;
 
 var
    is_last : boolean;
-   last    : char;
+   last    : AnsiChar;
 
-function readkey : char;
+function readkey : AnsiChar;
 var
-  char2 : char;
-  char1 : char;
+  char2 : AnsiChar;
+  char1 : AnsiChar;
   regs : trealregs;
 begin
   if is_last then
@@ -539,7 +539,7 @@ end;
 var
   CurrX,CurrY : longint;
 
-Procedure WriteChar(c:char);
+Procedure WriteChar(c:AnsiChar);
 var
   regs : trealregs;
 begin
@@ -601,7 +601,7 @@ Procedure CrtRead(Var F: TextRec);
   end;
 
 var
-  ch : Char;
+  ch : AnsiChar;
 Begin
   GetScreenCursor(CurrX,CurrY);
   f.bufpos:=0;

+ 7 - 7
packages/rtl-console/src/win/crt.pp

@@ -235,7 +235,7 @@ procedure ClrEol;
 }
 var
   Temp: DWord;
-  CharInfo: Char;
+  CharInfo: AnsiChar;
   Coord: TCoord;
   X,Y: DWord;
 begin
@@ -292,7 +292,7 @@ End;
 *************************************************************************}
 
 var
-   ScanCode : char;
+   ScanCode : AnsiChar;
    SpecialKey : boolean;
    DoingNumChars: Boolean;
    DoingNumCode: Byte;
@@ -496,7 +496,7 @@ begin
 end;
 
 
-function ReadKey: char;
+function ReadKey: AnsiChar;
 begin
   while (not KeyPressed) do
     Sleep(1);
@@ -707,7 +707,7 @@ end;
 var
   CurrX, CurrY : DWord;
 
-procedure WriteChar(c : char);
+procedure WriteChar(c : AnsiChar);
 var
     WritePos: Coord;                       { Upper-left cell to write from }
     numWritten : DWord;
@@ -751,7 +751,7 @@ begin
 end;
 
 
-procedure WriteStr(const s: string);
+procedure WriteStr(const s: shortstring);
 var
   WritePos: Coord; { Upper-left cell to write from }
   numWritten : DWord;
@@ -787,7 +787,7 @@ end;
 Procedure CrtWrite(var f : textrec);
 var
   i : longint;
-  s : string;
+  s : shortstring;
   OldConsoleOutputCP : Word;
 begin
   if SafeCPSwitching and UseACP then    //Switch codepage on every Write.
@@ -841,7 +841,7 @@ Procedure CrtRead(Var F: TextRec);
   end;
 
 var
-  ch : Char;
+  ch : AnsiChar;
   OldConsoleOutputCP : Word;
 begin
   if SafeCPSwitching and UseACP then    //Switch codepage on every Read

+ 6 - 6
packages/rtl-console/src/win/keyboard.pp

@@ -242,7 +242,7 @@ procedure HandleKeyboard(var ir:INPUT_RECORD);
 var
    i      : longint;
    c      : word;
-   altc : char;
+   altc : AnsiChar;
    addThis: boolean;
 begin
   { Since Windows supports switching between different input locales, the
@@ -292,7 +292,7 @@ begin
                      if length (altNumBuffer) = 3 then
                        delete (altNumBuffer,1,1);
                      case wVirtualKeyCode of
-                       $60..$69 : altc:=char (wVirtualKeyCode-48);
+                       $60..$69 : altc:=AnsiChar (wVirtualKeyCode-48);
                        $c  : altc:='5';
                        $21 : altc:='9';
                        $22 : altc:='3';
@@ -727,9 +727,9 @@ CONST
    (n : $00; s : $0F; c : $94; a: $00));     {0F Tab }
 
 
-function WideCharToOemCpChar(WC: WideChar): Char;
+function WideCharToOemCpChar(WC: WideChar): AnsiChar;
 var
-  Res: Char;
+  Res: AnsiChar;
 begin
   if WideCharToMultiByte(CP_OEMCP,0,@WC,1,@Res,1,nil,nil)=0 then
     Res:=#0;
@@ -802,7 +802,7 @@ begin
   Key := NilEnhancedKeyEvent;
   if t.ev.bKeyDown then
   begin
-    { unicode-char is <> 0 if not a specal key }
+    { unicode-AnsiChar is <> 0 if not a specal key }
     { we return it here otherwise we have to translate more later }
     if t.ev.UnicodeChar <> WideChar(0) then
     begin
@@ -871,7 +871,7 @@ begin
     { ok, now add Shift-State }
     Key.ShiftState := t.ShiftState;
 
-    { Reset Ascii-Char if Alt+Key, fv needs that, may be we
+    { Reset Ascii-AnsiChar if Alt+Key, fv needs that, may be we
       need it for other special keys too
       18 Sept 1999 AD: not for right Alt i.e. for AltGr+ß = \ on german keyboard }
     if (essAlt in t.ShiftState) or

+ 1 - 1
packages/rtl-console/src/win/video.pp

@@ -31,7 +31,7 @@ const
     LastCursorType: word = crUnderline;
     OrigScreen: PVideoBuf = nil;
     OrigScreenSize: cardinal = 0;
-    ConsoleOutDeviceName: string [8] = 'CONOUT$'#0;
+    ConsoleOutDeviceName: string[8] = 'CONOUT$'#0;
 
 var ConsoleInfo : TConsoleScreenBufferInfo;
     ConsoleCursorInfo : TConsoleCursorInfo;

+ 5 - 5
packages/rtl-console/src/win16/crt.pp

@@ -243,12 +243,12 @@ End;
 
 var
    is_last : boolean;
-   last    : char;
+   last    : AnsiChar;
 
-function readkey : char;
+function readkey : AnsiChar;
 var
   k: TKeyEvent;
-  char1, char2: char;
+  char1, char2: AnsiChar;
 begin
   if is_last then
   begin
@@ -390,7 +390,7 @@ end;
 var
   CurrX,CurrY : smallint;
 
-Procedure WriteChar(c:char);
+Procedure WriteChar(c:AnsiChar);
 begin
   case c of
    #10 : inc(CurrY);
@@ -451,7 +451,7 @@ Procedure CrtRead(Var F: TextRec);
   end;
 
 var
-  ch : Char;
+  ch : AnsiChar;
 Begin
   GetScreenCursor(CurrX,CurrY);
   f.bufpos:=0;

+ 1 - 1
packages/rtl-console/tests/kbd1.pp

@@ -3,7 +3,7 @@ program kbd1;
 uses
   keyboard;
 
-procedure ShowASCIIKey(C: Char);
+procedure ShowASCIIKey(C: AnsiChar);
 begin
   Write('ASCII key #', Ord(C), ' - #$', HexStr(Ord(C), 2));
   if C = '''' then

+ 2 - 2
packages/rtl-console/tests/kbd2.pp

@@ -3,7 +3,7 @@ program kbd2;
 uses
   keyboard;
 
-procedure ShowASCIIKey(C: Char);
+procedure ShowASCIIKey(C: AnsiChar);
 begin
   Write('ASCII key #', Ord(C), ' - #$', HexStr(Ord(C), 2));
   if C = '''' then
@@ -19,7 +19,7 @@ begin
   Write('Unicode key #', Ord(WC));
 end;
 
-function EnhancedShiftStateToString(const ShiftState: TEnhancedShiftState): string;
+function EnhancedShiftStateToString(const ShiftState: TEnhancedShiftState): shortstring;
 var
   S: TEnhancedShiftStateElement;
   FirstElement: Boolean = True;

+ 1 - 1
packages/rtl-console/tests/kbdbdump.pp

@@ -42,7 +42,7 @@ begin
   TextOut(56, 17, 'Right_Shift', BitAttr(Regs.AX,  0));
 end;
 
-procedure SampleAllKeys(const Kbd: TKeyboard; const OutFileName: string);
+procedure SampleAllKeys(const Kbd: TKeyboard; const OutFileName: AnsiString);
 var
   I: Integer;
   Regs: Registers;

+ 1 - 1
packages/rtl-console/tests/kbddump.pp

@@ -5,7 +5,7 @@ program kbddump;
 uses
   Video, Keyboard, Mouse, kbdutil, vidutil;
 
-procedure SampleAllKeys(const Kbd: TKeyboard; const OutFileName: string);
+procedure SampleAllKeys(const Kbd: TKeyboard; const OutFileName: AnsiString);
 var
   I: Integer;
   K: TKeyEvent;

+ 4 - 4
packages/rtl-console/tests/kbdutil.pp

@@ -8,23 +8,23 @@ type
   TKey = record
     X, Y: Integer;
     YTop, YBottom: Integer;
-    KeyLabel: string;
+    KeyLabel: ansistring;
   end;
   TKeys = array of TKey;
   TKeyboard = record
     Keys: TKeys;
   end;
 
-function ReadKeyboardFromFile(const FileName: string): TKeyboard;
+function ReadKeyboardFromFile(const FileName: ansistring): TKeyboard;
 
 implementation
 
-function ReadKeyboardFromFile(const FileName: string): TKeyboard;
+function ReadKeyboardFromFile(const FileName: ansistring): TKeyboard;
 var
   SaveCtrlZMarksEOF: Boolean;
   InF: TextFile;
   KeyX, KeyY, KeyY1, KeyY2: Integer;
-  KeyStr: string;
+  KeyStr: ansistring;
 begin
   SaveCtrlZMarksEOF := CtrlZMarksEOF;
   try

+ 1 - 1
packages/rtl-console/tests/video4.pp

@@ -6,7 +6,7 @@ program video4;
 uses
   video, keyboard;
 
-procedure TextOut(X, Y: Integer; const S: string; Attr: TEnhancedVideoAttributes);
+procedure TextOut(X, Y: Integer; const S: AnsiString; Attr: TEnhancedVideoAttributes);
 var
   W, P, I, M: Integer;
 begin

+ 2 - 2
packages/rtl-console/tests/vidutil.pp

@@ -7,7 +7,7 @@ interface
 uses
   KbdUtil;
 
-procedure TextOut(X, Y: Integer; const S: string; TextAttr: Byte);
+procedure TextOut(X, Y: Integer; const S: AnsiString; TextAttr: Byte);
 procedure DrawKey(const Key: TKey; TextAttr: Byte);
 procedure DrawKeyboard(const Kbd: TKeyboard);
 
@@ -16,7 +16,7 @@ implementation
 uses
   Video;
 
-procedure TextOut(X, Y: Integer; const S: string; TextAttr: Byte);
+procedure TextOut(X, Y: Integer; const S: AnsiString; TextAttr: Byte);
 var
   W, P, I, M: Integer;
 begin