home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC Shareware 1999 March
/
PCShareware-3-99.iso
/
IMPLE
/
DJGPP.RAR
/
DJGPP2
/
XLIB-SR0.ZIP
/
SRC
/
XLIBEMU
/
LOADKEYM.C
< prev
next >
Wrap
C/C++ Source or Header
|
1994-01-26
|
1KB
|
55 lines
/* $Id: loadkeym.c 1.1 1994/01/26 19:02:55 ulrich Exp $ */
/*
* Read an Xmodmap.* file.
* Only "keycode ..." entries are supported
*/
#include "Xlibemu.h"
#include <stdio.h>
KeySym *
_WLoadKeyboardMappingFromXmodmap (char *name)
{
char buffer[200];
int keycode;
char k[4][50];
int i, n;
int keysyms_per_keycode;
int keycode_count;
int mapping_size;
KeySym *mapping, keysym;
FILE *fp;
fp = fopen (name, "rt");
if (fp == NULL)
return NULL;
keycode_count = 0;
keysyms_per_keycode = 4;
mapping_size = NUM_KEYCODES * keysyms_per_keycode;
mapping = (KeySym *) Xmalloc (sizeof(KeySym) * mapping_size);
for (i = 0; i < mapping_size; i++)
mapping[i] = NoSymbol;
while (fgets (buffer, sizeof(buffer)-1, fp)) {
if ((n = sscanf (buffer, "keycode %d%*[ \t]=%s%s%s%s", &keycode,
k[0], k[1], k[2], k[3]) - 1) <= 0)
continue;
if (keycode < MIN_KEYCODE || keycode > MAX_KEYCODE)
continue;
for (i = 0; i < n; i++)
{
keysym = XStringToKeysym (k[i]);
if (keysym != NoSymbol)
{
mapping[((keycode - MIN_KEYCODE)
* keysyms_per_keycode) + i] = keysym;
}
}
}
return mapping;
}