;
;Procerura Startowa dla programów uruchamianych z Worbencha
;
		INCDIR	JPINCLUDE/
		INCLUDE	Exec.offs
		INCLUDE	Dos.offs
		INCLUDE	Intuition.offs

		INCDIR	INCLUDES/
		INCLUDE	exec/memory.i
		INCLUDE	libraries/dosextens.i
		INCLUDE	intuition/intuition.i


		STRUCTURE	ProgX,0
		LONG	Dos_Base
		LONG	Intuition_Base
		LONG	Window_Base
		LONG	CClass
		WORD	CCode
		LONG	CIAddress
		LABEL	ProgX_SIZE

ExecBase	equ	4
ActiveScreen	equ	56
;
;odszukanie naszego zadania
;
		movem.l	d1-d7/a0-a6,-(sp)
		suba.l	a1,a1
		movea.l	[ExecBase].w,a6
		jsr	_LVOFindTask(a6)
		movea.l	d0,a4
;
;testowanie czy zadanie uruchomione zostaîo
;z cli czy z workbencha
;
		moveq	#0,d0
		tst.l	pr_CLI(a4)
		beq.s	FromCLI			;Uruchamiajac pod ASM ONE
;						zmienic na - beq FromCLI
;
;jezeli z workbencha to pobranie wiadomosci
;
		lea	pr_MsgPort(a4),a0
		jsr	_LVOWaitPort(a6)
		lea	pr_MsgPort(a4),a0
		jsr	_LVOGetMsg(a6)

FromCLI		lea	TaskBase(pc),a0
		move.l	d0,(a0)

		move.l	#ProgX_SIZE,d0
		move.l	#MEMF_PUBLIC,d1
		jsr	_LVOAllocMem(a6)
		movea.l	d0,a5
		tst.l	d0
		beq.w	ErAl_Mem
;
;******
;
		lea	DosName(pc),a1
		bsr	OpenLibrary
		move.l	d0,Dos_Base(a5)
		beq	Exit
		lea	IntuitionName(pc),a1
		bsr	OpenLibrary
		move.l	d0,Intuition_Base(a5)
		beq	Exit_1

		lea	WindowDef(pc),a0

		movea.l	Intuition_Base(a5),a6
		move.l	ib_FirstScreen(a6),d0
	
		move.l	d0,nw_Screen(a0)
		move.l	d0,a1
		moveq	#0,d0
		move.b	sc_BarHeight(a1),d0
		addq.w	#1,d0
		move.w	d0,nw_MinHeight(a0)
		add.w	-2(a0),d0
		move.w	d0,nw_Height(a0)
		move.w	d0,nw_MaxHeight(a0)
		jsr	_LVOOpenWindow(a6)
		move.l	d0,Window_Base(a5)		
		beq	Exit_2

PRLOOP		move.l	Window_Base(a5),a0
		bsr	GetWindMsg
		cmp.l	#GADGETDOWN,CClass(a5)
		bne	NoGaDo
		lea	Gadget_0(pc),a0
		move.l	a0,-(sp)
ClrFLoop	cmp.l	CIAddress(a5),a0
		beq	NoClr	
		bclr	#7,gg_Flags+1(a0)
NoClr		move.l	gg_NextGadget(a0),a0
		cmp.l	#0,a0
		bne	ClrFLoop
		move.l	CIAddress(a5),a0
		move.w	gg_GadgetID(a0),d6
		bsr	SetAssign
		move.l	(sp)+,a0
		move.l	Window_Base(a5),a1
		sub.l	a2,a2
		moveq.l	#-1,d0
		move.l	Intuition_Base(a5),a6
		jsr	_LVORefreshGList(a6)
		
NoGaDo		cmp.l	#MOUSEBUTTONS,CClass(a5)
		bne.s	NoSizeWindow
		cmp.w	#MENUDOWN,CCode(a5)
		bne.s	NoSizeWindow
		bsr.w	Size_Window
NoSizeWindow	cmp.l	#CLOSEWINDOW,CClass(a5)
		bne	PRLOOP


		move.l	Window_Base(a5),a0
		move.l	Intuition_Base(a5),a6
		jsr	_LVOCloseWindow(a6)

Exit_2		move.l	Intuition_Base(a5),a1
		bsr	CloseLibrary
Exit_1		move.l	Dos_Base(a5),a1
		bsr	CloseLibrary
;
;wyjscie z programu
;
Exit		movea.l	a5,a1
		move.l	#ProgX_SIZE,d0
		movea.l	[ExecBase].w,a6
		jsr	_LVOFreeMem(a6)
ErAl_Mem	move.l	TaskBase(pc),d0
		beq.s	FromCLI1
		jsr	_LVOForbid(a6)
		movea.l	TaskBase(pc),a1
		jsr	_LVOReplyMsg(a6)
FromCLI1	movem.l	(sp)+,d1-d7/a0-a6
		moveq	#0,d0
		rts


;
;pobranie wiadomoôci z intuitionmesage
;a0- struktóra Window
;
GetWindMsg	move.l	a0,-(sp)
		movea.l	wd_UserPort(a0),a0
		movea.l	[ExecBase].w,a6
		jsr	_LVOWaitPort(a6)
		movea.l	(sp)+,a0

GetWindMsg1	movea.l	wd_UserPort(a0),a0
		movea.l	[ExecBase].w,a6
		jsr	_LVOGetMsg(a6)
		tst.l	d0
		beq.s	NoWindMsg
		movea.l	d0,a1
		move.l	im_Class(a1),CClass(a5)
		move.w	im_Code(a1),CCode(a5)
;		move.w	im_MouseX(a1),CMouseX(a5)
;		move.w	im_MouseY(a1),CMouseY(a5)
		move.l	im_IAddress(a1),CIAddress(a5)
		jsr	_LVOReplyMsg(a6)
NoWindMsg	rts
;
;
;
Size_Window	move.l	d0,-(sp)
		movea.l	Window_Base(a5),a0
		movea.l	Intuition_Base(a5),a6
		move.w	wd_MinWidth(a0),d0
		sub.w	wd_Width(a0),d0
		move.w	wd_MinHeight(a0),d1
		sub.w	wd_Height(a0),d1
		bne.s	Size_Sub
		move.w	wd_MaxWidth(a0),d0
		sub.w	wd_Width(a0),d0
		move.w	wd_MaxHeight(a0),d1
		sub.w	wd_Height(a0),d1

		movem.l	d0/d1/a0/a6,-(sp)
		move.w	wd_MaxWidth(a0),d0
		move.w	wd_MaxHeight(a0),d1
		add.w	wd_LeftEdge(a0),d0
		add.w	wd_TopEdge(a0),d1
		move.l	wd_WScreen(a0),a1
		sub.w	sc_Width(a1),d0
		neg.w	d0
		bmi.b	SW1
		moveq	#0,d0
SW1		sub.w	sc_Height(a1),d1
		neg.w	d1
		bmi.b	SW2
		moveq	#0,d1	
SW2		jsr	_LVOMoveWindow(a6)
		
		movem.l	(sp)+,d0/d1/a0/a6
Size_Sub	jsr	_LVOSizeWindow(a6)

Loop_NewSize	movea.l	Window_Base(a5),a0
		bsr.w	GetWindMsg
		cmpi.l	#NEWSIZE,CClass(a5)
		bne.s	Loop_NewSize
Exit_Size	move.l	(sp)+,d0
		rts


SetAssign	lea	Name_1(pc),a4
		moveq	#6,d7
		move.l	Dos_Base(a5),a6
AssignLoop	bsr	FindBeginStr
		move.l	a4,d1
		bsr	FindBeginStr
		move.l	a4,d2
		move.b	d6,2(a4)
		movem.l	d6/d7/a4,-(sp)
		jsr	_LVOAssignPath(a6)
		movem.l	(sp)+,d6/d7/a4
		dbf	d7,AssignLoop
		rts

FindBeginStr	tst.b	(a4)+
		bne	FindBeginStr
		rts
		
OpenLibrary	moveq	#36,d0
		move.l	[ExecBase].w,a6
		jmp	_LVOOpenLibrary(a6)
CloseLibrary	move.l	[ExecBase].w,a6
		jmp	_LVOCloseLibrary(a6)

TaskBase	dc.l	0

		dc.w	72-11
WindowDef	dc.w	0,0			;LeftEdge/TopEdge
		dc.w	104,-1			;Width/Height
		dc.b	0,1			;DetailPen/BlockPen
		dc.l	CLOSEWINDOW!GADGETDOWN!MENUDOWN!MOUSEBUTTONS!NEWSIZE	;IDCMPFlags
		dc.l	WINDOWDRAG!WINDOWDEPTH!WINDOWCLOSE!SIZEBBOTTOM!NOCAREREFRESH!RMBTRAP
			;Flags
		dc.l	Gadget_0,0			;FirstGadget/CheckMark
		dc.l	WindowName		;Title	
		dc.l	0,0			;Screen/BitMap
		dc.w	104,-1			;MinWidth/MinHeight
		dc.w	104,-1			;MaxWidth/MaxHeight
		dc.w	$f			;Type

BG01_SX		equ	88
BG01_SY		equ	12

Gadget_0	dc.l	Gadget_1
		dc.w	8,14,BG01_SX,BG01_SY
		dc.w	GFLG_GADGHCOMP
		dc.w	GACT_RELVERIFY+GACT_IMMEDIATE+GACT_TOGGLESELECT
		dc.w	GTYP_BOOLGADGET
		dc.l	BG01_R,0,BG01_IT,0,0
		dc.w	'0'
		dc.l	0
Gadget_1	dc.l	Gadget_2
		dc.w	8,28,BG01_SX,BG01_SY
		dc.w	GFLG_GADGHCOMP
		dc.w	GACT_RELVERIFY+GACT_IMMEDIATE+GACT_TOGGLESELECT
		dc.w	GTYP_BOOLGADGET
		dc.l	BG01_R,0,BG02_IT,0,0
		dc.w	'1'
		dc.l	0
Gadget_2	dc.l	Gadget_3
		dc.w	8,42,BG01_SX,BG01_SY
		dc.w	GFLG_GADGHCOMP
		dc.w	GACT_RELVERIFY+GACT_IMMEDIATE+GACT_TOGGLESELECT
		dc.w	GTYP_BOOLGADGET
		dc.l	BG01_R,0,BG03_IT,0,0
		dc.w	'2'
		dc.l	0
Gadget_3	dc.l	0
		dc.w	8,56,BG01_SX,BG01_SY
		dc.w	GFLG_GADGHCOMP
		dc.w	GACT_RELVERIFY+GACT_IMMEDIATE+GACT_TOGGLESELECT
		dc.w	GTYP_BOOLGADGET
		dc.l	BG01_R,0,BG04_IT,0,0
		dc.w	'3'
		dc.l	0

BG01_R		dc.w	0,0
		dc.b	$01,00,RP_JAM1,5
		dc.l	BG01_XYW,BG01_RB

BG01_RB		dc.w	0,0
		dc.b	$02,00,RP_JAM1,5
		dc.l	BG01_XYB,0

BG01_XYB	dc.w	0,BG01_SY-1,0,0,BG01_SX-2,0,1,0,1,BG01_SY-2

BG01_XYW	dc.w	BG01_SX-1,0,BG01_SX-1,BG01_SY-1,1,BG01_SY-1
		dc.w	BG01_SX-2,BG01_SY-1,BG01_SX-2,1


BG01_IT		dc.b	01,00,RP_JAM2,00
		dc.w	4,3-1
		dc.l	fontatr,BGIT01_S,0

BG02_IT		dc.b	01,00,RP_JAM2,00
		dc.w	4,3-1
		dc.l	fontatr,BGIT02_S,0
BG03_IT		dc.b	01,00,RP_JAM2,00
		dc.w	4,3-1
		dc.l	fontatr,BGIT03_S,0
BG04_IT		dc.b	01,00,RP_JAM2,00
		dc.w	4,3-1
		dc.l	fontatr,BGIT04_S,0


fontatr		dc.l	FN_S
		dc.w	8
		dc.b	FSF_UNDERLINED
		dc.b	FPF_DISKFONT+FPF_DESIGNED


BGIT01_S	dc.b	'Sys to DF0',0
BGIT02_S	dc.b	'Sys to DF1',0
BGIT03_S	dc.b	'Sys to DF2',0
BGIT04_S	dc.b	'Sys to DF3',0
FN_S		dc.b	'topaz',0
WindowName	dc.b	'Assign',0		
DosName		dc.b	'dos.library',0
IntuitionName	dc.b	'intuition.library',0

Name_1		dc.b	0,'SYS',0
Name_2		dc.b	'DF0:',0
Name_3		dc.b	'C',0
Name_4		dc.b	'DF0:C',0
Name_5		dc.b	'S',0
Name_6		dc.b	'DF0:S',0
Name_7		dc.b	'LIBS',0
Name_8		dc.b	'DF0:LIBS',0
Name_9		dc.b	'DEVS',0
Name_10		dc.b	'DF0:DEVS',0
Name_11		dc.b	'FONTS',0
Name_12		dc.b	'DF0:FONTS',0
Name_13		dc.b	'L',0
Name_14		dc.b	'DF0:L',0


