|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.