Hello,
I did small patch for dosemu-1.0.2.
In Poland most(all) users use QWERTY keyboard layout and RIGHT ALT
for accented letters.
ALT A = "a ogonek", but SHIFT+ALT A = "A ogonek", etc.
I added "L stroke" letter.

SHIFT + ALT O = "O accute" = 224 = 0xE0.
I'm not able to get this symbol from keyboard,
even ALT GR + 224 doesn't work.
It seems that there is a bug somewhere in keyboard routines.

Witold Filipczyk
--- dosemu-1.0.2/src/base/keyboard/keymaps.c    Sun Mar 11 14:27:25 2001
+++ dosemu-1.0.2.new/src/base/keyboard/keymaps.c        Sun Dec 30 16:45:07 2001
@@ -1374,6 +1374,7 @@
   0};
 
 /* Polish keyboard */
+/*
 CONST unsigned char key_map_pl[] =
 {
   0, 27, '1', '2', '3', '4', '5', '6',
@@ -1421,6 +1422,55 @@
   0, 0, 0, 0, 0, 0, '|', 0,
   0, 0, 0, 0, 0, 0, 0, 0,
   0};
+*/
+CONST unsigned char key_map_pl[] =
+{
+     0,27,'1','2','3','4','5','6',
+     '7','8','9','0','-','=',127,9,
+     'q','w','e','r','t','y','u','i',
+     'o','p','[',']',13,0,'a','s',
+     'd','f','g','h','j','k','l',';',
+     39,96,0,92,'z','x','c','v',
+     'b','n','m',',','.','/',0,'*',
+     0,32,0,0,0,0,0,0,
+     0,0,0,0,0,0,0,0,
+     0,0,'-',0,0,0,'+',0,
+     0,0,0,0,0,0,'<',0,
+     0,0,0,0,0,0,0,0,
+     0};
+     
+CONST unsigned char shift_map_pl[] =
+{
+     0,27,'!','@','#','$','%','^',
+     '&','*','(',')','_','+',127,9,
+     'Q','W','E','R','T','Y','U','I',
+     'O','P','{','}',13,0,'A','S',
+     'D','F','G','H','J','K','L',':',
+     34,'~',0,'|','Z','X','C','V',
+     'B','N','M','<','>','?',0,'*',
+     0,32,0,0,0,0,0,0,
+     0,0,0,0,0,0,0,0,
+     0,0,'-',0,0,0,'+',0,
+     0,0,0,0,0,0,'>',0,
+     0,0,0,0,0,0,0,0,
+     0};
+     
+CONST unsigned char alt_map_pl[] =
+{
+     0,0,0,'@',0,0,0,0,
+     0,0,0,0,0,0,0,0,
+     0,0,DEAD_OGONEK,0,0,0,0,0,
+     DEAD_ACUTE,0,0,0,0,0,DEAD_OGONEK,DEAD_ACUTE,
+     0,0,0,0,0,0,DEAD_STROKE,0,
+     0,0,0,0,DEAD_ABOVEDOT,DEAD_ACUTE,DEAD_ACUTE,0,
+     0,DEAD_ACUTE,0,0,0,0,0,0,
+     0,0,0,0,0,0,0,0,
+     0,0,0,0,0,0,0,0,
+     0,0,0,0,0,0,0,0,
+     0,0,0,0,0,0,0,0,
+     0,0,0,0,0,0,0,0,
+     0};
+     
 
 CONST unsigned char key_map_hr_cp852[] =
 {
@@ -1741,7 +1791,7 @@
        {DEAD_CIRCUMFLEX, DEAD_CIRCUMFLEX, '^'}, {DEAD_DIAERESIS, DEAD_DIAERESIS, '"'},
        {DEAD_TILDE, DEAD_TILDE, '~'}, {DEAD_DOUBLEACUTE, DEAD_DOUBLEACUTE, 241},
        {DEAD_OGONEK, DEAD_OGONEK, 242}, {DEAD_CARON, DEAD_CARON, 243},
-       {DEAD_BREVE, DEAD_BREVE, 244},
+       {DEAD_BREVE, DEAD_BREVE, 244}, {DEAD_STROKE, DEAD_STROKE, 245},
 
        {DEAD_ABOVERING, 'U', 222}, {DEAD_ABOVERING, 'u', 133},
 
@@ -1768,6 +1818,7 @@
        {DEAD_ACUTE, 'U', 233}, {DEAD_ACUTE, 'u', 163},
        {DEAD_ACUTE, 'Y', 237}, {DEAD_ACUTE, 'y', 236},
        {DEAD_ACUTE, 'Z', 141}, {DEAD_ACUTE, 'z', 171},
+       {DEAD_ACUTE, 'X', 141}, {DEAD_ACUTE, 'x', 171},
 
        {DEAD_CIRCUMFLEX, 'A', 182},    {DEAD_CIRCUMFLEX, 'a', 131},
        {DEAD_CIRCUMFLEX, 'I', 215},    {DEAD_CIRCUMFLEX, 'i', 140},
@@ -1790,7 +1841,8 @@
 
        {DEAD_OGONEK, 'A', 164}, {DEAD_OGONEK, 'a', 165},
        {DEAD_OGONEK, 'E', 168}, {DEAD_OGONEK, 'e', 169},
-
+       {DEAD_STROKE, 'L', 157}, {DEAD_STROKE, 'l', 136},
+       
         {0, 0, 0}
 };
 
--- dosemu-1.0.2/src/base/keyboard/serv_xlat.c  Sun Mar 11 14:27:25 2001
+++ dosemu-1.0.2.new/src/base/keyboard/serv_xlat.c      Sun Dec 30 16:37:23 2001
@@ -477,17 +477,29 @@
           * characters are generated. On US keyboards, translation is done 
           * with both ALT keys.
           */
-         if (!(config.keytable->flags & KT_USES_ALTMAP) || (shiftstate & R_ALT))
+         
+         /* BASIC style hack for Polish language.  ALT+DEAD_KEY -> accent=DEAD_KEY
+          * ch >= 32 should be "ch is not DEAD_KEY"
+          */ 
+         
+         
+         if (!(config.keytable->flags & KT_USES_ALTMAP) || (shiftstate & R_ALT)) {
             ch = config.keytable->alt_map[key];
+            if (ch >= 32) goto NEXT_CONDITION;
+            accent=ch;
+         }
+         else goto NEXT_CONDITION; 
       }
-      else if (shiftstate & SHIFT) {
+      if (shiftstate & SHIFT) {
          ch = config.keytable->shift_map[key];
       }
       else {   /* unshifted */
          ch = config.keytable->key_map[key];
       }
    }
-
+   
+NEXT_CONDITION:
+   
    if (shiftstate & CTRL) {
       switch(ch) {
          case 0x40 ... 0x7e: ch&=0x1f; break;
--- dosemu-1.0.2/src/include/keymaps.h  Sun Mar 11 14:27:27 2001
+++ dosemu-1.0.2.new/src/include/keymaps.h      Sun Dec 30 15:26:04 2001
@@ -73,10 +73,11 @@
 #define DEAD_IOTA          12 
 #define DEAD_OGONEK        14
 #define DEAD_CARON         15
+#define DEAD_STROKE        16
 
 #define FULL_DEADKEY_LIST  DEAD_GRAVE, DEAD_ACUTE, DEAD_CIRCUMFLEX, \
   DEAD_TILDE, DEAD_BREVE, DEAD_ABOVEDOT, DEAD_DIAERESIS, DEAD_ABOVERING, \
-  DEAD_DOUBLEACUTE, DEAD_CEDILLA, DEAD_IOTA, DEAD_OGONEK, DEAD_CARON
+  DEAD_DOUBLEACUTE, DEAD_CEDILLA, DEAD_IOTA, DEAD_OGONEK, DEAD_CARON, DEAD_STROKE
 
 struct dos_dead_key {
   unsigned char d_key;

Reply via email to