
; ***********************************************************
; *                                                         *
; *          W I Z A R D   O F   S O U N D   V 3.2          *
; *                                                         *
; *               S T O P S O U N D  V 1.57                 *
; *                                                         *
; ***********************************************************
; *                                                         *
; *     Assembler-Source-Listing / Assembler: Profimat      *
; *                                                         *
; *                   (C)Februar 1990 by                    *
; *                                                         *
; *                   Dan Dark  Software                    *
; *                     Jörg Schließer                      *
; *                   Hasenbergsteige 15                    *
; *                    7000 Stuttgart 1                     *
; *                      West-Germany                       *
; *                                                         *
; ***********************************************************

; *** Amiga-Betriebsystemroutinen-Offsets ***

FindTask = -294                ;exec-library
Signal = -324
OldOpenLibrary = -408
CloseLibrary = -414
Open = -30                     ;dos-library
Close = -36
Read = -42

; *** Basisadressen ***

exbase = 4             ; Exec Basisadresse

start:
       move.l  sp,startsp              ;Stapelzeiger sichern

       move.l  exbase,a6
       lea     dosname,a1              ;DOS_Library öffnen
       jsr     OldOpenLibrary(a6)
       move.l  d0,dosbase
       beq     error

; Der WOSPlayer von erwartet als Zeichen dafür, daß er aus
; dem Waiting_State geweckt wird und das Abspiel der Musik beenden
; soll ein Signal auf 'Leitung' Nr.31.
; Damit man an einem Task ein Signal senden kann, braucht man die
; Adresse der Task_Struktur.
; Leider jedoch findet die Exec_Routine FindTask den WOSPlayer-Task
; nicht unter seinem Namen, wenn dieser vom CLI aus, oder wie mit
; Startsound über den CLI-Befehl RUN gestartet wurde.
; FindTask findet dann nur einen Task mit Namen 'Background CLI',
; wovon es jedoch mehrere geben kann, wenn man mehrere CLI's oder
; Programme mit RUN laufen hat.
; Sicher gibt es eine Tricki_Methode, wie man trotzdem die spezifische
; Adresse der Task_Struktur des WOSPlayer-Tasks in einem solchen Fall
; ermitteln kann. Das Programm TaskX von Fish 158 schafft es z.Bsp.
; Leider habe ich jedoch keine Sources zu diesem Programm und auch mit
; einem Monitor ist es mir nicht gelungen, herauszufinden, wo der
; 'wirkliche' Name des Tasks steht und wie man von da auf die Adresse
; der Tast_Struktur kommt. Auch mit einem Amiga_Monitor_Prog habe ich
; immer nur den Namen 'Background CLI' in der Kette der Taskstrukturen
; gefunden.
; Daher verwende ich eine andere Methode (die ziemlich umständlich ist),
; um dem Stopsound Programm die Adresse der WOSPlayer_Task_Struktur
; zugänglich zu machen:
; Der WOSPlayer ermittelt die Adresse seiner Task_Struktur selbst und
; speichert diese, falls er von CLI oder RUN gestartet wurde in einem
; File 'ADR' in der Ram-Disk. Stopsound liest dieses File dann aus und
; hat so die gesuchte Adresse. WOSPlayer löscht das File wieder, wenn
; er beendet wird.
; Vielleicht kann mir jemand helfen, wie man den richtigen Namen eines
; Tasks findet, der als 'Background CLI' in der Kette der Taskstrukturen
; verzeichnet ist, hoffe auf Antwort !


       move.l  exbase,a6               ; Versuch, den WOSPlayer_Task
       lea     testtask,a1
       jsr     FindTask(a6)            ; unter seinem Namen zu finden
       tst.l   d0
       bne     gotit

       move.l  dosbase,a6              ; File mit der Adresse auslesen
       move.l  #taskfile,d1
       move.l  #1005,d2                ; wenn obige Methode nicht
       jsr     Open(a6)
       move.l  d0,filehandle           ; geklappt hat
       beq     nixwars
       exg     d0,d1
       move.l  #taskadr,d2
       moveq   #4,d3
       jsr     Read(a6)
       move.l  filehandle,d1
       jsr     Close(a6)
       move.l  taskadr,d0

gotit:
       move.l  exbase,a6               ; Signal für Musikende an
       move.l  d0,a1
       moveq   #0,d0                   ; WOSPlayer_Task schicken
       bset    #31,d0
       jsr     Signal(a6)

nixwars:
       move.l  exbase,a6               ; Library schließen
       move.l  dosbase,a1
       jsr     CloseLibrary(a6)

error:
       move.l  startsp,sp
       rts                             ; und fertig !!!

; *** Texte / Speicher für Variablen und Konstanten ***

dosname:       dc.b    "dos.library",0
               align
testtask:      dc.b    "WOSPlayer",0
               align
taskfile:      dc.b    "Ram:ADR",0
               align

startsp:       dc.l    0
dosbase:       dc.l    0
filehandle:    dc.l    0
taskadr:       dc.l    0

 END


