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