Annotation of os2sdk/demos/apps/life/mouapi.c, revision 1.1.1.1

1.1       root        1: /***   mouapi.c - A library of real mode mouse calls compatable with OS/2
                      2:  *
                      3:  *     A subset of the OS/2 mouse api calls for real mode calls.
                      4:  *     The calls and features are designed specifically for LIFE.C.
                      5:  *     This is designed as a library to be linked with an application
                      6:  *     using BIND.EXE to allow full compatability between real and
                      7:  *     protect modes for programs using mouse calls.
                      8:  *     Most are merely dummy calls because DOS 3.x doesn't care about
                      9:  *     such things.
                     10:  *
                     11:  *     Contains subsets of:
                     12:  *             MouOpen, MouReadEventQue, MouSetDevStatus,
                     13:  *             MouGetNumQueEl, MouSetPtrPos
                     14:  */
                     15: 
                     16: #include <subcalls.h>
                     17: 
                     18: /* defines for int33h() calls. These are the offsets for the various registers
                     19:  *     in the register array. */
                     20: #define AX 0
                     21: #define BX 1
                     22: #define CX 2
                     23: #define DX 3
                     24: 
                     25: 
                     26: /***   MOUOPEN - initializes mouse
                     27:  *
                     28:  *     Initializes mouse and returns -1 in handle if mouse is present, else
                     29:  *     if no mouse is present, returns 0 in handle and error code.
                     30:  */
                     31: unsigned far pascal
                     32: MOUOPEN (name, handle)
                     33: char far *name;
                     34: unsigned far *handle;
                     35: {
                     36:        extern void int33h();                   /* mouse interupt caller */
                     37:        int registers[4];                       /* register array for above */
                     38: 
                     39:        registers[AX]=0;                        /* ax=0, mouse init */
                     40:        int33h (registers);                     /* do mouse call */
                     41:        if (registers[AX] == -1) {              /* was mouse present? */
                     42:                *handle=-1;                     /* if yes, give dummy handle */
                     43:                registers[AX]=15;               /* set mickey to pixel */
                     44:                registers[CX]=8;                /*      ratio to 1:1 */
                     45:                registers[DX]=8;
                     46:                int33h(registers);
                     47:                return (0);                     /* and return no error */
                     48:        }
                     49:        else {
                     50:                *handle=0;
                     51:                return (385);                   /* else, return no mouse err */
                     52:        }
                     53: }
                     54: 
                     55: 
                     56: /***   MOUREADEVENTQUE - get mouse event
                     57:  *
                     58:  *     Gets events like the OS/2 MouReadEventQue but this one ignores
                     59:  *     the event mask and EventType parameter, never waiting for events,
                     60:  *     just returning a 0 mask if nothing happened since last call.
                     61:  *     Returns position absolute pixel coordinates
                     62:  */
                     63: unsigned far pascal
                     64: MOUREADEVENTQUE (buffer, type, handle)
                     65:        struct EventInfo far *buffer;
                     66:        unsigned far *type;
                     67:        unsigned handle;
                     68: {
                     69:        extern void int33h();                   /* mouse interupt caller */
                     70:        int registers[4];                       /* register array for above */
                     71:        static lastrow;                         /* position at last call */
                     72:        static lastcol;
                     73: 
                     74:        buffer->Time=-1L;                       /* put in dummy time figure */
                     75:        registers[AX]=3;                        /* ax=3, get mouse status */
                     76:        int33h (registers);                     /* do mouse call */
                     77:        buffer->Mask=0;                         /* first, blank button info */
                     78:        if (registers[DX]-lastrow || registers[CX]-lastcol) {
                     79:                buffer->Row=registers[DX];      /* return row */
                     80:                buffer->Col=registers[CX];      /* return column */
                     81:                lastrow=registers[DX];          /* save for next time */
                     82:                lastcol=registers[CX];
                     83:                if (registers[BX] & 1)          /* if the left button is down*/
                     84:                        (buffer->Mask) |= 2;    /*   then set appropriate bit*/
                     85:                if (registers[BX] & 2)          /* if the right button down*/
                     86:                        (buffer->Mask) |= 8;    /*   then set appropriate bit*/
                     87:                else if (!(registers[BX] & 1))  /* if no buttons, but motion */
                     88:                        buffer->Mask |= 1;      /*   then set apporpriate bit*/
                     89:        }
                     90:        if (registers[BX] & 1)          /* if the left button is down*/
                     91:                (buffer->Mask) |= 4;    /*   then set appropriate bit*/
                     92:        if (registers[BX] & 2)          /* if the right button down*/
                     93:                (buffer->Mask) |= 16;   /*   then set appropriate bit*/
                     94:        return (0);                             /* return no error */
                     95: }
                     96: 
                     97: 
                     98: /*** MOUSETDEVSTATUS - Dummy function, included for maximum compatibility
                     99:  */
                    100: unsigned far pascal
                    101: MOUSETDEVSTATUS (status, handle)
                    102: unsigned far *status;
                    103: unsigned handle;
                    104: {
                    105: }
                    106: 
                    107: 
                    108: /*** MOUGETNUMQUEEL - Always returns 1 in .Events
                    109: */
                    110: unsigned far pascal
                    111: MOUGETNUMQUEEL (info, handle)
                    112: struct QueInfo far *info;
                    113: unsigned handle;
                    114: {
                    115:        info->Events = 1;
                    116: }
                    117: 
                    118: 
                    119: /*** MOUSETPTRPOS - Sets mouse pointer position
                    120: */
                    121: unsigned far pascal
                    122: MOUSETPTRPOS (loc, handle)
                    123: struct PtrLoc far *loc;
                    124: unsigned handle;
                    125: {
                    126:        int registers[4];                       /* for int33h() */
                    127: 
                    128:        registers[AX]=4;                        /* int 33 set position funct */
                    129:        registers[CX]=loc->ColPos;              /* new coordinates */
                    130:        registers[DX]=loc->RowPos;
                    131:        int33h (registers);                     /* do it */
                    132: }

unix.superglobalmegacorp.com

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