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 >
C/C++ Source or Header  |  1994-01-26  |  1KB  |  55 lines

  1. /* $Id: loadkeym.c 1.1 1994/01/26 19:02:55 ulrich Exp $ */
  2. /* 
  3.  * Read an Xmodmap.* file.
  4.  * Only "keycode ..." entries are supported
  5.  */
  6.  
  7. #include "Xlibemu.h"
  8. #include <stdio.h>
  9.  
  10.  
  11. KeySym *
  12. _WLoadKeyboardMappingFromXmodmap (char *name)
  13. {
  14.   char buffer[200];
  15.   int keycode;
  16.   char k[4][50];
  17.   int i, n;
  18.   int keysyms_per_keycode;
  19.   int keycode_count;
  20.   int mapping_size;
  21.   KeySym *mapping, keysym;
  22.   FILE *fp;
  23.  
  24.   fp = fopen (name, "rt");
  25.   if (fp == NULL)
  26.     return NULL;
  27.  
  28.   keycode_count = 0;
  29.   keysyms_per_keycode = 4;
  30.   mapping_size = NUM_KEYCODES * keysyms_per_keycode;
  31.   mapping = (KeySym *) Xmalloc (sizeof(KeySym) * mapping_size);
  32.  
  33.   for (i = 0; i < mapping_size; i++)
  34.     mapping[i] = NoSymbol;
  35.  
  36.   while (fgets (buffer, sizeof(buffer)-1, fp)) {
  37.     if ((n = sscanf (buffer, "keycode %d%*[ \t]=%s%s%s%s", &keycode, 
  38.              k[0], k[1], k[2], k[3]) - 1) <= 0)
  39.       continue;
  40.     if (keycode < MIN_KEYCODE || keycode > MAX_KEYCODE)
  41.       continue;
  42.  
  43.     for (i = 0; i < n; i++)
  44.       {
  45.     keysym = XStringToKeysym (k[i]);
  46.     if (keysym != NoSymbol)
  47.       {
  48.         mapping[((keycode - MIN_KEYCODE)
  49.              * keysyms_per_keycode) + i] = keysym;
  50.       }
  51.       }
  52.   }
  53.   return mapping;
  54. }
  55.