;-------T-------T------------------------T----------------------------------;
;Draw CardSet
;------------
;Loads a card file and draws a card to screen.  Push right mouse
;button to cycle through the available cards in the file.
;
;This demo uses a single buffer only, so things won't look right if the
;card is restored.

MAX_IMAGES =	1	;1 card being blitted.

	INCDIR	"GMSDev:Includes/"
	INCLUDE	"dpkernel/dpkernel.i"
	INCLUDE	"graphics/cards.i"
	INCLUDE	"system/modules.i"

	SECTION	"Demo",CODE

;===========================================================================;
;                             INITIALISE DEMO
;===========================================================================;

	STARTDPK

Start:	MOVEM.L	A0-A6/D1-D7,-(SP)
	move.l	DPKBase(pc),a6
	lea	PictureFile(pc),a0
	moveq	#ID_PICTURE,d0
	CALL	Load
	move.l	d0,Picture
	beq	.Exit

	moveq	#ID_SCREEN,d0
	CALL	Get
	move.l	d0,Screen
	beq	.Exit

	move.l	Picture(pc),a0
	move.l	Screen(pc),a1
	move.l	PIC_Bitmap(a0),a2
	move.l	BMP_Data(a2),GS_MemPtr1(a1)
	CALL	CopyStructure

	move.l	Screen(pc),a0
	sub.l	a1,a1
	CALL	Init
	tst.l	d0
	beq.s	.Exit

;---------------------------------------------------------------------------;
;Initialise the cards module and cardset.

	lea	CardModTags(pc),a0	;a0 = Module tags.
	sub.l	a1,a1	;a1 = No container.
	CALL	Init	;>> = Initialise Cards Interface.
	tst.l	d0	;d0 = Check for error.
	beq.s	.Exit	;>> = Error, exit.
	move.l	d0,a0	;a0 = Card module.
	move.l	MOD_ModBase(a0),CardBase	;ma = Store jump table.

	lea	CardsTag(pc),a0	;a0 = Taglist object.
	move.l	Screen(pc),a1	;a1 = Screen container.
	CALL	Init	;>> = Initialise the card set.
	tst.l	d0	;ma = Save CardSet
	beq.s	.Exit	;>> = Error, exit.

;---------------------------------------------------------------------------;
;Initialise the restorelist.

	lea	RestoreTags(pc),a0
	move.l	Screen(pc),a1	;a1 = Screen.
	CALL	Init	;>> = Initialise the restore list.
	tst.l	d0	;d0 = Check for errors.
	beq.s	.Exit	;>> = Error, exit.

;---------------------------------------------------------------------------;

	moveq	#ID_JOYDATA,d0	;Get joydata structure for reading
	CALL	Get	;port 0.
	move.l	d0,JoyData
	beq.s	.Exit
	move.l	d0,a0	;Initialise the joydata structure.
	sub.l	a1,a1
	CALL	Init
	tst.l	d0
	beq.s	.Exit

	move.l	Screen(pc),a0
	CALL	Display

	bsr.s	Main
	
;---------------------------------------------------------------------------;
;                                 EXIT TO DOS
;---------------------------------------------------------------------------;

.Exit	move.l	DPKBase(pc),a6
	move.l	JoyData(pc),a0
	CALL	Free
	move.l	Restore(pc),a0
	CALL	Free
	move.l	CardSet(pc),a0	;a0 = Card set.
	CALL	Free	;>> = Free the card.
	move.l	CardModule(pc),a0
	CALL	Free
	move.l	Screen(pc),a0
	CALL	Free
	move.l	Picture(pc),a0
	CALL	Free
	MOVEM.L	(SP)+,A0-A6/D1-D7
	moveq	#ERR_OK,d0
	rts

;===========================================================================;
;                                  MAIN LOOP
;===========================================================================;

Main:
.loop	move.l	DPKBase(pc),a6
	move.l	Restore(pc),a0
	CALL	Activate

	move.l	CardSet(pc),a0	;a0 = Cardset.
	CALL	Draw	;>> = Draw the card.

	move.l	SCRBase(pc),a6
	CALL	scrWaitAVBL

	move.l	DPKBase(pc),a6
	move.l	JoyData(pc),a0
	CALL	Query

	move.l	JoyData(pc),a0
	move.l	CardSet(pc),a1
	move.l	CS_Bob(a1),a1
	move.w	JD_XChange(a0),d0
	add.w	d0,BOB_XCoord(a1)
	move.w	JD_YChange(a0),d0
	add.w	d0,BOB_YCoord(a1)
	move.l	JD_Buttons(a0),d0
	btst	#JB_RMB,d0
	beq.s	.ChkLMB

	moveq	#25,d3
	move.l	SCRBase(pc),a6
.lp	CALL	scrWaitAVBL
	dbra	d3,.lp

	move.l	Cardset(pc),a1
	addq.w	#1,CS_Card(a1)
	move.w	CS_AmtCards(a1),d1
	cmp.w	CS_Card(a1),d1
	bgt.s	.ChkLMB
	clr.w	CS_Card(a1)
	
.ChkLMB	move.l	JoyData(pc),a0
	move.l	JD_Buttons(a0),d0
	btst	#JB_LMB,d0
	beq.s	.loop
	rts

;===========================================================================;
;                                  DATA
;===========================================================================;

CardBase:	dc.l  0
Screen:		dc.l  0
Picture:	dc.l  0
JoyData:	dc.l  0

;---------------------------------------------------------------------------;

CardModTags:	dc.l  TAGS_MODULE
CardModule:	dc.l  0
		dc.l  MODA_Name,CardsName
		dc.l  MODA_Version,Cards_ModVersion
		dc.l  MODA_Revision,Cards_ModRevision
		dc.l  TAGEND

CardsName:	dc.b  "mod.cards",0
		even

;---------------------------------------------------------------------------;

RestoreTags:	dc.l  TAGS_RESTORE
Restore:	dc.l  0
		dc.l  RSA_Entries,1
		dc.l  TAGEND

;---------------------------------------------------------------------------;

CardsTag:	dc.l  TAGS_CARDSET
CardSet:	dc.l  0
		dc.l  CSA_Attrib,BBF_CLIP|BBF_GENMASK|BBF_FILLMASK
		dc.l  CSA_Source,.file
		dc.l  TAGEND

.file		FILENAME "GMS:Demos/data/Hires16.reko"

;---------------------------------------------------------------------------;

PictureFile:	FILENAME "GMS:Demos/data/Background16.iff"

;===========================================================================;

ProgName:	dc.b  "Draw Card",0
ProgAuthor:	dc.b  "Paul Manias",0
ProgDate:	dc.b  "15 December 1997",0
ProgCopyright:	dc.b  "DreamWorld Productions (c) 1996-1997.  Freely distributable.",0
ProgShort:	dc.b  "Simple card demonstration.",0
		even

