home *** CD-ROM | disk | FTP | other *** search
/ Sound, Music & MIDI Collection 2 / SMMVOL2.bin / MIDI_PAT / MTOOLS.ZIP / PLAYRDEV.EXE / MLIB.QB < prev    next >
Encoding:
Text File  |  1992-11-07  |  6.9 KB  |  360 lines

  1. '--- MLIB version-specific definitions for Quick Basic
  2.  
  3. '$INCLUDE: 'qb.bi'
  4.  
  5. DECLARE FUNCTION sseg% (s$)
  6.  
  7. FUNCTION sseg% (s$)
  8.   sseg% = VARSEG(s$)
  9. END FUNCTION
  10.  
  11. '--------------------
  12.  
  13.  
  14. ' Play/R interface module.
  15. ' Copyright 1992, Kevin Weiner, All rights reserved.
  16.  
  17. '$INCLUDE: 'mlib.bi'
  18.  
  19. DECLARE SUB CallPlayR (fcn%)
  20. DECLARE FUNCTION CheckRes% ()
  21.  
  22. COMMON SHARED /mlibx/ param AS STRING, idnum AS INTEGER
  23.  
  24. CONST playrid$ = "Play/R  "
  25.  
  26. CONST tessmpx = 21587
  27.  
  28. CONST fcnPause = 0
  29. CONST fcnPlay = 1
  30. CONST fcnPopup = 2
  31. CONST fcnRewind = 3
  32. CONST fcnLoadPlay = 4
  33. CONST fcnPlayStat = 5
  34. CONST fcnLoadStat = 6
  35. CONST fcnDoneStat = 7
  36. CONST fcnLoad = 8
  37. CONST fcnQuiet = 9
  38. CONST fcnPopEna = 10
  39. CONST fcnVolume = 11
  40. CONST fcnReset = 12
  41. CONST fcnTimeMode = 13
  42. CONST fcnGetChan = 14
  43. CONST fcnSetChan = 15
  44. CONST fcnSetPos = 16
  45. CONST fcnSkipSong = 17
  46. CONST fcnLoopMode = 18
  47.  
  48. CONST fcnGetName% = 20
  49. CONST fcnSendShort% = 21
  50. CONST fcnSendLong% = 22
  51. CONST fcnCheckInp% = 23
  52. CONST fcnGetInput% = 24
  53. CONST fcnGetTime% = 25
  54. CONST fcnGetCID% = 26
  55. CONST fcnGetEntry% = 27
  56.  
  57. CONST fcnRemove% = 99
  58.  
  59.  
  60. SUB CallPlayR (fcn AS INTEGER)
  61.  
  62. DIM reg AS RegTypeX
  63.  
  64.   MID$(param, 1, 1) = CHR$(fcn)
  65.   reg.ax = tessmpx
  66.   reg.es = SSEG(param)     ' VB
  67.   reg.di = SADD(param)
  68.   reg.cx = idnum
  69.   reg.bx = 32
  70.   CALL INTERRUPTX(47, reg, reg)
  71.  
  72. END SUB
  73.  
  74. FUNCTION CheckRes%
  75.  
  76. DIM reg AS RegTypeX
  77.  
  78.   id$ = playrid$
  79.   reg.ax = tessmpx
  80.   reg.ds = SSEG(id$)    'VB
  81.   reg.si = SADD(id$)
  82.   reg.cx = 0
  83.   reg.bx = 0
  84.   reg.es = -1
  85.   CALL INTERRUPTX(47, reg, reg)
  86.   IF reg.ax = -1 THEN
  87.     idnum = reg.cx
  88.   ELSE
  89.     idnum = -1
  90.   END IF
  91.   CheckRes% = idnum
  92.  
  93. END FUNCTION
  94.  
  95. SUB mfContinue
  96.  
  97.   CALL CallPlayR(fcnPlay)
  98.  
  99. END SUB
  100.  
  101. SUB mfFileStat (stat AS INTEGER, filename AS STRING)
  102.  
  103.   CALL CallPlayR(fcnLoadStat)
  104.   stat% = ASC(MID$(param, 1, 1))
  105.   i% = 2
  106.   c$ = MID$(param, 2, 1)
  107.   filename = ""
  108.   DO WHILE ASC(c$) <> 0
  109.     filename = filename + c$
  110.     i% = i% + 1
  111.     c$ = MID$(param, i%, 1)
  112.   LOOP
  113.  
  114. END SUB
  115.  
  116. SUB mfGetChan (datatype AS INTEGER, chan() AS INTEGER)
  117.  
  118.   MID$(param, 2, 1) = CHR$(datatype)
  119.   CALL CallPlayR(fcnGetChan)
  120.   FOR i% = 1 TO 16
  121.     chan(i%) = ASC(MID$(param, i% + 2, 1))
  122.         if chan(i%) > 127 then
  123.           chan(i%) = chan(i%) - 256
  124.         end if
  125.   NEXT i%
  126.  
  127. END SUB
  128.  
  129. SUB mfInit
  130.  
  131.   param = SPACE$(64)
  132.   midiDriverLoaded = CheckRes >= 0
  133.   IF midiDriverLoaded THEN
  134.     CALL CallPlayR(fcnGetCID)
  135.     MID = ASC(MID$(param, 2, 1))
  136.   ELSE
  137.     MID = 0
  138.   END IF
  139.  
  140. END SUB
  141.  
  142. FUNCTION mfLoad% (filename$)
  143.  
  144.   param = " " + filename$ + CHR$(0)
  145.   CALL CallPlayR(fcnLoad)
  146.   mfLoad% = ASC(MID$(param, 1, 1))
  147.  
  148. END FUNCTION
  149.  
  150. SUB mfLoopMode (n AS INTEGER)
  151.  
  152.   MID$(param, 2, 1) = CHR$(n%)
  153.   CALL CallPlayR(fcnLoopMode)
  154.  
  155. END SUB
  156.  
  157. SUB mfPause
  158.  
  159.   CALL CallPlayR(fcnPause)
  160.  
  161. END SUB
  162.  
  163. FUNCTION mfPlay% (filename AS STRING)
  164.  
  165.   param = " " + filename + CHR$(0)
  166.   CALL CallPlayR(fcnLoadPlay)
  167.   mfPlay% = ASC(MID$(param, 1, 1))
  168.  
  169. END FUNCTION
  170.  
  171. SUB mfPopEnable (stat AS INTEGER)
  172.  
  173.   MID$(param, 2, 1) = CHR$(stat)
  174.   CALL CallPlayR(fcnPopEna)
  175.  
  176. END SUB
  177.  
  178. SUB mfPopup
  179.  
  180.   CALL CallPlayR(fcnPopup)
  181.  
  182. END SUB
  183.  
  184. SUB mfQuiet
  185.  
  186.   CALL CallPlayR(fcnQuiet)
  187.  
  188. END SUB
  189.  
  190. SUB mfRewind
  191.  
  192.   CALL CallPlayR(fcnRewind)
  193.  
  194. END SUB
  195.  
  196. SUB mfSetChan (datatype AS INTEGER, chan() AS INTEGER)
  197.  
  198.   MID$(param, 2, 1) = CHR$(datatype)
  199.   FOR i% = 1 TO 16
  200.     MID$(param, i% + 2, 1) = CHR$(chan(i%) and 255)
  201.   NEXT i%
  202.   CALL CallPlayR(fcnSetChan)
  203.  
  204. END SUB
  205.  
  206. SUB mfSetPos (time AS LONG)
  207.  
  208.   t& = time
  209.   FOR i% = 2 TO 5
  210.     MID$(param, i%, 1) = CHR$(t& AND 255)
  211.     t& = t& \ 256
  212.   NEXT i%
  213.   CALL CallPlayR(fcnSetPos)
  214.  
  215. END SUB
  216.  
  217. SUB mfSkipSong (n AS INTEGER)
  218.  
  219.   MID$(param, 2, 1) = CHR$(n)
  220.   CALL CallPlayR(fcnSkipSong)
  221.  
  222. END SUB
  223.  
  224. SUB mfSongStat (playing AS INTEGER, done AS INTEGER, position AS LONG, songcount AS INTEGER, cursong AS INTEGER)
  225.  
  226.   CALL CallPlayR(fcnPlayStat)
  227.   playing = ASC(MID$(param, 1, 1))
  228.   done = ASC(MID$(param, 2, 1))
  229.   temp& = 0
  230.   FOR i% = 3 TO 6
  231.     temp& = temp& * 256 + ASC(MID$(param, i%, 1))
  232.   NEXT i%
  233.   songcount = ASC(MID$(param, 7, 1))
  234.   cursong = ASC(MID$(param, 8, 1))
  235.  
  236. END SUB
  237.  
  238. SUB mfTimeMode (mode AS INTEGER)
  239.  
  240.   MID$(param, 2, 1) = CHR$(mode)
  241.   CALL CallPlayR(fcnTimeMode)
  242.  
  243. END SUB
  244.  
  245. SUB mfVolume (adjust AS INTEGER)
  246.  
  247.   MID$(param, 2, 1) = CHR$(adjust AND 255)
  248.   CALL CallPlayR(fcnVolume)
  249.  
  250. END SUB
  251.  
  252. FUNCTION midiDevName% (dev AS INTEGER, devname AS STRING, devdesc AS STRING)
  253.  
  254.   MID$(param, 2, 1) = CHR$(dev)
  255.   CALL CallPlayR(fcnGetName)
  256.   d% = ASC(MID$(param, 2, 1))
  257.   IF d% = 0 THEN
  258.     devname = ""
  259.     devdesc = ""
  260.   ELSE
  261.     devname = MID$(param, 3, 3)
  262.     devdesc = MID$(param, 6, 20)
  263.   END IF
  264.   midiDevName% = d%
  265.  
  266. END FUNCTION
  267.  
  268. FUNCTION midiGetBuffer% (dev AS INTEGER, buf AS STRING, max AS INTEGER)
  269.  
  270.   MID$(param, 2, 1) = CHR$(dev)               'Device num
  271.   MID$(param, 3, 1) = CHR$(max AND 255)       'Low byte of buf max
  272.   MID$(param, 4, 1) = CHR$(max \ 256)         'High byte of buf max
  273.   bofs% = SADD(buf)
  274.   MID$(param, 5, 1) = CHR$(bofs% AND 255)      'Buffer offset
  275.   MID$(param, 6, 1) = CHR$(bofs% \ 256)
  276.   bseg% = SSEG(buf)     'VB
  277.   MID$(param, 7, 1) = CHR$(bseg% AND 255)      'Buffer segment
  278.   MID$(param, 8, 1) = CHR$(bseg% \ 256)
  279.  
  280.   CallPlayR (fcnGetInput)
  281.  
  282.   midiGetBuffer% = ASC(MID$(param, 10, 1)) * 256 + ASC(MID$(param, 9, 1))
  283.  
  284. END FUNCTION
  285.  
  286. FUNCTION midiInputReady% (dev AS INTEGER)
  287.  
  288.   MID$(param, 2, 1) = CHR$(dev)
  289.   CALL CallPlayR(fcnCheckInp)
  290.   midiInputReady% = (ASC(MID$(param, 3, 1)) = 1)
  291.  
  292. END FUNCTION
  293.  
  294. SUB midiPutBuffer (dev AS INTEGER, buf AS STRING, datalen AS INTEGER)
  295.  
  296.   MID$(param, 2, 1) = CHR$(dev)               'Device num
  297.   MID$(param, 3, 1) = CHR$(datalen AND 255)   'Low byte of length
  298.   MID$(param, 4, 1) = CHR$(datalen \ 256)     'High byte of length
  299.   bofs% = SADD(buf)
  300.   MID$(param, 5, 1) = CHR$(bofs% AND 255)     'Buffer offset
  301.   MID$(param, 6, 1) = CHR$(bofs% \ 256)
  302.   bseg% = SSEG(buf)     'VB
  303.   MID$(param, 7, 1) = CHR$(bseg% AND 255)      'Buffer segment
  304.   MID$(param, 8, 1) = CHR$(bseg% \ 256)
  305.   FOR i% = 1 TO 4                              'Reserved space
  306.     MID$(param, i% + 8, 1) = CHR$(0)
  307.   NEXT i%
  308.  
  309.   CallPlayR (fcnSendLong)
  310.  
  311. END SUB
  312.  
  313. SUB midiPutShort (dev AS INTEGER, b1 AS INTEGER, b2 AS INTEGER, b3 AS INTEGER)
  314.  
  315.   MID$(param, 2, 1) = CHR$(dev)
  316.  
  317.   MID$(param, 4, 1) = CHR$(b1)
  318.   IF b2 < 0 THEN
  319.     dlen% = 1
  320.   ELSE
  321.     MID$(param, 5, 1) = CHR$(b2)
  322.     IF b3 < 0 THEN
  323.       dlen% = 2
  324.     ELSE
  325.       MID$(param, 6, 1) = CHR$(b3)
  326.       dlen% = 3
  327.     END IF
  328.   END IF
  329.  
  330.   MID$(param, 3, 1) = CHR$(dlen%)
  331.  
  332.   CALL CallPlayR(fcnSendShort)
  333.  
  334. END SUB
  335.  
  336. SUB midiRemove
  337.  
  338.   CALL CallPlayR(fcnRemove)
  339.  
  340. END SUB
  341.  
  342. SUB midiReset (dev AS INTEGER)
  343.  
  344.   MID$(param, 2, 1) = CHR$(dev)
  345.   CALL CallPlayR(fcnReset)
  346.  
  347. END SUB
  348.  
  349. FUNCTION msTimer&
  350.  
  351.   CALL CallPlayR(fcnGetTime)
  352.   temp& = 0
  353.   FOR i% = 2 TO 5
  354.     temp& = temp& * 256 + ASC(MID$(param, i%, 1))
  355.   NEXT i%
  356.   msTimer& = temp&
  357.  
  358. END FUNCTION
  359.  
  360.