home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 13 / AACD13.ISO / AACD / Utilities / ACDPlay / src / V1.6 / asmlib / rexxcmds.s < prev    next >
Text File  |  1998-07-18  |  22KB  |  649 lines

  1. ********************  (ARexx-Unterfunktionen)  ***************************
  2. *                                                                        *
  3. *  Vorgabe:  a0  - Zeiger auf CDx-Request                                *
  4. *            a1  - Zeiger auf ARexxkommando                              *
  5. *            a2  - Rest der Rexx-Kommandozeile (zum weiterparsen)        *
  6. *            a4  - RexxMsg                                               *
  7. *            a5  - Zeiger auf Applicationstruktur                        *
  8. *            a6  - RexxSysBase                                           *
  9. *            d0  - 0                                                     *
  10. *            d3  - SysBase                                               *
  11. *           (sp) - Zeiger auf Applicationstruktur                        *
  12. *                                                                        *
  13. *  Rückgabe: d0 - RexxResult1 (Vorgabe RETURN_OK)                        *
  14. *            d7 - done: Rückgabewert von HandleARexxEvents               *
  15. *                 HandleARexxEvents() und dann auch ACDPlay werden bei   *
  16. *                 TRUE beendet (sollte nur von QUIT gesetzt werden)      *
  17. *                                                                        *
  18. **************************************************************************
  19.  
  20.  xref _PlayButton
  21.  xref _DirectChoice
  22.  xref _StopButton
  23.  xref _PauseButton
  24.  xref _EjectButton
  25.  xref _JumpBackwardButton
  26.  xref _JumpForwardButton
  27.  xref _OpenApplication
  28.  xref _CloseApplication
  29.  xref _OpenAppWin
  30.  xref _CloseAppWin
  31.  xref _Iconify
  32.  xref _UnIconify
  33.  xref _CreateAppItem
  34.  xref _FreeAppItem
  35.  xref _ProgramDelete
  36.  xref _ProgramCopyAll
  37.  xref _ProgramSave
  38.  xref _ProgramLoad
  39.  xref _ProgramAppendElement
  40.  xref _ProgramDeleteElement
  41.  xref _SaveTitles
  42.  xref _UpdateCDTitles
  43.  xref _MakeInterior
  44.  xref _FindNode
  45.  
  46. RETURN_SCSIERR  EQU 15
  47.  
  48. ; Die Applikationstruktur ist schon auf dem Stack, dadurch können Funktionen
  49. ;  die nur einen Appzeiger erwarten direkt angesprungen (jmp) werden.
  50.  
  51. **************************************************************************
  52. *
  53. *   PLAY [track]
  54. *
  55. rx_PLAY:    move.l   a2,a0              ; Parameter als Argument
  56.             jsr     _LVOCVa2i(a6)       ; zum Konvertieren (RexxSysbase ist schon in a6)
  57.             tst.b   d1                  ; Zahl übergeben?
  58.             bne     .goon               ;
  59.             jmp     _PlayButton         ; PlayButton wenn kein Track da
  60. .goon       move.w  d0,-(a7)            ; Track (UWORD)
  61.             move.l  a5,-(a7)            ; Application (APTR)
  62.             jsr     _DirectChoice
  63.             addq.l  #6,a7               ; Stack wieder zurücksetzen
  64. .EXIT       rts
  65.  
  66.  
  67. **************************************************************************
  68. *
  69. *   OPEN
  70. *
  71. rx_UNLOADCD:
  72.             moveq   #TRUE,d0            ; cdx liegt bereits in a0
  73.             bsr     _CDEjectA           ; Schublade ausfahren
  74.             bra     ExitSCSIErr2RC      ; nur RETURN_OK oder RETURN_SCSIERR
  75.  
  76.  
  77. **************************************************************************
  78. *
  79. *   CLOSE
  80. *
  81. rx_LOADCD:  moveq   #FALSE,d0
  82.             bsr     _CDEjectA           ; Schublade einfahren
  83.             bra     ExitSCSIErr2RC
  84.  
  85.  
  86. **************************************************************************
  87. *
  88. *   LOCKCD
  89. *
  90. rx_LOCKCD:
  91.             moveq   #TRUE,d0            ; auch hier ist cdx schon in a0
  92.             bsr     _CDLockA            ; Schublade verriegeln
  93.             bra     ExitSCSIErr2RC
  94.  
  95.  
  96. **************************************************************************
  97. *
  98. *   UNLOCKCD
  99. *
  100. rx_UNLOCKCD:
  101.             moveq   #FALSE,d0
  102.             bsr     _CDLockA            ; Schublade entriegeln
  103.             bra     ExitSCSIErr2RC
  104.  
  105.  
  106. **************************************************************************
  107. *
  108. *   APPENDELEMENT track
  109. *
  110. rx_APPEND:  move.l  a2,a0               ; Parameter als Argument
  111.             jsr     _LVOCVa2i(a6)       ;  zum Konvertieren
  112.             tst.b   d1                  ; Zahl konvertiert?
  113.             beq     .EXIT               ; (d0=0=FALSE -> Fehler)
  114.             move.w  d0,-(a7)            ; Parameter rückwärts auf den
  115.             move.l  a5,-(a7)            ;  Stack schieben
  116.             jsr     _ProgramAppendElement
  117.             addq.l  #6,a7               ; Stack wieder zurücksetzen
  118. .EXIT       bra     ExitBool2RC         ; vernünftigen Returncode setzen
  119.                                         ; (Bool -> Rexx-Returncode)
  120.  
  121.  
  122. **************************************************************************
  123. *
  124. *   DELETEELEMENT position
  125. *
  126. rx_DELETE:  move.l  a2,a0               ; Parameter als Argument
  127.             jsr     _LVOCVa2i(a6)       ; zum Konvertieren
  128.             tst.b   d1                  ; (digits=0 ?)
  129.             beq     .EXIT
  130.             move.l  d0,-(a7)            ; Parameter rückwärts auf den
  131.             move.l  a5,-(a7)            ; Stack schieben
  132.             jsr     _ProgramDeleteElement
  133.             addq.l  #8,a7               ; Stack wieder zurücksetzen
  134. .EXIT       bra     ExitBool2RC
  135.  
  136.  
  137. **************************************************************************
  138. *
  139. *   title = GETCDTITLE
  140. *
  141. rx_GETCDTITLE:  move.l  40(a5),a0       ; app->cdstr
  142.                 move.l  48(a0),d0       ; cdstr->cdnameptr
  143.                 bra     ReturnString    ; String in Argstring konvertieren
  144.                                         ; und als Result2 in RexxMsg eintragen
  145.  
  146. **************************************************************************
  147. *
  148. *   name = GETARTIST
  149. *
  150. rx_GETARTIST:   move.l  40(a5),a0       ; app->cdstr
  151.                 move.l  52(a0),d0       ; cdstr->artistptr
  152.                 bra     ReturnString
  153.  
  154.  
  155. **************************************************************************
  156. *
  157. *   name = GETSONGNAME [track]
  158. *
  159. rx_GETSONGNAME: exg.l   a2,a0               ; a2<->a0 (Parameter als Argument und a0 sichern)
  160.                 jsr     _LVOCVa2i(a6)       ; zum Konvertieren
  161.                 tst.b   d1                  ; (digits=0 ?)
  162.                 bne     .goon
  163.                 move.b  cdx_CurrentTrack(a2),d0 ; wenn kein Parameter übergeben wurde,
  164.                                             ; dann aktuellen Track nehmen
  165.  
  166. .goon           subq.l  #1,d0               ; Anzahl Tracks - 1
  167.                 mulu.w  #4,d0               ; ein Track == 4 Bytes
  168.                 move.l  40(a5),a0           ; app->cdstr
  169.                 move.l  12(a0),a0           ; cdstr->tracknames
  170.                 add.l   d0,a0               ; Arrayindizierung
  171.  
  172.                 move.l  (a0),d0
  173.  
  174.                 bra     ReturnString
  175. .NOTFOUND       moveq   #RETURN_FAIL,d0
  176.                 rts
  177.  
  178.  
  179.  
  180. **************************************************************************
  181. *
  182. *   bool = ISUNITREADY
  183. *
  184. rx_ISUNITREADY:
  185.             bsr     _CDTestUnitA            ; cdx ist in a0
  186.             tst.l   d0
  187.             bne     .NO
  188.             moveq   #1,d0
  189.             bra.s   .EXIT
  190. .NO         moveq   #0,d0
  191. .EXIT       bra     ReturnValue
  192.  
  193.  
  194. **************************************************************************
  195. *
  196. *   status = GETSTATUS
  197. *
  198. rx_GETSTATUS:
  199.             bsr     _CDUpdateA
  200.             moveq   #0,d0                   ; evt. Fehlercode löschen
  201.             move.b  cdx_AudioStatus(a0),d0
  202.             bra     ReturnValue             ; Zahl in Argstring wandeln und
  203.                                             ; in RexxMsg als Result2 eintragen
  204.  
  205. **************************************************************************
  206. *
  207. *   track = GETCURRENTTRACK
  208. *
  209. rx_GETCURTRACK:
  210.             move.b  cdx_CurrentTrack(a0),d0
  211.             bra     ReturnValue
  212.  
  213.  
  214. **************************************************************************
  215. *
  216. *   index = GETCURRENTINDEX
  217. *
  218. rx_GETCURINDEX:
  219.             move.b  cdx_CurrentIndex(a0),d0
  220.             bra     ReturnValue
  221.  
  222.  
  223. **************************************************************************
  224. *
  225. *   blocks = GETTRACKLENGTH
  226. *
  227. rx_GETTOTALTIME:
  228.             move.l  cdx_TrackLength(a0),d0
  229.             bra     ReturnValue
  230.  
  231.  
  232. **************************************************************************
  233. *
  234. *   block = GETTRACKPOSITION
  235. *
  236. rx_GETCURTIME:
  237.             move.l  cdx_CurrentRelAddr(a0),d0
  238.             bra     ReturnValue
  239.  
  240.  
  241. **************************************************************************
  242. *
  243. *   block = GETABSPOSITION
  244. *
  245. rx_GETCURABSTIME:
  246.             move.l  cdx_CurrentAbsAddr(a0),d0
  247.             bra     ReturnValue
  248.  
  249.  
  250. **************************************************************************
  251. *
  252. *   cdid = GETCDID
  253. *
  254.  
  255. rx_GETCDID: move.l  cdx_TOCData(a0),a0
  256.             lea     CDID(a0),a0
  257.             move.l  a0,d0
  258.             bra     ReturnString
  259.  
  260.  
  261. **************************************************************************
  262. *
  263. *   blocks = GETCDLENGTH
  264. *
  265. rx_GETCDLENGTH:
  266.             move.l  cdx_TOCData(a0),a0
  267.             move.l  Entry+Address(a0),d0    ; cdx_TOCData->Entry[0].Address
  268.             bra     ReturnValue
  269.  
  270.  
  271. **************************************************************************
  272. *
  273. *   track = GETFIRSTTRACK
  274. *
  275. rx_GETFIRSTTRACK:
  276.             move.l  cdx_TOCData(a0),a0
  277.             move.b  FirstTrack(a0),d0
  278.             bra     ReturnValue
  279.  
  280.  
  281. **************************************************************************
  282. *
  283. *   track = GETFIRSTAUDIOTRACK
  284. *
  285. rx_GETFIRSTATRACK:
  286.             move.l  cdx_TOCData(a0),a0
  287.             move.b  FirstAudioTrack(a0),d0
  288.             bra     ReturnValue
  289.  
  290.  
  291. **************************************************************************
  292. *
  293. *   trackanzahl = GETTRACKNUMBER
  294. *
  295. rx_GETTRACKNUM:
  296.             move.l  40(a5),a0           ; app->cdstr
  297.             move.b  36(a0),d0           ; cdstr->num_track
  298.             bra     ReturnValue         ;  als sekundäres Ergebnis zurück
  299.  
  300.  
  301. **************************************************************************
  302. *
  303. *   SETVOLUME volume
  304. *
  305. rx_SETVOLUME:
  306.             move.l  a2,a0               ; Parameter als Argument
  307.             jsr     _LVOCVa2i(a6)       ; String konvertieren
  308.             tst.b   d1                  ; (digits=0 ?)
  309.             beq     .EXIT
  310.             cmp.l   #255,d0
  311.             bls     .goon               ; d0 <= 255 --> goon
  312.             move.b  #255,d0
  313.  
  314. .goon       move.l  40(a5),a0
  315.             move.l  8(a0),a0            ; app->cdstr->cdx auch als Argument
  316.             move.b  d0,cdx_Volume0(a0)  ; in alle beiden
  317.             move.b  d0,cdx_Volume1(a0)  ; Volume-Felder den Wert eintragen
  318.             moveq   #SET_VOLUME,d0      ; SET-Modus als Argument
  319.             bsr     _CDVolumeA
  320.             tst.l   d0
  321.             bne     .scsierr
  322.  
  323.             move.w  #9,-(a7)            ; WINDOW_VOLUME und
  324.             move.l  a5,-(a7)            ;  Application als Parameter
  325.             jsr     _MakeInterior       ; Volumefenster aktualisieren
  326.             addq.l  #6,a7
  327.             moveq   #TRUE,d0            ; TRUE: RC=0
  328. .EXIT       bra     ExitBool2RC
  329. .scsierr    moveq   #RETURN_SCSIERR,d0  ; RC=15
  330.             rts
  331.  
  332.  
  333. **************************************************************************
  334. *
  335. *   volume = GETVOLUME
  336. *
  337. rx_GETVOLUME:
  338.             moveq   #GET_VOLUME,d0      ; GET-Modus als Argument
  339.             bsr     _CDVolumeA          ; CDx liegt schon in a0
  340.             tst.l   d0                  ; alles klar?
  341.             beq     .good
  342.             moveq   #RETURN_SCSIERR,d0  ; nein: RETURN_SCSIERR als Fehlercode
  343.             rts                         ;  und raus
  344. .good       move.b  cdx_Volume0(a0),d0  ; cdx->volume[0]
  345.             moveq   #0,d1
  346.             move.b  cdx_Volume1(a0),d1
  347.             add.w   d1,d0
  348.             lsr.w   #1,d0               ; d0 = (volume[0] + volume[1])/2
  349.             bra     ReturnValue
  350.  
  351.  
  352. rx_GETDEVICE:   move.l  cdx_DeviceName(a0),d0
  353.                 bra     ReturnString
  354.  
  355. rx_GETUNIT:     move.b  cdx_Unit(a0),d0
  356.                 bra     ReturnValue
  357.  
  358. rx_GETLUN:      move.b  cdx_LUN(a0),d0
  359.                 bra     ReturnValue
  360.  
  361. rx_GETSENSEKEY:
  362.                 move.b  cdx_SenseKey(a0),d0
  363.                 bra     ReturnValue
  364.  
  365. rx_GETADDSENSECODE:
  366.                 move.b  cdx_AddSenseCode(a0),d0
  367.                 bra     ReturnValue
  368.  
  369. rx_GETADDSENSECODEQ:
  370.                 move.b  cdx_AddSenseCodeQual(a0),d0
  371.                 bra     ReturnValue
  372.  
  373. rx_GETVENDOR:   move.l  cdx_Vendor(a0),d0
  374.                 bra     ReturnString
  375.  
  376. rx_GETVENDORID: lea     cdx_VendorID(a0),a0
  377.                 move.l  a0,d0
  378.                 bra     ReturnString
  379.  
  380. rx_GETPRODUCT:  lea     cdx_Product(a0),a0
  381.                 move.l  a0,d0
  382.                 bra     ReturnString
  383.  
  384. rx_GETREVISION: lea     cdx_Revision(a0),a0
  385.                 move.l  a0,d0
  386.                 bra     ReturnString
  387.  
  388. rx_GETSPECIFIC: lea     cdx_Specific(a0),a0
  389.                 move.l  a0,d0
  390.                 bra     ReturnString
  391.  
  392.  
  393.  
  394.  
  395. **************************************************************************
  396. *
  397. *   OPENWINDOW win
  398. *
  399. rx_OPENWIN: tst.l   (a5)                ; Application geöffnet? (app->screen)
  400.             beq     .EXIT
  401.             move.l  a2,a0               ; Parameter als Argument
  402.             jsr     _LVOCVa2i(a6)       ; zum Konvertieren
  403.             tst.b   d1                  ; Zahl konvertiert?
  404.             beq     .EXIT               ; (d0=0=FALSE -> Fehler)
  405.             tst.l   d0                  ; WINDOW_MAIN (0) muß mit
  406.             beq     _OpenApplication    ;  OpenApplication() geöffnet werden
  407.             cmp.l   #9,d0               ; letztes Fenster (9=WINDOW_VOLUME)
  408.             bls     .goon               ; d0 <= 9 --> .goon
  409.             moveq   #FALSE,d0
  410.             bra     .EXIT
  411. .goon       move.w  d0,-(a7)            ; Parameter rückwärts auf den
  412.             move.l  a5,-(a7)            ; Stack schieben
  413.             jsr     _OpenAppWin
  414.             addq.l  #6,a7               ; Stack wieder zurücksetzen
  415. .EXIT       bra     ExitBool2RC
  416.  
  417.  
  418. **************************************************************************
  419. *
  420. *   CLOSEWINDOW win
  421. *
  422. rx_CLOSEWIN: tst.l  (a5)                ; Application offen?
  423.             beq     .EXIT
  424.             move.l  a2,a0               ; Parameter als Argument
  425.             jsr     _LVOCVa2i(a6)       ; zum Konvertieren
  426.             tst.b   d1                  ; Zahl konvertiert?
  427.             beq     .EXIT               ; (d0=0=FALSE -> Fehler)
  428.             tst.l   d0                  ; WINDOW_MAIN (0) muß mit OpenApplication geöffnet werden
  429.             beq     _CloseApplication
  430.             cmp.l   #9,d0               ; 9=WINDOW_VOLUME
  431.             bls     .goon               ; d0 <= 9 --> .goon
  432.             moveq   #FALSE,d0
  433.             bra     .EXIT
  434. .goon       move.w  #TRUE,-(a7)         ; wirklich schließen
  435.             move.w  d0,-(a7)            ; windownummer
  436.             move.l  a5,-(a7)            ; application
  437.             jsr     _CloseAppWin
  438.             addq.l  #8,a7               ; Stack wieder zurücksetzen
  439.             moveq   #TRUE,d0            ; CloseAppWin gibt void zurück
  440. .EXIT       bra     ExitBool2RC
  441.  
  442.  
  443. **************************************************************************
  444. *
  445. *   SHOWMESSAGE text
  446. *
  447. rx_SHOWMSG: move.l  a2,-(a7)            ; Parameter anzeigen
  448.             lea     .s(pc),a0
  449.             move.l  a0,-(a7)            ; Formatstring "%s"
  450.             lea     .Titel(pc),a0
  451.             move.l  a0,-(a7)
  452.             bsr     _ShowMsgA           ; und anzeigen
  453.             lea     12(a7),a7
  454.             rts
  455.  
  456. .s:     dc.b '%s',0
  457. .Titel  dc.b 'Info',0
  458.  CNOP   0,2
  459.  
  460.  
  461. **************************************************************************
  462. *
  463. *   QUIT
  464. *
  465. rx_QUIT:    moveq   #TRUE,d7
  466.             rts
  467.  
  468.  
  469.  
  470. ****************************************************************************
  471. * In der RexxMsg-Struktur mit dem Kommando, die ARexx an den Port von
  472. * ACDPlay schickt, existieren 2 Felder für Ergebnisse: Result1 und Result2.
  473. * In Result1 der beantworteten RexxMessage erwartet ARexx den Fehlercode
  474. * des Kommandos, in Result2 ein Ergebnis (Argstring). Ein Ergebnis darf
  475. * allerdings nur zurückgegeben werden wenn es angefordert wurde. In einem
  476. * Rexxscript geschieht dies mit "OPTIONS RESULTS". ARexx setzt dann in
  477. * der RexxMsg, die an ACDPlay geschickt, wird das Flag RXFF_RESULT.
  478. * Weiterhin darf ein Ergebnis nur zurückgegeben werden, wenn der Fehlercode,
  479. * also Result1, 0 ist. Als primäres Ergebnis nimmt HandleRexxMsgA() den
  480. * Wert aus d0, das sekundäre Ergebnis muß in die RexxMsg-Struktur (a4)
  481. * eingetragen werden. Für Zahlen erledigt das ReturnValue, was die Zahl in
  482. * d0 zu einem ArgString wandelt, in Result2 einträgt und mit RETURN_OK
  483. * zu HandleARexxMsgA() zurückspringt. ReturnString macht das gleiche mit
  484. * einem String in d0.
  485. ****************************************************************************
  486.  
  487. ExitBool2RC: tst.w   d0
  488.              bne     .OK                ; <> 0 : RETURN_OK
  489.              moveq   #RETURN_FAIL,d0    ; == 0 : RETURN_FAIL
  490.              bra     .EXIT
  491. .OK          moveq   #RETURN_OK,d0
  492. .EXIT        rts
  493.  
  494. ExitSCSIErr2RC: tst.l   d0
  495.                 beq    .EXIT
  496.                 moveq  #RETURN_SCSIERR,d0
  497. .EXIT           rts
  498.  
  499. ReturnValue: move.l  rm_Action(a4),d1
  500.              btst.l  #RXFB_RESULT,d1    ; Wird 2.Ergebnis angefordert?
  501.              beq     .EXIT              ; Nein: keins liefern, da es nicht freigegeben werden würde
  502.              jsr     _LVOCVi2arg(a6)    ; LONG Wert aus d0 in ArgString konvertieren
  503.              move.l  d0,rm_Result2(a4)  ; Argstring (oder NULL falls Fehler) als 2.Ergebnis eintragen
  504. .EXIT        moveq   #RETURN_OK,d0      ; 1.Result muß dann 0 sein!
  505.              rts
  506.  
  507. ReturnString: tst.l d0                  ; überhaupt ein String da?
  508.              beq    .EXIT
  509.              move.l rm_Action(a4),d1
  510.              btst.l  #RXFB_RESULT,d1    ; Wird 2.Ergebnis angefordert?
  511.              beq     .EXIT              ; Nein: keins liefern, da es nicht freigegeben werden würde
  512.              move.l  d0,d2              ; strptr sichern
  513.              beq     .EXIT              ; NULL braucht nicht zu konvertiert werden :-)
  514.              move.l  d0,a0              ; Parameter
  515.              jsr     _LVOStrlen(a6)     ; Stringlänge wird von CreateArgString benötigt
  516.              move.l  d2,a0
  517.              jsr    _LVOCreateArgstring(a6) ; String aus d0 in ArgString konvertieren
  518.              move.l d0,rm_Result2(a4)   ; Argstring als 2.Ergebnis eintragen
  519. .EXIT        moveq  #RETURN_OK,d0       ; 1.Result muß dann 0 sein!
  520.              rts
  521.  
  522.  
  523. ;---------------------------------------------------------------------------
  524.  
  525.  
  526. JmpTable:   dc.l rx_PLAY                    ; Tabelle mit allen ARexxunterfunktionen
  527.             dc.l _StopButton                ;  in der gleichen Reihenfolge wie die
  528.             dc.l _PauseButton               ;  Schlüsselwörter
  529.             dc.l _JumpForwardButton
  530.             dc.l _JumpBackwardButton
  531.             dc.l _EjectButton
  532.             dc.l rx_UNLOADCD
  533.             dc.l rx_LOADCD
  534.             dc.l rx_LOCKCD
  535.             dc.l rx_UNLOCKCD
  536.  
  537.             dc.l _ProgramDelete
  538.             dc.l _ProgramCopyAll
  539.             dc.l _ProgramSave
  540.             dc.l _ProgramLoad
  541.             dc.l rx_APPEND
  542.             dc.l rx_DELETE
  543.  
  544.             dc.l rx_GETCDTITLE
  545.             dc.l rx_GETARTIST
  546.             dc.l rx_GETSONGNAME
  547.             dc.l _UpdateCDTitles
  548.             dc.l _SaveTitles
  549.  
  550.             dc.l rx_ISUNITREADY
  551.             dc.l rx_GETSTATUS
  552.             dc.l rx_GETCURTRACK
  553.             dc.l rx_GETCURINDEX
  554.             dc.l rx_GETTOTALTIME
  555.             dc.l rx_GETCURTIME
  556.             dc.l rx_GETCURABSTIME
  557.  
  558.             dc.l rx_GETCDID
  559.             dc.l rx_GETCDLENGTH
  560.             dc.l rx_GETTRACKNUM
  561.             dc.l rx_GETFIRSTTRACK
  562.             dc.l rx_GETFIRSTATRACK
  563.  
  564.             dc.l rx_SETVOLUME
  565.             dc.l rx_GETVOLUME
  566.  
  567.             dc.l rx_GETDEVICE
  568.             dc.l rx_GETUNIT
  569.             dc.l rx_GETLUN
  570.             dc.l rx_GETSENSEKEY
  571.             dc.l rx_GETADDSENSECODE
  572.             dc.l rx_GETADDSENSECODEQ
  573.  
  574.             dc.l rx_GETVENDOR
  575.             dc.l rx_GETVENDORID
  576.             dc.l rx_GETPRODUCT
  577.             dc.l rx_GETREVISION
  578.             dc.l rx_GETSPECIFIC
  579.  
  580.             dc.l _UnIconify
  581.             dc.l _Iconify
  582.             dc.l rx_OPENWIN
  583.             dc.l rx_CLOSEWIN
  584.             dc.l rx_SHOWMSG
  585.             dc.l rx_QUIT
  586.  
  587. Commands:   dc.b 'PLAY',0                   ; CD-ROM Control
  588.             dc.b 'STOP',0
  589.             dc.b 'PAUSE',0
  590.             dc.b 'NEXTSONG',0
  591.             dc.b 'PREVSONG',0
  592.             dc.b 'EJECT',0
  593.             dc.b 'OPEN',0
  594.             dc.b 'CLOSE',0
  595.             dc.b 'LOCKCD',0
  596.             dc.b 'UNLOCKCD',0
  597.  
  598.             ;neue Kommandos in ACDPlay 1.5
  599.             dc.b 'DELETEPROGRAM',0          ; Program
  600.             dc.b 'COPYALLPROGRAM',0
  601.             dc.b 'SAVEPROGRAM',0
  602.             dc.b 'LOADPROGRAM',0
  603.             dc.b 'APPENDELEMENT',0
  604.             dc.b 'DELETEELEMENT',0
  605.  
  606.             dc.b 'GETTITLE',0
  607.             dc.b 'GETARTIST',0
  608.             dc.b 'GETSONGNAME',0
  609.             dc.b 'UPDATETITLES',0
  610.             dc.b 'SAVETITLES',0
  611.  
  612.             dc.b 'ISUNITREADY',0            ; Current Data
  613.             dc.b 'GETSTATUS',0
  614.             dc.b 'GETCURRENTTRACK',0
  615.             dc.b 'GETCURRENTINDEX',0
  616.             dc.b 'GETTRACKLENGTH',0
  617.             dc.b 'GETTRACKPOSITION',0
  618.             dc.b 'GETABSPOSITION',0
  619.  
  620.             dc.b 'GETCDID',0                ; CD Data
  621.             dc.b 'GETCDLENGTH',0
  622.             dc.b 'GETTRACKNUMBER',0
  623.             dc.b 'GETFIRSTTRACK',0
  624.             dc.b 'GETFIRSTAUDIOTRACK',0
  625.  
  626.             dc.b 'SETVOLUME',0              ; Volume
  627.             dc.b 'GETVOLUME',0
  628.  
  629.             dc.b 'GETDEVICE',0              ; SCSI Driver
  630.             dc.b 'GETUNIT',0
  631.             dc.b 'GETLUN',0
  632.             dc.b 'GETSENSEKEY',0
  633.             dc.b 'GETADDSENSECODE',0
  634.             dc.b 'GETADDSENSECODEQUAL',0
  635.  
  636.             dc.b 'GETVENDOR',0              ; Device Identification
  637.             dc.b 'GETVENDORID',0
  638.             dc.b 'GETPRODUCT',0
  639.             dc.b 'GETREVISION',0
  640.             dc.b 'GETVENDORSPECIFIC',0
  641.  
  642. name_SHOW   dc.b 'SHOW',0                   ; Application
  643.             dc.b 'HIDE',0
  644.             dc.b 'OPENWINDOW',0
  645.             dc.b 'CLOSEWINDOW',0
  646.             dc.b 'SHOWMESSAGE',0
  647.             dc.b 'QUIT',0
  648.             dc.b 0
  649.