/* xeroxkb.c" */
#include "X.h"
#include "Xmd.h"
#include "input.h"
#include "keynames.h"
#include "keysym.h"
#include "os.h"
#include "opaque.h"
#include "misc.h"

#define INDEX(in) (((in) - MIN←XEROX←KEY) * XEROX←GLYPHS←PER←KEY)

void
InitXeroxMap(pKeySyms, pModMap)
	KeySymsPtr pKeySyms;
	ModifierMapPtr pModMap;
	{
	int i;
	KeySym *map;

	pModMap->lock = KEY←LOCK;
	pModMap->shiftA = KEY←LSHIFT;
	pModMap->shiftB = KEY←RSHIFT;
	pModMap->controlA = KEY←PROPS;
	pModMap->controlB = NoSymbol;
	pModMap->mod1A = KEY←MOVE;
	pModMap->mod1B = NoSymbol;
	pModMap->mod2B = NoSymbol;
	pModMap->mod3B = NoSymbol;
	pModMap->mod4B = NoSymbol;
	pModMap->mod5B = NoSymbol;
	pModMap->mod2A = NoSymbol;
	pModMap->mod3A = NoSymbol;
	pModMap->mod4A = NoSymbol;
	pModMap->mod5A = NoSymbol;

	map = (KeySym *)Xalloc(sizeof(KeySym)* (MAP←LENGTH * XEROX←GLYPHS←PER←KEY));
	pKeySyms->minKeyCode = MIN←XEROX←KEY;
	pKeySyms->maxKeyCode = MAX←XEROX←KEY;
	pKeySyms->mapWidth = XEROX←GLYPHS←PER←KEY;
	pKeySyms->map = map;

	for( i=0; i<( MAP←LENGTH * XEROX←GLYPHS←PER←KEY ); i++ )
		map[i] = NoSymbol;
	map[INDEX(KEY←5)] = XK←5;
	map[INDEX(KEY←5)+1] = XK←percent;
	map[INDEX(KEY←4)] = XK←4;
	map[INDEX(KEY←4)+1] = XK←dollar;
	map[INDEX(KEY←6)] = XK←6;
	map[INDEX(KEY←6)+1] = XK←asciitilde;
	map[INDEX(KEY←E)] = XK←E;
	map[INDEX(KEY←7)] = XK←7;
	map[INDEX(KEY←7)] = XK←ampersand;
	map[INDEX(KEY←D)] = XK←D;
	map[INDEX(KEY←U)] = XK←U;
	map[INDEX(KEY←V)] = XK←V;
	map[INDEX(KEY←0)] = XK←0;
	map[INDEX(KEY←0)+1] = XK←parenright;
	map[INDEX(KEY←K)] = XK←K;
	map[INDEX(KEY←DASH)] = XK←minus;
	map[INDEX(KEY←DASH)+1] = XK←underscore;
	map[INDEX(KEY←P)] = XK←P;
	map[INDEX(KEY←SLASH)] = XK←slash;
	map[INDEX(KEY←SLASH)+1] = XK←question;
	map[INDEX(KEY←BSLASH)] = XK←backslash;
	map[INDEX(KEY←BSLASH)+1] = XK←bar;
	map[INDEX(KEY←BS)] = XK←BackSpace;
	map[INDEX(KEY←2)] = XK←2;
	map[INDEX(KEY←2)+1] = XK←at;
	map[INDEX(KEY←3)] = XK←3;
	map[INDEX(KEY←3)] = XK←numbersign;
	map[INDEX(KEY←W)] = XK←W;
	map[INDEX(KEY←Q)] = XK←Q;
	map[INDEX(KEY←S)] = XK←S;
	map[INDEX(KEY←A)] = XK←A;
	map[INDEX(KEY←9)] = XK←9;
	map[INDEX(KEY←9)+1] = XK←parenleft;
	map[INDEX(KEY←I)] = XK←I;
	map[INDEX(KEY←X)] = XK←X;
	map[INDEX(KEY←O)] = XK←O;
	map[INDEX(KEY←L)] = XK←L;
	map[INDEX(KEY←COMMA)] = XK←comma;
	map[INDEX(KEY←COMMA)+1] = XK←less;
	map[INDEX(KEY←RQUOTE)] = XK←quoteright;
	map[INDEX(KEY←RQUOTE)+1] = XK←quotedbl;
	map[INDEX(KEY←RBRAC)] = XK←bracketright;
	map[INDEX(KEY←RBRAC)+1] = XK←braceright;
	map[INDEX(KEY←1)] = XK←1;
	map[INDEX(KEY←1)+1] = XK←exclam;
	map[INDEX(KEY←ESC)] = XK←Escape;
	map[INDEX(KEY←TAB)] = XK←Tab;
	map[INDEX(KEY←F)] = XK←F;
	map[INDEX(KEY←PROPS)] = XK←Control←L;
	map[INDEX(KEY←C)] = XK←C;
	map[INDEX(KEY←J)] = XK←J;
	map[INDEX(KEY←B)] = XK←B;
	map[INDEX(KEY←Z)] = XK←Z;
	map[INDEX(KEY←LSHIFT)] = XK←Shift←L;
	map[INDEX(KEY←PERIOD)] = XK←period;
	map[INDEX(KEY←PERIOD)+1] = XK←greater;
	map[INDEX(KEY←SEMICOLON)] = XK←semicolon;
	map[INDEX(KEY←SEMICOLON)+1] = XK←colon;
	map[INDEX(KEY←LF)] = XK←Linefeed;
	map[INDEX(KEY←RQUOTE)] = XK←quoteleft;
	map[INDEX(KEY←RQUOTE)+1] = XK←quotedbl;
	map[INDEX(KEY←R)] = XK←R;
	map[INDEX(KEY←T)] = XK←T;
	map[INDEX(KEY←G)] = XK←G;
	map[INDEX(KEY←Y)] = XK←Y;
	map[INDEX(KEY←H)] = XK←H;
	map[INDEX(KEY←8)] = XK←8;
	map[INDEX(KEY←8)+1] = XK←asterisk;
	map[INDEX(KEY←N)] = XK←N;
	map[INDEX(KEY←M)] = XK←M;
	map[INDEX(KEY←LOCK)] = XK←Caps←Lock;
	map[INDEX(KEY←SPACE)] = XK←space;
	map[INDEX(KEY←LBRAC)] = XK←bracketleft;
	map[INDEX(KEY←LBRAC)+1] = XK←braceleft;
	map[INDEX(KEY←EQUALS)] = XK←equal;
	map[INDEX(KEY←EQUALS)+1] = XK←plus;
	map[INDEX(KEY←RSHIFT)] = XK←Shift←R;
	map[INDEX(KEY←F1)] = XK←F1;
	map[INDEX(KEY←F2)] = XK←F2;
	map[INDEX(KEY←F3)] = XK←F3;
	map[INDEX(KEY←F4)] = XK←F4;
	map[INDEX(KEY←F5)] = XK←F5;
	map[INDEX(KEY←F6)] = XK←F6;
	map[INDEX(KEY←F7)] = XK←F7;
	map[INDEX(KEY←F8)] = XK←F8;


	}

#undef INDEX

Bool
LegalModifier(key)
    BYTE key;
{
    if ((key==KEY←LOCK)||(key==KEY←RSHIFT)||(key==KEY←MOVE)||(key==KEY←LSHIFT))
	return TRUE;
    return FALSE;
}