plan 9 kernel history: overview | file list | diff list

1991/0112/ss/screen.c (diff list | history)

1991/0110/sys/src/9/ss/screen.c:30,381991/0112/sys/src/9/ss/screen.c:30,38 (short | long | prev | next)
1990/1223    
{ 
1990/1226    
	(ulong*)SCREENSEGM, 
1990/1223    
	0, 
1990/1226    
	1160/32, 
1991/0112    
	1152/32, 
1990/1223    
	0, 
1990/1226    
	{0, 0, 1160, 900}, 
1991/0112    
	{0, 0, 1152, 900}, 
1990/1223    
	0 
}; 
 
1991/0110/sys/src/9/ss/screen.c:295,3071991/0112/sys/src/9/ss/screen.c:295,312
1990/1231    
} 
 
/* 
 * Map is indexed by keyboard char, output is ASCII 
1991/0112    
 * Map is indexed by keyboard char, output is ASCII. 
 * Gnotisms: Return sends newline and Line Feed sends carriage return. 
 * Delete and Backspace both send backspace. 
 * Num Lock sends delete (rubout). 
 * Alt Graph is VIEW (scroll). 
 * Compose builds Latin-1 characters. 
1990/1231    
 */ 
uchar keymap[128] = { 
/*	00    L1    02    L2    04    F1    F2    07	*/ 
	0xFF, 0x80, 0xFF, 0x81, 0xFF, 0x82, 0x83, 0xFF, 
/*	F3    09    F4    0b    F5    0d    F6    0f  	*/ 
	0x84, 0xFF, 0x85, 0xFF, 0x86, 0xFF, 0x87, 0xFF, 
1991/0112    
/*	F3    09    F4    0b    F5    altgr F6    0f  	*/ 
	0x84, 0xFF, 0x85, 0xFF, 0x86, 0x80, 0x87, 0xFF, 
1990/1231    
/*	F7    F8    F9    Alt   14    R1    R2    R3	*/ 
	0x88, 0x89, 0x8a, 0x8b, 0xFF, 0x8c, 0x8d, 0x8e, 
/*	18    L3    L4    1b    1c    Esc   1     2	*/ 
1991/0110/sys/src/9/ss/screen.c:310,3341991/0112/sys/src/9/ss/screen.c:315,339
1990/1231    
	'3',  '4',  '5',  '6',  '7',  '8',  '9',  '0', 
/*	-     =     `     bs    2c    R4    R5    R6	*/ 
	'-',  '=',  '`',  '\b', 0xFF, 0x91, 0x92, 0x93, 
/*	30    L5    L6    33    34    tab   q     w  	*/ 
	0xFF, 0x94, 0x95, 0xFF, 0xFF, '\t', 'q',  'w', 
1991/0112    
/*	30    L5    del   L6   34    tab   q     w  	*/ 
	0xFF, 0x94, 0xFF, 0x95, 0xFF, '\t', 'q',  'w', 
1990/1231    
/*	e     r     t     y     u     i     o     p    	*/ 
	'e',  'r',  't',  'y',  'u',  'i',  'o',  'p', 
/*	[     ]     del   43    R7    R8    R9    47   	*/ 
	'[',  ']',  0x7F, 0xFF, 0x96, 0x97, 0x98, 0xFF, 
1991/0112    
/*	[     ]     dele  comp  R7    R8    R9    r -	*/ 
	'[',  ']',  '\b', 0xB6, 0x96, 0x97, 0x98, 0xFF, 
1990/1231    
/*	L7    L8    4a    4b    ctrl  a     s     d	*/ 
	0x99, 0x9a, 0xFF, 0xFF, 0xF0, 'a',  's',  'd', 
/*	f     g     h     j     k     l     ;     '   	*/ 
	'f',  'g',  'h',  'j',  'k',  'l',  ';',  '\'', 
/*	\     ret   5a    R10   R11   R12   5e    L9	*/ 
1991/0112    
/*	\     ret   enter R10   R11   R12   ins   L9	*/ 
1990/1231    
	'\\', '\n', 0xFF, 0x9b, 0x9c, 0x9d, 0xFF, 0x9e,  
/*	60    L10   62    shift z     x     c     v	*/ 
	0xFF, 0x9f, 0xFF, 0xF1, 'z',  'x',  'c', 'v', 
1991/0112    
/*	60    L10   numlk shift z     x     c     v	*/ 
	0xFF, 0x9f, 0x7F, 0xF1, 'z',  'x',  'c', 'v', 
1990/1231    
/*	b     n     m     ,     .     /     shift lf	*/ 
	'b',  'n',  'm',  ',',  '.',  '/',  0xF1, '\r', 
/*	R13   R14   R15   73    74    75    76    caps	*/ 
1991/0112    
/*	R13   R14   R15   73    74    75    help  caps	*/ 
1990/1231    
	0xA0, 0xA1, 0xA2, 0xFF, 0xFF, 0xFF, 0xFF, 0xF2, 
/*	left  79    right 7b    7c    7d    7e    7f	*/ 
1991/0112    
/*	lloz  79    rloz  7b    7c    r +   7e    7f	*/ 
1990/1231    
	0xA3, ' ',  0xA4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
}; 
 
1991/0110/sys/src/9/ss/screen.c:335,3421991/0112/sys/src/9/ss/screen.c:340,347
1990/1231    
uchar keymapshift[128] = { 
/*	00    L1    02    L2    04    F1    F2    07	*/ 
	0xFF, 0x80, 0xFF, 0x81, 0xFF, 0x82, 0x83, 0xFF, 
/*	F3    09    F4    0b    F5    0d    F6    0f  	*/ 
	0x84, 0xFF, 0x85, 0xFF, 0x86, 0xFF, 0x87, 0xFF, 
1991/0112    
/*	F3    09    F4    0b    F5    altgr F6    0f  	*/ 
	0x84, 0xFF, 0x85, 0xFF, 0x86, 0x80, 0x87, 0xFF, 
1990/1231    
/*	F7    F8    F9    Alt   14    R1    R2    R3	*/ 
	0x88, 0x89, 0x8a, 0x8b, 0xFF, 0x8c, 0x8d, 0x8e, 
/*	18    L3    L4    1b    1c    Esc   1     2	*/ 
1991/0110/sys/src/9/ss/screen.c:345,3691991/0112/sys/src/9/ss/screen.c:350,374
1990/1231    
	'#',  '$',  '%',  '^',  '&',  '*',  '(',  ')', 
/*	-     =     `     bs    2c    R4    R5    R6	*/ 
	'_',  '+',  '~',  '\b', 0xFF, 0x91, 0x92, 0x93, 
/*	30    L5    L6    33    34    tab   q     w  	*/ 
	0xFF, 0x94, 0x95, 0xFF, 0xFF, '\t', 'Q',  'W', 
1991/0112    
/*	30    L5    del   L6    34    tab   q     w  	*/ 
	0xFF, 0x94, 0xFF, 0x95, 0xFF, '\t', 'Q',  'W', 
1990/1231    
/*	e     r     t     y     u     i     o     p    	*/ 
	'E',  'R',  'T',  'Y',  'U',  'I',  'O',  'P', 
/*	[     ]     del   43    R7    R8    R9    47   	*/ 
	'{',  '}',  0x7F, 0xFF, 0x96, 0x97, 0x98, 0xFF, 
1991/0112    
/*	[     ]     dele  comp  R7    R8    R9    r -	*/ 
	'{',  '}',  '\b', 0xB6, 0x96, 0x97, 0x98, 0xFF, 
1990/1231    
/*	L7    L8    4a    4b    ctrl  a     s     d	*/ 
	0x99, 0x9a, 0xFF, 0xFF, 0xF0, 'A',  'S',  'D', 
/*	f     g     h     j     k     l     ;     '   	*/ 
	'F',  'G',  'H',  'J',  'K',  'L',  ':',  '"', 
/*	\     ret   5a    R10   R11   R12   5e    L9	*/ 
1991/0112    
/*	\     ret   enter R10   R11   R12   ins   L9	*/ 
1990/1231    
	'|', '\n',  0xFF, 0x9b, 0x9c, 0x9d, 0xFF, 0x9e,  
/*	60    L10   62    shift z     x     c     v	*/ 
	0xFF, 0x9f, 0xFF, 0xF1, 'Z',  'X',  'C', 'V', 
1991/0112    
/*	60    L10   numlk shift z     x     c     v	*/ 
	0xFF, 0x9f, 0x7F, 0xF1, 'Z',  'X',  'C', 'V', 
1990/1231    
/*	b     n     m     ,     .     /     shift lf	*/ 
	'B',  'N',  'M',  '<',  '>',  '?',  0xF1, '\r', 
/*	R13   R14   R15   73    74    75    76    caps	*/ 
1991/0112    
/*	R13   R14   R15   73    74    75    help  caps	*/ 
1990/1231    
	0xA0, 0xA1, 0xA2, 0xFF, 0xFF, 0xFF, 0xFF, 0xF2, 
/*	left  79    right 7b    7c    7d    7e    7f	*/ 
1991/0112    
/*	lloz  79    rloz  7b    7c    r +  7e    7f	*/ 
1990/1231    
	0xA3, ' ',  0xA4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
}; 
 
1991/0110/sys/src/9/ss/screen.c:370,3771991/0112/sys/src/9/ss/screen.c:375,382
1990/1231    
uchar keymapctrl[128] = { 
/*	00    L1    02    L2    04    F1    F2    07	*/ 
	0xFF, 0x80, 0xFF, 0x81, 0xFF, 0x82, 0x83, 0xFF, 
/*	F3    09    F4    0b    F5    0d    F6    0f  	*/ 
	0x84, 0xFF, 0x85, 0xFF, 0x86, 0xFF, 0x87, 0xFF, 
1991/0112    
/*	F3    09    F4    0b    F5    altgr F6    0f  	*/ 
	0x84, 0xFF, 0x85, 0xFF, 0x86, 0x80, 0x87, 0xFF, 
1990/1231    
/*	F7    F8    F9    Alt   14    R1    R2    R3	*/ 
	0x88, 0x89, 0x8a, 0x8b, 0xFF, 0x8c, 0x8d, 0x8e, 
/*	18    L3    L4    1b    1c    Esc   1     2	*/ 
1991/0110/sys/src/9/ss/screen.c:380,4041991/0112/sys/src/9/ss/screen.c:385,409
1990/1231    
	'#',  '$',  '%',  '^',  '&',  '*',  '(',  ')', 
/*	-     =     `     bs    2c    R4    R5    R6	*/ 
	'_',  '+',  '~', '\b', 0xFF, 0x91, 0x92, 0x93, 
/*	30    L5    L6    33    34    tab   q     w  	*/ 
	0xFF, 0x94, 0x95, 0xFF, 0xFF, '\t', 0x11, 0x17, 
1991/0112    
/*	30    L5    del   L6    34    tab   q     w  	*/ 
	0xFF, 0x94, 0xFF, 0x95, 0xFF, '\t', 0x11, 0x17, 
1990/1231    
/*	e     r     t     y     u     i     o     p    	*/ 
	0x05, 0x12, 0x14, 0x19, 0x15, 0x09, 0x0F, 0x10, 
/*	[     ]     del   43    R7    R8    R9    47   	*/ 
	0x1B, 0x1D, 0x7F, 0xFF, 0x96, 0x97, 0x98, 0xFF, 
1991/0112    
/*	[     ]     dele  comp  R7    R8    R9    r -	*/ 
	0x1B, 0x1D, '\b', 0xB6, 0x96, 0x97, 0x98, 0xFF, 
1990/1231    
/*	L7    L8    4a    4b    ctrl  a     s     d	*/ 
	0x99, 0x9a, 0xFF, 0xFF, 0xF0, 0x01, 0x13, 0x04, 
/*	f     g     h     j     k     l     ;     '   	*/ 
	0x06, 0x07, 0x08, 0x0A, 0x0B, 0x0C,':',  '"', 
/*	\     ret   5a    R10   R11   R12   5e    L9	*/ 
1991/0112    
/*	\     ret   enter R10   R11   R12   ins   L9	*/ 
1990/1231    
	0x1C, '\n',  0xFF, 0x9b, 0x9c, 0x9d, 0xFF, 0x9e,  
/*	60    L10   62    shift z     x     c     v	*/ 
	0xFF, 0x9f, 0xFF, 0xF1, 0x1A, 0x18, 0x03, 0x16, 
1991/0112    
/*	60    L10   numlk shift z     x     c     v	*/ 
	0xFF, 0x9f, 0x7F, 0xF1, 0x1A, 0x18, 0x03, 0x16, 
1990/1231    
/*	b     n     m     ,     .     /     shift lf	*/ 
	0x02, 0x0E, 0x0D, '<',  '>',  '?',  0xF1, '\r', 
/*	R13   R14   R15   73    74    75    76    caps	*/ 
1991/0112    
/*	R13   R14   R15   73    74    75    help  caps	*/ 
1990/1231    
	0xA0, 0xA1, 0xA2, 0xFF, 0xFF, 0xFF, 0xFF, 0xF2, 
/*	left  79    right 7b    7c    7d    7e    7f	*/ 
1991/0112    
/*	lloz  79    rloz  7b    7c    r +  7e    7f	*/ 
1990/1231    
	0xA3, ' ',  0xA4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
}; 
 
1991/0110/sys/src/9/ss/screen.c:405,4121991/0112/sys/src/9/ss/screen.c:410,417
1990/1231    
uchar keymapshiftctrl[128] = { 
/*	00    L1    02    L2    04    F1    F2    07	*/ 
	0xFF, 0x80, 0xFF, 0x81, 0xFF, 0x82, 0x83, 0xFF, 
/*	F3    09    F4    0b    F5    0d    F6    0f  	*/ 
	0x84, 0xFF, 0x85, 0xFF, 0x86, 0xFF, 0x87, 0xFF, 
1991/0112    
/*	F3    09    F4    0b    F5    altgr F6    0f  	*/ 
	0x84, 0xFF, 0x85, 0xFF, 0x86, 0x80, 0x87, 0xFF, 
1990/1231    
/*	F7    F8    F9    Alt   14    R1    R2    R3	*/ 
	0x88, 0x89, 0x8a, 0x8b, 0xFF, 0x8c, 0x8d, 0x8e, 
/*	18    L3    L4    1b    1c    Esc   1     2	*/ 
1991/0110/sys/src/9/ss/screen.c:415,4391991/0112/sys/src/9/ss/screen.c:420,444
1990/1231    
	'#',  '$',  '%',  0x1E, '&',  '*',  '(',  ')', 
/*	-     =     `     bs    2c    R4    R5    R6	*/ 
	0x1F, '+',  '~', '\b', 0xFF, 0x91, 0x92, 0x93, 
/*	30    L5    L6    33    34    tab   q     w  	*/ 
	0xFF, 0x94, 0x95, 0xFF, 0xFF, '\t', 0x11, 0x17, 
1991/0112    
/*	30    L5    del   L6     34    tab   q     w  	*/ 
	0xFF, 0x94, 0xFF, 0x95, 0xFF, '\t', 0x11, 0x17, 
1990/1231    
/*	e     r     t     y     u     i     o     p    	*/ 
	0x05, 0x12, 0x14, 0x19, 0x15, 0x09, 0x0F, 0x10, 
/*	[     ]     del   43    R7    R8    R9    47   	*/ 
	0x1B, 0x1D, 0x7F, 0xFF, 0x96, 0x97, 0x98, 0xFF, 
1991/0112    
/*	[     ]     dele  comp  R7    R8    R9    r -	*/ 
	0x1B, 0x1D, '\b', 0xB6, 0x96, 0x97, 0x98, 0xFF, 
1990/1231    
/*	L7    L8    4a    4b    ctrl  a     s     d	*/ 
	0x99, 0x9a, 0xFF, 0xFF, 0xF0, 0x01, 0x13, 0x04, 
/*	f     g     h     j     k     l     ;     '   	*/ 
	0x06, 0x07, 0x08, 0x0A, 0x0B, 0x0C,':',  '"', 
/*	\     ret   5a    R10   R11   R12   5e    L9	*/ 
	0x1C, '\n',  0xFF, 0x9b, 0x9c, 0x9d, 0xFF, 0x9e,  
/*	60    L10   62    shift z     x     c     v	*/ 
	0xFF, 0x9f, 0xFF, 0xF1, 0x1A, 0x18, 0x03, 0x16, 
1991/0112    
/*	\     ret   enter R10   R11   R12   ins   L9	*/ 
	0x1C, '\n', 0xFF, 0x9b, 0x9c, 0x9d, 0xFF, 0x9e,  
/*	60    L10   numlk shift z     x     c     v	*/ 
	0xFF, 0x9f, 0x7F, 0xF1, 0x1A, 0x18, 0x03, 0x16, 
1990/1231    
/*	b     n     m     ,     .     /     shift lf	*/ 
	0x02, 0x0E, 0x0D, '<',  '>',  '?',  0xF1, '\r', 
/*	R13   R14   R15   73    74    75    76    caps	*/ 
1991/0112    
/*	R13   R14   R15   73    74    75    help  caps	*/ 
1990/1231    
	0xA0, 0xA1, 0xA2, 0xFF, 0xFF, 0xFF, 0xFF, 0xF2, 
/*	left  79    right 7b    7c    7d    7e    7f	*/ 
1991/0112    
/*	lloz  79    rloz  7b    7c    r +  7e    7f	*/ 
1990/1231    
	0xA3, ' ',  0xA4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
}; 
 
1991/0110/sys/src/9/ss/screen.c:444,4491991/0112/sys/src/9/ss/screen.c:449,594
1990/1231    
	keymapshiftctrl 
}; 
 
1991/0112    
struct latin 
{ 
	uchar	l; 
	char	c[2]; 
}latintab[] = { 
	'€',	"!!",	/* spanish initial ! */ 
	'€',	"c|",	/* cent */ 
	'€',	"c$",	/* cent */ 
	'€',	"l$",	/* pound sterling */ 
	'€',	"g$",	/* general currency */ 
	'€',	"y$",	/* yen */ 
	'€',	"j$",	/* yen */ 
	'€',	"||",	/* broken vertical bar */ 
	'€',	"SS",	/* section symbol */ 
	'€',	"\"\"",	/* dieresis */ 
	'€',	"cr",	/* copyright */ 
	'€',	"cO",	/* copyright */ 
	'€',	"sa",	/* super a, feminine ordinal */ 
	'€',	"<<",	/* left angle quotation */ 
	'€',	"no",	/* not sign, hooked overbar */ 
	'€',	"--",	/* soft hyphen */ 
	'€',	"rg",	/* registered trademark */ 
	'€',	"__",	/* macron */ 
	'€',	"s0",	/* degree (sup o) */ 
	'€',	"+-",	/* plus-minus */ 
	'€',	"s2",	/* sup 2 */ 
	'€',	"s3",	/* sup 3 */ 
	'€',	"''",	/* grave accent */ 
	'€',	"mu",	/* mu */ 
	'€',	"pg",	/* paragraph (pilcrow) */ 
	'€',	"..",	/* centered . */ 
	'€',	",,",	/* cedilla */ 
	'€',	"s1",	/* sup 1 */ 
	'€',	"so",	/* sup o */ 
	'€',	">>",	/* right angle quotation */ 
	'€',	"14",	/* 1/4 */ 
	'€',	"12",	/* 1/2 */ 
	'€',	"34",	/* 3/4 */ 
	'€',	"??",	/* spanish initial ? */ 
	'€',	"A`",	/* A grave */ 
	'€',	"A'",	/* A acute */ 
	'€',	"A^",	/* A circumflex */ 
	'€',	"A~",	/* A tilde */ 
	'€',	"A\"",	/* A dieresis */ 
	'€',	"A:",	/* A dieresis */ 
	'€',	"Ao",	/* A circle */ 
	'€',	"AO",	/* A circle */ 
	'€',	"Ae",	/* AE ligature */ 
	'€',	"AE",	/* AE ligature */ 
	'€',	"C,",	/* C cedilla */ 
	'€',	"E`",	/* E grave */ 
	'€',	"E'",	/* E acute */ 
	'€',	"E^",	/* E circumflex */ 
	'€',	"E\"",	/* E dieresis */ 
	'€',	"E:",	/* E dieresis */ 
	'€',	"I`",	/* I grave */ 
	'€',	"I'",	/* I acute */ 
	'€',	"I^",	/* I circumflex */ 
	'€',	"I\"",	/* I dieresis */ 
	'€',	"I:",	/* I dieresis */ 
	'€',	"D-",	/* Eth */ 
	'€',	"N~",	/* N tilde */ 
	'€',	"O`",	/* O grave */ 
	'€',	"O'",	/* O acute */ 
	'€',	"O^",	/* O circumflex */ 
	'€',	"O~",	/* O tilde */ 
	'€',	"O\"",	/* O dieresis */ 
	'€',	"O:",	/* O dieresis */ 
	'€',	"OE",	/* O dieresis */ 
	'€',	"Oe",	/* O dieresis */ 
	'€',	"xx",	/* times sign */ 
	'€',	"O/",	/* O slash */ 
	'€',	"U`",	/* U grave */ 
	'€',	"U'",	/* U acute */ 
	'€',	"U^",	/* U circumflex */ 
	'€',	"U\"",	/* U dieresis */ 
	'€',	"U:",	/* U dieresis */ 
	'€',	"UE",	/* U dieresis */ 
	'€',	"Ue",	/* U dieresis */ 
	'€',	"Y'",	/* Y acute */ 
	'€',	"P|",	/* Thorn */ 
	'€',	"Th",	/* Thorn */ 
	'€',	"TH",	/* Thorn */ 
	'€',	"ss",	/* sharp s */ 
	'€',	"a`",	/* a grave */ 
	'€',	"a'",	/* a acute */ 
	'€',	"a^",	/* a circumflex */ 
	'€',	"a~",	/* a tilde */ 
	'€',	"a\"",	/* a dieresis */ 
	'€',	"a:",	/* a dieresis */ 
	'€',	"ao",	/* a circle */ 
	'€',	"ae",	/* ae ligature */ 
	'€',	"c,",	/* c cedilla */ 
	'€',	"e`",	/* e grave */ 
	'€',	"e'",	/* e acute */ 
	'€',	"e^",	/* e circumflex */ 
	'€',	"e\"",	/* e dieresis */ 
	'€',	"e:",	/* e dieresis */ 
	'€',	"i`",	/* i grave */ 
	'€',	"i'",	/* i acute */ 
	'€',	"i^",	/* i circumflex */ 
	'€',	"i\"",	/* i dieresis */ 
	'€',	"i:",	/* i dieresis */ 
	'€',	"d-",	/* eth */ 
	'€',	"n~",	/* n tilde */ 
	'€',	"o`",	/* o grave */ 
	'€',	"o'",	/* o acute */ 
	'€',	"o^",	/* o circumflex */ 
	'€',	"o~",	/* o tilde */ 
	'€',	"o\"",	/* o dieresis */ 
	'€',	"o:",	/* o dieresis */ 
	'€',	"oe",	/* o dieresis */ 
	'€',	"-:",	/* divide sign */ 
	'€',	"o/",	/* o slash */ 
	'€',	"u`",	/* u grave */ 
	'€',	"u'",	/* u acute */ 
	'€',	"u^",	/* u circumflex */ 
	'€',	"u\"",	/* u dieresis */ 
	'€',	"u:",	/* u dieresis */ 
	'€',	"ue",	/* u dieresis */ 
	'€',	"y'",	/* y acute */ 
	'€',	"th",	/* thorn */ 
	'€',	"p|",	/* thorn */ 
	'€',	"y\"",	/* y dieresis */ 
	'€',	"y:",	/* y dieresis */ 
	0,	0, 
}; 
 
int 
latin1(int k1, int k2) 
{ 
	int i; 
	struct latin *l; 
 
	for(l=latintab; l->l; l++) 
		if(k1==l->c[0] && k2==l->c[1]) 
			return l->l; 
	return 0; 
} 
 
1990/1231    
void 
kbdstate(int c) 
{ 
1991/0110/sys/src/9/ss/screen.c:451,4601991/0112/sys/src/9/ss/screen.c:596,605
1990/1231    
	static caps = 0; 
	static repeatc = -1; 
	static long startclick; 
1991/0112    
	static int kbdstate, k1, k2; 
1990/1231    
	int tc; 
 
	tc = kbdmap[shift][c&0x7F]; 
                 
/* 
	if(c==0xFFFF && repeatc!=-1 && clicks>startclick+40 && (clicks-startclick)%3==0){ 
		kbdc = repeatc; 
1991/0110/sys/src/9/ss/screen.c:507,5131991/0112/sys/src/9/ss/screen.c:652,676
1990/1231    
/* 
	startclick = clicks; 
*/ 
	if(tc == 0x10)		/* ctrl-p */ 
		reset(); 
	kbdchar(tc); 
1991/0112    
	if(tc == 0xB6)	/* Compose */ 
		kbdstate = 1; 
	else{ 
		switch(kbdstate){ 
		case 1: 
			k1 = tc; 
			kbdstate = 2; 
			break; 
		case 2: 
			k2 = tc; 
			tc = latin1(k1, k2); 
			if(c == 0){ 
				kbdchar(k1); 
				tc = k2; 
			} 
			/* fall through */ 
		default: 
			kbdstate = 0; 
			kbdchar(tc); 
		} 
	} 
1990/1223    
} 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)