
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
;             PROMIZER V0.2a MULTI-TASKING PLAYER ... JUNE 1992
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
	
;------------------------------------------------------------------------------
;                                INIT PLAYER
;------------------------------------------------------------------------------

	section "PROMIZER",code_p

;------------------------------ OPEN LIBS -------------------------------------

start
	move.l	4.w,a6
	lea	dosname(pc),a1
	jsr	-408(a6)
	lea	dosbase(pc),a5
	move.l	d0,(a5)+

	lea	reqname(pc),a1
	jsr	-408(a6)
	move.l	d0,(a5)+
	beq.w	lib_error

;---------------- GET FILENAME BY USING REQUESTER LIBRARY ---------------------

nextsong
	lea	songnummer(pc),a0
	clr.l	(a0)
	
	move.l	reqbase(pc),a6
	lea	filereqstruct(pc),a0
	jsr	-84(a6)				;d0 = 0, wenn cancel
	tst.l	d0
	beq.w	nosong				;cancel gadget

;----------------------------- GET FILE LENGHT --------------------------------

	move.l	dosbase(pc),a6
	lea	pathname(pc),a0
	move.l	a0,d1
	moveq	#-2,d2
	jsr	-84(a6)
	move.l	d0,a5
	beq.w	nosong
	move.l	a5,d1
	lea	fileinfoblock(pc),a0
	move.l	a0,d2
	jsr	-102(a6)
	move.l	a5,d1
	jsr	-90(a6)

;--------------------- SPEICHER FÜR SOUND RESERVIEREN -------------------------

	move.l	4.w,a6
	lea	fileinfoblock(pc),a0
	move.l	124(a0),d0
	lea	filelength(pc),a1
	move.l	d0,(a1)
	moveq	#2,d1
	jsr	-198(a6)
	tst.l	d0
	beq.w	mem_error
	lea	mempointer(pc),a0
	move.l	d0,(a0)

;----------------------------- OPEN LOAD FILE ---------------------------------

	move.l	dosbase(pc),a6
	lea	pathname(pc),a0
	move.l	a0,d1
	move.l	#1005,d2
	jsr	-30(a6)
	lea	filehd(pc),a0
	move.l	d0,(a0)
	beq.w	nosong				;überflüssig ...

;------------------------------- READ BYTES -----------------------------------

	move.l	filehd(pc),d1
	move.l	mempointer(pc),d2
	move.l	filelength(pc),d3
	jsr	-42(a6)

;--------------------------- CHECK AND INIT SOUND -----------------------------

	lea	song(pc),a0
	lea	filearray(pc),a1
copyloop
	move.b	(a1)+,(a0)+
	tst.b	(a1)
	bne.b	copyloop

	move.l	mempointer(pc),a5
	moveq	#1,d0
	jsr	(a5)				;init replayer
	moveq	#1,d0
	jsr	2(a5)				;init first song
	
;------------------------------ INIT SERVER -----------------------------------

	move.l	4.w,a6
	lea	vblancintstr(pc),a1
	lea	interupt(pc),a0
	move.l	a0,vblancstart-vblancintstr(a1)
	moveq	#5,d0
	jsr	-168(a6)			;start vblanc

;---------------------------- CHECK GADGETS -----------------------------------

songloop
	move.l	reqbase(pc),a6
	lea	textreqstruct(pc),a0
	jsr	-174(a6)
	move.l	d0,-(a7)

	cmp.b	#2,d0
	bne.b	nonext
	lea	songnummer(pc),a1
	addq.l	#1,(a1)
	move.l	(a1),d0
	move.l	mempointer(pc),a0
	jsr	2(a0)
	bra.b	songloop
nonext

;--------------------------- REMOVE SERVER ------------------------------------

	move.l	4.w,a6
	lea	vblancintstr(pc),a1
	moveq	#5,d0
	jsr	-174(a6)

;----------------------------- FREE MEM ---------------------------------------

	move.l	mempointer(pc),a1
	jsr	10(a1)				;stop sound
	move.l	filelength(pc),d0
	jsr	-210(a6)

;----------------------------- CLOSE FILE -------------------------------------

closefile
	move.l	dosbase(pc),a6
	move.l	filehd(pc),d1
	jsr	-36(a6)

	move.l	(a7)+,d0
	cmp.b	#1,d0
	beq.w	nextsong

;------------------------------ CLOSE LIBS ------------------------------------

nosong
	move.l	4.w,a6
	move.l	dosbase(pc),a1
	jsr	-414(a6)
close_req
	move.l	4.w,a6
	move.l	reqbase(pc),a1
	jsr	-414(a6)
	moveq	#0,d0
	rts
lib_error
	move.l	dosbase(pc),a6
	jsr	-60(a6)
	move.l	d0,d1
	move.l	#clitext,d2
	move.l	#clitextend-clitext,d3
	jsr	-48(a6)
	moveq	#0,d0
	rts
mem_error
	move.l	dosbase(pc),a6
	jsr	-60(a6)
	move.l	d0,d1
	move.l	#memtext,d2
	move.l	#memtextend-memtext,d3
	jsr	-48(a6)
	bra.b	close_req

;--------------------------------- SERVER -------------------------------------

interupt	
	movem.l	d0/a0,-(a7)
	moveq	#64,d0
	move.l	mempointer(pc),a0
	jsr	6(a0)
	movem.l	(a7)+,d0/a0
	rts

;------------------------------ DATA BUFFER -----------------------------------

songnummer	dc.l	1
vblancintstr	dc.l	0,0
		dc.b	0,0
		dc.l	0,0
vblancstart	dc.l	0

dosbase		dc.l	0
reqbase		dc.l	0
filehd		dc.l	0
filelength	dc.l	0
mempointer	dc.l	0

filereqstruct
        dc.w    2               ;requester version
        dc.l    titletext       ;zeiger auf titletext
        dc.l    dirarray        ;zeiger auf dirpuffer (131 bytes)
        dc.l    filearray       ;zeiger auf filebuffer (31 bytes)
        dc.l    pathname        ;zeiger auf pathnamebuffer (162 bytes)
        dc.l    0               ;zeiger auf eigenen screen (oder 0=WB)
        dc.w    0               ;anzahl fileeinträge (0=max=65535)
        dc.w    0               ;anzahl zeilen in filewindow (oder 0)
        dc.w    0              ;anzahl farben in filewindow (oder 0)
        dc.w    0               ;anzahl spalten in devicewindow (oder 0)
        dc.l    0              ;flags (oder 0)
        dc.w    0               ;dirnamecolor (oder 0)
        dc.w    0               ;filenamecolor (oder 0)
        dc.w    0               ;devicenamecolor (oder 0)
        dc.w    0               ;fontnamecolor (oder 0)
        dc.w    0               ;fontsizecolor (oder 0)
        dc.w    0               ;rahmenfabe (oder 0)
        dc.w    0               ;cursorfarbe (oder 0)
        dc.w    0               ;gadgettext color (oder 0)
        dc.w    0               ;textmessage color (oder 0)
        dc.w    0               ;text farben (oder 0)
        dc.w    0               ;gadgetrahmenfarbe (oder 0)
        dc.w    0               ;filenamerahmenfarbe (oder 0)
        dc.w    0               ;gadetfarbe (oder 0)
        dcb.b   36,0            ;reserviert für zukünftige erweiterungen
        dcb.b   12,0            ;datestamp puffer (3 langword)
        dc.w    54,80           ;x,y - nur wenn absxy flag gesetzt ist
        dc.w    0,0             ;hier werden font größe und style eingesetzt
        dc.l    0               ;Zeiger auf linked essstruct (nur bei extbit)
        dcb.b   32              ;wildcards for files to hide
	dc.b	'mod.*'
        dcb.b   32-5            ;wildcards for files to shown
        dcb.w   8,0             ;cursorpositions
        dc.l    0,0,0           ;memory+locked pointer
        dcb.b   132             ;puffer für akt.filename
        dc.l    0               ;fileinfoblock pointer
        dc.w    0,0             ;entries,hiddenentries
        dc.w    0,0             ;filestartnr,devicestartnr
        dc.l    0               ;zeiger auf nächsten file
        dc.w    0,0             ;filenamelänge
        dc.l    0               ;zeiger auf node - wenn user extended selected
titletext	
	dc.b	'FILEREQUSTER ... ',0
dirarray	
	dcb.b	131,0
filearray
	dcb.b	31,0
pathname	
	dcb.b	162,0

textreqstruct
        dc.l    text            ;zeiger auf text
        dc.l    0	        ;zeiger auf paramterliste
        dc.l    0               ;zeiger auf window (oder 0)
        dc.l    multi           ;zeiger auf mittleren gadgettext (oder 0)
        dc.l    ok              ;text für ok (linker text ... oder 0)
        dc.l    cancel          ;text für nicht-ok (rechter text ... oder 0)
        dc.l    title           ;zeiger auf windowtitle
        dc.w    $ffff           ;tastenmask (-1=alle erlaubt)
        dc.w    2               ;textfarbe (oder 0)
        dc.w    0               ;rahmenfarbe (oder 0)
        dc.w    0               ;cursorfarbe (oder 0)
        dc.w    2               ;versionsnummer
        dc.w    0               ;zeit in sekunden
        dc.l    0               ;nicht beschrieben
        dc.w    0               ;nicht beschrieben

title	dc.b	'ProPlayer by mc68000 of TECH',0
text	dc.b	'PLAYING SONG : '
song	dcb.b	100,0
ok	dc.b	'  LOAD  ',0
multi	dc.b	'  SONG  ',0
cancel	dc.b	'  QUIT  ',0

clitext		dc.b	10,'hey guy ... but where is the req.library ???',10,10
clitextend
memtext		dc.b	10,'hey guy ... not enough chip-mem !!!',10,10
memtextend

dosname		dc.b	'dos.library',0
reqname		dc.b	'req.library',0

		cnop	0,4
fileinfoblock	dcb.b	260
