1: DECLARE SUB MiceShow () 2: DECLARE SUB MicePressed (ButtonPress%, NumTimes%, xMouse%, yMouse%) 3: DECLARE SUB interrupt (intnum%, regs AS ANY) 4: DECLARE FUNCTION miceReset% () 5: TYPE regtype 6: ax AS INTEGER 7: bx AS INTEGER 8: cx AS INTEGER 9: dx AS INTEGER 10: bp AS INTEGER 11: si AS INTEGER 12: di AS INTEGER 13: flags AS INTEGER 14: ds AS INTEGER 15: es AS INTEGER 16: END TYPE 17: DIM SHARED regs AS regtype 18: REDIM SHARED intrpt(1 TO 50) AS INTEGER 19: DEF SEG = VARSEG(intrpt(1)) 20: address = VARPTR(intrpt(1)) 21: FOR I% = 0 TO 99: READ a%: POKE address + I%, a%: NEXT I% 22: '**************************************************************************** 23: SCREEN 12 24: MiceShow 25: LINE (0, 0)-(700, 700), 1, BF 26: DO WHILE INKEY$ = "" 27: MicePressed ButtonPress%, NumTimes%, xMouse%, yMouse% 28: LINE (xMouse% - 5, yMouse% - 5)-(xMouse% + 5, yMouse% + 5), 0, B 29: LINE (xMouse% - 4, yMouse% - 4)-(xMouse% + 4, yMouse% + 4), 15, BF 30: LOOP 31: 32: '**************************************************************************** 33: DATA 85 34: DATA 139,236 35: DATA 86 36: DATA 87 37: DATA 30 38: DATA 139,118,6 39: DATA 139,4 40: DATA 139,92,2 41: DATA 139,76,4 42: DATA 139,84,6 43: DATA 139,108,8 44: DATA 139,124,12 45: DATA 142,68,18 46: DATA 255,116,10 47: DATA 131,124,18,255 48: DATA 117,2 49: DATA 30 50: DATA 7 51: 52: DATA 131,124,16,255 53: DATA 116,3 54: DATA 142,92,16 55: 56: DATA 94 57: DATA 205,33 58: DATA 85 59: DATA 139,236 60: DATA 30 61: DATA 86 62: DATA 142,94,2 63: DATA 139,118,14 64: DATA 137,4 65: DATA 137,92,2 66: DATA 137,76,4 67: DATA 137,84,6 68: DATA 143,68,10 69: DATA 143,68,16 70: DATA 143,68,8 71: DATA 137,124,12 72: DATA 140,68,18 73: DATA 156 74: DATA 143,68,14 75: DATA 95 76: DATA 95 77: DATA 94 78: DATA 93 79: DATA 202,2,2 80: 81: SUB interrupt (intnum%, regs AS regtype) 82: 83: DEF SEG = VARSEG(intrpt(1)) 84: address = VARPTR(intrpt(1)) 85: POKE address + 51, intnum% 86: 87: CALL absolute(regs, address) 88: 89: END SUB 90: 91: SUB miceHide 92: 93: regs.ax = 2 94: regs.bx = 0 95: regs.cx = 0 96: regs.dx = 0 97: 98: CALL interrupt(&H33, regs) 99: 100: 101: END SUB 102: 103: SUB MicePressed (ButtonPress%, NumTimes%, xMouse%, yMouse%) 104: 105: ' if buttonPress% passed as 0 then info returned applies to left button 106: ' if buttonPress% passed as 1 then info returned applies to right button 107: 108: 109: regs.ax = 5 110: regs.bx = ButtonPress% 111: regs.cx = 0 112: regs.dx = 0 113: 114: interrupt &H33, regs 115: 116: ButtonPress% = regs.ax 'if 1 returned left pressed since last call 117: 'if 2 returned right pressed since last call 118: 'if 3 returned both pressed since last call 119: 120: NumTimes% = regs.bx 'depends on buttonPress% passed as 0 (left) or 121: '1 (right) 122: 123: xMouse% = regs.cx ' see ^ 124: yMouse% = regs.dx ' see ^ 125: 126: END SUB 127: 128: FUNCTION miceReset% 129: 130: regs.ax = 0 131: regs.bx = 0 132: regs.cx = 0 133: regs.dx = 0 134: 135: CALL interrupt(&H33, regs) 136: 137: miceReset% = regs.ax 138: 139: END FUNCTION 140: 141: SUB MiceShow 142: 143: regs.ax = 1 144: regs.bx = 0 145: regs.cx = 0 146: regs.dx = 0 147: 148: CALL interrupt(&H33, regs) 149: 150: END SUB 151: |