Return to BSD News archive
Path: sserve!manuel.anu.edu.au!munnari.oz.au!news.hawaii.edu!ames!sun-barr!olivea!uunet!kithrup!sef From: sef@kithrup.COM (Sean Eric Fagan) Newsgroups: comp.unix.bsd Subject: Re: [386BSD] Enhanced pccons w/source Keywords: virtual screens, changeable keymap, SYSV386 ioctl's .... Message-ID: <1992Nov29.220238.5719@kithrup.COM> Date: 29 Nov 92 22:02:38 GMT References: <kmdac.722774624@login.dkuug.dk> Organization: Kithrup Enterprises, Ltd. Lines: 231 Here is a set of diffs to the enhanced pccons. It fixes a couple of bugs that made it impossible to compile, and also adds the ability to specify some useful key values (such as control-2 being 0x00). Note that the change for the latter increases the size of the table, by turning the array of u_char's into an array of u_shorts. We've been using this for a while, and haven't had too many problems (none that I thought were related to my changes). It's so *nice* to have multiscreens(tm) again! :) *** console.h Wed Nov 25 15:26:56 1992 --- /sys/sys/console.h Sat Nov 28 04:30:52 1992 *************** *** 63,69 **** struct keymap { u_short n_keys; struct key_t { ! u_char map[NUM_STATES]; u_char spcl; u_char flgs; } key[NUM_KEYS]; --- 63,69 ---- struct keymap { u_short n_keys; struct key_t { ! u_short map[NUM_STATES]; u_char spcl; u_char flgs; } key[NUM_KEYS]; *************** *** 79,94 **** #define F(x) ((x)+F_FN-1) #define S(x) ((x)+F_SCR-1) ! #define NOP 0x00 ! #define LSH 0x02 ! #define RSH 0x03 ! #define CLK 0x04 ! #define NLK 0x05 ! #define SLK 0x06 ! #define LALT 0x07 ! #define LCTR 0x09 ! #define RCTR 0x7b ! #define RALT 0x7c #define F_SCR 11 /* switch to first screen */ #define L_SCR 26 /* switch to last screen */ --- 79,94 ---- #define F(x) ((x)+F_FN-1) #define S(x) ((x)+F_SCR-1) ! #define NOP 0x0101 ! #define LSH 0x0200 ! #define RSH 0x0300 ! #define CLK 0x0400 ! #define NLK 0x0500 ! #define SLK 0x0600 ! #define LALT 0x0700 ! #define LCTR 0x0900 ! #define RCTR 0x7b00 ! #define RALT 0x7c00 #define F_SCR 11 /* switch to first screen */ #define L_SCR 26 /* switch to last screen */ *** kbdtables.h Wed Nov 25 23:12:42 1992 --- /sys/i386/isa/kbdtables.h Fri Nov 27 21:30:47 1992 *************** *** 141,147 **** /* sc=00 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, /* sc=01 */ 0x1B, 0x1B, NOP, NOP, 0x1B, 0x1B, NOP, NOP, 0x33, 0x00, /* sc=02 */ '1', '!', NOP, NOP, '1', '!', NOP, NOP, 0x33, 0x00, ! /* sc=03 */ '2', '@', NOP, NOP, '2', '@', NOP, NOP, 0x00, 0x00, /* sc=04 */ '3', '#', NOP, NOP, '3', '#', NOP, NOP, 0x33, 0x00, /* sc=05 */ '4', '$', NOP, NOP, '4', '$', NOP, NOP, 0x33, 0x00, /* sc=06 */ '5', '%', NOP, NOP, '5', '%', NOP, NOP, 0x33, 0x00, --- 141,147 ---- /* sc=00 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, 0xFF, 0x00, /* sc=01 */ 0x1B, 0x1B, NOP, NOP, 0x1B, 0x1B, NOP, NOP, 0x33, 0x00, /* sc=02 */ '1', '!', NOP, NOP, '1', '!', NOP, NOP, 0x33, 0x00, ! /* sc=03 */ '2', '@', 0x00, 0x00, '2', '@', NOP, NOP, 0x00, 0x00, /* sc=04 */ '3', '#', NOP, NOP, '3', '#', NOP, NOP, 0x33, 0x00, /* sc=05 */ '4', '$', NOP, NOP, '4', '$', NOP, NOP, 0x33, 0x00, /* sc=06 */ '5', '%', NOP, NOP, '5', '%', NOP, NOP, 0x33, 0x00, *************** *** 151,158 **** /* sc=0a */ '9', '(', NOP, NOP, '9', '(', NOP, NOP, 0x33, 0x00, /* sc=0b */ '0', ')', NOP, NOP, '0', ')', NOP, NOP, 0x33, 0x00, /* sc=0c */ '-', '_', 0x1F, 0x1F, '-', '_', 0x1F, 0x1F, 0x00, 0x00, ! /* sc=0d */ '='', '+', NOP, NOP, '=', '+', NOP, NOP, 0x33, 0x00, ! /* sc=0e */ 0x08, 0x08, 0x7F, 0x7F, 0x08, 0x08, 0x7F, 0x7F, 0x00, 0x00, /* sc=0f */ 0x09, 0x08, NOP, NOP, 0x09, 0x08, NOP, NOP, 0x77, 0x00, /* sc=10 */ 'q', 'Q', 0x11, 0x11, 'q', 'Q', 0x11, 0x11, 0x00, 0x01, /* sc=11 */ 'w', 'W', 0x17, 0x17, 'w', 'W', 0x17, 0x17, 0x00, 0x01, --- 151,158 ---- /* sc=0a */ '9', '(', NOP, NOP, '9', '(', NOP, NOP, 0x33, 0x00, /* sc=0b */ '0', ')', NOP, NOP, '0', ')', NOP, NOP, 0x33, 0x00, /* sc=0c */ '-', '_', 0x1F, 0x1F, '-', '_', 0x1F, 0x1F, 0x00, 0x00, ! /* sc=0d */ '=', '+', NOP, NOP, '=', '+', NOP, NOP, 0x33, 0x00, ! /* sc=0e */ 0x7F, 0x7F, 0x08, 0x08, 0x7F, 0x7F, 0x08, 0x08, 0x00, 0x00, /* sc=0f */ 0x09, 0x08, NOP, NOP, 0x09, 0x08, NOP, NOP, 0x77, 0x00, /* sc=10 */ 'q', 'Q', 0x11, 0x11, 'q', 'Q', 0x11, 0x11, 0x00, 0x01, /* sc=11 */ 'w', 'W', 0x17, 0x17, 'w', 'W', 0x17, 0x17, 0x00, 0x01, *************** *** 178,184 **** /* sc=25 */ 'k', 'K', 0x0B, 0x0B, 'k', 'K', 0x0B, 0x0B, 0x00, 0x01, /* sc=26 */ 'l', 'L', 0x0C, 0x0C, 'l', 'L', 0x0C, 0x0C, 0x00, 0x01, /* sc=27 */ ';', ':', NOP, NOP, ';', ':', NOP, NOP, 0x33, 0x00, ! /* sc=28 */ '\'', '"', NOP, NOP, ''\', '"', NOP, NOP, 0x33, 0x00, /* sc=29 */ '`', '~', NOP, NOP, '`', '~', NOP, NOP, 0x33, 0x00, /* sc=2a */ LSH, LSH, LSH, LSH, LSH, LSH, LSH, LSH, 0xFF, 0x00, /* sc=2b */ '\\', '|', 0x1C, 0x1C, '\\', '|', 0x1C, 0x1C, 0x00, 0x00, --- 178,184 ---- /* sc=25 */ 'k', 'K', 0x0B, 0x0B, 'k', 'K', 0x0B, 0x0B, 0x00, 0x01, /* sc=26 */ 'l', 'L', 0x0C, 0x0C, 'l', 'L', 0x0C, 0x0C, 0x00, 0x01, /* sc=27 */ ';', ':', NOP, NOP, ';', ':', NOP, NOP, 0x33, 0x00, ! /* sc=28 */ '\'', '"', NOP, NOP, '\'', '"', NOP, NOP, 0x33, 0x00, /* sc=29 */ '`', '~', NOP, NOP, '`', '~', NOP, NOP, 0x33, 0x00, /* sc=2a */ LSH, LSH, LSH, LSH, LSH, LSH, LSH, LSH, 0xFF, 0x00, /* sc=2b */ '\\', '|', 0x1C, 0x1C, '\\', '|', 0x1C, 0x1C, 0x00, 0x00, *** pccons.c Wed Nov 25 15:57:44 1992 --- /sys/i386/isa/pccons.c Sat Nov 28 04:40:09 1992 *************** *** 196,202 **** void reset_cpu(void); u_int sgetc(int noblock); int pg(char *p, int q, int r, int s, int t, int u, int v, int w, int x, int y, int z); ! static int getchar(void); int pcmmap(dev_t dev, int offset, int nprot); static void set_mode(int mode); static load_font(int segment, struct vidfont_t *font); --- 196,202 ---- void reset_cpu(void); u_int sgetc(int noblock); int pg(char *p, int q, int r, int s, int t, int u, int v, int w, int x, int y, int z); ! /*static*/ int getchar(void); int pcmmap(dev_t dev, int offset, int nprot); static void set_mode(int mode); static load_font(int segment, struct vidfont_t *font); *************** *** 1219,1225 **** if ((dt & 0x7F) >= key_map.n_keys) goto loop; ! state = shfts | 2 * ctls | 4 * alts; key = &key_map.key[dt & 0x7F]; if (((key->flgs & FLAG_LOCK_C) && caps) || ((key->flgs & FLAG_LOCK_N) && num)) --- 1219,1225 ---- if ((dt & 0x7F) >= key_map.n_keys) goto loop; ! state = (shfts ? 1 : 0 ) | 2 * ctls | 4 * alts; key = &key_map.key[dt & 0x7F]; if (((key->flgs & FLAG_LOCK_C) && caps) || ((key->flgs & FLAG_LOCK_N) && num)) *************** *** 1226,1239 **** state ^= 1; /* Check for make/break */ ! if (action = key->map[state]) { if (dt & 0x80) { /* break */ if (key->spcl & 0x80) { switch (action) { case LSH: case RSH: ! shfts = 0; break; case LCTR: case RCTR: --- 1226,1241 ---- state ^= 1; /* Check for make/break */ ! if ((action = key->map[state]) != NOP) { if (dt & 0x80) { /* break */ if (key->spcl & 0x80) { switch (action) { case LSH: + shfts &= ~1; + break; case RSH: ! shfts &= ~2; break; case LCTR: case RCTR: *************** *** 1265,1272 **** /* NON-LOCKING KEYS */ case LSH: case RSH: ! shfts = 1; break; case LCTR: case RCTR: --- 1267,1276 ---- /* NON-LOCKING KEYS */ case LSH: + shfts |= 1; + break; case RSH: ! shfts |= 2; break; case LCTR: case RCTR: *************** *** 1302,1308 **** } ! static int getchar() { register char thechar; register delay; --- 1306,1312 ---- } ! /*static*/ int getchar() { register char thechar; register delay; -- Sean Eric Fagan | "we will probably just crash immediately; but at least sef@kithrup.COM | we will have written less code." -----------------+ -- Chris Torek (torek@ee.lbl.gov) Any opinions expressed are my own, and generally unpopular with others.