;Set your editor's TAB width to 3

 ;====Uncomment these directives for MANX asm only!! Advice: Buy a good asm.
 ; far   code ;so that we can use register a4, and no limit on program size.
 ; far   data

	ADDSYM
	SMALLOBJ ;CAPE PC directive. Comment out if not using CAPE
	OBJFILE	"rad:CustomList.o"

; This program opens and utilizes the requester.library in order to use
; the new SPECIAL_REQ flag. This flag allows us to display a list of
; strings in a requester with all the features of the FileIO requester.
; Because version 0 of the library did not support this feature, but version
; 1.? now does, we must open the library with version #1. Old applications
; that do not know about SPECIAL_REQ will still work with this version of
; the library. It is backward compatible as far as the disk IO features are
; concerned. This program also demos how to use the StartHandler custom
; vector to add gadgets to the requester, the GadgetHandler custom vector to
; handle those gadgets, and how to alter the wakeup mask so that the
; StartHandler is called for these events (i.e. in case you want to be able
; to also handle a msg at another port in addition to window IDCMP msgs).
; You can also use these custom handlers in this manner when doing normal
; filename selection with the requester.

; If running this program from the CLI and you specify any argument on the
; command (i.e.  1> TestFileIO blort ), then the window will open on a hires
; screen. You can then see what the requester looks like in hires.

;  For Manx,   ln -o TestFileIO  ManxStartUp.o  main.o  cl32.lib
;
;  For Others, Blink StartUp.o main.o amiga.lib NODEBUG to TestFileIO

	INCLUDE	"rad:FileIO.i"

	;======Amiga Library routines======
	XREF	_LVOCloseLibrary,_LVOCloseScreen,_LVOCloseWindow,_LVOSetMenuStrip
	XREF	_LVOOpenWindow,_LVOOpenScreen,_LVOOpenLibrary
	XREF	_LVOGetMsg,_LVOReplyMsg,_LVOWait,_LVOMove,_LVOText
	XREF	_LVOSetAPen,_LVOSetBPen,_LVOSetDrMd

	;======From the startup code======
	XREF	_SysBase,_DOSBase

LIB_VERSION	equ	33

	SECTION	FileIOTestCode,CODE

	XDEF	_main
_main:
		movem.l	d2-d7/a2-a6,-(sp)
		movea.l	_SysBase,a6
;======Open The Intuition Library=======
		moveq		#LIB_VERSION,d0
		lea		IntuitionName,a1
		jsr		_LVOOpenLibrary(a6)
		lea		_IntuitionBase,a4
		move.l	d0,(a4)+
		beq		C7
;======Open The Graphics Library========
		moveq		#LIB_VERSION,d0
		lea		GfxName,a1
		jsr		_LVOOpenLibrary(a6)
		move.l	d0,(a4)+
		beq		C6
;*******Open the "Brand New, Improved, Exciting" Requester library*********
		moveq		#1,d0				;version #1 please
		lea		RequesterName,a1
		jsr		_LVOOpenLibrary(a6)
		move.l	d0,(a4)+
		beq		C5
;=====If started from WBench, then don't open a CUSTOM screen
		movea.l	_IntuitionBase,a6
		move.l	52(sp),d0
		beq.s		.9
;=====If opened from CLI with any argument, then open CUSTOM screen
		subq.l	#2,48(sp)
		bcs.s		.9
		lea		newScreen,a0
		jsr		_LVOOpenScreen(a6)
		lea		newWindow,a0
	;---Window's Screen = ScreenPtr
		move.l	d0,30(a0)
		beq.s		.9A			;If an error, forget the screen!
	;---Window's Type = CUSTOMSCREEN
		move.w	#15,46(a0)
;=========Open the FileIO window==========
.9		lea		newWindow,a0
.9A	jsr		_LVOOpenWindow(a6)
		move.l	d0,(a4)+
		beq		C2
		movea.l	d0,a3
	;---Get Window's RastPort
		move.l	50(a3),(a4)
		lea		ProjectMenu,a1
		movea.l	a3,a0
		jsr		_LVOSetMenuStrip(a6)
;---Get a FileIO structure
E1		movea.l	_RequesterBase,a6
		jsr		_LVOGetFileIO(a6)
		movea.l	d0,a4
		move.l	d0,d1
		beq		IOe		;If NULL, then error, so exit this test program.
;---Set Colors and DrawMode
		moveq		#1,d0
		move.b	d0,FILEIO_DRAWMODE(a4)
		movea.l	RastPort,a2
		movea.l	a2,a1
		movea.l	_GfxBase,a6
		jsr		_LVOSetDrMd(a6)
		moveq		#2,d0
		move.b	d0,FILEIO_PENA(a4)
		movea.l	a2,a1
		jsr		_LVOSetAPen(a6)
		moveq		#0,d0
		move.b	d0,FILEIO_PENB(a4)
		movea.l	a2,a1
		jsr		_LVOSetBPen(a6)
;====VERY IMPORTANT: Indicate that we want a SPECIAL_REQ==========
		bset.b	#7,(a4)  ;set the SPECIAL_REQ bit of Flags
;====Set up the XY co-ordinates of where the requester will open====
		moveq		#6,d0
		move.w	d0,FILEIO_X(a4)	;x position
		moveq		#11,d0
		move.w	d0,FILEIO_Y(a4)	;y position
;===========SET UP OUR LIST OF STRINGS==========
;NOTE: Since our list is initially empty, we don't have to call NewEntryList
;first, but we will anyway to develop good habits.
		movea.l	_RequesterBase,a6
		movea.l	a4,a1
		jsr		_LVONewEntryList(a6)
		lea		StringAddr,a2
		moveq		#10-1,d7			;make a list of 10 strings
nxtEN	move.l	d7,d1
		addq.w	#1,d1				;ID = loopcount+1 (i.e. 1 to 10)
		movea.l	a4,a1
		movea.l	(a2)+,a0
		jsr		_LVOAddEntry(a6)
		dbra		d7,nxtEN
;---Set up our routine, Information(), as the custom FileIO gadget routine
;   We don't have to set up these 2 fields, we could leave them 0 in which
;   case the custom gadget is ignored.
		lea		About,a0
		move.l	a0,FILEIO_TEXT(a4)
		lea		Information,a0
		move.l	a0,FILEIO_ROUTINE(a4)
;---Add our Custom vectors (i.e. for StartHandler and GadgetHandler)
		lea		HandlerBlock,a0
		move.l	a0,FILEIO_CUSTOM(a4)
		bset.b	#CUSTOM_HANDLERS-8,(a4)
;====Create a mask of the Window's UserPort's mp_Sigbit=====
E3		movea.l	86(a3),a0
		move.b	15(a0),d0
		moveq		#0,d7
		Bset.l	d0,d7
;=====Get the message that arrived at our UserPort====
E4		movea.l	86(a3),a0
		movea.l	_SysBase,a6
		jsr		_LVOGetMsg(a6)
		move.l	d0,d1
		bne.s		E7
;===Check if we are ready to exit the program=====
E5		Btst.b	#0,Quit
		beq		E15
;---Print out "Click Mouse to start demo....
		movea.l	RastPort,a2
		moveq		#5,d0
		moveq		#75,d1
		movea.l	a2,a1				;our window's RastPort
		move.l	a6,-(sp)			;save _SysBase
		movea.l	_GfxBase,a6
		jsr		_LVOMove(a6)
		moveq		#36,d0			;# of bytes to output.
		lea		Click,a0
		movea.l	a2,a1
		jsr		_LVOText(a6)
		movea.l	(sp)+,a6			;restore _SysBase
;===Wait for a message sent to our Window (from Intuition)===
E6		move.l	d7,d0
		jsr		_LVOWait(a6)
		bra.s		E4
;====Copy all the info we want from the IntuiMessage====
E7		movea.l	d0,a1
		lea		20(a1),a0	;get the address of the first field to copy.
		move.l	(a0)+,d6		;Class field to d6
		move.w	(a0)+,d5		;Code field to d5
		move.w	(a0)+,d4		;Qualifier field to d4
		movea.l	(a0)+,a2		;IAddress field to a2
		move.w	(a0)+,d3		;MouseX position to d3
		move.w	(a0)+,d2		;MouseY position to d2
;====Now reply to the message so Intuition can dispose of it
E8		;Address of the message is in a1.
		jsr		_LVOReplyMsg(a6)
;========switch (class)=========
		Bclr.l	#9,d6		;CLOSEWINDOW
		bne.s		CW
		Bclr.l	#8,d6		;MENUPICK
		bne.s		MU
		Bclr.l	#3,d6		;MOUSEBUTTONS
		beq		E4
;---Make sure that it's an UP select if MOUSEBUTTONS
		subi.b	#$68,d5
		beq		E4			;ignore down
;===The FOLLOWING ROUTINE IS OUR TEST CALL. WHEN THE USER IS DONE (in FileIO lib)
;===HE WILL SELECT EITHER THE CANCEL OR OK! GADGET. IF CANCEL, TestFileIO
;===DOES NOTHING. IF OK!, TestFileIO JUSTS PRINTS THE SELECTED STRING.
E2		bsr		TestFileIO
		bra		E4
;=========case CLOSEWINDOW:============
CW		Bclr.b	#0,Quit
		bra		E4
;=========case MENUPICK:==============
	;---Determine which item
MU		lsr.w		#5,d5			;Shift the item # bits into lowest bits of reg.
		andi.w	#$3F,d5		;Isolate the Item # from the Menu and subitem #.
		bne		E4
	;---Set MULTIPLE_FILES
		bchg.b	#MULTIPLE_FILES,1(a4)
		bra		E4
;======if an error, indicate NO_MEMORY. This is a FileIO routine
;======and is callable even if GetFileIO() fails
IOe	movea.l	a3,a0
		moveq		#0,d0
		movea.l	_RequesterBase,a6
		jsr		_LVOAutoFileMessage(a6)
;========NOW BEGINS OUR EXIT ROUTINE=========
 ;ReleaseFileIO will free our list of strings
E15	movea.l	a4,a1                ;If the pointer to FileIO was NULL, then
		movea.l	_RequesterBase,a6    ;ReleaseFileIO just returns, so it's safe to
		jsr		_LVOReleaseFileIO(a6) ;always release any return value of GetFileIO.
;=====Close the Window and Screen======
C1		movea.l	_IntuitionBase,a6
		movea.l	a3,a0
		jsr		_LVOCloseWindow(a6)
C2		move.l	ScreenPtr,d0
		beq.s		C3            ;check if we specified a screen
		movea.l	d0,a0
		; _IntuitionBase in a6
		jsr		_LVOCloseScreen(a6)
;=====Close Whichever Libs are Open (_SysBase in a6 for ALL calls)=====
C3		movea.l	_SysBase,a6
		movea.l	_RequesterBase,a1
		jsr		_LVOCloseLibrary(a6)
C5		movea.l	_GfxBase,a1
		jsr		_LVOCloseLibrary(a6)
C6		movea.l	_IntuitionBase,a1
		jsr		_LVOCloseLibrary(a6)
C7		movem.l	(sp)+,d2-d7/a2-a6
		rts

;*******************************************
; This just calls the DoFileIO library routine and displays a msg on return.
; (We must have a FileIO structure).
; The DoFileIO routine returns -1 if the user selected CANCEL, -2 if the
; library is in use by another task, or returns non-zero if OK! was selected.
; At this point, if the user selected OK, our FILEIO_FILENAME buffer will
; contain the selected string and FILEIO_FILESIZE will be the ID.
;
;	TestFileIO(FileIO, window)
;					a4			a3

typename:
;--This shows what would happen (automatically) if the lib was in use on a
;  call to DoFileIO(), or the requester couldn't open.

.error:
		lea		errmsg,a0
prt	move.l	a0,d0
		movea.l	a3,a0
		jsr		_LVOAutoMessage(a6)
		moveq		#0,d0
		rts
.can	lea		cancel,a0
		bra.s		prt
.inuse:
		lea		inuse,a0
		bra.s		prt

   XDEF TestFileIO
TestFileIO:
		movea.l	_RequesterBase,a6
	;---DoFileIO(FileIO, window)
		movea.l	a3,a1
		movea.l	a4,a0
		jsr		_LVODoFileIO(a6)
		move.l	d0,d1
		beq.s		.error
;Must have been an error if returned 0. If we were using DoFileIOWindow(),
;the window might not have opened. Or the requester might not have opened.
;We could check the FileIO's ERRNO field to see what the specific error was.
		addq.l	#1,d1
		beq.s		.can		;If -1, user must have selected CANCEL
		addq.l	#1,d1
		beq.s    .inuse	;If -2, the library was in use
 ;---AutoMessage(string, window)  Display our chosen string.
		;Filename buffer address in d0
		movea.l	a3,a0
		jsr		_LVOAutoMessage(a6)
 ;---If ID = -1 then user must have typed a string not in the list
		move.l	FILEIO_FILESIZE(a4),d0  ;this is the ID of the chosen field
		bpl.s		out1
		movea.l	a3,a0
		lea		NotIn,a1
		move.l	a1,d0
		jsr		_LVOAutoMessage(a6)
	;---Did our custom routine end the requester?
out1	moveq		#ERR_APPGADG,d0
		sub.b		FILEIO_ERRNO(a4),d0
		bne.s		out2
		movea.l	a3,a0
		lea		AppCan,a1
		move.l	a1,d0
		jsr		_LVOAutoMessage(a6)
	;---If MULTIPLE_FILES, display all selected entries
out2	btst.b   #MULTIPLE_FILES,1(a4)
		beq.s    out3
		clr.l    -(sp)      ;zero our PTR to a FileEntry
morFL	movea.l  sp,a0
		movea.l  a4,a1
		jsr      _LVORetrieveEntry(a6)
		move.l   d0,d1
		beq.s    last
		movea.l  d0,a0
		move.l   8(a0),d0   ;get the Entry structure
		addq.l   #5,d0      ;get the EntryString address
		movea.l  a3,a0
		jsr      _LVOAutoMessage(a6)
		bra.s    morFL
last	addq.l   #4,sp
out3	moveq		#1,d0
		rts

;=====================================================================
;Our routine for the custom FileIO gadget. Lib passes our FileIO in a2
;and Window in a3. This returns the BOOL value from AutoPrompt3 so that
;if the user selects YES (TRUE) the requester ends. Note that it is permiss-
;ible to change the FILEIO_TEXT and FILEIO_ROUTINE fields in which case these
;will become effective upon return from here.

	XDEF	Information
Information:
		movem.l	a2/a3,-(sp)
		movea.l	a3,a0
		lea		Msg1,a1
		lea		Msg2,a2
		lea		Msg3,a3
		movea.l	_RequesterBase,a6
		jsr		_LVOAutoPrompt3(a6)
		movem.l	(sp)+,a2/a3
		rts

;========================================================================
; This is our StartHandler. The library calls this once after the requester
; is up and been displayed. We are passed the requester's window in a3, the
; FileIO in a2, the Requester in a5, and the WakeupMask in d0. At this point,
; we could modify RequesterBase's WakeupMask field so that we can be woken up
; when some other event besides window IDCMP happens. (i.e. If we wanted to
; handle messages received at some port while the requester is open, we would
; set the port's mp_SigBit in WakeupMask the first time into this function.
; How do we know that this is the first time into this function? WakeupMask=0.
; Now, whenever a msg is received at that port, this function will be called.
; The port's mp_SigBit of WakeupMask should be set. We can then get, handle,
; and reply the msg from here.)
;
; This routine should return a 0 to redraw the display, a 1 to not redraw the
; display, or a -1 to end the requester. Note that if we end the requester,
; we should probably set the FILEIO_ERRNO field to some value that will tip
; us off that this routine ended the requester.

start_msg:
	;---Is this the first time in this function? If so, add a few of our own
	;	 gadgets to the req. We could also modify WakeupMask if we had some
	;	 other ports to wait on.
		move.l	d0,d1
		bne.s		_2nd
		lea		BoolGadg,a0
		;req in a5, window in a3
		movea.l	_RequesterBase,a6
		jsr		_LVOAddFileGadgs(a6)
	;---If we had some port called Blort, we might do this here
	;	movea.l	BlortPortAddr,a0	;get our port address
	;	move.b	15(a0),d0			;get it's wakeup bit # (assuming PA_SIGNAL)
	;	movea.l	_RequesterBase,a6
	;  move.l	ReqWakeupMask(a6),d1
	;	bset.l	d0,d1					;set that bit of WakeupMask
	;	move.l	d1,ReqWakeupMask(a6)
notme	moveq		#0,d0
		rts
;=====================================================
	;---Note: If we had modified WakeUpMask as above, we would do this
_2nd:
	;	movea.l	BlortPortAddr,a0
	;	move.b	15(a0),d1
	;	btst.l	d1,d0
	;	beq.s		notme			;Who woke us up besides the Window or Blort port??
moreMsgs:
	;	movea.l	BlortPortAddr,a0
	;	movea.l	_SysBase,a6
	;	jsr		_LVOGetMsg(a6)
	;	move.l	d0,myMsg
	;	beq.s		notme
	;now do something with the msg
	;	movea.l	myMsg,a1
	;	movea.l	_SysBase,a6
	;	jsr		_LVOReplyMsg(a6)
		bra		notme

;========================================================================
; This is our GadgetHandler. The library calls this whenever the user selects
; those gadgets we added in StartHandler. We are passed the following:
;
;gadgAddr in a4
;gadgID in d0
;MouseX in d6
;MouseY in d7
;secs   in d2
;micros in d5
;FileIO in a2
;Window in a3
;Requester in a5
;Note that we should not use gadgIDs above 32673 as these are
;reserved by the requester.

		XREF	_LVORefreshGadgets

do_gadg:
		tst.w		d0
		bne.s		gadg2
	;---Our BOOL Gadget (just "flip" the text between ON/OFF)
		lea		ON,a0
		bchg.b	#0,GadgFlags
		bne.s		itsOn
		lea		OFF,a0
itsOn	move.l	a0,GadgStr
	;---We're responsible for refreshing our own gadgets
		move.l	a2,-(sp)
		movea.l	a5,a2
		movea.l	a3,a1
		lea		BoolGadg,a0
		movea.l	_IntuitionBase,a6
		jsr		_LVORefreshGadgets(a6)
		movea.l	(sp)+,a2
gok	moveq		#0,d0		;don't end the requester
		rts
	;---Our String Gadget
gadg2:
		;I can't think of anything to do with the text that the user just typed
		;in, but maybe you can.
		bra		gok

	;SECTION MainData,DATA  ;Not needed for CAPE PC relative addressing!!

   XDEF _IntuitionBase,_GfxBase,ScreenPtr,_RequesterBase
 ;must be in this order
_IntuitionBase	dc.l 0
_GfxBase			dc.l 0
_RequesterBase	dc.l 0
window			dc.l 0
RastPort			dc.l 0

	XDEF	newScreen
newScreen:
	dc.w   0,0			;LeftEdge, TopEdge
	dc.w   640,400		;Width, Height
	dc.w   2				;Depth
	dc.b   0,1			;Detail, Block pens
	dc.w   -32764		;ViewPort Modes HIRES|LACE (must set/clr HIRES as needed)
	dc.w   15			;CUSTOMSCREEN
	dc.l   TextAttr	;Font
	dc.l   ScrTitle
	dc.l   0				;Gadgets
	dc.l   0				;CustomBitmap

   XDEF   newWindow
newWindow:
			dc.w   30,30,306,145
			dc.b   0,1
 ;IDCMP = MOUSEBUTTONS|CLOSEWINDOW|MENUPICK
			dc.l   $308
 ;WindowFlags = WINDOWDRAG|WINDOWDEPTH|SMART_REFRESH|ACTIVATE|WINDOWSIZE
 ;(no FOLLOWMOUSE allowed as that messes up the requester when using
 ;DoFileIO(). If you need FOLLOWMOUSE, then use DoFileIOWindow() to open
 ;the req in its own window.)
			dc.l   $100F
			dc.l   0
			dc.l   0
			dc.l   WINTITLE
ScreenPtr:
			dc.l   0
			dc.l   0
			dc.w   306,145,600,240
			dc.w   1		;WBENCHSCREEN

;==========THE PROJECT MENU===========

ProjectMenu:
	dc.l 0
	dc.w 0,0
	dc.w 90,0
	dc.w 1
	dc.l ProjectTitle
	dc.l MultiItem
	dc.w 0,0,0,0

 ;These are MenuItem structures for the preceding Menu Structure.
MultiItem	dc.l 0
				dc.w 0,0
				dc.w 200,10
				dc.w $5F
				dc.l 0
				dc.l MultiText
				dc.l 0
				dc.b 'M'
				dc.b 0
				dc.l 0
				dc.w 0
MultiText	dc.b 0,1,1,0
				dc.w 19,0
				dc.l TextAttr,MultiString,0

TextAttr:		;Topaz 8 is a ROM font so doesn't need to be opened
	dc.l	FONTNAME
	dc.w	8		;TOPAZ_EIGHTY
	dc.b	0,0

;For custom vectors StartHandler and GadgetHandler
HandlerBlock:
 ;these are the addresses of my custom handlers for the requester's
 ;REQSET, GADGETUP and GADGETDOWN, DISKINSERTED, RAWKEY, and
 ;MOUSEMOVE respectively. Note that I only installed a StartHandler and
 ;GadgetHandler. The rest are NULL because I don't care about them.
	dc.l	start_msg	;StartUpHandler
	dc.l	do_gadg		;GadgetHandler
	dc.l	$0000			;NewDiskHandler
	dc.l	$0000			;KeyHandler
	dc.l	$0000			;MouseMoveHandler

;========== Two gadgets to add to the req (a BOOL and String) ===========

;Bool Gadget
BoolGadg:
		dc.l	StrGadg
		dc.w	70,83,61,11,0
		dc.w	1
		dc.w	$1001				;REQGADGET|BOOLGADGET
		dc.l	BoolBorder,0,BoolGadgText,0
		dc.l	0
		dc.w	0
		dc.l	0

BoolGadgText:
		dc.b   0,1,1,0
		dc.w   8,2
		dc.l   TextAttr
GadgStr:
		dc.l   OFF
		dc.l   0

BoolPts:
	   dc.w  60,10,60,0,0,0,0,10,61,10,61,1,62,1,62,11,1,11

BoolBorder:
		dc.w	0,0
		dc.b	0,1
		dc.b	0
		dc.b	9
		dc.l	BoolPts
		dc.l	0

;String Gadget
StrGadg:
		dc.l	0
		dc.w	70,99,202,10,0,1,$1004
		dc.l	StrBorder,0,StrGadgText,0
		dc.l	StrInfo
		dc.w	1
		dc.l	0

StrBorder:
		dc.w	0,0
		dc.b	0,1
		dc.b	0,9
		dc.l	StringPts
		dc.l	0

StringPts:
		dc.w	0,-1,199,-1,200,0,200,7,199,8,0,8,-1,7,-1,0,0,-1

StrGadgText:
		dc.b   0,1,1,0
		dc.w   -52,0
		dc.l   TextAttr
		dc.l   String
		dc.l   0

StrInfo:
		dc.l   StringBuf
		dc.l   0
		dc.w   0,40,0,0,0,0,0,0
		dc.l   0,0,0

StringBuf	ds.b	40

;For our list of strings to display
StringAddr:
	dc.l  Ten
	dc.l  Nine
	dc.l  Eight
	dc.l  Seven
	dc.l  Six
	dc.l  Five
	dc.l  Four
	dc.l  Three
	dc.l  Two
	dc.l  One
Ten	dc.b 'Ten',0
Nine	dc.b 'Nine',0
Eight	dc.b 'Eight',0
Seven	dc.b 'Seven',0
Six	dc.b 'Six',0
Five	dc.b 'Five',0
Four	dc.b 'Four',0
Three	dc.b 'Three',0
Two	dc.b 'Two',0
One	dc.b 'And this is One',0

Quit	dc.b 1	;When this is a 0, the user wants to exit.

ScrTitle			dc.b 'Example FileIO Program Screen',0
WINTITLE			dc.b 'Example FileIO Program Window',0
Click				dc.b 'Click mouse for demo or CLOSEWINDOW.',0
IntuitionName	dc.b 'intuition.library',0
DOSName			dc.b 'dos.library',0
GfxName			dc.b 'graphics.library',0
RequesterName	dc.b 'requester.library',0
FONTNAME			dc.b 'topaz.font',0
errmsg			dc.b 'Error in opening the requester',0
cancel			dc.b 'The CANCEL gadget was selected',0
inuse				dc.b 'Another task using the requester',0
About				dc.b '   About',0
Msg1				dc.b 'An example of SPECIAL_REQ',0
Msg2				dc.b 'by Jeff Glatt',0
Msg3				dc.b 'dissidents',0
NotIn				dc.b 'This string is not in the list.',0
AppCan			dc.b 'Cancelled by the custom gadget.',0
MultiString		dc.b 'Multi File',0
ProjectTitle	dc.b 'Project',0
ON					dc.b 'On ',0
OFF				dc.b 'Off',0
String			dc.b 'String',0
GadgFlags		dc.b 0

   END
