diff -Naur q1.orig/winquake/gl_vidlinux.c q1.patched/winquake/gl_vidlinux.c --- q1.orig/winquake/gl_vidlinux.c Tue Dec 21 18:42:04 1999 +++ q1.patched/winquake/gl_vidlinux.c Sat Dec 25 14:13:12 1999 @@ -374,7 +374,7 @@ scantokey[i] = ' '; scantokey[42] = K_SHIFT; - scantokey[54] = K_SHIFT; + scantokey[54] = K_RSHIFT; scantokey[72] = K_UPARROW; scantokey[103] = K_UPARROW; scantokey[80] = K_DOWNARROW; diff -Naur q1.orig/winquake/gl_vidlinuxglx.c q1.patched/winquake/gl_vidlinuxglx.c --- q1.orig/winquake/gl_vidlinuxglx.c Tue Dec 21 18:39:36 1999 +++ q1.patched/winquake/gl_vidlinuxglx.c Sat Dec 25 14:12:56 1999 @@ -191,8 +191,8 @@ case XK_Pause: key = K_PAUSE; break; - case XK_Shift_L: - case XK_Shift_R: key = K_SHIFT; break; + case XK_Shift_L: key = K_SHIFT; break; + case XK_Shift_R: key = K_RSHIFT; break; case XK_Execute: case XK_Control_L: diff -Naur q1.orig/winquake/gl_vidnt.c q1.patched/winquake/gl_vidnt.c --- q1.orig/winquake/gl_vidnt.c Tue Dec 21 15:53:24 1999 +++ q1.patched/winquake/gl_vidnt.c Sat Dec 25 14:12:31 1999 @@ -862,7 +862,7 @@ 'o', 'p', '[', ']', 13 , K_CTRL,'a', 's', // 1 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', '\'' , '`', K_SHIFT,'\\', 'z', 'x', 'c', 'v', // 2 - 'b', 'n', 'm', ',', '.', '/', K_SHIFT,'*', + 'b', 'n', 'm', ',', '.', '/', K_RSHIFT,'*', K_ALT,' ', 0 , K_F1, K_F2, K_F3, K_F4, K_F5, // 3 K_F6, K_F7, K_F8, K_F9, K_F10, K_PAUSE , 0 , K_HOME, K_UPARROW,K_PGUP,'-',K_LEFTARROW,'5',K_RIGHTARROW,'+',K_END, //4 @@ -884,7 +884,7 @@ 'O', 'P', '{', '}', 13 , K_CTRL,'A', 'S', // 1 'D', 'F', 'G', 'H', 'J', 'K', 'L', ':', '"' , '~', K_SHIFT,'|', 'Z', 'X', 'C', 'V', // 2 - 'B', 'N', 'M', '<', '>', '?', K_SHIFT,'*', + 'B', 'N', 'M', '<', '>', '?', K_RSHIFT,'*', K_ALT,' ', 0 , K_F1, K_F2, K_F3, K_F4, K_F5, // 3 K_F6, K_F7, K_F8, K_F9, K_F10, K_PAUSE , 0 , K_HOME, K_UPARROW,K_PGUP,'_',K_LEFTARROW,'%',K_RIGHTARROW,'+',K_END, //4 diff -Naur q1.orig/winquake/keys.c q1.patched/winquake/keys.c --- q1.orig/winquake/keys.c Tue Dec 21 15:53:24 1999 +++ q1.patched/winquake/keys.c Sat Dec 25 14:07:56 1999 @@ -30,6 +30,7 @@ char key_lines[32][MAXCMDLINE]; int key_linepos; int shift_down=false; +int rshift_down=false; int key_lastpress; int edit_line=0; @@ -67,6 +68,7 @@ {"ALT", K_ALT}, {"CTRL", K_CTRL}, {"SHIFT", K_SHIFT}, + {"RSHIFT", K_RSHIFT}, {"F1", K_F1}, {"F2", K_F2}, @@ -543,6 +545,7 @@ consolekeys[K_PGUP] = true; consolekeys[K_PGDN] = true; consolekeys[K_SHIFT] = true; + consolekeys[K_RSHIFT] = true; consolekeys[K_MWHEELUP] = true; consolekeys[K_MWHEELDOWN] = true; consolekeys['`'] = false; @@ -629,6 +632,9 @@ if (key == K_SHIFT) shift_down = down; + if (key == K_RSHIFT) + rshift_down = down; + // // handle escape specialy, so the user can never unbind it // @@ -717,7 +723,7 @@ if (!down) return; // other systems only care about key down events - if (shift_down) + if (shift_down || rshift_down) { key = keyshift[key]; } diff -Naur q1.orig/winquake/keys.h q1.patched/winquake/keys.h --- q1.orig/winquake/keys.h Tue Dec 21 15:54:20 1999 +++ q1.patched/winquake/keys.h Sat Dec 25 14:06:58 1999 @@ -115,6 +115,7 @@ #define K_MWHEELUP 239 #define K_MWHEELDOWN 240 +#define K_RSHIFT 241 typedef enum {key_game, key_console, key_message, key_menu} keydest_t; diff -Naur q1.orig/winquake/sys_dos.c q1.patched/winquake/sys_dos.c --- q1.orig/winquake/sys_dos.c Tue Dec 21 18:43:38 1999 +++ q1.patched/winquake/sys_dos.c Sat Dec 25 14:12:06 1999 @@ -109,7 +109,7 @@ 'o', 'p', '[', ']', 13 , K_CTRL,'a', 's', // 1 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', '\'' , '`', K_SHIFT,'\\', 'z', 'x', 'c', 'v', // 2 - 'b', 'n', 'm', ',', '.', '/', K_SHIFT,'*', + 'b', 'n', 'm', ',', '.', '/', K_RSHIFT,'*', K_ALT,' ', 0 , K_F1, K_F2, K_F3, K_F4, K_F5, // 3 K_F6, K_F7, K_F8, K_F9, K_F10,0 , 0 , K_HOME, K_UPARROW,K_PGUP,'-',K_LEFTARROW,'5',K_RIGHTARROW,'+',K_END, //4 @@ -131,7 +131,7 @@ 'O', 'P', '{', '}', 13 , K_CTRL,'A', 'S', // 1 'D', 'F', 'G', 'H', 'J', 'K', 'L', ':', '"' , '~', K_SHIFT,'|', 'Z', 'X', 'C', 'V', // 2 - 'B', 'N', 'M', '<', '>', '?', K_SHIFT,'*', + 'B', 'N', 'M', '<', '>', '?', K_RSHIFT,'*', K_ALT,' ', 0 , K_F1, K_F2, K_F3, K_F4, K_F5, // 3 K_F6, K_F7, K_F8, K_F9, K_F10,0 , 0 , K_HOME, K_UPARROW,K_PGUP,'_',K_LEFTARROW,'%',K_RIGHTARROW,'+',K_END, //4 diff -Naur q1.orig/winquake/vid_sunx.c q1.patched/winquake/vid_sunx.c --- q1.orig/winquake/vid_sunx.c Tue Dec 21 18:40:24 1999 +++ q1.patched/winquake/vid_sunx.c Sat Dec 25 14:11:24 1999 @@ -889,8 +889,8 @@ case XK_BackSpace: case XK_Delete: key = K_BACKSPACE; break; case XK_Pause: key = K_PAUSE; break; - case XK_Shift_L: - case XK_Shift_R: key = K_SHIFT; break; + case XK_Shift_L: key = K_SHIFT; break; + case XK_Shift_R: key = K_RSHIFT; break; case XK_Control_L: case XK_Control_R: key = K_CTRL; break; case XK_Alt_L: diff -Naur q1.orig/winquake/vid_sunxil.c q1.patched/winquake/vid_sunxil.c --- q1.orig/winquake/vid_sunxil.c Tue Dec 21 18:40:32 1999 +++ q1.patched/winquake/vid_sunxil.c Sat Dec 25 14:10:55 1999 @@ -782,8 +782,8 @@ case XK_BackSpace: case XK_Delete: key = K_BACKSPACE; break; case XK_Pause: key = K_PAUSE; break; - case XK_Shift_L: - case XK_Shift_R: key = K_SHIFT; break; + case XK_Shift_L: key = K_SHIFT; break; + case XK_Shift_R: key = K_RSHIFT; break; case XK_Control_L: case XK_Control_R: key = K_CTRL; break; case XK_Alt_L: diff -Naur q1.orig/winquake/vid_svgalib.c q1.patched/winquake/vid_svgalib.c --- q1.orig/winquake/vid_svgalib.c Tue Dec 21 18:40:54 1999 +++ q1.patched/winquake/vid_svgalib.c Sat Dec 25 14:08:48 1999 @@ -616,7 +616,7 @@ scantokey[i] = ' '; scantokey[42] = K_SHIFT; - scantokey[54] = K_SHIFT; + scantokey[54] = K_RSHIFT; scantokey[72] = K_UPARROW; scantokey[103] = K_UPARROW; scantokey[80] = K_DOWNARROW; diff -Naur q1.orig/winquake/vid_win.c q1.patched/winquake/vid_win.c --- q1.orig/winquake/vid_win.c Tue Dec 21 15:53:26 1999 +++ q1.patched/winquake/vid_win.c Sat Dec 25 14:09:34 1999 @@ -2601,7 +2601,7 @@ 'o', 'p', '[', ']', 13 , K_CTRL,'a', 's', // 1 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', '\'' , '`', K_SHIFT,'\\', 'z', 'x', 'c', 'v', // 2 - 'b', 'n', 'm', ',', '.', '/', K_SHIFT,'*', + 'b', 'n', 'm', ',', '.', '/', K_RSHIFT,'*', K_ALT,' ', 0 , K_F1, K_F2, K_F3, K_F4, K_F5, // 3 K_F6, K_F7, K_F8, K_F9, K_F10, K_PAUSE, 0 , K_HOME, K_UPARROW,K_PGUP,'-',K_LEFTARROW,'5',K_RIGHTARROW,'+',K_END, //4 diff -Naur q1.orig/winquake/vid_x.c q1.patched/winquake/vid_x.c --- q1.orig/winquake/vid_x.c Tue Dec 21 18:40:22 1999 +++ q1.patched/winquake/vid_x.c Sat Dec 25 14:10:04 1999 @@ -790,8 +790,8 @@ case XK_Pause: key = K_PAUSE; break; - case XK_Shift_L: - case XK_Shift_R: key = K_SHIFT; break; + case XK_Shift_L: key = K_SHIFT; break; + case XK_Shift_R: key = K_RSHIFT; break; case XK_Execute: case XK_Control_L: