home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / APPS / dm14.lzh / mspak.h < prev    next >
Text File  |  2009-11-06  |  6KB  |  245 lines

  1. # asm
  2.  nam MsPak
  3.  ttl subroutine library
  4. **********************************
  5. *                                *
  6. *            MsPak.h             *
  7. *                                *
  8. **********************************
  9.  
  10. * J.F.Adamthwaite         88/08/31
  11.  
  12. * This is a collection of mouse driver subroutines
  13. * which allows a C program to access the mouse.
  14. * It is used as an include file at compilation time
  15. *
  16. * Use:     #include mspak.h
  17.  
  18.  vsect
  19. Ms_Path ds.w 1 mouse path no. store
  20.  ends
  21.  
  22.  org 0
  23. Ms.Abs: do.b 1 return absolute mouse pos I$GetStt SVC
  24. Ms.Rel: do.b 1 return relative mouse pos
  25. Ms.Rdy: do.b 1 return data ready flag
  26.  
  27. Ms.Put: do.b 1 set new mouse position I$SetStt SVC
  28. Ms.Xmm: do.b 1 set hi/low X coord limits
  29. Ms.Ymm: do.b 1 set hi/low Y coord limits
  30. Ms.Sns: do.b 1 set motion sensitivity
  31. Ms.Thr: do.b 1 set double speed threshold
  32. Ms.Pol: do.b 1 set directional polarity
  33.  
  34. * Open path to mouse device
  35. *
  36. * Call syntax: mp = MsOpen("/mouse");
  37. *
  38. * Input:   (d0.l) = ptr to name string
  39. * Returns: (d0.l) = error status <> 0 if error
  40.  
  41. MsOpen movem.l d1/a0,-(a7)
  42.  clr.w Ms_Path(a6)
  43.  move.l d0,a0 string ptr
  44.  moveq #Read_+Write_,d0 access mode = update
  45.  os9 I$Open
  46.  bcs.s OpnMs2 OK?
  47.  move.w d0,Ms_Path(a6)
  48.  clr.w d1 no errors
  49. OpnMs2 clr.l d0 return error status as result
  50.  move.w d1,d0
  51.  movem.l (a7)+,d1/a0
  52.  rts
  53.  
  54.  
  55. * Read absolute mouse position and button status.
  56. *
  57. * Call syntax: MsRdAbs(&lb, &rb, &mx, &my);
  58. *
  59. * Input:   (d0.l) = ptr to left button store
  60. *          (d1.l) = ptr to right button store
  61. *          @4(a7) = ptr to X coord store
  62. *          @8(a7) = ptr to Y coord store
  63. * Returns: above stores updated
  64. *          (d0.l) = error status (0 = OK)
  65.  
  66. MsRdAbs: movem.l d0-d5/a0,-(a7)
  67.  moveq.l #Ms.Abs,d2 absolute mouse position
  68.  
  69. MRA2 move.w Ms_Path(a6),d0 path
  70.  moveq.l #SS_Joy,d1 joystick
  71.  os9 I$GetStt
  72.  bcs.s MRA3 OK?
  73.  clr.w d1 no errors
  74. MRA3 clr.l d0 return 32 bit
  75.  move.w d1,d0 error code
  76.  
  77.  movea.l (a7),a0 lb ptr
  78.  move.l d2,(a0)
  79.  movea.l 4(a7),a0 rb ptr
  80.  move.l d3,(a0)
  81.  movea.l 32(a7),a0 x ptr
  82.  move.l d4,(a0)
  83.  movea.l 36(a7),a0 y ptr
  84.  move.l d5,(a0)
  85.  
  86.  addq.l #4,a7 drop old d0 from stack
  87.  movem.l (a7)+,d1-d5/a0
  88.  rts
  89.  
  90.  
  91. * Read relative change in mouse status since the
  92. * last call to either this or MsRdAbs function.
  93. *
  94. * Call syntax:  MsRdRel(&lb, &rb, &mx, &my);
  95. *
  96. * Input:   (d0.l) = ptr to left button store
  97. *          (d1.l) = ptr to right button store
  98. *          @4(a7) = ptr to X coord store
  99. *          @8(a7) = ptr to Y coord store
  100. * Returns: above stores updated
  101. *          (d0.l) = error status (0 = OK)
  102.  
  103. MsRdRel: movem.l d0-d5/a0,-(a7)
  104.  moveq.l #Ms.Rel,d2 read relative function
  105.  bra.s MRA2 use existing code
  106.  
  107.  
  108. * Test if any new mouse data is ready.
  109. *
  110. * Call syntax:   z = MsReady();
  111. *
  112. * Input:  none
  113. * Output: (d0.l) = 0 if no data, 1 if ready
  114.  
  115. MsReady: movem.l d1-d2,-(a7)
  116.  move.w Ms_Path(a6),d0 path
  117.  moveq #SS_Joy,d1 joystick
  118.  moveq.l #Ms.Rdy,d2 ready status function
  119.  os9 I$GetStt
  120.  bcc.s MsR2 OK?
  121.  moveq #0,d2 no data if error
  122. MsR2 move.l d2,d0
  123.  movem.l (a7)+,d1-d2
  124.  rts
  125.  
  126.  
  127. * Set new mouse position.
  128. *
  129. * Call syntax:   MsSetPos(newX, newY);
  130. *
  131. * Input:  (d0.l) = new mouse X coord
  132. *         (d1.l) = new mouse Y coord
  133. * Output: (d0.l) = error status (0 = OK)
  134.  
  135. MsSetPos: movem.l d1-d5,-(a7)
  136.  moveq.l #Ms.Put,d2 set position sub-function
  137.  
  138. MSP2 move.l d0,d4 params into d4,d5
  139.  move.l d1,d5
  140.  move.w Ms_Path(a6),d0 path
  141.  moveq.l #SS_Joy,d1 joystick SCF function
  142.  os9 I$SetStt
  143.  bcc.s MSP3 OK?
  144.  clr.w d1 no errors
  145. MSP3 clr.l d0 return 32 bit error code
  146.  move.w d1,d0
  147.  movem.l (a7)+,d1-d5
  148.  rts
  149.  
  150. * Set horizontal min & max coords
  151. *
  152. * Call syntax:   MsMnMxXPos(minX, minY);
  153. *
  154. * Input:  (d0.l) = minimum (most negative) X coord
  155. *         (d1.l) = maximum (most positive) X coord
  156. * Output: (d0.l) = error status (0 = OK)
  157.  
  158. MsMnMxX: movem.l d1-d5,-(a7)
  159.  moveq.l #Ms.Xmm,d2 Xminmax sub-function
  160.  bra.s MSP2 conserve code
  161.  
  162.  
  163. * Set vertical min & max coords
  164. *
  165. * Call syntax:   MsMnMxY(minY, minX);
  166. *
  167. * Input:  (d0.l) = minimum (most negative) Y coord
  168. *         (d1.l) = maximum (most positive) Y coord
  169. * Output: (d0.w) = error status (0 = OK)
  170.  
  171. MsMnMxY: movem.l d1-d5,-(a7)
  172.  moveq.l #Ms.Ymm,d2 Yminmax sub-function
  173.  bra.s MSP2
  174.  
  175.  
  176. * Set mouse motion sensitivity.
  177. *
  178. * Call syntax:   MsSetSns(mickX, mickY);
  179. *
  180. * Input:  (d0.l) = X mickeys per coord unit
  181. *         (d1.l) = Y mickeys per coord unit
  182. * OutPut: (d0.l) = error status (0 = OK)
  183.  
  184. MsSetSns: movem.l d1-d5,-(a7)
  185.  moveq.l #Ms.Sns,d2 mickeys/coord unit sub-func
  186.  bra.s MSP2
  187.  
  188.  
  189. * Set double speed threshold.
  190. *
  191. * Call syntax:   MsSetDbl(xThresh, yThresh);
  192. *
  193. * Input:  (d0.l) = X mickeys per second
  194. *         (d1.l) = Y mickeys per second
  195. * OutPut: (d0.l) = error status (0 = OK)
  196.  
  197. MsSetDbl: movem.l d1-d5,-(a7)
  198.  moveq.l #Ms.Thr,d2 threshold sub-function
  199.  bra.s MSP2
  200.  
  201.  
  202. * Set the directional sense of the mouse.
  203. *
  204. * Call syntax:   MsSetPol(dirX, dirY);
  205. *
  206. * Input:  (d0.l) = x polarity.
  207. *   +1 sets: right motion = more positive coords.
  208. *   -1 sets: right motion = more negative coords.
  209. *
  210. *         (d1.l) = y polarity.
  211. *   +1 sets: up motion = more positive coords.
  212. *   -1 sets: up motion = more negative coords.
  213.  
  214. MsSetPol: movem.l d1-d5,-(a7)
  215.  moveq.l #Ms.Pol,d2 polarity function
  216.  bra.s MSP2
  217.  
  218.  
  219.  
  220. * Tell driver to call main program F$Icpt handler
  221. * whenever mouse data is ready.  The signal code
  222. * equals SS_Joy ($13) for signal identification.
  223. * Reduces system overhead of polling mouse status.
  224. * Must be called each time it is acted on.
  225. *
  226. * Call syntax:   MsSetTrp();
  227. *
  228. * Input:  none
  229. * OutPut: (d0.l) = error status (0 = OK)
  230.  
  231. MsSetTrp: movem.l d1-d2,-(a7)
  232.  move.w Ms_Path(a6),d0 path
  233.  moveq #SS_SSig,d1 send_signal function
  234.  move.w #SS_Joy,d2 actual signal to send
  235.  os9 I$SetStt set it
  236.  bcc.s MsST2 OK?
  237.  clr.w d1 no errors
  238. MsST2 clr.l d0 return 32 bit error code
  239.  move.w d1,d0
  240.  movem.l (a7)+,d1-d2
  241.  rts
  242.  
  243. # endasm
  244.