Prechádzať zdrojové kódy

* fixed argument name
* merged fixes

peter 24 rokov pred
rodič
commit
3367fc1c61
1 zmenil súbory, kde vykonal 51 pridanie a 15 odobranie
  1. 51 15
      rtl/unix/keyboard.pp

+ 51 - 15
rtl/unix/keyboard.pp

@@ -28,9 +28,10 @@ Function RawReadKey:char;
 Function RawReadString : String;
 Function KeyPressed : Boolean;
 {$ifndef NotUseTree}
-Procedure AddSequence(Const St : String; Char,Scan :byte);
+Procedure AddSequence(Const St : String; AChar,AScan :byte);
 Function FindSequence(Const St : String;var AChar, Ascan : byte) : boolean;
 {$endif NotUseTree}
+procedure RestoreStartMode;
 
 
 implementation
@@ -46,7 +47,7 @@ uses
 {$i keyboard.inc}
 
 var
-  OldIO : TermIos;
+  OldIO,StartTio : TermIos;
 {$ifdef logging}
   f : text;
 {$endif logging}
@@ -1085,7 +1086,7 @@ Begin
           if assigned(NPT^.SpecialHandler) then
             begin
               NPT^.SpecialHandler;
-              ch:=#0;
+              PushExt(0);
             end
           else if NPT^.CharValue<>0 then
             PushKey(chr(NPT^.CharValue))
@@ -1356,12 +1357,15 @@ begin
   {$Ifndef BSD}
   if IOCtl(StdInputHandle,TIOCLINUX,@arg) then
    begin
-     if (arg and (2 or 8))<>0 then
-      inc(shift,8);
+     if (arg and 8)<>0 then
+      shift:=kbAlt;
      if (arg and 4)<>0 then
-      inc(shift,4);
+      inc(shift,kbCtrl);
+     { 2 corresponds to AltGr so set both kbAlt and kbCtrl PM }
+     if (arg and 2)<>0 then
+      shift:=shift or (kbAlt or kbCtrl);
      if (arg and 1)<>0 then
-      inc(shift,3);
+      inc(shift,kbShift);
    end;
  {$endif}
   ShiftState:=shift;
@@ -1484,8 +1488,8 @@ begin {main}
     if Mychar=#0 then
       begin
         MyScan:=ord(ReadKey(IsAlt));
-        { Handle Ctrl-<x> }
-        if (SState and kbCtrl)<>0 then
+        { Handle Ctrl-<x>, but not AltGr-<x> }
+        if ((SState and kbCtrl)<>0) and ((SState and kbAlt) = 0)  then
          begin
            case MyScan of
              kbHome..kbDel : { cArrow }
@@ -1496,8 +1500,8 @@ begin {main}
                MyScan:=MyScan+kbCtrlF11-kbF11;
            end;
          end
-        { Handle Alt-<x> }
-        else if (SState and kbAlt)<>0 then
+        { Handle Alt-<x>, but not AltGr }
+        else if ((SState and kbAlt)<>0) and ((SState and kbCtrl) = 0) then
          begin
            case MyScan of
              kbHome..kbDel : { AltArrow }
@@ -1519,7 +1523,10 @@ begin {main}
                MyScan:=MyScan+kbShiftF11-kbF11;
              end;
          end;
-        GetKeyEvent:=$3000000 or ord(MyChar) or (MyScan shl 8) or (SState shl 16);
+        if (MyChar<>#0) or (MyScan<>0) or (SState<>0) then
+          GetKeyEvent:=$3000000 or ord(MyChar) or (MyScan shl 8) or (SState shl 16)
+        else
+          GetKeyEvent:=0;
         exit;
       end
     else if MyChar=#27 then
@@ -1571,7 +1578,7 @@ begin {main}
     if not again then
       begin
         MyScan:=EvalScan(ord(MyChar));
-        if (SState and kbAlt)<>0 then
+        if ((SState and kbAlt)<>0) and ((SState and kbCtrl) = 0) then
           begin
             if MyScan in [$02..$0D] then
               inc(MyScan,$76);
@@ -1592,7 +1599,10 @@ begin {main}
           SState:=SState or kbAlt;
       end;
     until not Again;
-  GetKeyEvent:=$3000000 or ord(MyChar) or (MyScan shl 8) or (SState shl 16);
+  if (MyChar<>#0) or (MyScan<>0) or (SState<>0) then
+    GetKeyEvent:=$3000000 or ord(MyChar) or (MyScan shl 8) or (SState shl 16)
+  else
+    GetKeyEvent:=0;
 end;
 
 
@@ -1677,10 +1687,36 @@ begin
 end;
 
 
+procedure RestoreStartMode;
+begin
+  TCSetAttr(1,TCSANOW,StartTio);
+end;
+
+begin
+  TCGetAttr(1,StartTio);
 end.
 {
   $Log$
-  Revision 1.2  2001-01-21 20:21:40  marco
+  Revision 1.3  2001-04-10 23:35:02  peter
+    * fixed argument name
+    * merged fixes
+
+  Revision 1.2.2.5  2001/03/27 12:38:10  pierre
+   + RestoreStartMode function
+
+  Revision 1.2.2.4  2001/03/27 11:41:03  pierre
+   * fix the special handler case to avoid waiting for one more char
+
+  Revision 1.2.2.3  2001/03/24 22:38:46  pierre
+   * fix bug with AltGr keys
+
+  Revision 1.2.2.2  2001/01/30 22:23:44  peter
+    * unix back to linux
+
+  Revision 1.2.2.1  2001/01/30 21:52:02  peter
+    * moved api utils to rtl
+
+  Revision 1.2  2001/01/21 20:21:40  marco
    * Rename fest II. Rtl OK
 
   Revision 1.1  2001/01/13 11:03:58  peter