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

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