/****************************** Module Header ******************************\ * Module Name: kbdx.h * * Copyright (c) 1985-95, Microsoft Corporation * * History: * 26-Mar-1995 a-KChang \***************************************************************************/ #include #include #include #include #include #include #include #define KBDSHIFT 1 #define KBDCTRL 2 #define KBDALT 4 #define CAPLOK 0x01 #define SGCAPS 0x02 #define CAPLOKALTGR 0x04 #define LINEBUFSIZE 256 #define WORDBUFSIZE 32 #define MAXWCLENGTH 8 #define MAXKBDNAME 6 #define MAXSTATES 65 #define FILENAMESIZE 13 #define FAILURE 0 #define SUCCESS 1 /* * max. number of characters per ligature. * Currently only the Arabic layouts use * ligatures, and they have a maximum of * two characters per ligatures. This should * provide plenty of room for growth. */ #define MAXLIGATURES 5 /* * Statically initialized to store default ScanCode-VK relation * Copied into Layout[] by doLAYOUT() */ typedef struct { USHORT Scan; BYTE VKey; char *VKeyName; BOOL bUsed; } SC_VK; /* virtual key name, used only by those other than 0-9 and A-Z */ typedef struct { int VKey; char *pName; } VKEYNAME; /* store LAYOUT */ typedef struct _layout{ USHORT Scan; BYTE VKey; BYTE VKeyDefault; /* VK for this Scancode as in kbd.h */ BYTE Cap; /* 0; 1 = CAPLOK; 2 = SGCAP */ int nState; /* number of valid states for WCh[] */ int WCh[MAXSTATES]; int DKy[MAXSTATES]; /* is it a dead key ? */ int LKy[MAXSTATES]; /* is it a ligature ? */ struct _layout *pSGCAP; /* store extra struct for SGCAP */ char * VKeyName; /* Optional name for VK */ BOOL defined; /* prevent redefining */ int nLine; /* from input file line number */ } KEYLAYOUT, *PKEYLAYOUT; /* generic link list header */ typedef struct { int Count; void *pBeg; void *pEnd; } LISTHEAD; /* store each DEADTRANS */ typedef struct _DeadTrans { DWORD Base; DWORD WChar; USHORT uFlags; struct _DeadTrans *pNext; } DEADTRANS, *PDEADTRANS; /* store Key Name */ /* store each DEADKEY */ typedef struct _Dead{ DWORD Dead; PDEADTRANS pDeadTrans; struct _Dead *pNext; } DEADKEY, *PDEADKEY; /* store LIGATURE */ typedef struct _ligature{ struct _ligature *pNext; BYTE VKey; BYTE Mod; /* Shift State */ int nCharacters; /* number of characters for this ligature */ int WCh[MAXLIGATURES]; } LIGATURE, *PLIGATURE; typedef struct _Name { DWORD Code; char *pName; struct _Name *pNext; } KEYNAME, *PKEYNAME; extern int getopt(int argc, char **argv, char *opts); extern int optind;