; $VER: X-Prog x.x Staffan Hämälä
; Copyright (c)1994
; 
; 
; Requires V37+
; -------------------------------------------------------------------
	incdir	include:
	include intuition/intuition.i
	include lvo/lvos.i
	include	libraries/gadtools.i

; Version information:

Version:MACRO
        dc.b    'X-Prog x.x'
        ENDM

Date:	MACRO
	IncBin	ENV:Date
	ENDM


START:
	lea	DATA,a5
	suba.l	a1,a1			; Clear a0
	movea.l	4.w,a6			; Exec base in a6
	CallLib FindTask		; Find Task
	movea.l	d0,a4			; Save task
	tst.l	$AC(a4)			; check for CLI-structure
	bne.s	.End			; Started from CLI
	lea	$5C(a4),a0
	CallLib	WaitPort		; Wait for message
	lea	$5C(a4),a0
	CallLib	GetMsg			; Get message
	move.l	d0,StartupWB(a5)	; Save message
.End:
	move.l	4.w,a6			; Get execbase
	move.l	#37,d0			; version of lib required
	lea	IntName(pc),a1		; intuition.library
	CallLib	OpenLibrary		; Open it
	move.l	d0,IntBase(a5)
	beq.w	NoInt			; Failed to open

	move.l	#37,d0			; version of lib required
	lea	GadToolsName(pc),a1	; gadtools.library
	CallLib	OpenLibrary		; Open it
	move.l	d0,GadToolsBase(a5)
	beq.w	NoGTools

	move.l	#37,d0			; version of lib required
	lea	DosName(pc),a1		; dos.library
	CallLib	OpenLibrary		; Open it
	move.l	d0,DosBase(a5)
	beq.w	NoDos

	move.l	#37,d0			; version of lib required
	lea	AslName(pc),a1		; gadtools.library
	CallLib	OpenLibrary		; Open it
	move.l	d0,AslBase(a5)
	beq.w	NoAsl

	move.l	IntBase(a5),a6		; Intbase
	suba.l	a0,a0			; Use default public screen
	CallLib	LockPubScreen		; lock screen
	move.l	D0,ScreenAddress(a5)	; public screen address
	beq.W	NoScreen

	move.L	d0,a0			; Pointer to screen
	suba.l	a1,a1			; no optional parameters
	move.L	GadToolsBase(a5),A6	; Get GadToolsBase
	CallLib	GetVisualInfoA		; Get VisualInfo
	move.l	D0,VisualInfo(a5)	; Save VisualInfo
	beq.W	NoVI			; Failed to get VI

	lea	GList(pc),a0		; Pointer to gadget
	CallLib	CreateContext		; Get pointer to gadget
	move.L	d0,GadgetPointer(a5)	; Save the pointer
	beq.w	NoCont

	lea.l	NGadget(a5),a1		; Place for the new gadget
	move.l	#TOPAZ80,12(A1)		; Font to use
	move.l	VisualInfo(a5),22(A1)	; Pointer to VisualInfo
	lea	GadgetList(pc),A3	; List of gadgets to use
	move.w	(A3)+,D2		; Number of gadgets
	subq.w	#1,D2			; Subtract 1 because use of DBRA
	moveq.l	#0,d7
.Loop:
	addq.w	#1,d7
	move.L	GadgetPointer(a5),A0	; Pointer to previous gadget
	lea	NGadget(a5),A1		; Pointer to new gadget
	move.w	(A3)+,(A1)		; LeftEdge
	move.w	(A3)+,2(A1)		; TopEdge
	move.w	(A3)+,4(A1)		; Width
	move.w	(A3)+,6(A1)		; Height
	move.w	d7,16(A1)		; Gadget ID
	move.l	(A3)+,18(A1)		; Gadget flags
	move.l	(A3)+,D0		; Gadget Kind
	move.l	(A3)+,8(A1)		; Gadget Label
	move.l	(A3)+,A2		; Tag list
	CallLib CreateGadgetA		; Create the gadget
	move.l	D0,GadgetPointer(a5)	; Save gadgetpointer
	dbra	D2,.Loop		; Jump back if gadgets left
	tst.l	D0			; Check if fail
	Beq.w	NoCont

	move.l	IntBase(a5),a6
	suba.l	a0,a0			; NewWindow (Uses defaults)
	lea	WindowTags(pc),a1	; Taglist
	CallLib	OpenWindowTagList	; Open the window
	move.l	d0,WindowHd(a5)		; Save Window Hd
	beq.b	.NoWin			; error

	move.l	GadToolsBase(a5),a6

	move.l	d0,a0			; Window
	suba.l	a1,a1			; NULL (reserved)

	CallLib GT_RefreshWindow	; Refresh the window

	bsr.b	MainProgram

	move.l	IntBase(a5),a6
	move.l	WindowHd(a5),a0
	CallLib	CloseWindow	
.NoWin:
	move.l	GadToolsBase(a5),a6
	move.l	GList(pc),a0
	CallLib FreeGadgets
NoCont:
	move.l	GadToolsBase(a5),a6
	move.l	VisualInfo(a5),a0
	CallLib	FreeVisualInfoA
NoVI:
	move.l	IntBase(a5),a6		; Intbase... :-)
	suba.l	a0,a0			; Don't use name pointer
	move.l	ScreenAddress(a5),a1	; Address to public screen
	CallLib	UnlockPubScreen		; Unlock screen
NoScreen:
	move.l	4.w,a6
	move.l	AslBase(a5),a1
	CallLib	CloseLibrary
NoAsl:
	move.l	4.w,a6
	move.l	DosBase(a5),a1
	CallLib	CloseLibrary
NoDos:
	move.l	4.w,a6
	move.l	GadToolsBase(a5),a1
	CallLib	CloseLibrary
NoGTools:
	move.l	4.w,a6
	move.l	IntBase(a5),a1
	CallLib	CloseLibrary
NoInt:
	tst.l	StartupWB(a5)		; Check if started from WB
	beq.s	.Exit			; No!
	movea.l	4.w,a6			; Get execbase
	CallLib Forbid			; Forbid
	movea.l	StartupWB(a5),a1	; get message in a1
	CallLib	ReplyMsg		; and reply it
.Exit:
	moveq	#0,d0			; We don't want any returncode
	rts				; exit



; ----------------------MAIN PROGRAM------------------------------------

MainProgram:

MainLoop:
	move.l	WindowHd(a5),a0		; Windowhandle in A0
	move.l	86(a0),a0		; User port pointer in A0
	move.l	4.w,a6			; EXEC base address in A6
	CallLib	WaitPort		; Wait for message
	move.l	WindowHd(a5),a0		; Windowhandle in A0
	move.l	86(a0),a0		; User port pointer
	move.l	GadToolsBase(a5),a6
	CallLib	GT_GetIMsg		; Get message
	move.l	d0,a1			; Message pointer in A1
	move.w	im_Code(a1),d5		; Save Code field
	move.l	20(a1),d6		; Save event in D6
	move.l	28(a1),a4
	CallLib	GT_ReplyIMsg		; Reply message

	cmp.l	#IDCMP_REFRESHWINDOW,d6
	beq.b	Refresh	

	cmp.l	#IDCMP_VANILLAKEY,d6
	beq.w	KeyCheck

;	cmp.w	#1,$26(a4)
;	beq.b	StartConvert

	cmp.l	#$200,d6
	beq.b	Exit

	bra.w	MainLoop

Exit:	rts


; --------------------END MAIN LOOP------------------------------

; -----------------------------------------------------------------------
;       Refresh window
; -----------------------------------------------------------------------

Refresh:
	move.l	GadToolsBase(a5),a6
	move.l	WindowHd(a5),a0
	CallLib	GT_BeginRefresh
	move.l	WindowHd(a5),a0
	moveq.l	#1,d0
	CallLib	GT_EndRefresh
	bra.w	MainLoop


; ------------------------------------------------------------------------
;      Check for key
; ------------------------------------------------------------------------
KeyCheck:
;	cmp.w	#13,d5
;	beq.w	Check

	bra.w	MainLoop	

; ------------------------------------------------------------------------
;     Get gadget and set parameters.  D6 = Gadget ID
; ------------------------------------------------------------------------

GetGad:
	bsr.b	GetGadget		; Get gadget
	move.l	WindowHd(a5),a1		; Get window Hd
	sub.l	a2,a2			; NULL (reserved)
	move.l	GadToolsBase(a5),a6	; Get gadtools.library base
	rts

; ------------------------------------------------------------------------
;     Activate a gadget.  A0 = Gadget
; ------------------------------------------------------------------------

ActivateGadget:
	move.l	IntBase(a5),a6
	move.l	WindowHd(a5),a1
	sub.l	a2,a2
	CallLib	ActivateGadget
	rts	

; ------------------------------------------------------------------------
;     Print text.  A1 = IntuiText structure
; ------------------------------------------------------------------------

PrintText:
	moveq	#0,d0
	moveq	#0,d1	
	move.l	IntBase(a5),a6
	move.l	WindowHd(a5),a0
	move.l	50(a0),a0
	CallLib	PrintIText
	rts

; ------------------------------------------------------------------------
;     Get a gadget. D6 = ID of gadget
; ------------------------------------------------------------------------

GetGadget:
	lea.l	GList(pc),a0	; Get address to first gadget
.loop:
	move.l	(a0),d0		; Get address to next gadget
	beq.b	.End
	move.l	d0,a0
	move.l	d6,d0
	cmp.w	38(a0),d0
	bne.b	.loop
.End:
	rts

; ------------------------------------------------------------------------
;     Main program
; ------------------------------------------------------------------------




; ------------------------------------------------------------------------
;     Data
; ------------------------------------------------------------------------



TOPAZ80:
	dc.l	TOPAZname
	dc.w	8
	dc.b	0,0


WindowTags:
	dc.l	WA_Title,VER
	dc.l	WA_Left,150
	dc.l	WA_Top,40
	dc.l	WA_Width,300
	dc.l	WA_Height,200
GG:	dc.l	WA_Gadgets,0
	dc.l	WA_IDCMP,DISKINSERTED+GADGETUP+GADGETDOWN+CLOSEWINDOW+REFRESHWINDOW+VANILLAKEY
	dc.l	WA_Flags,WINDOWCLOSE+WINDOWDRAG+WINDOWDEPTH+ACTIVATE+RMBTRAP
	dc.l	WA_Zoom,WindowZoom
	dc.l	WA_ScreenTitle,ScreenTitle
	dc.l	TAG_DONE

GList:		EQU	GG+4
WindowZoom:
	dc.w	100,10,200,20

AboutWindowTags:
	dc.l	WA_Title,AboutTitle
	dc.l	WA_Left,180
	dc.l	WA_Top,30
	dc.l	WA_Width,324
	dc.l	WA_Height,155
	dc.l	WA_IDCMP,CLOSEWINDOW
	dc.l	WA_Flags,WINDOWCLOSE+WINDOWDRAG+WINDOWDEPTH+ACTIVATE
	dc.l	TAG_DONE


;---------

GadgetList:
	dc.w	1		; Number of gadgets in list
; Select Drive Gadget
	dc.w	10,13		; LeftEdge, TopEdge
	dc.w	90,14		; Width, Height
	dc.l	0		; Gadget flags
	dc.l	CYCLE_KIND	; Gadget kind
	dc.l	0		; Label
	dc.l	DriveGTags	; TagList

;ErrorTags:
;	dc.l	GTNM_Number,0
;	dc.l	TAG_DONE
;
;
;
;
;NameTags:
;	dc.l	GTST_String,VolumeName
;	dc.l	GTST_MaxChars,27
;	dc.l	TAG_DONE
;
;
;; GTCB_Checked - selectar Checkbox
;
;DisTag:
;	dc.l	GA_Disabled,1
;	dc.l	TAG_DONE
;
;TrackTags:
;	dc.l	GTNM_Number,0
;	dc.l	GTNM_Border,1
;	dc.l	TAG_DONE
;
;;OutTag1:
;;	dc.l	GTTX_Text,0
;;	dc.l	GTTX_Border,1
;;	dc.l	TAG_DONE
;
;OutTag2:
;	dc.l	GTTX_Text,0
;	dc.l	GTTX_Border,1
;	dc.l	TAG_DONE
;
;CylTags:
;	dc.l	GTIN_MaxChars,2
;	dc.l	STRINGA_ReplaceMode,1
;	dc.l	GTIN_Number,0
;	dc.l	TAG_DONE
;
;CylTags2:
;	dc.l	GTIN_MaxChars,2
;	dc.l	STRINGA_ReplaceMode,1
;	dc.l	GTIN_Number,79
;	dc.l	TAG_DONE

DriveGTags:
	dc.l	GTCY_Labels,Drives
	dc.l	TAG_DONE

Drives:
	dc.l	DfNoll
	dc.l	DfEtt
;	dc.l	DfTvo
;	dc.l	DfTre
	dc.l	0
DfNoll:	dc.b	'OLLE',0
DfEtt:	dc.b	'SUNE',0







;IntuiTextList:
;AIText1:
;	dc.b	3,0,RP_JAM2,0	;front and back text pens, drawmode and fill byte
;	dc.w	60,13	;XY origin relative to container TopLeft
;	dc.l	TOPAZ80	;font pointer or NULL for defaults
;	dc.l	VER		;pointer to text
;	dc.l	AIText2	;next IntuiText structure


		dc.b	'$VER:'
VER:		Version
		dc.b	' ©1994',0


TOPAZname:	dc.b	'topaz.font',0
DosName:	dc.b	'dos.library',0
IntName:	dc.b	'intuition.library',0
GadToolsName:	dc.b	'gadtools.library',0
AslName:	dc.b	'asl.library',0
AboutTitle:	dc.b	'ABOUT',0
ScreenTitle:	dc.b	'Det här är en skärm: X-Prog x.x',0




	SECTION	DATA,BSS
DATA:

	STRUCTURE	Data,0
		STRUCT	NGadget,30		; Store for gadgets
		LONG	StartupWB
		LONG	IntBase
		LONG	DosBase
		LONG	AslBase
		LONG	GadToolsBase
		LONG	WindowHd
		LONG	GadgetPointer
		LONG	ScreenAddress
		LONG	AboutWinHd
		LONG	VisualInfo
	LABEL	data_SIZEOF

	ds.b	data_SIZEOF

