;****************************************************************
;*		DECENT VIDI SOFTWARE BY BATFINK!		*
;****************************************************************

	incdir	df1:include/

	include	vidi/vidibase.i
	include	vidi/vidi_lib.i

	include	reqlib/reqbase.i

	include	intuition/intuition_lib.i
	include	intuition/intuition.i

	include	graphics/graphics_lib.i
	
	include	exec/exec_lib.i

	include	libraries/dos.i
	include	libraries/dosextens.i
	include	libraries/dos_lib.i


CALLOS	MACRO
	jsr	_LVO\1(a6)
	ENDM

RUN:	
	move.l	4,a6
	sub.l	a1,a1
	CALLOS	FindTask
	move.l	d0,MyTaskAdr			;Find this task addr

	lea	IntLibName(pc),a1		;Open Intuition Lib
	clr.l	d0
	CALLOS	OpenLibrary
	move.l	d0,IntBase	
	bne	IntLibOK
	move.l	#RETURN_FAIL,ReturnCode
	bra	Exit1

IntLibOk:
	lea	DosLibName(pc),a1		;Open Dos Lib
	clr.l	d0
	CALLOS	Openlibrary
	move.l	d0,DosBase
	bne	DosLibOK
	move.l	#RETURN_FAIL,ReturnCode
	bra	Exit2
	
DosLibOK:
	lea	GfxLibName(pc),a1		;Open Gfx Lib
	clr.l	d0
	CALLOS	Openlibrary
	move.l	d0,GfxBase
	bne	GfxLibOK
	move.l	#RETURN_FAIL,ReturnCode
	bra	Exit3

GfxLibOK:
	lea	VidiLibName(pc),a1		;Open Vidi Lib
	moveq	#3,d0				;Ver. 3.00
	CALLOS	Openlibrary
	move.l	d0,MyVidiBase
	bne	VidiLibOK
	move.l	#RETURN_FAIL,ReturnCode
	bra	Exit4

VidiLibOk:
	lea	ReqLibName(pc),a1		;Requester Lib
	move.l	#REQVERSION,d0
	CALLOS	Openlibrary
	move.l	d0,MyReqBase
	bne	ReqlibOk
	move.l	#RETURN_FAIL,ReturnCode
	bra	Exit5

ReqLibOk:
	move.l	MyVidiBase(pc),a6		;Take control of VIDI yehh!!
	move.l	#VIDI_PAL,d0	
;	CALLOS	OwnVidi
	tst.l	d0
;	bne	Exit6

;	CALLOS	SyncTest			;Test Incoming Signal
	cmp.b	#VIDI_NO_SYNC,d0	
;	beq	Exit7
	
	bsr	OpenMyScreen
	tst.l	d0
	bne	ScreenOK
	move.l	#RETURN_FAIL,d0
	bra	Exit8
ScreenOK:
	bsr	OpenMyWindow			;Open Main Screen + BackDrop 
	tst.l	d0				;Window
	bne	WindowOk
	move.l	#RETURN_FAIL,ReturnCode
	bra	Exit8

WindowOK:
	move.l	4,a6				;Get Memory For My Frame Table
	move.l	#500*4,d0
	move.l	#MEMF_CLEAR,d1
	CALLOS	Allocmem
	move.l	d0,FrameTable
	bne	FrameTabOk
	move.l	#RETURN_FAIL,ReturnCode
	bra	Exit9

FrameTabOk:
	move.l	d0,a0
	CALLOS	ViewPortAddress
	move.l	GfxBase(pc),a6
	move.l	d0,a0
	lea	ScreenColours(pc),a1
	moveq	#16,d0				;16 Shades Of Grey
;	CALLOS	LoadRGB4

;---------- Main Loop

.EventLoop:
	move.l	4,a6
	move.l	MySignalMask(pc),d0			
	CallOS	Wait			;Wait for a signal
	cmp.l	d0,d2			;SignalMask Matches My SignalMask?
	bne	.EventLoop		;Nope (weird?!) then try again
	bsr	HandleIDCMP		;Handle event 
	tst.l	d0			;Exit?
	beq	.EventLoop

;---------- Deallocate Resources

	moveq.l	#0,d0			;Want 0 Frames
	bsr	ChangeFrames		;Free up existing frames
	bsr	FreeDBuf		;Free up double buffer mem

	move.l	4,a6			;Free Frame Table Mem
	move.l	#500*4,d0
	move.l	FrameTable(pc),a1
	CALLOS	Freemem
Exit9:
	bsr	CloseMyWindow		;Close Screen+Window
Exit8:
	bsr	CloseMyScreen
	CALLOS	OpenWorkBench		;Make sure workbench is open
Exit7:
	move.l	MyVidiBase(pc),a6
;	CALLOS	DisownVidi
Exit6:
	move.l	4,a6			;Close Libs
	move.l	MyReqBase(pc),a1
	CALLOS	CloseLibrary
Exit5:
	move.l	MyVidiBase(pc),a1
	CALLOS	Closelibrary
Exit4:
	move.l	GfxBase(pc),a1
	CALLOS	Closelibrary
Exit3:
	move.l	Dosbase(pc),a1
	CALLOS	Closelibrary
Exit2:
	move.l	Intbase(pc),a1
	CALLOS	Closelibrary
Exit1:
	move.l	ReturnCode(pc),d0
	RTS				;Exit Program


;---------- Open/Close Main Screen (Opens Max Colours Possible In Memory)

OpenMyScreen:
	move.l	Intbase(pc),a6			;Open Custom Screen
.RetryOpen:
	lea	MyScreen(pc),a0
	CALLOS	OpenScreen	
	move.l	d0,MyScreenHandle
	bne	.DoneOpen
	sub.w	#1,MyScreenPlanes
	bne	.RetryOpen
.DoneOpen:	
	RTS

CloseMyScreen:
	move.l	IntBase(pc),a6
	move.l	MyScreenHandle(pc),a0
	CALLOS	CloseScreen
	RTS

;---------- Open/Close Main Window + Menus

OpenMyWindow:
	move.l	IntBase(pc),a6
	lea	MyWindow(pc),a0			;Open BackDrop Window
	CALLOS	OpenWindow
	move.l	d0,MyWindowHandle		;Push return code
	beq	.FailedOpen

	move.l	d0,a0				;setup IDCMP signal mask
	move.l	Wd_Userport(a0),a1		;^ Window Msg port
	move.l	a1,MyUserPort
	clr.l	d1
	move.b	Mp_Sigbit(a1),d1		;Got signal bit >>number<<
	moveq.l	#1,d2				
	lsl.l	d1,d2				;Number -> mask
	move.l	d2,MySignalMask	

	move.l	MyTaskAdr(pc),a1
	move.l	Pr_WindowPtr(a1),OldWindowPtr
	move.l	a0,Pr_WindowPtr(a1)		;Redirect System Requesters

	move.l	Wd_Rport(a0),MyWindowRPort	;Get Rastport
	lea	ProjectMenu(pc),a1
	CALLOS	SetMenuStrip			;Setup the menu
	bra	.DoneWindow

.FailedOpen:
	subq.w	#1,MyScreenPlanes
	beq	.DoneWindow			;No Hope!!
	bsr	CloseMyScreen			;Shut Down Screen
	bsr	OpenMyScreen			;Open Screen With Less Memory
	bra	OpenMyWindow			;Retry Open

.DoneWindow:
	move.l	MyWindowHandle(pc),d0			
	RTS

CloseMyWindow:
	move.l	MyTaskAdr(pc),a0
	move.l	OldWindowPtr(pc),Pr_WindowPtr(a0)	;Restore Sys Req.
	move.l	IntBase(pc),a6
	move.l	MyWindowHandle(pc),a0
	CALLOS	ClearMenuStrip
	move.l	MyWindowHandle(pc),a0
	CALLOS	CloseWindow
	RTS


;<<<<<<<<<< VARIABLES >>>>>>>>>>

MyWindowRPort:	dc.l	0
ReturnCode:	dc.l	0
Intbase:	dc.l	0
DosBase:	dc.l	0
GfxBase:	dc.l	0
MyReqBase:	dc.l	0
MyVidibase:	dc.l	0
MyWindowHandle:	dc.l	0
MyUserPort:	dc.l	0
MySignalMask:	dc.l	0
MyTaskAdr:	dc.l	0
OldWindowPtr:	dc.l	0
FrameTable:	dc.l	0
NumFrames:	dc.w	0
Logical:	dc.l	0
Physical:	dc.l	0
DBufBitmap:	dc.l	0
DBuffer_Flag:	dc.b	0,0

IntLibName:
	INTNAME
DosLibName:
	DOSNAME
VidiLibName:
	VIDINAME	
GfxLibName:
	GRAFNAME
ReqLibName:
	REQNAME
	even

;<<<<<<<<<< IDCMP HANDLER! >>>>>>>>>>

HandleIDCMP:
	movem.l	d2-d7/a0-a6,-(sp)
	clr.b	ExitFlag		;Clr Flag
	move.l	4,a6
	
;------- Get msg then send a reply

HandleLoop:
	move.l	MyUserPort(pc),a0
	CallOS	GetMsg			;Get the message
	move.l	d0,a1			;a1 = ^ Msg
	beq	DoneAllMessages		
	move.l	Im_Class(a1),d2		;D2.l=IDMCP TYPE
	move.w	Im_Code(a1),d3		;D3.w=INPUT CODE
	CallOS	ReplyMsg		;Back you bitch!

;----- Handle menu events

	cmp.l	#MENUPICK,d2		;Menu Item Chosen?
	bne	NotMenuEvent
	tst.w	d3			;Bad Selection?
	beq	DoneMsg
	move.w	d3,d0
	move.w	d3,d1
	move.w	d3,d2
	and.w	#%0000000000011111,d0	;d0.w=MENU NUMBER
	and.w	#%0000011111100000,d1
	lsr.w	#5,d1			;d1.w=ITEM NUMBER		
	and.w	#%1111100000000000,d2
	rol.w	#5,d2			;d2.w=SUBITEM NUMBER
	move.w	d0,MenuNumber		;Store for debugging!
	move.w	d1,ItemNumber
	move.w	d2,SubItemNumber
	move.w	d3,InputCode

;------- Project Menu Items

	cmp.w	#0,d0			
	bne	NotMenu0
	cmp.w	#2,d1			;*/ CLOSEWB ITEM /*
	bne	.NotMenu0Item2
	bsr	OPENCLOSEWB
	bra	DoneMsg
.NotMenu0Item2:
	cmp.w	#4,d1			;*/ ABOUT ITEM /*
	bne	.NotMenu0Item3
	bsr	PRINTABOUT
	bra	DoneMsg
.NotMenu0Item3:
	cmp.w	#5,d1			;*/ QUIT ITEM /*
	bne	DoneMsg

	move.l	MyReqBase(pc),a6	;Put Up Are You Sure Req.
	lea	QuitString(pc),a0
	sub.l	a1,a1
	bsr	TwoGadRequest
	tst.w	d0	
	beq	DoneMsg			;Cancelled
	st	ExitFlag		
	bra	DoneMsg			;Special Case
NotMenu0:

;---------- Frames Menu

	cmp.w	#1,d0
	bne	NotMenu1
	cmp.w	#0,d1			;*/ NUMBER ITEM /*
	bne	.NotMenu1Item0
	bsr	ADDSUBFRAMES
	bra	DoneMsg
.NotMenu1Item0:
	bra	DoneMsg
NotMenu1:
	
;---------- Vidi Menu

	cmp.w	#2,d0			;*/ VIDI MENU /*
	bne	NotMenu2
	cmp.w	#1,d1			;*/ GRAB ITEM /*
	bne	DoneMsg
	bsr	GRABFRAME
	bra	DoneMsg
NotMenu2:	

;---------- Screen Menu

	cmp.w	#3,d0			;*/SCREEN MENU/*
	bne	NotMenu3
	cmp.w	#0,d1			;*/ PALLETE ITEM /*
	bne	.NotMenu3Item0
	bsr	ChangePalette
	bra	DoneMsg
.NotMenu3Item0:
	cmp.w	#1,d1			;*/ PLANES ITEM /*
	bne	.NotMenu3Item1
	bsr	PLANESREQUESTER
	bra	DoneMsg
.NotMenu3Item1:
	cmp.w	#2,d1			;*/ DOUBLE BUFFER ITEM /*
	bne	DoneMsg
	bsr	TOGDBUFFER
	bra	DoneMsg
NotMenu3:


;------ Handle Gadget Events

NotMenuEvent:

DoneMsg:
;	bra	HandleLoop		;Get Nxt Msg
; WHY CANT I GET MORE THAN 1 MESSAGE!


;------ Exit The IDCMP Handler + Set Return Code

DoneAllMessages:
	move.b	ExitFlag(pc),d0
	ext.w	d0
	ext.l	d0
	movem.l	(sp)+,d2-d7/a0-a6
	RTS

menunumber:	dc.w	0
itemnumber:	dc.w	0
subitemnumber:	dc.w	0
InputCode:	dc.w	0
ExitFlag:	dc.b	0,0


;<<<<<<<<<< OPEN/CLOSE WORKBENCH ROUTINE >>>>>>>>>>

OpenCloseWb:
	movem.l	d2-d7/a0-a6,-(sp)

	move.l	IntBase(pc),a6
	lea	ProjectItem3(pc),a2	;^ Item
	move.w	Mi_Flags(a2),d2		;Item Flags
	and.w	#CHECKED,d2
	beq	.LiveWorkBench		;Checkmark Set?

	CALLOS	CloseWorkbench		;ASTA LA VISTA workbench	
	tst.l	d0			;Closed ok?
	bne	.DoneWb
	move.l	MyScreenHandle(pc),a0
	CALLOS	DisplayBeep		;Flash Warning
	move.w	#~CHECKED,d2
	and.w	d2,Mi_Flags(a2)		;Clr Checked Flag
	bra	.DoneWB
.LiveWorkBench:
	CALLOS	OpenWorkBench		;Return from the dead
	tst.l	d0
	beq	.FailedWBOpen
	CALLOS	WBenchToBack
	bra	.DoneWb
.FailedWBOpen:
	move.l	MyScreenHandle(pc),a0
	CALLOS	DisplayBeep
	or.w	#CHECKED,Mi_Flags(a2)		
.DoneWB:
	movem.l	(sp)+,d2-d7/a0-a6
	RTS

;<<<<<<<<<< ABOUT REQUESTER >>>>>>>>>>

PrintAbout:
	movem.l	d2-d7/a0-a6,-(sp)
	move.l	4,a6
	moveq.l	#0,d1			;Any Mem
	CALLOS	AvailMem
	move.l	d0,-(Sp)		;Push Free System Memory

	move.l	MyReqbase(pc),a6
	lea	AboutString(pc),a0
	move.l	Sp,a1
	bsr	SimpleRequest		
	addq.l	#4,Sp			;Restore stack 
	movem.l	(sp)+,d2-d7/a0-a6	
	RTS

;<<<<<<<<<< GRAB ROUTINE >>>>>>>>>>

GrabFrame:
	movem.l	d2-d7/a0-a6,-(sp)	;Push regs
;	move.l	GfxBase(pc),a6
;	CALLOS	WaitTOF
	move.l	MyVidiBase(pc),a6
	move.l	#SYNC_LACED,d0		;normal grab type
	move.l	#125,d1			;medium brightness
	move.l	#32,d2			;offset from TOF
	CALLOS	Grabframe
	move.l	MyWindowHandle(pc),a0
	move.l	Wd_Rport(a0),a0
	move.l	Rp_Bitmap(a0),a0	;^ Window bitmap
	move.l	#LOW_FIRST,d0		;normal grab
	moveq	#4,d1			;16 colours!
	CALLOS	ReadBitmap	
	movem.l	(sp)+,d2-d7/a0-a6	;Push regs
	RTS

;<<<<<<<<<< ADD OR DELETE FRAMES >>>>>>>>>>

AddSubFrames:
	sub.l	#Gl_SIZEOF,Sp		;Reserve Some Stack Space
	move.l	Sp,a0		
	moveq	#Gl_SIZEOF/2-1,d0
.l	clr.w	(a0)+			;Clr The Memory
	dbra	d0,.l
	moveq.l	#0,d0
	move.w	NumFrames(pc),d0
	move.l	#AskFramesString,Gl_TitleBar(sp)	;Insrt Data
	move.l	d0,Gl_Defaultval(sp)
	move.l	#1,Gl_MinLimit(sp)
	move.l	#500,Gl_MaxLimit(sp)

	move.l	MyReqBase(pc),a6	;Put Up Frames Requester
	move.l	Sp,a0
	CALLOS	GetLong
	move.l	Gl_Result(Sp),d0	;Got required planes
	add.l	#Gl_SIZEOF,Sp
	tst.l	d0			;Cancel?
	beq	.DoneFramesReq

	bsr	ChangeFrames

	move.l	MyReqbase(pc),a6	;Put Up Alloced Frames Requester
	lea	FramesString(pc),a0
	moveq.l	#0,d0
	move.w	NumFrames(pc),d0
	move.l	d0,-(sp)
	move.l	Sp,a1			;^ Frame num
	bsr	SimpleRequest		
	addq.l	#4,Sp			;Restore Stack
.DoneFramesReq:
	RTS

;------- JUMPS HERE ON EXIT TO FREE UP REMAINING FRAMES
;	 d0 = Number Of Frames Required

ChangeFrames:
	move.l	MyVidiBase(pc),a6
	move.w	d0,d7
	move.w	NumFrames(pc),d0
	cmp.w	d0,d7			;WantedNum = ActualNum Then Exit
	beq.s	.DoneAddFrames
	move.w	d0,d6			;d6=Frame Counter
	move.w	d0,d1
	lsl.w	#2,d1			;*4
	move.l	FrameTable(pc),a2
	lea	(a2,d1.w),a2		;a2=Place In Frame Table
	sub.w	d0,d7			;d7=loop
	bmi	DeleteFrames

	subq.w	#1,d7
.AddLoop:
	move.l	#ANY_BITMAP,d0
	move.l	#320,d1
	move.l	#256,d2
	moveq.l	#4,d3
	CALLOS	AllocBitmap
	move.l	d0,(a2)+		;Insert Bitmap ^
	tst.l	d0
	beq	.BadAlloc
	addq.w	#1,d6			;Set Counter +1 Bitmap
	cmp.w	#500,d6			;Reached Maximum Frame no.?
	dbra	d7,.AddLoop	
	bra	.GotAllFrames
.BadAlloc:
	moveq.l	#-1,d0			;Set Error Flag
	bra	.DoneAddFrames
.GotAllFrames:	
	moveq.l	#0,d0			;Set Ok Flag
.DoneAddFrames:
	move.w	d6,NumFrames		;Store New Num. Of Frames
	RTS


DeleteFrames:
	not.w	d7			;Convert from -tve to +ve
.DelLoop:
	move.l	-(a2),a0		;Fetch Prev. Frame ^
	CALLOS	FreeBitmap
	sub.w	#1,NumFrames
	dbra	d7,.DelLoop
	RTS


;<<<<<<<<<< THE PALETTE REQUESTER >>>>>>>>>>

ChangePalette:
	move.l	MyReqBase(pc),a6
	moveq.l	#1,d0			;Initial Pen Number
	CALLOS	ColorRequester
	RTS

;<<<<<<<<<< PLANES REQUESTER >>>>>>>>>>

PlanesRequester:
	movem.l	d2-d7/a0-a6,-(sp)

	sub.l	#Gl_SIZEOF,Sp		;Reserve Some Stack Space
	move.l	Sp,a0		
	moveq	#Gl_SIZEOF/2-1,d0
.l	clr.w	(a0)+			;Clr The Memory
	dbra	d0,.l

	moveq.l	#0,d0
	move.w	MyScreenPlanes(pc),d0
	move.l	#MyPlanesReqString,Gl_TitleBar(sp)	;Insrt Data
	move.l	d0,Gl_Defaultval(sp)
	move.l	#1,Gl_MinLimit(sp)
	move.l	#4,Gl_MaxLimit(sp)

	move.l	MyReqBase(pc),a6
	move.l	Sp,a0
	CALLOS	GetLong
	move.l	Gl_Result(Sp),d0	;Got required planes
	add.l	#Gl_SIZEOF,Sp
	tst.l	d0			;Cancel?
	beq	.DonePlanesReq

	move.w	d0,MyScreenPlanes	;Insert In Screen Struct
	bsr	CloseMyWindow		;Shut Down Window
	bsr	CloseMyScreen
	bsr	OpenMyScreen		;Reopen Screen+Window
	bsr	OpenMyWindow
	bsr	OpenCloseWb		;Check Workbench is in the right state

	bsr	FreeDBuf		;Free Up Double Buffer
	bsr	TogDBuffer		;Allocate A New One (New Planes)

.DonePlanesReq:
	movem.l	(sp)+,d2-d7/a0-a6
	RTS


;<<<<<<<<<< SETUP DOUBLE BUFFERING FOR THE GRAB >>>>>>>>>>

;------ ENTRY POINT FROM THE MENU ------

TogDBuffer:
	move.l	MyVidiBase(pc),a6
	lea	ScreenItem3(pc),a0
	move.w	Mi_Flags(a0),d0		;Examine CheckMark
	and.w	#CHECKED,d0
	bne	AllocDBuf		;CheckMark Set?	


FreeDBuf:
	tst.b	DBuffer_Flag		;No Bitmap to deallocate?
	beq	DoneTogDBuf
	move.l	DBufBitmap(pc),a0
	CALLOS	FreeBitmap		;Free Up Bitmap	
	clr.b	DBuffer_Flag		;Indicate to bitmap to dbuffer
	bra	DoneTogDBuf

AllocDBuf:
	tst.b	DBuffer_Flag
	bne	DoneTogDBuf		;Bitmap already allocated?
	moveq.l	#0,d0
	move.l	#320,d1
	move.l	#256,d2
	moveq.l	#0,d3
	move.w	MyScreenPlanes(pc),d3
	CALLOS	AllocBitmap		;Allocate one
	move.l	d0,DBufBitmap
	bne	.GotBm			;Failed To Get Bitmap?

	lea	ScreenItem3(pc),a0
	move.w	#~CHECKED,d0
	and.w	d0,Mi_Flags(a0)		;Clr Checked Flag
	
	move.l	MyReqbase(pc),a6
	lea	NoMemString(pc),a0
	lea	DBufOpString(pc),a1
	bsr	SimpleRequest		;Put Up Insufficient mem req
	bra	DoneTogDBuf
.GotBm:
	st	DBuffer_Flag		;Indicate O.k to dbuffer	
DoneTogDBuf:


********** FOR DEBUGGING %s FAILs~! **************

	move.l	MyReqbase(pc),a6
	lea	NoMemString(pc),a0
	lea	DBufOpString(pc),a1
	bsr	SimpleRequest		;Put Up Insufficient mem req
	RTS

*************************************************
*	EXTRA ROUTINES TAKEN FROM REQGLUE.O	*
*************************************************

;>>>>>>>>>> TwoGadRequest(String,Controls) <<<<<<<<<<
;                     A0      A1

TwoGadRequest:
	MOVEM.L	A2-A4/D2,-(sp)
	LEA.L	SureText,A2
	LEA.L	CancelText,A3
	BRA.S	TheRequest
SimpleRequest:

;>>>>>>>>>> SimpleRequest(Text,Controls) <<<<<<<<<<
;               A0	A1

	MOVEM.L	A2-A4/D2,-(sp)
	SUBA.L	A2,A2
	LEA.L	ResumeText,A3
TheRequest:
	SUB.W	#TReq_SIZEOF,SP		;get some temporary storage.
	MOVE.L	SP,A4
	MOVEQ	#TReq_SIZEOF/2-1,D2
.l	CLR.W	(A4)+
	DBF	D2,.l
	MOVE.L	A0,TR_Text(SP)
	MOVE.L	A1,TR_Controls(SP)
	MOVE.L	A2,TR_PositiveText(SP)
	MOVE.L	A3,TR_NegativeText(SP)
	MOVE.W	#$FFFF,TR_KeyMask(SP)
	MOVE.L	SP,A0
	JSR	_LVOTextRequest(A6)
	ADD.W	#TReq_SIZEOF,SP
	MOVEM.L	(sp)+,A2-A4/D2
	RTS

SureText	DC.B	"  Ok  ",0
CancelText	DC.B	"Cancel",0
ResumeText	DC.B	"Resume",0
	even

;********************************************************
;*		INTUITION DATA STRUCTURES!		*
;********************************************************

ScreenColours:
A	Set	$0000			;Grayscale colours
	Rept	16
	dc.w	A
A	Set	A+$0111
	Endr


;<<<<<<<<<< MY LORES SCREEN >>>>>>>>>>

MyScreen:
	dc.w	0,0			;x,y
	dc.w	320,256			;stnd. PAL
MyScreenPlanes:	dc.w	4		;Planes
	dc.b	2,1			;detail/block pen
	dc.w	0			;Viewmodes
	dc.w	CUSTOMSCREEN		;Type
	dc.l	0			;Stnd. font
	dc.l	MyScreenTitle
	dc.l	0			;Gadgets
	dc.l	0			;Bitmap

MyScreenTitle:
	dc.b	'GraBBeR!',0
	even

;<<<<<<<<<< MY LORES WINDOW >>>>>>>>>>

MyWindow:
	dc.w	0,0			;x/y
	dc.w	320,256			;width/height
	dc.b	-1,-1			;detail/blockpen
	dc.l	MENUPICK!GADGETUP	;IDCMP flags
	dc.l	SMART_REFRESH!BACKDROP!ACTIVATE!BORDERLESS
	dc.l	0			;Gadgets
	dc.l	0			;Stnd. Images
	dc.l	0			;Title
MyScreenHandle:	
	dc.l	0			;^ Screen
	dc.l	0			;^ Bitmap
	dc.w	0,0			
	dc.w	0,0			;Min/Max Width/Height
	dc.w	CUSTOMSCREEN

;<<<<<<<<<< MENU STRUCTURES >>>>>>>>>>

IWidth=314/4
IHeight=10

;---------- Project Menu -----------

ProjectMenu:
	dc.l	FramesMenu		;Nxt. Menu
	dc.w	0,0			;Left/Top Edge
	dc.w	IWidth,IHeight		;Width/Height
	dc.w	MENUENABLED
	dc.l	ProjectName
	dc.l	ProjectItem1
	ds.w	4			;JazzX/Y | BeautX/Y

ProjectName:
	dc.b	'Project',0
	even

ProjectItem1:
	dc.l	ProjectItem2		;Nxt Item
	dc.w	0,0			;Left/Top edge
	dc.w	IWidth,IHeight		;Width/Height
	dc.w	HIGHCOMP!ITEMTEXT!ITEMENABLED!COMMSEQ
	dc.l	0			;Mutual Exclude bits
	dc.l	ProjectItem1Txt		;Text
	dc.l	0			;No special select stuff
	dc.b	'S',0			;Command key
	dc.l	0			;No sub item
	dc.w	0			;Private
ProjectItem1Txt:
	dc.b	2,1			;Front/Back pen
	dc.b	RP_JAM1,0		;Drawmode/pad
	dc.w	0,0			;Left/Top Edge
	dc.l	0			;No Text Attr Struct
	dc.l	ProjectItem1TxtTxt
	dc.l	0			;Link
ProjectItem1TxtTxt:
	dc.b	'Save.',0
	even

ProjectItem2:
	dc.l	ProjectItem3		;Nxt Item
	dc.w	0,IHeight		;Left/Top edge
	dc.w	IWidth,IHeight		;Width/Height
	dc.w	HIGHCOMP!ITEMTEXT!ITEMENABLED
	dc.l	0			;Mutual Exclude bits
	dc.l	ProjectItem2Txt		;Text
	dc.l	0			;No special select stuff
	dc.b	's',0			;Command key
	dc.l	0			;No sub item
	dc.w	0			;Private
ProjectItem2Txt:
	dc.b	2,1			;Front/Back pen
	dc.b	RP_JAM1,0		;Drawmode/pad
	dc.w	0,0			;Left/Top Edge
	dc.l	0			;No Text Attr Struct
	dc.l	ProjectItem2TxtTxt
	dc.l	0			;Link
ProjectItem2TxtTxt:
	dc.b	'SaveAs.',0
	even

ProjectItem3:
	dc.l	ProjectItem4		;Nxt Item
	dc.w	0,IHeight*2		;Left/Top edge
	dc.w	IWidth,IHeight		;Width/Height
	dc.w	HIGHCOMP!ITEMTEXT!ITEMENABLED!CHECKIT!MENUTOGGLE
	dc.l	0			;Mutual Exclude bits
	dc.l	ProjectItem3Txt		;Text
	dc.l	0			;No special select stuff
	dc.b	0,0			;Command key
	dc.l	0			;No sub item
	dc.w	0			;Private
ProjectItem3Txt:
	dc.b	2,1			;Front/Back pen
	dc.b	RP_JAM1,0		;Drawmode/pad
	dc.w	0,0			;Left/Top Edge
	dc.l	0			;No Text Attr Struct
	dc.l	ProjectItem3TxtTxt
	dc.l	0			;Link
ProjectItem3TxtTxt:
	dc.b	'  CloseWB',0
	even

ProjectItem4:
	dc.l	ProjectItem5		;Nxt Item
	dc.w	0,IHeight*3		;Left/Top edge
	dc.w	IWidth,IHeight		;Width/Height
	dc.w	HIGHCOMP!ITEMTEXT!ITEMENABLED
	dc.l	0			;Mutual Exclude bits
	dc.l	ProjectItem4Txt		;Text
	dc.l	0			;No special select stuff
	dc.b	0,0			;Command key
	dc.l	0			;No sub item
	dc.w	0			;Private
ProjectItem4Txt:
	dc.b	2,1			;Front/Back pen
	dc.b	RP_JAM1,0		;Drawmode/pad
	dc.w	0,0			;Left/Top Edge
	dc.l	0			;No Text Attr Struct
	dc.l	ProjectItem4TxtTxt
	dc.l	0			;Link
ProjectItem4TxtTxt:
	dc.b	'Help!.',0
	even

ProjectItem5:
	dc.l	ProjectItem6		;Nxt Item
	dc.w	0,IHeight*4		;Left/Top edge
	dc.w	IWidth,IHeight		;Width/Height
	dc.w	HIGHCOMP!ITEMTEXT!ITEMENABLED!COMMSEQ
	dc.l	0			;Mutual Exclude bits
	dc.l	ProjectItem5Txt		;Text
	dc.l	0			;No special select stuff
	dc.b	'a',0			;Command key
	dc.l	0			;No sub item
	dc.w	0			;Private
ProjectItem5Txt:
	dc.b	2,1			;Front/Back pen
	dc.b	RP_JAM1,0		;Drawmode/pad
	dc.w	0,0			;Left/Top Edge
	dc.l	0			;No Text Attr Struct
	dc.l	ProjectItem5TxtTxt
	dc.l	0			;Link
ProjectItem5TxtTxt:
	dc.b	'About.',0
	even

ProjectItem6:
	dc.l	0			;Nxt Item
	dc.w	0,IHeight*5		;Left/Top edge
	dc.w	IWidth,IHeight		;Width/Height
	dc.w	HIGHCOMP!ITEMTEXT!ITEMENABLED
	dc.l	0			;Mutual Exclude bits
	dc.l	ProjectItem6Txt		;Text
	dc.l	0			;No special select stuff
	dc.b	0,0			;Command key
	dc.l	0			;No sub item
	dc.w	0			;Private
ProjectItem6Txt:
	dc.b	2,1			;Front/Back pen
	dc.b	RP_JAM1,0		;Drawmode/pad
	dc.w	0,0			;Left/Top Edge
	dc.l	0			;No Text Attr Struct
	dc.l	ProjectItem6TxtTxt
	dc.l	0			;Link
ProjectItem6TxtTxt:
	dc.b	'Quit',0
	even


;---------- Frames Menu ---------

FramesMenu:
	dc.l	VidiMenu		;Nxt. Menu
	dc.w	IWidth,0		;Left/Top Edge
	dc.w	IWidth,IHeight		;Width/Height
	dc.w	MENUENABLED
	dc.l	FramesName
	dc.l	FramesItem1
	ds.w	4			;JazzX/Y | BeautX/Y

FramesName:
	dc.b	'Frames',0
	even

FramesItem1:
	dc.l	0			;Nxt Item
	dc.w	0,0			;Left/Top edge
	dc.w	IWidth,IHeight		;Width/Height
	dc.w	HIGHCOMP!ITEMTEXT!ITEMENABLED!COMMSEQ
	dc.l	0			;Mutual Exclude bits
	dc.l	FramesItem1Txt		;Text
	dc.l	0			;No special select stuff
	dc.b	'f',0			;Command key
	dc.l	0			;No sub item
	dc.w	0			;Private

FramesItem1Txt:
	dc.b	2,1			;Front/Back pen
	dc.b	RP_JAM1,0		;Drawmode/pad
	dc.w	0,0			;Left/Top Edge
	dc.l	0			;No Text Attr Struct
	dc.l	FramesItem1TxtTxt
	dc.l	0			;Link
FramesItem1TxtTxt:
	dc.b	'Alloc.',0
	even

;---------- Vidi Menu ---------

VidiMenu:
	dc.l	Screenmenu		;Nxt. Menu
	dc.w	IWidth*2,0		;Left/Top Edge
	dc.w	IWidth,IHeight		;Width/Height
	dc.w	MENUENABLED
	dc.l	MVidiName
	dc.l	VidiItem1
	ds.w	4			;JazzX/Y | BeautX/Y

MVidiName:
	dc.b	'Vidi',0
	even

VidiItem1:
	dc.l	VidiItem2		;Nxt Item
	dc.w	0,0			;Left/Top edge
	dc.w	IWidth,IHeight		;Width/Height
	dc.w	HIGHCOMP!ITEMTEXT!ITEMENABLED
	dc.l	0			;Mutual Exclude bits
	dc.l	VidiItem1Txt		;Text
	dc.l	0			;No special select stuff
	dc.b	0,0			;Command key
	dc.l	0			;No sub item
	dc.w	0			;Private
VidiItem1Txt:
	dc.b	2,1			;Front/Back pen
	dc.b	RP_JAM1,0		;Drawmode/pad
	dc.w	0,0			;Left/Top Edge
	dc.l	0			;No Text Attr Struct
	dc.l	VidiItem1TxtTxt
	dc.l	0			;Link
VidiItem1TxtTxt:
	dc.b	'Prefs..',0
	even

VidiItem2:
	dc.l	0			;Nxt Item
	dc.w	0,Iheight		;Left/Top edge
	dc.w	IWidth,IHeight		;Width/Height
	dc.w	HIGHCOMP!ITEMTEXT!ITEMENABLED!COMMSEQ
	dc.l	0			;Mutual Exclude bits
	dc.l	VidiItem2Txt		;Text
	dc.l	0			;No special select stuff
	dc.b	'g',0			;Command key
	dc.l	0			;No sub item
	dc.w	0			;Private
VidiItem2Txt:
	dc.b	2,1			;Front/Back pen
	dc.b	RP_JAM1,0		;Drawmode/pad
	dc.w	0,0			;Left/Top Edge
	dc.l	0			;No Text Attr Struct
	dc.l	VidiItem2TxtTxt
	dc.l	0			;Link
VidiItem2TxtTxt:
	dc.b	'Grab..',0
	even



;---------- Screen Menu ---------

ScreenMenu:
	dc.l	0			;Nxt. Menu
	dc.w	IWidth*3,0		;Left/Top Edge
	dc.w	IWidth,IHeight		;Width/Height
	dc.w	MENUENABLED
	dc.l	MScreenName
	dc.l	ScreenItem1
	ds.w	4			;JazzX/Y | BeautX/Y

MScreenName:
	dc.b	'Screen',0
	even

ScreenItem1:
	dc.l	ScreenItem2		;Nxt Item
	dc.w	0,0			;Left/Top edge
	dc.w	IWidth,IHeight		;Width/Height
	dc.w	HIGHCOMP!ITEMTEXT!ITEMENABLED
	dc.l	0			;Mutual Exclude bits
	dc.l	ScreenItem1Txt		;Text
	dc.l	0			;No special select stuff
	dc.b	0,0			;Command key
	dc.l	0			;No sub item
	dc.w	0			;Private
ScreenItem1Txt:
	dc.b	2,1			;Front/Back pen
	dc.b	RP_JAM1,0		;Drawmode/pad
	dc.w	0,0			;Left/Top Edge
	dc.l	0			;No Text Attr Struct
	dc.l	ScreenItem1TxtTxt
	dc.l	0			;Link
ScreenItem1TxtTxt:
	dc.b	'Palette.',0
	even

ScreenItem2:
	dc.l	ScreenItem3		;Nxt Item
	dc.w	0,IHeight		;Left/Top edge
	dc.w	IWidth,IHeight		;Width/Height
	dc.w	HIGHCOMP!ITEMTEXT!ITEMENABLED!COMMSEQ
	dc.l	0			;Mutual Exclude bits
	dc.l	ScreenItem2Txt		;Text
	dc.l	0			;No special select stuff
	dc.b	'b',0			;Command key
	dc.l	0			;No sub item
	dc.w	0			;Private
ScreenItem2Txt:
	dc.b	2,1			;Front/Back pen
	dc.b	RP_JAM1,0		;Drawmode/pad
	dc.w	0,0			;Left/Top Edge
	dc.l	0			;No Text Attr Struct
	dc.l	ScreenItem2TxtTxt
	dc.l	0			;Link
ScreenItem2TxtTxt:
	dc.b	'Planes',0
	even

ScreenItem3:
	dc.l	0			;Nxt Item
	dc.w	0,IHeight*2		;Left/Top edge
	dc.w	IWidth,IHeight		;Width/Height
	dc.w	HIGHCOMP!ITEMTEXT!ITEMENABLED!CHECKIT!MENUTOGGLE
	dc.l	0			;Mutual Exclude bits
	dc.l	ScreenItem3Txt		;Text
	dc.l	0			;No special select stuff
	dc.b	0,0			;Command key
	dc.l	0			;No sub item
	dc.w	0			;Private
ScreenItem3Txt:
	dc.b	2,1			;Front/Back pen
	dc.b	RP_JAM1,0		;Drawmode/pad
	dc.w	0,0			;Left/Top Edge
	dc.l	0			;No Text Attr Struct
	dc.l	ScreenItem3TxtTxt
	dc.l	0			;Link
ScreenItem3TxtTxt:
	dc.b	'  DBuf.',0
	even

;<<<<<<<<<< PLANES REQUSTER >>>>>>>>>>

MyPlanesReqString:
	dc.b	'Bitplanes',0
	even

;<<<<<<<<<< ABOUT REQUESTER >>>>>>>>>>

AboutString:
	dc.b	'GraBBeR:',10
	dc.b	'!BaTfiNk! Of Quartz 1992',10
	dc.b	10
	dc.b	'61 Elmete Ave',10
	dc.b	'Sherburn-In-Elmet',10
	dc.b	'Nr Leeds',10
	dc.b	'LS25-6EH',10
	dc.b	'ENGLAND',10
	dc.b	10
	dc.b	'      Free System Memory: %ld',0

;<<<<<<<<<< QUIT REQUESTER >>>>>>>>>>

QuitString:
	dc.b	'Sure You Want To Quit?',0	

;<<<<<<<<<< ASK FRAMES REQ >>>>>>>>>>>>

AskFramesString:
	dc.b	'Allocate Frames:',0
	
;<<<<<<<<<< ALLOCED FRAMES REQUESTER >>>>>>>>>>

FramesString:	
	dc.b	'%ld Frames Are Allocated.',0

;<<<<<<<<<< NOT ENOUGH MEMORY REQUESTER >>>>>>>>>

NomemString:
	dc.b	'Insufficient Memory For',10
	dc.b 	" %s Operation Is Availible",10,0

DBufOpString:
	dc.b	'Double Buffer',0
	even

