/* -*-C-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/doskbd.c,v 1.4 1992/05/13 16:49:24 jinx Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/doskbd.c,v 1.5 1992/05/25 16:19:34 jinx Exp $
Copyright (c) 1992 Massachusetts Institute of Technology
return (old_mask);
}
+\f
+extern int EXFUN (dos_set_kbd_translation,
+ (unsigned, unsigned, unsigned char));
+
+#ifndef PADDED_PATTERN_SIZE
+# define PADDED_PATTERN_SIZE 0
+#endif
+
+#ifndef RM_ISR_TABLE_SIZE
+# define RM_ISR_TABLE_SIZE 0
+#endif
+
+int
+dos_set_kbd_translation (unsigned shift_p,
+ unsigned scan_code,
+ unsigned char new)
+{
+ unsigned char old;
+ unsigned char * table;
+ unsigned offset;
+
+ if (scan_code >= (sizeof (shifted_scan_code_to_ascii)))
+ return (-1);
+
+ if (shift_p != 0)
+ {
+ table = &shifted_scan_code_to_ascii[0];
+ offset = PADDED_PATTERN_SIZE;
+ }
+ else
+ {
+ table = &unshifted_scan_code_to_ascii[0];
+ offset = (PADDED_PATTERN_SIZE + RM_ISR_TABLE_SIZE);
+ }
+ old = table[scan_code];
+ table[scan_code] = new;
+
+
+#ifdef DPMI_RM_HANDLER_REAL
+
+ if (DPMI_RM_selector != 0)
+ farcpy ((offset + scan_code),
+ DPMI_RM_selector,
+ ((unsigned) (& table[scan_code])),
+ (getDS ()),
+ 1);
+
+#endif /* DPMI_RM_HANDLER_REAL */
+
+#ifdef DOSX_RM_HANDLER_REAL
+
+ if (DOSX_RM_segment != 0)
+ (* ((unsigned char *)
+ ((((unsigned long) DOSX_RM_segment) << 4) + offset)))
+ = new;
+
+#endif /* DOSX_RM_HANDLER_REAL */
+
+ return (old);
+}
/* -*-C-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/prdosenv.c,v 1.2 1992/05/13 16:50:13 jinx Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/prdosenv.c,v 1.3 1992/05/25 16:20:10 jinx Exp $
Copyright (c) 1992 Massachusetts Institute of Technology
(dos_set_kbd_modifier_mask ((unsigned char)
(arg_integer (1))))));
}
+
+DEFINE_PRIMITIVE ("DOS-SET-KEYBOARD-TRANSLATION!",
+ Prim_dos_set_keyboard_translation,
+ 3, 3, 0)
+{
+ int result;
+ extern int EXFUN (dos_set_kbd_translation,
+ (unsigned, unsigned, unsigned char));
+ PRIMITIVE_HEADER (3);
+
+ result = (dos_set_kbd_translation (((unsigned) (arg_integer (1))),
+ ((unsigned) (arg_integer (2))),
+ ((unsigned char) (arg_integer (3)))));
+ if (result < 0)
+ error_bad_range_arg (2);
+
+ PRIMITIVE_RETURN (long_to_integer ((long) result));
+}