Annotation of researchv9/X11/src/X.V11R1/clients/xmodmap/xmodmap.c, revision 1.1

1.1     ! root        1: /************************************************************
        !             2: Copyright 1987 by Sun Microsystems, Inc. Mountain View, CA.
        !             3: 
        !             4:                     All Rights Reserved
        !             5: 
        !             6: Permission  to  use,  copy,  modify,  and  distribute   this
        !             7: software  and  its documentation for any purpose and without
        !             8: fee is hereby granted, provided that the above copyright no-
        !             9: tice  appear  in all copies and that both that copyright no-
        !            10: tice and this permission notice appear in  supporting  docu-
        !            11: mentation,  and  that the names of Sun or MIT not be used in
        !            12: advertising or publicity pertaining to distribution  of  the
        !            13: software  without specific prior written permission. Sun and
        !            14: M.I.T. make no representations about the suitability of this
        !            15: software for any purpose. It is provided "as is" without any
        !            16: express or implied warranty.
        !            17: 
        !            18: SUN DISCLAIMS ALL WARRANTIES WITH REGARD TO  THIS  SOFTWARE,
        !            19: INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT-
        !            20: NESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SUN BE  LI-
        !            21: ABLE  FOR  ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
        !            22: ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,  DATA  OR
        !            23: PROFITS,  WHETHER  IN  AN  ACTION OF CONTRACT, NEGLIGENCE OR
        !            24: OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION  WITH
        !            25: THE USE OR PERFORMANCE OF THIS SOFTWARE.
        !            26: 
        !            27: ********************************************************/
        !            28: 
        !            29: /* $Header: xmodmap.c,v 1.4 87/09/13 22:03:20 toddb Exp $ */
        !            30: #include <stdio.h>
        !            31: #include <ctype.h>
        !            32: #include "X11/Xlib.h"
        !            33: #include "X11/Xutil.h"
        !            34: #include "X11/Xatom.h"
        !            35: 
        !            36: extern char *XKeysymToString();
        !            37: 
        !            38: Display *dpy;
        !            39: 
        !            40: static update_map = 0;
        !            41: static output_map = 0;
        !            42: static FILE *fout = stdout;
        !            43: 
        !            44: StartConnectionToServer(argc, argv)
        !            45: int    argc;
        !            46: char   *argv[];
        !            47: {
        !            48:     char *display;
        !            49:     int i;
        !            50: 
        !            51:     display = NULL;
        !            52:     for(i = 1; i < argc; i++)
        !            53:     {
        !            54:         if(index(argv[i], ':') != NULL)
        !            55:            display = argv[i];
        !            56:     }
        !            57:     if (!(dpy = XOpenDisplay(display)))
        !            58:     {
        !            59:        perror("Cannot open display\n");
        !            60:        exit(0);
        !            61:    }
        !            62: }
        !            63: UpdateModifierMapping(map)
        !            64:     XModifierKeymap *map;
        !            65: {
        !            66:     int i = 5, res, tim = 2;
        !            67: 
        !            68:     while (i--) {
        !            69:        res = XSetModifierMapping(dpy, map);
        !            70:        fprintf(stderr, "res %d\n", res);
        !            71:        switch (res) {
        !            72:            case 0:     /* Success */
        !            73:                return (0);
        !            74:            case 1:     /* Busy */
        !            75:                fprintf (stderr, "You have %d seconds to lift your hands\n",
        !            76:                         tim);
        !            77:                sleep(tim);
        !            78:                tim <<= 1;
        !            79:                break;
        !            80:            case 2:
        !            81:                fprintf(stderr, "Re-map failed\n");
        !            82:                return (1);
        !            83:            default:
        !            84:            fprintf(stderr, "bad return %d\n", res);
        !            85:        }
        !            86:     }
        !            87:     fprintf(stderr,  "I warned you\n");
        !            88:     return (1);
        !            89: }
        !            90: 
        !            91: SetMod(argc, argv, map, mod)
        !            92:     int argc;
        !            93:     char **argv;
        !            94:     XModifierKeymap *map;
        !            95:     int mod;
        !            96: {
        !            97:     if (argc) {
        !            98:        int keycode = 0;
        !            99: 
        !           100:        argv++;
        !           101:        if (isdigit(**argv)) {
        !           102:            keycode = atoi(*argv);
        !           103:        } else {
        !           104:            KeySym ks = XStringToKeysym(*argv);
        !           105: 
        !           106:            if (ks != NoSymbol)
        !           107:                keycode = XKeysymToKeycode(dpy, ks);
        !           108:        }
        !           109:        fprintf(stderr, "%s: 0x%x\n", *argv, keycode);
        !           110:        if (keycode) {
        !           111:            int i;
        !           112:            
        !           113:            for (i = 0; i < map->max_keypermod; i++) {
        !           114:                int index = mod*map->max_keypermod + i;
        !           115:                if (map->modifiermap[index] == 0) {
        !           116:                    map->modifiermap[index] = (unsigned char) keycode;
        !           117:                    return (1);
        !           118:                }
        !           119:            }
        !           120:        }
        !           121:     }
        !           122:     return (0);
        !           123: }
        !           124: 
        !           125: ClearMod(map, mod)
        !           126:     XModifierKeymap *map;
        !           127:     int mod;
        !           128: {
        !           129:     int i;
        !           130: 
        !           131:     for (i = 0; i < map->max_keypermod; i++)
        !           132:        map->modifiermap[mod * map->max_keypermod + i] = '\0';
        !           133: }
        !           134: 
        !           135: DecodeArgs(argc, argv, map)
        !           136:     int argc;
        !           137:     char **argv;
        !           138:     XModifierKeymap *map;
        !           139: {
        !           140:     while (--argc > 0) {
        !           141:        argv++;
        !           142:        if (**argv == '-') {
        !           143:            switch (*++*argv) {
        !           144:                case '1':
        !           145:                case '2':
        !           146:                case '3':
        !           147:                case '4':
        !           148:                case '5':
        !           149:                    ClearMod(map, **argv - '0' + 2);
        !           150:                    update_map++;
        !           151:                    fout = NULL;
        !           152:                    break;
        !           153:                case 'S':
        !           154:                case 's':
        !           155:                    ClearMod(map, 0);
        !           156:                    update_map++;
        !           157:                    fout = NULL;
        !           158:                    break;
        !           159:                case 'C':
        !           160:                case 'c':
        !           161:                    ClearMod(map, 2);
        !           162:                    update_map++;
        !           163:                    fout = NULL;
        !           164:                    break;
        !           165:                case 'L':
        !           166:                case 'l':
        !           167:                    ClearMod(map, 1);
        !           168:                    update_map++;
        !           169:                    fout = NULL;
        !           170:                    break;
        !           171:            }
        !           172:        }
        !           173:        else if (**argv == '+') {
        !           174:            switch (*++*argv) {
        !           175:                case '1':
        !           176:                case '2':
        !           177:                case '3':
        !           178:                case '4':
        !           179:                case '5':
        !           180:                    SetMod(argc, argv, map, **argv - '0' + 2);
        !           181:                    argc--; argv++;
        !           182:                    update_map++;
        !           183:                    fout = NULL;
        !           184:                    break;
        !           185:                case 'S':
        !           186:                case 's':
        !           187:                    SetMod(argc, argv, map, 0);
        !           188:                    argc--; argv++;
        !           189:                    update_map++;
        !           190:                    fout = NULL;
        !           191:                    break;
        !           192:                case 'C':
        !           193:                case 'c':
        !           194:                    SetMod(argc, argv, map, 2);
        !           195:                    argc--; argv++;
        !           196:                    update_map++;
        !           197:                    fout = NULL;
        !           198:                    break;
        !           199:                case 'L':
        !           200:                case 'l':
        !           201:                    SetMod(argc, argv, map, 1);
        !           202:                    argc--; argv++;
        !           203:                    update_map++;
        !           204:                    fout = NULL;
        !           205:                    break;
        !           206:            }
        !           207:        }
        !           208:     }
        !           209: }
        !           210: 
        !           211: static char *modType[] = {
        !           212:     "Shift",
        !           213:     "Lock",
        !           214:     "Ctrl",
        !           215:     "One",
        !           216:     "Two",
        !           217:     "Three",
        !           218:     "Four",
        !           219:     "Five",
        !           220: };
        !           221: 
        !           222: PrintModifierMapping(map, fout)
        !           223:     XModifierKeymap *map;
        !           224:     FILE *fout;
        !           225: {
        !           226:     int i, k = 0;
        !           227: 
        !           228:     for (i = 0; i < 8; i++) {
        !           229:        int j;
        !           230: 
        !           231:        fprintf(fout, "%s:", modType[i]);
        !           232:        for (j = 0; j < map->max_keypermod; j++) {
        !           233:            if (map->modifiermap[k]) {
        !           234:                KeySym ks = XKeycodeToKeysym(dpy, map->modifiermap[k], 0);
        !           235:                char *nm = XKeysymToString(ks);
        !           236: 
        !           237:                if (nm) {
        !           238:                    fprintf(fout, "\t%s", nm);
        !           239:                } else {
        !           240:                    fprintf(fout, "\tBadKey");
        !           241:                }
        !           242:            }
        !           243:            k++;
        !           244:        }
        !           245:        fprintf(fout, "\n");
        !           246:     }
        !           247: }
        !           248: 
        !           249: main(argc, argv)
        !           250:     int argc;
        !           251:     char **argv;
        !           252: {
        !           253:     XModifierKeymap *map;
        !           254: 
        !           255:     StartConnectionToServer(argc, argv);
        !           256: 
        !           257:     map = XGetModifierMapping(dpy);
        !           258: 
        !           259:     DecodeArgs(argc, argv, map);
        !           260: 
        !           261:     if (fout)
        !           262:        PrintModifierMapping(map, fout);
        !           263: 
        !           264:     if (update_map)
        !           265:        UpdateModifierMapping(map);
        !           266: }
        !           267: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.