5748269 [rkeene@sledge /home/rkeene/devel/archive/quickbasic]$ cat -n mice.bas
   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: 
5748270 [rkeene@sledge /home/rkeene/devel/archive/quickbasic]$

Click here to go back to the directory listing.
Click here to download this file.
last modified: 2000-05-09 21:05:03