Dim WINCON(1)
Amos To Back 
FIL$=Command Line$
If FIL$="" Then Goto REQ Else Goto SP
SP:
_WINDOPEN[1,0,0,640,50,"Sound Player V1.0  Programmiert von Frank Otto",0]
 Proc _EXAMINE_FILE[FIL$]
FT$=Param$
If FT$="ST" Then Goto TRACK
If FT$="MED" : Goto MED
End If 

REQ:
_WINDOPEN[1,0,0,640,50,"Sound Player V1.0  Programmiert von Frank Otto",0]

   _WFILREQ["Ram Disk:"]
   Proc _EXAMINE_FILE[FIL$]
   FT$=Param$
   If FT$="ST" Then Goto TRACK
   If FT$="MED" Then Goto MED Else _WINDCLOSE[1] : End 
   TRACK:
   Led Off : Track Loop On : _WPRINT[1,"Lade Soundtracker-Module '"+FIL$+"'. "] : Track Load FIL$,5 : _WPRINT[1," Spielen... Zum Beenden ESC drücken."] : Track Play 5
   Repeat : Until Key State(69) : Track Stop : _WINDCLOSE[1] : Led On : Track Loop Of : End 
   MED:
   Led Off : _WPRINT[1,"Lade Med-Module '"+FIL$+"'. "] : Med Load FIL$,5 : _WPRINT[1,"Spielen... Zum Beenden ESC drücken."] : Med Play 5
   Repeat : Until Key State(69) : Med Stop : _WINDCLOSE[1] : Led On : End 

Procedure _WINDOPEN[N,X,Y,XX,YY,NAME$,CL]
   
   ' N      -  No of window.
   ' X      -  Xpos of window.
   ' Y      -  Ypos of window.
   ' XX     -  Width of window. 
   ' YY     -  Height of window.
   ' NAME$  -  Title of window. 
   ' CL     -  Close gadget 0=Off 1=On (WB2 Only).
   
   ' ERR    -  Output error code. 
   
   ' *** Give User Access To Error Code.
   
   Shared ERR,WINCON()
   
   ' *** Turn The X,Y,XX,YY,NAME$,CL Data Into Format Usable By DOS.
   
   X$=Str$(X)-" "
   Y$=Str$(Y)-" "
   XX$=Str$(XX)-" "
   YY$=Str$(YY)-" "
   CON$="CON:"+X$+"/"+Y$+"/"+XX$+"/"+YY$+"/"+NAME$
   If CL=1
      CON$=CON$+"/CLOSE"
   End If 
   CON$=CON$+Chr$(0)
   
   ' *** Call DOS Open Function.
   
   Dreg(1)=Varptr(CON$)
   Dreg(2)=1005
   WINCON(N)=Doscall(-30)
   
   If WINCON(N)=0
      ERR=Doscall(-132)
   End If 
   
End Proc

Procedure _WPRINT[N,M$]
   
   ' N    -  No of window.  
   ' M$   -  Text to be printed.  
   
   ' ERR  -  Output error code. 
   
   ' *** Give User Access To Error Code.
   
   Shared ERR,WINCON()
   
   If WINCON(N)=0
      Goto ERR
   End If 
   
   ' *** Call The DOS Write Function. 
   
   Dreg(1)=WINCON(N)
   Dreg(2)=Varptr(M$)
   Dreg(3)=Len(M$)
   X=Doscall(-48)
   If X=0
      Goto ERR
   End If 
   
   Pop Proc
   
   ' *** In Case Of Error.
   
   ERR:
   ERR=Doscall(-132)
   
End Proc


Procedure _WINDEXECUTE[N,COM$]
   
   ' N     -  No of window. 
   ' COM$  -  Command to execute. 
   
   ' ERR   -  Output error. 
   
   ' *** Give User Access To Error Code.
   
   Shared ERR,WINCON()
   
   If WINCON(N)=0
      Goto ERR
   End If 
   
   ' *** Call The DOS Execute Function. 
   
   COM$=COM$+Chr$(0)
   Dreg(1)=Varptr(COM$)
   Dreg(2)=0
   Dreg(3)=WINCON(N)
   X=Doscall(-222)
   If X=0
      Goto ERR
   End If 
   
   Pop Proc
   
   ' *** In Case Of Error.
   
   ERR:
   ERR=Doscall(-132)
   
End Proc

Procedure _WINDCLOSE[N]
   
   ' N    -  No of window.
   
   ' ERR  -  Output error.
   
   ' *** Give The User Access To Error Code.
   
   Shared ERR,WINCON()
   
   If WINCON(N)=0
      Goto ERR
   End If 
   
   ' *** Call DOS Close Function. 
   
   Dreg(1)=WINCON(N)
   X=Doscall(-36)
   If X=0
      Goto ERR
   End If 
   Pop Proc
   
   ' *** In case of error.
   
   ERR:
   ERR=Doscall(-132)
   
End Proc

Procedure _WFILREQ[PTH$]
   
   ' PTH$  - Directory path.  
   
   ' *** Give User Access To Error Code And The Filename. 
   
   ' *** ERR = 0  : File-Requester Program Not Found.   
   '     ERR = -1 : File-Requester Program Found.   
   
   Shared ERR,FIL$
   
   ' *** Check For Requester Program. 
   
   If Not Exist("C:RequestFile")
      ERR=0
      Pop Proc
   End If 
   
   ' *** Execute Requester Program. 
   
   _WINDEXECUTE[1,"C:RequestFile >Ram:AMOS-Temp.001 "+Chr$(34)+PTH$+Chr$(34)]
   
   ' *** Read In Selected File. 
   
   Open In 1,"Ram:AMOS-Temp.001"
   F$=Input$(1,Lof(1))
   Close 1
   
   ' *** Delete Temp File.
   
   Kill "Ram:AMOS-Temp.001"
   
   ' *** Arrange Filename Into String.
   
   I=Instr(F$,Chr$(34),2)
   FIL$=Mid$(F$,2,I-2)
   
   ' *** Set Error Code.
   
   ERR=-1
   
End Proc

Procedure _EXAMINE_FILE[F$]
   
   ' *** Read File Header.
   
   Open In 1,F$
   LF=Lof(1)
   HEAD$=Input$(1,Min(LF,$440))
   Close 1
   
   ' *** Determine File Type.   
   
   Restore DAT
   
   Repeat 
      
      Read S1,H1$,S2,H2$,FT$
      
      If Mid$(HEAD$,S1,Len(H1$))=H1$ and Mid$(HEAD$,S2,Len(H2$))=H2$
         OK=1
         Exit 
      End If 
      
   Until H1$="END"
   
   ' *** File Header Data (Start1, Header1, Start2, Header2, File Type).  
   
   DAT:
   Data $439,"M.K.",1,"","ST"
   Data $439,"FLT4",1,"","ST"
   Data 1,"MMD1",1,"","MED"
   Data 1,"MMD0",1,"","MED"
End Proc[FT$]

