Annotation of 43BSD/contrib/X/libsun/events.c, revision 1.1

1.1     ! root        1: #ifndef lint
        !             2: static char *rcsid_events_c = "$Header: events.c,v 10.2 86/02/01 16:20:48 tony Rel $";
        !             3: #endif lint
        !             4: #ifdef sun
        !             5: /*
        !             6:  * The Sun X drivers are a product of Sun Microsystems, Inc. and are provided
        !             7:  * for unrestricted use provided that this legend is included on all tape
        !             8:  * media and as a part of the software program in whole or part.  Users
        !             9:  * may copy or modify these drivers without charge, but are not authorized
        !            10:  * to license or distribute them to anyone else except as part of a product or
        !            11:  * program developed by the user.
        !            12:  * 
        !            13:  * THE SUN X DRIVERS ARE PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND
        !            14:  * INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A
        !            15:  * PARTICULAR PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE
        !            16:  * PRACTICE.
        !            17:  *
        !            18:  * The Sun X Drivers are provided with no support and without any obligation
        !            19:  * on the part of Sun Microsystems, Inc. to assist in their use, correction,
        !            20:  * modification or enhancement.
        !            21:  * 
        !            22:  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
        !            23:  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THE SUN X
        !            24:  * DRIVERS OR ANY PART THEREOF.
        !            25:  * 
        !            26:  * In no event will Sun Microsystems, Inc. be liable for any lost revenue
        !            27:  * or profits or other special, indirect and consequential damages, even if
        !            28:  * Sun has been advised of the possibility of such damages.
        !            29:  * 
        !            30:  * Sun Microsystems, Inc.
        !            31:  * 2550 Garcia Avenue
        !            32:  * Mountain View, California  94043
        !            33:  */
        !            34: 
        !            35: #ifndef        lint
        !            36: static char sccsid[] = "@(#)events.c 2.1 86/01/28 Copyright 1986 Sun Micro";
        !            37: #endif
        !            38: 
        !            39: /*-
        !            40:  * Copyright (c) 1986 by Sun Microsystems,  Inc.
        !            41:  */
        !            42: 
        !            43: /*
        !            44:  *     ToDo:
        !            45:  *             Up events
        !            46:  *             Shiftlock support
        !            47:  */
        !            48: 
        !            49: #include       <stdio.h>
        !            50: #include       <sys/types.h>
        !            51: #include       <sys/time.h>
        !            52: #include       <sys/errno.h>
        !            53: #include       "../X/X.h"
        !            54: #include       "../X/vsinput.h"
        !            55: #include       "../X/Xdev.h"
        !            56: #include       <sundev/kbd.h>
        !            57: #include       <sunwindow/win_input.h>
        !            58: 
        !            59: #ifndef        event_is_ascii
        !            60: #define        event_is_ascii(e) (e->ie_code >= ASCII_FIRST && e->ie_code <= ASCII_LAST)
        !            61: #endif
        !            62: #ifndef        event_is_meta
        !            63: #define        event_is_meta(e) (e->ie_code >= META_FIRST && e->ie_code <= META_LAST)
        !            64: #endif
        !            65: /* Should be qevent.h */
        !            66: #define        VSE_LEFT_BUTTON 0
        !            67: #define        VSE_MIDDLE_BUTTON       1
        !            68: #define        VSE_RIGHT_BUTTON        2
        !            69: 
        !            70: extern int errno;
        !            71: unsigned state_mask = 0;
        !            72: extern int vsdev;
        !            73: extern DEVICE *CurrentDevice;
        !            74: 
        !            75: /*ARGSUSED*/
        !            76: ProcessInput(ev)
        !            77:        register vsEvent *ev;
        !            78: {
        !            79:        /*NOTREACHED*/
        !            80: }
        !            81: 
        !            82: #include "lk201.h"
        !            83: 
        !            84: static int
        !            85: SunToXKeyCode(s)
        !            86: int s;
        !            87: {
        !            88:     register int ret = LK201[s&0177];
        !            89:     char *c = "^.";
        !            90:     char *f = ".";
        !            91: 
        !            92:     c[1] = (s&0177)|0100;
        !            93:     f[0] = (s&0177);
        !            94: 
        !            95:     return(ret);
        !            96: }
        !            97: 
        !            98: /*
        !            99:  * Convert from a Sun event to an X event
        !           100:  */
        !           101: static int
        !           102: ConvertEvent(se, xe)
        !           103: struct inputevent *se;
        !           104: vsEvent *xe;
        !           105: {
        !           106:     /* Map the coordinates */
        !           107:     xe->vse_x = se->ie_locx;
        !           108:     xe->vse_y = se->ie_locy;
        !           109:     /* Map the time stamps */
        !           110:     xe->vse_time = (se->ie_time.tv_usec/10000 + se->ie_time.tv_sec);
        !           111:     /* Set direction */
        !           112:     xe->vse_direction = (win_inputposevent(se) ? VSE_KBTDOWN : VSE_KBTUP);
        !           113:     /* Sort out the event codes */
        !           114:     if (event_is_ascii(se)) {
        !           115:        /* ASCII keystroke */
        !           116:        int key = SunToXKeyCode(se->ie_code);
        !           117:        xe->vse_key = (key & 0377);
        !           118:        xe->vse_device = VSE_DKB;
        !           119:        xe->vse_type = VSE_BUTTON;
        !           120:        state_mask = (state_mask & ~(ControlMask|MetaMask|ShiftMask|ShiftLockMask))
        !           121:            | (key & (ControlMask|MetaMask|ShiftMask|ShiftLockMask));
        !           122:     } else if (event_is_meta(se)) {
        !           123:        /* META keystroke - map to ASCII for now */
        !           124:        int key = SunToXKeyCode(se->ie_code - META_FIRST + ASCII_FIRST) | MetaMask;
        !           125:        xe->vse_key = (key & 0377);
        !           126:        xe->vse_device = VSE_DKB;
        !           127:        xe->vse_type = VSE_BUTTON;
        !           128:        state_mask = (state_mask & ~(ControlMask|MetaMask|ShiftMask|ShiftLockMask))
        !           129:            | (key & (ControlMask|MetaMask|ShiftMask|ShiftLockMask));
        !           130:     } else switch (se->ie_code) {
        !           131:        case LOC_MOVE:
        !           132:            xe->vse_device = VSE_MOUSE;         /* XXX - should query shift state here but ... */
        !           133:            xe->vse_type = VSE_MMOTION;
        !           134:            break;
        !           135:        case MS_LEFT:
        !           136:            xe->vse_key = VSE_LEFT_BUTTON;      /* XXX - should query shift state here */
        !           137:            xe->vse_device = VSE_MOUSE;
        !           138:            xe->vse_type = VSE_BUTTON;
        !           139:            if (xe->vse_direction == VSE_KBTUP)
        !           140:                state_mask &= ~LeftMask;
        !           141:            else
        !           142:                state_mask |= LeftMask;
        !           143:            goto ShiftKeys;
        !           144:        case MS_MIDDLE:
        !           145:            xe->vse_device = VSE_MOUSE;
        !           146:            xe->vse_type = VSE_BUTTON;
        !           147:            xe->vse_key = VSE_MIDDLE_BUTTON;
        !           148:            if (xe->vse_direction == VSE_KBTUP)
        !           149:                state_mask &= ~MiddleMask;
        !           150:            else
        !           151:                state_mask |= MiddleMask;
        !           152:            goto ShiftKeys;
        !           153:        case MS_RIGHT:
        !           154:            xe->vse_key = VSE_RIGHT_BUTTON;
        !           155:            xe->vse_device = VSE_MOUSE;
        !           156:            xe->vse_type = VSE_BUTTON;
        !           157:            if (xe->vse_direction == VSE_KBTUP)
        !           158:                state_mask &= ~RightMask;
        !           159:            else
        !           160:                state_mask |= RightMask;
        !           161: ShiftKeys:
        !           162:            if (se->ie_shiftmask & CAPSMASK)
        !           163:                state_mask |= ShiftLockMask;
        !           164:            else
        !           165:                state_mask &= ~ShiftMask;
        !           166:            if (se->ie_shiftmask & SHIFTMASK)
        !           167:                state_mask |= ShiftMask;
        !           168:            else
        !           169:                state_mask &= ~ShiftMask;
        !           170:            if (se->ie_shiftmask & CTRLMASK)
        !           171:                state_mask |= ControlMask;
        !           172:            else
        !           173:                state_mask &= ~ControlMask;
        !           174: #ifdef META_SHIFT_MASK
        !           175:            if (se->ie_shiftmask & META_SHIFT_MASK)
        !           176:                state_mask |= MetaMask;
        !           177:            else
        !           178:                state_mask &= ~MetaMask;
        !           179: #endif
        !           180:            break;
        !           181:        default:
        !           182:            /* Ignore it */
        !           183:            break;
        !           184:     }
        !           185:     return (state_mask);
        !           186: }
        !           187: 
        !           188: #define        INPBUFSIZE      128
        !           189: 
        !           190: /*
        !           191:  * Read pending input events
        !           192:  */
        !           193: InputReader()
        !           194: {
        !           195:     struct inputevent sunevents[INPBUFSIZE];
        !           196:     int         n, m;
        !           197:     static int last_mask = 0;
        !           198: 
        !           199:     if ((n = read(vsdev, sunevents, INPBUFSIZE * sizeof sunevents[0])) < 0
        !           200:        && errno != EWOULDBLOCK) {
        !           201:        /*
        !           202:         * Error reading events 
        !           203:         */
        !           204:        /* XXX_DO_SOMETHING(); */
        !           205:        return;
        !           206:     }
        !           207:     for (n /= sizeof sunevents[0], m = 0; m < n; m++) {
        !           208:        vsEvent Xevent, Sevent;
        !           209:        int mask;
        !           210: 
        !           211:        mask = ConvertEvent(&(sunevents[m]), &Xevent);
        !           212:        SetCursorPosition((vsCursor *) &Xevent);        /* XXX - tacky */
        !           213: 
        !           214:        if (mask != last_mask) {
        !           215:            last_mask ^= mask;
        !           216:            Sevent.vse_device = VSE_DKB;
        !           217:            Sevent.vse_x = Xevent.vse_x;
        !           218:            Sevent.vse_y = Xevent.vse_y;
        !           219:            Sevent.vse_time = Xevent.vse_time;
        !           220:            Sevent.vse_device = VSE_DKB;
        !           221:            if (last_mask & ShiftMask) {
        !           222:                if (mask & ShiftMask)
        !           223:                    Sevent.vse_direction = VSE_KBTDOWN;
        !           224:                else
        !           225:                    Sevent.vse_direction = VSE_KBTUP;
        !           226:                Sevent.vse_key = 0256;
        !           227:                Deal_with_input(&Sevent);
        !           228:            }
        !           229:            if (last_mask & ControlMask) {
        !           230:                if (mask & ControlMask)
        !           231:                    Sevent.vse_direction = VSE_KBTDOWN;
        !           232:                else
        !           233:                    Sevent.vse_direction = VSE_KBTUP;
        !           234:                Sevent.vse_key = 0257;
        !           235:                Deal_with_input(&Sevent);
        !           236:            }
        !           237:            if (last_mask & ShiftLockMask) {
        !           238:                if (mask & ShiftLockMask)
        !           239:                    Sevent.vse_direction = VSE_KBTDOWN;
        !           240:                else
        !           241:                    Sevent.vse_direction = VSE_KBTUP;
        !           242:                Sevent.vse_key = 0260;
        !           243:                Deal_with_input(&Sevent);
        !           244:            }
        !           245:            if (last_mask & MetaMask) {
        !           246:                if (mask & MetaMask)
        !           247:                    Sevent.vse_direction = VSE_KBTDOWN;
        !           248:                else
        !           249:                    Sevent.vse_direction = VSE_KBTUP;
        !           250:                Sevent.vse_key = 0261;
        !           251:                Deal_with_input(&Sevent);
        !           252:            }
        !           253:            last_mask = mask;
        !           254:        }
        !           255:        if (Xevent.vse_type == VSE_MMOTION) {
        !           256:            register vsBox *b = CurrentDevice->mbox;
        !           257:            register vsCursor *m = CurrentDevice->mouse;
        !           258:            /*
        !           259:             * Has it left the box? 
        !           260:             */
        !           261:            if (m->y >= b->bottom || m->y < b->top ||
        !           262:                m->x >= b->right || m->x < b->left) {
        !           263:                    b->bottom = 0;
        !           264:                    Deal_with_movement();
        !           265:            }
        !           266:        } else
        !           267:            Deal_with_input(&Xevent);
        !           268:     }
        !           269: }
        !           270: #endif sun

unix.superglobalmegacorp.com

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