*************************************************
*						*
*		 (C)opyright 1992-94		*
*						*
*		  by Tomi Blinnikka		*
*						*
*	Don't try to understand the code	*
*						*
* Version 0.01	13/06/1992-			*
*	 -0.99v 20/06/1992			*
*						*
* Version 1.00	07/02/1993			*
*						*
* Changed parser				*
*						*
* Added: From option, generic sampler, timer	*
*	 selection, fixed lotsa bugs		*
*						*
* BUGS: Loaded wrong data file on startup	*
*						*
* Version 1.01	11/02/1993			*
*						*
* Changed name from VShell to VoiceShell	*
*						*
* BUGS:						*
*						*
* Version 1.02	14/02/1993			*
*						*
* Added load gadget				*
*						*
* BUGS:						*
*						*
* Version 1.03	18/05/1993			*
*						*
* Fixed some font stuff				*
*						*
* BUGS:						*
*						*
* Version 1.04	25/05/1993			*
*						*
* Added DSS 8 support, needs voice.library,	*
* version 7					*
*						*
* Added priority				*
*						*
* Version 1.05	30/05/1993			*
*						*
* Added priority resetting			*
*						*
* Version 1.06	02/06/1993			*
*						*
* Added channel select & mic/line select	*
* Requires voice.library, version 8.0		*
*						*
* Version 1.07	10/06/1993			*
*						*
* Fixed few things in Set(Mic/Line/Right/Left).	*
*						*
* Version 1.08	19/06/1993			*
*						*
* Optimized and searched for voice.library 8.1	*
* bug. Bug was in library, version bumped.	*
*						*
* Version 1.09	21/06/1993			*
*						*
* ARexx control added				*
*						*
* Version 1.10	17/07/1993			*
*						*
* Optimized.					*
*						*
* Version 1.11	21/07/1993			*
*						*
* Implemented ARexx LOAD command. Fixed bug	*
* with 'Vol Dwn' gad & Left channel.		*
*						*
* Version 1.12	08/08/1993			*
*						*
* Increased command string length.		*
*						*
* Version 1.13	11/08/1993			*
*						*
* Added ability to wedge fate Input Events	*
* directly.					*
*						*
* Version 1.14	13/09/1993			*
*						*
* Added PUBSCREEN tooltype and CLI option.	*
*						*
* Version 1.15	19/09/1993			*
*						*
* Added 'Get'-gadget into Command window.	*
*						*
* Version 1.16	26/09/1993			*
*						*
* Made VoiceShell a commodity.			*
*						*
* Fixed some bugs that made it crash if ARexx	*
* commands executed while editing.		*
*						*
* Quitting made safer.				*
*						*
* Version 1.17	05/10/1993			*
*						*
* Localized a few internal things.		*
*						*
* Added 'HIDE' & 'SHOW' ARexx commands.		*
*						*
* Added CX_PRI tooltype code.			*
*						*
* Version 1.18	31/10/1993			*
*						*
* Fixed bug with getting font sizes etc.	*
*						*
* Re-wrote a-hell-of-a-lot of code. The guy who	*
* gave me the idea of making VS into a 		*
* commodity should be shot :)			*
*						*
* BUGS: Crashed on some machines if no prefs	*
*	file available.				*
*						*
* Version 1.19	24/01/1994			*
*						*
* Added: Error commands.			*
*						*
* Version 1.20	08/03/1994			*
*						*
* Added: Confirmation and wake up command	*
*						*
* Version 1.21	13/03/1994			*
*						*
* Fixed bug with tooltypes			*
*						*
* Version 1.22	02/04/1994			*
*						*
* Fixed 'bug' in the awake function, it wasn't	*
* reset when a new value was selected.		*
*						*
* Fixed 2 enforcer hits with file requesters.	*
*						*
* Fixed something that might have turned out as	*
* a bug later (a pointer was wrong after 	*
* replying to timer.device).			*
*						*
* Fixed enforcer hit from emergency shutdown.	*
*						*
*						*
* STILL TO CHECK:				*
*						*
* -						*
* - 						*
*						*
*************************************************

;	INCDIR	"INCLUDES:"
	INCLUDE "JMPLibs.i"
	INCLUDE "exec/memory.i"
	INCLUDE "exec/io.i"
	INCLUDE "exec/tasks.i"
	INCLUDE "libraries/dosextens.i"
	INCLUDE "libraries/dos.i"
	INCLUDE "libraries/commodities.i"
	INCLUDE "libraries/gadtools.i"
	INCLUDE	"libraries/voice.i"
	INCLUDE	"libraries/asl.i"
	INCLUDE "workbench/startup.i"
	INCLUDE "intuition/gadgetclass.i"
	INCLUDE "dos/dostags.i"
	INCLUDE	"rexx/errors.i"
	INCLUDE	"rexx/storage.i"
	INCLUDE	"devices/timer.i"

	INCLUDE "XREF:2.0.xref"
	INCLUDE "XREF:intuition.xref"
	INCLUDE "XREF:exec.xref"
	INCLUDE "XREF:dos.xref"
	INCLUDE "XREF:icon.xref"

	XREF	_InvertString
	XREF	_FreeIEvents
	XREF	_HotKey

	XDEF	_DOSBase
	XDEF	_SysBase
	XDEF	_CxBase

DVoice		SET	1
;VS_REGISTERED	SET	1	;Set only for registered versions!

PROGVERSION:	macro
		dc.b	"1.22 (02.04.94)"
;		dc.b	"0.22 (07.05.94)"
		endm

GA_DISABLED:	EQU	GA_Disabled

VSFileVersion:	EQU	'VS04'

ShellTop:	EQU	2
OptionTop:	EQU	46
VocabSIZE:	EQU	60
NUMGADS:	EQU	10
GADLENG1:	EQU	16
GADLENG2:	EQU	256
GADLENGTH:	EQU	(GADLENG1+GADLENG2)

AccVal1:	EQU	2000
AccVal2:	EQU	2400
AccVal3:	EQU	2700
AccVal4:	EQU	3000		;VoiceShell default
AccVal5:	EQU	3500
AccVal6:	EQU	4000
AccVal7:	EQU	5500
AccVal8:	EQU	6000

Samp1MenuN:	EQU	$0002		;0002
Samp2MenuN:	EQU	$0802		;0802
Samp3MenuN:	EQU	$1002		;1002
Samp4MenuN:	EQU	$1802		;1802
ResLoMenuN:	EQU	$0022		;0022
ResHiMenuN:	EQU	$0822		;0822

Acc1MenuN:	EQU	$0042		;0042
Acc2MenuN:	EQU	$0842		;0842
Acc3MenuN:	EQU	$1042		;1042
Acc4MenuN:	EQU	$1842		;1842
Acc5MenuN:	EQU	$2042		;2042
Acc6MenuN:	EQU	$2842		;2842
Acc7MenuN:	EQU	$3042		;3042
Acc8MenuN:	EQU	$3842		;3842

Chan1MenuN:	EQU	$0062		;0062
Chan2MenuN:	EQU	$0862		;0862

Input1MenuN:	EQU	$0082		;0082
Input2MenuN:	EQU	$0882		;0882

Timer1MenuN:	EQU	$00A2		;00A2
Timer2MenuN:	EQU	$08A2		;08A2

Wake1MenuN:	EQU	$00C2		;00C2
Wake2MenuN:	EQU	$08C2		;08C2
Wake3MenuN:	EQU	$10C2		;10C2
Wake4MenuN:	EQU	$18C2		;18C2
Wake5MenuN:	EQU	$20C2		;20C2

ConfirmMenuN:	EQU	$0102		;00E2

TRUE:		EQU	1
FALSE:		EQU	0
do_ToolTypes:	EQU	$36

		section VS,CODE

		push	d2-d7/a2-a6

		sub.l	a1,a1			;Find our task
		lib	Exec,FindTask
		move.l	d0,OurTask
		move.l	d0,a4
		move.l	pr_CLI(a4),d0
		bne	OpenDos

		lea.l	pr_MsgPort(a4),a0
		lib	Exec,WaitPort
		lea.l	pr_MsgPort(a4),a0
		lib	Exec,GetMsg
		move.l	d0,WBMsg

OpenDos:	openlib Dos,NoDos		;Keep at beginning

		tst.l	WBMsg
		beq	CLIStart

		lea.l	NILName,a0
		move.l	a0,d1
		move.l	#MODE_OLDFILE,d2
		lib	Dos,Open
		move.l	d0,NILFile
		beq	ShutDown
		move.l	NILFile,_stdout

		openlib Icon,NoIcon

		move.l	WBMsg,a0
		move.l	sm_ArgList(a0),a1
		move.l	wa_Lock(a1),d1
		lib	Dos,CurrentDir
		move.l	d0,OldLock

		move.l	WBMsg,a0
		move.l	sm_ArgList(a0),a1
		move.l	wa_Name(a1),a0
		lib	Icon,GetDiskObject
		move.l	d0,DiskObject
		beq	MainStart

DoToolType1:	move.l	DiskObject,a4
		move.l	do_ToolTypes(a4),a0
		lea.l	ICONIFYText1,a1
		lib	Icon,FindToolType
		tst.l	d0
		beq	DoToolType2
		move.l	d0,a0
		lea.l	YESText1,a1
		lib	Icon,MatchToolValue
		tst.l	d0
		beq	DoToolType2
		move.l	#1,OptionIconify

DoToolType2:	move.l	DiskObject,a4
		move.l	do_ToolTypes(a4),a0
		lea.l	FROMText1,a1
		lib	Icon,FindToolType
		move.l	d0,FromFile

		move.l	DiskObject,a4
		move.l	do_ToolTypes(a4),a0
		lea.l	PUBSCREENText1,a1
		lib	Icon,FindToolType
		move.l	d0,OptPubScreen

		move.l	DiskObject,a4
		move.l	do_ToolTypes(a4),a0
		lea.l	CXPOPKEYText1,a1
		lib	Icon,FindToolType
		tst.l	d0
		beq	DoToolType3
		move.l	d0,OptCXPopKey

DoToolType3:	move.l	DiskObject,a4
		move.l	do_ToolTypes(a4),a0
		lea.l	CXPOPUPText1,a1
		lib	Icon,FindToolType
		tst.l	d0
		beq	DoToolType4
		move.l	d0,a0
		lea.l	NOText1,a1
		lib	Icon,MatchToolValue
		tst.l	d0
		beq	DoToolType4
		clr.w	PopUp

DoToolType4:	move.l	DiskObject,a4
		move.l	do_ToolTypes(a4),a0
		lea.l	CXPRIText1,a1
		lib	Icon,FindToolType
		tst.l	d0
		beq	DoToolType5
		move.l	d0,a0
		bsr	ConvASCII
		tst.l	d0
		beq	DoToolType5
		move.l	d0,WBOptCXPri
		lea.l	WBOptCXPri,a0
		move.l	a0,OptCXPri

DoToolType5:	bra	MainStart

CLIStart:	lib	Dos,Output
		move.l	d0,_stdout

		lea.l	CLTemplate1,a0
		move.l	a0,d1
		lea.l	CLArray1,a0
		move.l	a0,d2
		clr.l	d3
		lib	Dos,ReadArgs
		move.l	d0,RDArgs1
		beq	NoRDArgs

;If 'CXPopUp=No' then something turns VoiceShell on?

		move.l	OptCXPopUp,a0
		cmp.l	#0,a0
		beq	MainStart		;No enforcer hits, please
		cmp.b	#'n',(a0)
		bne	CLIStart1
		clr.w	PopUp
CLIStart1:	cmp.b	#'N',(a0)
		bne	MainStart
		clr.w	PopUp

MainStart:	openlib Intuition,NoInt
		openlib	Commodities,NoCommodities
		openlib	Asl,NoAsl
		openlib	Utility,NoUtility

		move.l	$4,_SysBase
		move.l	_DosBase,_DOSBase
		move.l	_CommoditiesBase,_CxBase

		move.l	OurTask,a1
		move.l	#120,d0
		lib	Exec,SetTaskPri

		openlib GadTools,NoGadTools

;Create reply port for timer.device

		lib	Exec,CreateMsgPort
		move.l	d0,TRPort
		beq	NoMsgPort

;Create IOReq for timer.device

		move.l	#IOTV_SIZE,d0
		move.l	TRPort,a0
		lib	Exec,CreateIORequest
		move.l	d0,TIORequest
		beq	NoIOReq
		move.l	d0,a0
		clr.b	LN_TYPE(a0)		;Make sure CheckIO doesn't hang

;Open timer.device

		lea.l	TimerName,a0
		move.l	TIORequest,a1
		move.l	#UNIT_VBLANK,d0
		clr.l	d1				;No flags
		lib	Exec,OpenDevice
		tst.l	d0
		bne	NoTimer
		move.w	#$1,TimerOpen			;Just to tell if open

		clr.l	Time
		bsr	Waiter

;Create a message port for the voice.library

		lib	Exec,CreateMsgPort
		move.l	d0,VoicePort
		beq	NoMsgPort

;Create a message port for commodities.library (Exchange)

		lib	Exec,CreateMsgPort
		move.l	d0,CXPort
		beq	NoMsgPort
		lea.l	NewBroker1,a0
		move.l	d0,nb_Port(a0)

;Get Asl_requester

		move.l	#ASL_FileRequest,d0
		lea.l	AslReqTags,a0
		lib	Asl,AllocAslRequest
		move.l	d0,AslReq
		beq	NoAslReq

;Do CX init stuff. Create broker

		tst.l	OptCXPri
		beq	SkipSetCXPri
		move.l	OptCXPri,a0
		move.l	(a0),d0

		tst.l	d0
		bmi	SetCXPri2

		cmp.l	#127,d0
		bhi	BadPriority
		bra	SetCXPri3

SetCXPri2:	cmp.l	#-128,d0
		bcs	BadPriority

SetCXPri3:	move.b	d0,NBPri
SkipSetCXPri:	lea.l	NewBroker1,a0
		clr.l	d0			;No extra error codes wanted
		lib	Commodities,CxBroker
		move.l	d0,CXBroker1
		beq	NoCommodity

;Create Filter object

		move.l	OptCXPopKey,AboutTxt7.X		;For about window

		move.l	OptCXPopKey,a0
		sub.l	a1,a1
		move.l	#CX_FILTER,d0
		lib	Commodities,CreateCxObj
		move.l	d0,d2
		beq	NoCommodity

;Attach Filter object to Broker

		move.l	CXBroker1,a0
		move.l	d2,a1
		lib	Commodities,AttachCxObj

		move.l	d2,a0			;Check if valid descriptor
		lib	Commodities,CxObjError
		cmp.l	#COERR_BADFILTER,d0
		beq	NoFilter

;Create Send object

		move.l	d2,d3
		move.l	CXPort,a0
		sub.l	a1,a1
		move.l	#CX_SEND,d0
		lib	Commodities,CreateCxObj
		move.l	d0,d2
		beq	NoCommodity

;Attach Send object to Filter

		move.l	d3,a0
		move.l	d2,a1
		lib	Commodities,AttachCxObj

;Create translate object

		move.l	d2,d3
		sub.l	a0,a0
		sub.l	a1,a1
		move.l	#CX_TRANSLATE,d0
		lib	Commodities,CreateCxObj
		move.l	d0,d2
		beq	NoCommodity

;Attach Translate object to Send

		move.l	d3,a0
		move.l	d2,a1
		lib	Commodities,AttachCxObj

;We open voice.library this late so that if we're already run the older
;copy pops up

		move.l	#8,d0
		move.l	$4,a6
		lea.l	_VoiceLib,a1
		jsr	_LVOOpenLibrary(a6)
		move.l	d0,_VoiceBase
		beq	NoVoice

;The same thing with the ARexx port...

;Check to see if a port with our name already exists

		lib	Exec,Forbid
		lea.l	ARexxPortName,a1
		flib	Exec,FindPort
		push	d0
		flib	Exec,Permit

		pull	d0
		tst.l	d0
		bne	NoMsgPort2

;Create AREXX message port

		lib	Exec,CreateMsgPort
		move.l	d0,ARexxPort
		beq	NoMsgPort

		move.l	ARexxPort,a1
		lea.l	ARexxPortName,a0
		move.l	a0,LN_NAME(a1)
		lib	Exec,AddPort

;Read preferences

		bsr	Load		;Set voice stuff

		bsr	CXDisable	;Turn off just in case

		tst.w	PopUp
		beq	SkipOpen1

		bsr	OpenWin1
		tst.l	Window1
		beq	NoWindow1

		bsr	SetModes	;Set gads/menus

SkipOpen1:	move.l	#5625242,d5	;inform user
		bsr	AddVTask

Window1IDCMP:	move.l	Window1,a0
		bsr	CheckIDCMP
		tst.l	d0			;Test for CTRL_C
		beq	ShutDown
		cmp.l	#1,d0			;Test for CTRL_D
		beq	DoCTRL_D
		cmp.l	#2,d0			;Test for CTRL_E
		beq	DoCTRL_E
		cmp.l	#3,d0
		beq	DoVoice			;Do voice command
		cmp.l	#4,d0
		beq	Window1IDCMP		;Already done ARexx or commodity
		cmp.l	#INTUITICKS,d2
		beq	DoTicks
		cmp.l	#GADGETUP,d2
		beq	DoGads
		cmp.l	#CLOSEWINDOW,d2
		beq	DoDoCXDisappear
		cmp.l	#MENUPICK,d2
		beq	Win1Menus
		cmp.l	#VANILLAKEY,d2
		beq	VanillaKeys
		cmp.l	#ACTIVEWINDOW,d2
		beq	ActivateGads
		cmp.l	#REFRESHWINDOW,d2
		beq	Refresher
		bra	Window1IDCMP

Refresher:	tst.l	Window1
		beq	Refresher_OUT
		move.l	Window1,a0
		lib	GadTools,GT_BeginRefresh
		move.l	Window1,a0
		move.l	#TRUE,d0
		lib	GadTools,GT_EndRefresh
Refresher_OUT:	bra	Window1IDCMP

VanillaKeys:	cmp.w	#$1b,d3
		beq	Quit
		cmp.w	#'l',d3			;Lower case
		beq	DoDataLoad
		cmp.w	#'s',d3
		beq	Save
		cmp.w	#'q',d3
		beq	Quit
		cmp.w	#'u',d3
		beq	DoGainUp
		cmp.w	#'d',d3
		beq	DoGainDown
		cmp.w	#'f',d3
		beq	ActivateGads
		cmp.w	#'L',d3			;Upper case
		beq	DoDataLoad
		cmp.w	#'S',d3
		beq	Save
		cmp.w	#'Q',d3
		beq	Quit
		cmp.w	#'U',d3
		beq	DoGainUp
		cmp.w	#'D',d3
		beq	DoGainDown
		cmp.w	#'F',d3
		beq	ActivateGads
		bra	Window1IDCMP

DoGads:		cmp.w	#10,$26(a5)
		beq	DoOnOff
		cmp.w	#1,$26(a5)
		beq	ActivateGads
		cmp.w	#20,$26(a5)
		beq	DoGainUp
		cmp.w	#30,$26(a5)
		beq	DoGainDown
		cmp.w	#40,$26(a5)
		beq	DoDataLoad
		cmp.w	#98,$26(a5)
		beq	Save
		cmp.w	#99,$26(a5)
		beq	Quit
		bra	Window1IDCMP

Win1Menus:	bsr	MenuNull
		cmp.w	#$00,d6
		beq	Win1Menus1
		cmp.w	#$01,d6
		beq	Win1Menus2
		cmp.w	#$02,d6
		beq	Win1Menus3
		bra	Window1IDCMP
Win1Menus1:	cmp.w	#$00,d5
		beq	DoLoad
		cmp.w	#$01,d5
		beq	Save
		cmp.w	#$02,d5
		beq	About
		cmp.w	#$04,d5
		beq	Quit
		bra	Window1IDCMP
Win1Menus2:	cmp.w	#$00,d5
		beq	EditCmds
		cmp.w	#$01,d5
		beq	ErrorCmds
		bra	Window1IDCMP
Win1Menus3:	cmp.w	#$00,d5
		beq	Win1Menus3.1
		cmp.w	#$01,d5
		beq	Win1Menus3.2
		cmp.w	#$02,d5
		beq	Win1Menus3.3
		cmp.w	#$03,d5
		beq	Win1Menus3.4
		cmp.w	#$04,d5
		beq	Win1Menus3.5
		cmp.w	#$05,d5
		beq	Win1Menus3.6
		cmp.w	#$06,d5
		beq	Win1Menus3.7
		cmp.w	#$07,d5
		beq	SetPriority
		cmp.w	#$08,d5
		beq	DoConfirm
		bra	Window1IDCMP
Win1Menus3.1:	cmp.w	#$00,d4
		beq	DoSetSamp1
		cmp.w	#$01,d4
		beq	DoSetSamp2
		cmp.w	#$02,d4
		beq	DoSetSamp3
		cmp.w	#$03,d4
		beq	DoSetSamp4
		bra	Window1IDCMP
Win1Menus3.2:	cmp.w	#$00,d4
		beq	DoSetResLo
		cmp.w	#$01,d4
		beq	DoSetResHi
Win1Menus3.3:	cmp.w	#$00,d4
		beq	DoSetAccLowest
		cmp.w	#$01,d4
		beq	DoSetAccLower
		cmp.w	#$02,d4
		beq	DoSetAccLow
		cmp.w	#$03,d4
		beq	DoSetAccNormal
		cmp.w	#$04,d4
		beq	DoSetAccHigh
		cmp.w	#$05,d4
		beq	DoSetAccHigher
		cmp.w	#$06,d4
		beq	DoSetAccEHigher
		cmp.w	#$07,d4
		beq	DoSetAccMaximum
Win1Menus3.4:	cmp.w	#$00,d4
		beq	DoSetLeft
		cmp.w	#$01,d4
		beq	DoSetRight
Win1Menus3.5:	cmp.w	#$00,d4
		beq	DoSetMic
		cmp.w	#$01,d4
		beq	DoSetLine
Win1Menus3.6:	cmp.w	#$00,d4
		beq	DoSetTimerA
		cmp.w	#$01,d4
		beq	DoSetTimerB
		bra	Window1IDCMP
Win1Menus3.7:	cmp.w	#$00,d4
		beq	DoSetWake0
		cmp.w	#$01,d4
		beq	DoSetWake5
		cmp.w	#$02,d4
		beq	DoSetWake10
		cmp.w	#$03,d4
		beq	DoSetWake15
		cmp.w	#$04,d4
		beq	DoSetWake20
		bra	Window1IDCMP

DoTicks:	add.w	#1,TickCount
		cmp.w	#20,TickCount
		bne	Window1IDCMP
		clr.w	TickCount
		tst.w	TaskOn
		beq	DoTicks2
		lea.l	ReadyText1,a0
		bsr	GetLength
		bsr	Inform
		bra	Window1IDCMP
DoTicks2:	lea.l	InactiveText1,a0
		bsr	GetLength
		bsr	Inform
		bra	Window1IDCMP

EditCmds:	clr.w	Saved
		move.w	#1,DisActive		;Can't turn on/off
		bsr	RemVTask1
		bsr	SleepPointer
		bsr	MenusOff
		bsr	RemGads

		bsr	OpenWin2
		tst.l	d0
		beq	NoWindow1
		bsr	RemGads2
		bsr	SetStrGads
		bsr	AddGads2

		bsr	ActGad2

Window2IDCMP:	move.l	Window2,a0
		bsr	CheckIDCMP

		tst.l	d0
		beq	ShutDown
		cmp.l	#4,d0
		beq	Window2IDCMP
		cmp.l	#GADGETUP,d2
		beq	ActivateGads2
		cmp.l	#GADGETDOWN,d2
		beq	GetGadAddr2
		cmp.l	#CLOSEWINDOW,d2
		beq	EditCmds_OUT
		cmp.l	#MENUPICK,d2
		beq	Win2Menus
		cmp.l	#VANILLAKEY,d2
		beq	EditKeys
		cmp.l	#REFRESHWINDOW,d2
		beq	Refresher2
		bra	Window2IDCMP

Refresher2:	move.l	Window2,a0
		lib	GadTools,GT_BeginRefresh
		move.l	Window2,a0
		move.l	#TRUE,d0
		lib	GadTools,GT_EndRefresh
		bra	Window2IDCMP

Win2Menus:	bsr	MenuNull
		cmp.w	#$00,d6
		beq	Win2Menus1
		bra	Window2IDCMP
Win2Menus1:	cmp.w	#$00,d5
		beq	DoPage1
		cmp.w	#$01,d5
		beq	DoPage2
		cmp.w	#$02,d5
		beq	DoPage3
		cmp.w	#$03,d5
		beq	DoPage4
		cmp.w	#$04,d5
		beq	DoPage5
		cmp.w	#$05,d5
		beq	DoPage6
		cmp.w	#$07,d5
		beq	EditCmds_OUT
		bra	Window2IDCMP

DoPage1:	bsr	SaveStrGads
		bsr	RemGads2
		move.w	#0,Page
		bsr	SetStrGads
		bsr	AddGads2
		bra	Window2IDCMP

DoPage2:	bsr	SaveStrGads
		bsr	RemGads2
		move.w	#1,Page
		bsr	SetStrGads
		bsr	AddGads2
		bsr	ActGad2
		bra	Window2IDCMP

DoPage3:	bsr	SaveStrGads
		bsr	RemGads2
		move.w	#2,Page
		bsr	SetStrGads
		bsr	AddGads2
		bsr	ActGad2
		bra	Window2IDCMP

DoPage4:	bsr	SaveStrGads
		bsr	RemGads2
		move.w	#3,Page
		bsr	SetStrGads
		bsr	AddGads2
		bsr	ActGad2
		bra	Window2IDCMP

DoPage5:	bsr	SaveStrGads
		bsr	RemGads2
		move.w	#4,Page
		bsr	SetStrGads
		bsr	AddGads2
		bsr	ActGad2
		bra	Window2IDCMP

DoPage6:	bsr	SaveStrGads
		bsr	RemGads2
		move.w	#5,Page
		bsr	SetStrGads
		bsr	AddGads2
		bsr	ActGad2
		bra	Window2IDCMP

SaveStrGads:	lea.l	CmdList,a2
		move.w	Page,d0
		mulu.w	#NUMGADS*GADLENGTH,d0
		add.l	d0,a2			;a2=start of strings

		move.l	StrGadBuf1,a0
		move.l	a2,a1
		move.l	#GADLENG1,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	StrGadBuf2,a0
		move.l	a2,a1
		move.l	#GADLENG2,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	StrGadBuf3,a0
		move.l	a2,a1
		move.l	#GADLENG1,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	StrGadBuf4,a0
		move.l	a2,a1
		move.l	#GADLENG2,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	StrGadBuf5,a0
		move.l	a2,a1
		move.l	#GADLENG1,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	StrGadBuf6,a0
		move.l	a2,a1
		move.l	#GADLENG2,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	StrGadBuf7,a0
		move.l	a2,a1
		move.l	#GADLENG1,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	StrGadBuf8,a0
		move.l	a2,a1
		move.l	#GADLENG2,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	StrGadBuf9,a0
		move.l	a2,a1
		move.l	#GADLENG1,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	StrGadBuf10,a0
		move.l	a2,a1
		move.l	#GADLENG2,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	StrGadBuf11,a0
		move.l	a2,a1
		move.l	#GADLENG1,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	StrGadBuf12,a0
		move.l	a2,a1
		move.l	#GADLENG2,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	StrGadBuf13,a0
		move.l	a2,a1
		move.l	#GADLENG1,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	StrGadBuf14,a0
		move.l	a2,a1
		move.l	#GADLENG2,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	StrGadBuf15,a0
		move.l	a2,a1
		move.l	#GADLENG1,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	StrGadBuf16,a0
		move.l	a2,a1
		move.l	#GADLENG2,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	StrGadBuf17,a0
		move.l	a2,a1
		move.l	#GADLENG1,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	StrGadBuf18,a0
		move.l	a2,a1
		move.l	#GADLENG2,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	StrGadBuf19,a0
		move.l	a2,a1
		move.l	#GADLENG1,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	StrGadBuf20,a0
		move.l	a2,a1
		move.l	#GADLENG2,d0
		add.l	d0,a2
		lib	Exec,CopyMem
		rts

SetStrGads:	lea.l	CmdList,a2
		move.w	Page,d0
		mulu.w	#NUMGADS*GADLENGTH,d0
		add.l	d0,a2			;a2=start of strings

		move.l	a2,a0
		move.l	StrGadBuf1,a1
		move.l	#GADLENG1,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	a2,a0
		move.l	StrGadBuf2,a1
		move.l	#GADLENG2,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	a2,a0
		move.l	StrGadBuf3,a1
		move.l	#GADLENG1,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	a2,a0
		move.l	StrGadBuf4,a1
		move.l	#GADLENG2,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	a2,a0
		move.l	StrGadBuf5,a1
		move.l	#GADLENG1,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	a2,a0
		move.l	StrGadBuf6,a1
		move.l	#GADLENG2,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	a2,a0
		move.l	StrGadBuf7,a1
		move.l	#GADLENG1,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	a2,a0
		move.l	StrGadBuf8,a1
		move.l	#GADLENG2,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	a2,a0
		move.l	StrGadBuf9,a1
		move.l	#GADLENG1,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	a2,a0
		move.l	StrGadBuf10,a1
		move.l	#GADLENG2,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	a2,a0
		move.l	StrGadBuf11,a1
		move.l	#GADLENG1,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	a2,a0
		move.l	StrGadBuf12,a1
		move.l	#GADLENG2,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	a2,a0
		move.l	StrGadBuf13,a1
		move.l	#GADLENG1,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	a2,a0
		move.l	StrGadBuf14,a1
		move.l	#GADLENG2,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	a2,a0
		move.l	StrGadBuf15,a1
		move.l	#GADLENG1,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	a2,a0
		move.l	StrGadBuf16,a1
		move.l	#GADLENG2,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	a2,a0
		move.l	StrGadBuf17,a1
		move.l	#GADLENG1,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	a2,a0
		move.l	StrGadBuf18,a1
		move.l	#GADLENG2,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	a2,a0
		move.l	StrGadBuf19,a1
		move.l	#GADLENG1,d0
		add.l	d0,a2
		lib	Exec,CopyMem

		move.l	a2,a0
		move.l	StrGadBuf20,a1
		move.l	#GADLENG2,d0
		add.l	d0,a2
		lib	Exec,CopyMem
		rts

EditCmds_OUT:	bsr	SaveStrGads
		bsr	AddVTask
		bsr	CloseWin2
		clr.w	DisActive	;Can turn on/off
		bsr	AddGads
		bsr	MenusOn
		bsr	NormalPointer
		bra	Window1IDCMP

EditKeys:	cmp.w	#$1b,d3
		beq	EditCmds_OUT
		cmp.w	#'g',d3
		beq	Get
		cmp.w	#'G',d3
		beq	Get
		bra	Window2IDCMP

GetGadAddr2:	cmp.w	#2,$26(a5)
		beq	GetGadAddr2.1
		clr.l	LastGad
		move.l	GetGad1,a0
		move.l	Window2,a1
		sub.l	a2,a2
		lea.l	DisabledTags,a3
		lib	GadTools,GT_SetGadgetAttrsA
		bra	Window2IDCMP
GetGadAddr2.1:	move.l	a5,LastGad
		move.l	GetGad1,a0
		move.l	Window2,a1
		sub.l	a2,a2
		lea.l	EnabledTags,a3
		lib	GadTools,GT_SetGadgetAttrsA
		bra	Window2IDCMP

Get:		tst.l	LastGad
		beq	Get1_OUT2

		move.l	AslReq,a0
		lea.l	GetReqTags,a1
		lib	Asl,AslRequest
		tst.l	d0
		beq	Get1_OUT1

		bsr	RemGads2
		move.l	LastGad,a5
		bsr	MakeCmd
		bsr	AddGads2

Get1_OUT1:	move.l	LastGad,a0
		move.l	Window2,a1
		sub.l	a2,a2
		lib	Intuition,ActivateGadget

Get1_OUT2:	bra	Window2IDCMP

SetPriority:	move.w	#1,DisActive		;Can't turn on/off
		bsr	RemVTask1
		bsr	SleepPointer
		bsr	MenusOff
		bsr	RemGads

		bsr	OpenWin3
		tst.l	d0
		beq	NoWindow1

Window3IDCMP:	move.l	Window3,a0
		bsr	CheckIDCMP

		tst.l	d0
		beq	ShutDown
		cmp.l	#4,d0
		beq	Window3IDCMP
		cmp.l	#GADGETUP,d2
		beq	SetPriority2
		cmp.l	#CLOSEWINDOW,d2
		beq	SetPri_OUT
		cmp.l	#VANILLAKEY,d2
		beq	SetPriKeys
		cmp.l	#ACTIVEWINDOW,d2
		beq	GoActGads3
		cmp.l	#REFRESHWINDOW,d2
		beq	Refresher3
		bra	Window3IDCMP

Refresher3:	move.l	Window3,a0
		lib	GadTools,GT_BeginRefresh
		move.l	Window3,a0
		move.l	#TRUE,d0
		lib	GadTools,GT_EndRefresh
		bra	Window3IDCMP

SetPriority2:	move.l	StrGadInt21,a0
		move.l	(a0),d0

		tst.l	d0
		bmi	SetPriority2.1

		cmp.l	#127,d0
		bhi	SetPriority3

		move.l	d0,PrefsPriority
		bra	SetPri_OUT

SetPriority2.1:	cmp.l	#-128,d0
		bcs	SetPriority3

		move.l	d0,PrefsPriority
		bra	SetPri_OUT

SetPriority3:	sub.l	a0,a0
		lib	Intuition,DisplayBeep

		move.l	StrGad21,a0
		move.l	Window3,a1
		sub.l	a2,a2
		lea.l	StrGadTagList3,a3
		lib	GadTools,GT_SetGadgetAttrsA
		bra	GoActGads3

SetPri_OUT:	bsr	CloseWin3
		bsr	AddVTask
		clr.w	DisActive		;Can turn on/off
		bsr	AddGads
		bsr	MenusOn
		bsr	NormalPointer
		bra	Window1IDCMP

GoActGads3:	bsr	ActGad3
		bra	Window3IDCMP

SetPriKeys:	cmp.w	#$1b,d3
		beq	SetPri_OUT
		bra	Window3IDCMP

ErrorCmds:	clr.w	Saved
		move.w	#1,DisActive		;Can't turn on/off
		bsr	RemVTask1
		bsr	SleepPointer
		bsr	MenusOff
		bsr	RemGads

		bsr	OpenWin4
		tst.l	d0
		beq	NoWindow1

;Move data from prefs to window

		bsr	RemGads4
		bsr	SetStrGads2
		bsr	AddGads4

		bsr	ActGad4

Window4IDCMP:	move.l	Window4,a0
		bsr	CheckIDCMP

		tst.l	d0
		beq	ShutDown
		cmp.l	#4,d0
		beq	Window4IDCMP
		cmp.l	#GADGETDOWN,d2
		beq	GetGadAddr4
		cmp.l	#GADGETUP,d2
		beq	ActivateGads4
		cmp.l	#CLOSEWINDOW,d2
		beq	ErrorCmds_OUT
		cmp.l	#VANILLAKEY,d2
		beq	ErrorKeys
		cmp.l	#REFRESHWINDOW,d2
		beq	Refresher4
		bra	Window4IDCMP

Refresher4:	move.l	Window4,a0
		lib	GadTools,GT_BeginRefresh
		move.l	Window2,a0
		move.l	#TRUE,d0
		lib	GadTools,GT_EndRefresh
		bra	Window4IDCMP

SaveStrGads2:	move.l	StrGadBuf22,a0
		lea.l	ErrCmd1,a1
		move.l	#GADLENG2,d0
		lib	Exec,CopyMem

		move.l	StrGadBuf23,a0
		lea.l	ErrCmd2,a1
		move.l	#GADLENG2,d0
		flib	Exec,CopyMem

		move.l	StrGadBuf24,a0
		lea.l	ErrCmd3,a1
		move.l	#GADLENG2,d0
		flib	Exec,CopyMem

		move.l	StrGadBuf25,a0
		lea.l	ErrCmd4,a1
		move.l	#GADLENG2,d0
		flib	Exec,CopyMem

		move.l	StrGadBuf26,a0
		lea.l	ErrCmd5,a1
		move.l	#GADLENG2,d0
		flib	Exec,CopyMem

		move.l	StrGadBuf27,a0
		lea.l	ErrCmd6,a1
		move.l	#GADLENG2,d0
		flib	Exec,CopyMem

		move.l	StrGadBuf28,a0
		lea.l	ConfCmd1,a1
		move.l	#GADLENG2,d0
		flib	Exec,CopyMem

		move.l	StrGadBuf29,a0
		lea.l	ConfCmd2,a1
		move.l	#GADLENG2,d0
		flib	Exec,CopyMem

		move.l	StrGadBuf30,a0
		lea.l	WakeCmd1,a1
		move.l	#GADLENG2,d0
		flib	Exec,CopyMem

		rts

SetStrGads2:	lea.l	ErrCmd1,a0
		move.l	StrGadBuf22,a1
		move.l	#GADLENG2,d0
		lib	Exec,CopyMem

		lea.l	ErrCmd2,a0
		move.l	StrGadBuf23,a1
		move.l	#GADLENG2,d0
		flib	Exec,CopyMem

		lea.l	ErrCmd3,a0
		move.l	StrGadBuf24,a1
		move.l	#GADLENG2,d0
		flib	Exec,CopyMem

		lea.l	ErrCmd4,a0
		move.l	StrGadBuf25,a1
		move.l	#GADLENG2,d0
		flib	Exec,CopyMem

		lea.l	ErrCmd5,a0
		move.l	StrGadBuf26,a1
		move.l	#GADLENG2,d0
		flib	Exec,CopyMem

		lea.l	ErrCmd6,a0
		move.l	StrGadBuf27,a1
		move.l	#GADLENG2,d0
		flib	Exec,CopyMem

		lea.l	ConfCmd1,a0
		move.l	StrGadBuf28,a1
		move.l	#GADLENG2,d0
		flib	Exec,CopyMem

		lea.l	ConfCmd2,a0
		move.l	StrGadBuf29,a1
		move.l	#GADLENG2,d0
		flib	Exec,CopyMem

		lea.l	WakeCmd1,a0
		move.l	StrGadBuf30,a1
		move.l	#GADLENG2,d0
		flib	Exec,CopyMem
		rts

ErrorKeys:	cmp.w	#$1b,d3
		beq	ErrorCmds_OUT
		cmp.w	#'g',d3
		beq	Get2
		cmp.w	#'G',d3
		beq	Get2
		bra	Window4IDCMP

GetGadAddr4:	cmp.w	#2,$26(a5)
		beq	GetGadAddr4.1
		clr.l	LastGad2
		bra	Window4IDCMP
GetGadAddr4.1:	move.l	a5,LastGad2
		bra	Window4IDCMP

Get2:		tst.l	LastGad2
		beq	Get2_OUT2

		move.l	AslReq,a0
		lea.l	GetReqTags,a1
		lib	Asl,AslRequest
		tst.l	d0
		beq	Get2_OUT1

		bsr	RemGads4
		move.l	LastGad2,a5
		bsr	MakeCmd
		bsr	AddGads4

Get2_OUT1:	move.l	LastGad2,a0
		move.l	Window4,a1
		sub.l	a2,a2
		lib	Intuition,ActivateGadget

Get2_OUT2:	bra	Window4IDCMP

ErrorCmds_OUT:	bsr	SaveStrGads2
		bsr	AddVTask
		bsr	CloseWin4
		clr.w	DisActive	;Can turn on/off
		bsr	AddGads
		bsr	MenusOn
		bsr	NormalPointer
		bra	Window1IDCMP

DoVoice:	cmp.w	#-2,d3
		beq	VoiceClip
		cmp.w	#-3,d3
		beq	VoiceLow
		cmp.w	#-4,d3
		beq	VoiceNoisy

		cmp.w	PrefsScore,a4
		bcs	VoiceUnknown

		lea.l	CmdList,a2
		move.w	d3,d0
		mulu.w	#GADLENGTH,d0
		add.l	d0,a2			;a2 was start of strings

;Test wake up

		tst.b	PrefsWake
		beq	CheckConf

		tst.w	Awake			;Already awake
		bne	CheckConf

		tst.w	d3			;Test for first command
		bne	Window1IDCMP		;Not wake up command

		move.w	#1,Awake		;We are awake
		bsr	ClearTimer
		clr.l	d0
		move.b	PrefsWake,d0
		move.l	d0,Time
		bsr	Waiter
		lea.l	AwakeText1,a0		;Inform and execute
		bsr	GetLength
		bsr	Inform
		lea.l	WakeCmd1,a2
		tst.b	(a2)
		beq	CheckWake2
		bsr	ExecuteCmd
		cmp.l	#-1,d0
		beq	DoVoice3
CheckWake2:	clr.w	TickCount
		bra	Window1IDCMP

;Test confirm

CheckConf:	cmp.w	#-1,d3			;Test this after
		beq	VoiceUnknown		;awake command!

		tst.b	PrefsConfirm
		beq	DoVoice1		;Don't confirm

		tst.l	ConfAddress		;Nothing to compare with
		beq	CheckConf3

		cmp.l	ConfAddress,a2		;Is it same?
		beq	DoVoice1		;Yes, execute

		clr.l	ConfAddress		;No, clear previous
		lea.l	NoConfText1,a0		;Not confirmed, inform
		bsr	GetLength		;and execute
		bsr	Inform
		lea.l	ConfCmd2,a2
		tst.b	(a2)
		beq	CheckConf2
		bsr	ExecuteCmd
		cmp.l	#-1,d0
		beq	DoVoice3
CheckConf2:	clr.w	TickCount
		bra	Window1IDCMP


;Save this word to be confirmed

CheckConf3:	move.l	a2,ConfAddress

		move.l	a2,a0
		lea.l	StringBuffer,a1
		move.w	#'* ',(a1)+
		bsr	CopyStrs

		lea.l	StringBuffer,a0
		bsr	GetLength
		bsr	Inform

		lea.l	ConfCmd1,a2
		tst.b	(a2)
		beq	CheckConf_OUT
		bsr	ExecuteCmd
		cmp.l	#-1,d0
		beq	DoVoice3
CheckConf_OUT:	clr.w	TickCount
		bra	Window1IDCMP

DoVoice1:	move.l	a2,a0

		push	a2
		bsr	GetLength
		bsr	Inform
		pull	a2

		clr.w	TickCount

		add.l	#GADLENG1,a2
		cmp.l	#0,(a2)
		beq	DoVoice2

		cmp.b	#'~',(a2)
		beq	DoSpecial

		bsr	ExecuteCmd		;Execute command

		clr.l	ConfAddress		;Forget confirm
		clr.w	Awake			;Not awake anymore

		cmp.l	#-1,d0
		beq	DoVoice3
		bra	Window1IDCMP

DoSpecial:	add.l	#1,a2
		cmp.b	#'K',(a2)
		beq	DoSpecial2
		bra	DoVoice2		;No Command

DoSpecial2:	add.l	#2,a2			;Skip shortcut and space
		move.l	a2,a0
		lea.l	StringBuffer,a1
		bsr	CopyStrs

		bsr	SendEvents
		move.l	#4,d2
		tst.l	IEvents
		beq	DoVoice3		;Command failed
		clr.l	IEvents
		bra	Window1IDCMP

DoVoice2:	lea.l	NoCMDText1,a0
		bsr	GetLength
		bsr	Inform
		lea.l	ErrCmd1,a2
		tst.b	(a2)
		beq	DoVoice2_OUT
		bsr	ExecuteCmd
		cmp.l	#-1,d0
		beq	DoVoice3
DoVoice2_OUT:	clr.w	TickCount
		bra	Window1IDCMP
DoVoice3:	lea.l	CMDFailText1,a0		;Doesn't check if the
		bsr	GetLength		;command fails
		bsr	Inform
		lea.l	ErrCmd2,a2
		tst.b	(a2)
		beq	DoVoice3_OUT
		bsr	ExecuteCmd
DoVoice3_OUT:	clr.w	TickCount
		bra	Window1IDCMP

VoiceUnknown:	lea.l	NoMatchText1,a0
		bsr	GetLength
		bsr	Inform
		lea.l	ErrCmd3,a2
		tst.b	(a2)
		beq	VoiceUn_OUT
		bsr	ExecuteCmd
		cmp.l	#-1,d0
		beq	DoVoice3
VoiceUn_OUT:	clr.w	TickCount
		bra	Window1IDCMP
VoiceClip:	lea.l	ClippingText1,a0
		bsr	GetLength
		bsr	Inform
		lea.l	ErrCmd4,a2
		tst.b	(a2)
		beq	VoiceClip_OUT
		bsr	ExecuteCmd
		cmp.l	#-1,d0
		beq	DoVoice3
VoiceClip_OUT:	clr.w	TickCount
		bra	Window1IDCMP
VoiceLow:	lea.l	LowVolText1,a0
		bsr	GetLength
		bsr	Inform
		lea.l	ErrCmd5,a2
		tst.b	(a2)
		beq	VoiceLow_OUT
		bsr	ExecuteCmd
		cmp.l	#-1,d0
		beq	DoVoice3
VoiceLow_OUT:	clr.w	TickCount
		bra	Window1IDCMP
VoiceNoisy:	lea.l	NoisyText1,a0
		bsr	GetLength
		bsr	Inform
		lea.l	ErrCmd6,a2
		tst.b	(a2)
		beq	VoiceNoisy_OUT
		bsr	ExecuteCmd
		cmp.l	#-1,d0
		beq	DoVoice3
VoiceNoisy_OUT:	clr.w	TickCount
		bra	Window1IDCMP

ExecuteCmd:	move.l	a2,d1			;Execute command
		clr.l	d2
		lib	Dos,SystemTagList
		rts

CX:		cmp.l	#CXM_COMMAND,d2
		beq	DoCXCommand
		cmp.l	#CXM_IEVENT,d2
		beq	DoCXAppear
		move.l	#4,d0
		rts				;Unknown command

DoCXCommand:	cmp.l	#CXCMD_APPEAR,d3
		beq	DoCXAppear
		cmp.l	#CXCMD_DISAPPEAR,d3
		beq	DoCXDisappear
		cmp.l	#CXCMD_KILL,d3
		beq	DoCXKill
		cmp.l	#CXCMD_UNIQUE,d3
		beq	DoCXAppear
		cmp.l	#CXCMD_ENABLE,d3
		beq	DoCXEnable
		cmp.l	#CXCMD_DISABLE,d3
		beq	DoCXDisable
		move.l	#4,d0
		rts				;Unknown message

DoCXKill:	clr.l	d0
		rts

DoCXAppear:	tst.l	Window1
		bne	DoCXAppear_OUT
		tst.w	DisActive
		bne	DoCXDisap_OUT
		clr.l	OptionIconify
		bsr	OpenWin1
		bsr	SetModes
		tst.l	Window1
		bne	DoCXAppear_OUT
		sub.l	a0,a0
		lib	Intuition,DisplayBeep	;Beep on error
DoCXAppear_OUT:	move.l	#4,d0
		rts

DoDoCXDisappear: bsr	DoCXDisappear
		bra	Window1IDCMP

DoCXDisappear:	tst.l	Window1
		beq	DoCXDisap_OUT
		tst.w	DisActive
		bne	DoCXDisap_OUT
		bsr	CheckModes
		bsr	CloseWin1
DoCXDisap_OUT:	move.l	#4,d0
		rts

DoCXEnable:	tst.w	DisActive
		bne	DoCXEnable1
		bsr	CLITypeOn
DoCXEnable_OUT:	move.l	#4,d0
		rts
DoCXEnable1:	bsr	CXDisable		;Can't turn on
		bra	DoCXEnable_OUT

DoCXDisable:	tst.w	DisActive
		bne	DoCXDisable1
		bsr	CLITypeOff
DoCXDis_OUT:	move.l	#4,d0
		rts
DoCXDisable1:	bsr	CXEnable		;Can't turn off
		bra	DoCXDis_OUT

CXEnable:	move.l	CXBroker1,a0
		move.l	#TRUE,d0
		lib	Commodities,ActivateCxObj
		rts

CXDisable:	move.l	CXBroker1,a0
		move.l	#FALSE,d0
		lib	Commodities,ActivateCxObj
		rts

DoSetResLo:	bsr	SetResLo
		bra	Window1IDCMP

DoSetResHi:	bsr	SetResHi
		bra	Window1IDCMP

SetResLo:	bsr	RemVTask1
		move.b	#RES_LO,PrefsSampRes
		bsr	AddVTask
		rts
SetResHi:	bsr	RemVTask1
		move.b	#RES_HI,PrefsSampRes
		bsr	AddVTask
		rts

DoSetAccLowest:	bsr	SetAccLowest
		bra	Window1IDCMP

DoSetAccLower:	bsr	SetAccLower
		bra	Window1IDCMP

DoSetAccLow:	bsr	SetAccLow
		bra	Window1IDCMP

DoSetAccNormal:	bsr	SetAccNormal
		bra	Window1IDCMP

DoSetAccHigh:	bsr	SetAccHigh
		bra	Window1IDCMP

DoSetAccHigher:	bsr	SetAccHigher
		bra	Window1IDCMP

DoSetAccEHigher: bsr	SetAccEHigher
		bra	Window1IDCMP

DoSetAccMaximum: bsr	SetAccMaximum
		bra	Window1IDCMP


SetAccLowest:	move.w	#AccVal1,PrefsScore
		rts

SetAccLower:	move.w	#AccVal2,PrefsScore
		rts

SetAccLow:	move.w	#AccVal3,PrefsScore
		rts

SetAccNormal:	move.w	#AccVal4,PrefsScore
		rts

SetAccHigh:	move.w	#AccVal5,PrefsScore
		rts

SetAccHigher:	move.w	#AccVal6,PrefsScore
		rts

SetAccEHigher:	move.w	#AccVal7,PrefsScore
		rts

SetAccMaximum:	move.w	#AccVal8,PrefsScore
		rts

DoSetLeft:	bsr	SetLeft
		bra	Window1IDCMP

DoSetRight:	bsr	SetRight
		bra	Window1IDCMP

DoCTRL_D:	tst.w	DisActive
		bne	DoCTRL_D_OUT
		bsr	CLITypeOff
DoCTRL_D_OUT:	bra	Window1IDCMP

DoCTRL_E:	tst.w	DisActive
		bne	DoCTRL_E_OUT
		bsr	CLITypeOn
DoCTRL_E_OUT:	bra	Window1IDCMP

CLITypeOff:	bsr	RemGads
		move.l	OnOffGad1,a0
		and.w	#~SELECTED,gg_Flags(a0)
		move.l	#5625242,d5		;inform user
		bsr	RemVTask1
		bsr	AddGads
		rts

CLITypeOn:	bsr	RemGads
		move.l	OnOffGad1,a0
		or.w	#SELECTED,gg_Flags(a0)
		move.l	#5625242,d5		;inform user
		bsr	AddVTask1
		bsr	AddGads
		rts

SetLeft:	move.b	#CHANNEL_LEFT,PrefsChannel
		cmp.b	#SAMP_GENERIC,PrefsSampType
		beq	SetLeft_OUT
		bsr	RemVTask1
		move.l	#CHANNEL_LEFT,d0
		lib	Voice,PickChannel
		bsr	AddVTask
SetLeft_OUT:	rts

SetRight:	move.b	#CHANNEL_RIGHT,PrefsChannel
		cmp.b	#SAMP_GENERIC,PrefsSampType
		beq	SetRight_OUT
		bsr	RemVTask1
		move.l	#CHANNEL_RIGHT,d0
		lib	Voice,PickChannel
		bsr	AddVTask
SetRight_OUT:	rts

DoSetMic:	bsr	SetMic
		bra	Window1IDCMP

DoSetLine:	bsr	SetLine
		bra	Window1IDCMP

SetMic:		move.b	#INPUT_MIC,PrefsInput
		cmp.b	#SAMP_GENERIC,PrefsSampType
		beq	SetMic_OUT
		bsr	RemVTask1
		move.l	#INPUT_MIC,d0
		lib	Voice,PickInput
		bsr	AddVTask
SetMic_OUT:	rts

SetLine:	move.b	#INPUT_LINE,PrefsInput
		cmp.b	#SAMP_GENERIC,PrefsSampType
		beq	SetLine_OUT
		bsr	RemVTask1
		move.l	#INPUT_LINE,d0
		lib	Voice,PickInput
		bsr	AddVTask
SetLine_OUT:	rts

DoSetSamp1:	bsr	SetSamp1
		bra	Window1IDCMP
DoSetSamp2:	bsr	SetSamp2
		bra	Window1IDCMP
DoSetSamp3:	bsr	SetSamp3
		bra	Window1IDCMP
DoSetSamp4:	bsr	SetSamp4
		bra	Window1IDCMP

SetSamp1:	bsr	RemVTask1
		move.b	#SAMP_PERFSND,PrefsSampType		;PerfectSound
		move.l	#SAMP_PERFSND,d0
		clr.l	d1
		lib	Voice,PickSampler
		bsr	RemGads
		move.l	GainUGad1,a0
		and.w	#~GADGDISABLED,gg_Flags(a0)
		move.l	GainDGad1,a0
		and.w	#~GADGDISABLED,gg_Flags(a0)
		bsr	AddGads
		bsr	AddVTask
		rts
SetSamp2:	bsr	RemVTask1
		move.b	#SAMP_SNDMSTR,PrefsSampType		;SoundMaster
		move.l	#SAMP_SNDMSTR,d0
		clr.l	d1
		lib	Voice,PickSampler
		bsr	RemGads
		move.l	GainUGad1,a0
		or.w	#GADGDISABLED,gg_Flags(a0)
		move.l	GainDGad1,a0
		or.w	#GADGDISABLED,gg_Flags(a0)
		bsr	AddGads
		bsr	AddVTask
		rts
SetSamp3:	bsr	RemVTask1
		move.b	#SAMP_DSS8,PrefsSampType		;DSS8
		move.l	#SAMP_DSS8,d0
		clr.l	d1
		move.b	PrefsGain,d1
		lib	Voice,PickSampler
		bsr	RemGads
		move.l	GainUGad1,a0
		and.w	#~GADGDISABLED,gg_Flags(a0)
		move.l	GainDGad1,a0
		and.w	#~GADGDISABLED,gg_Flags(a0)
		bsr	AddGads
		bsr	AddVTask
		rts
SetSamp4:	bsr	RemVTask1
		move.b	#SAMP_GENERIC,PrefsSampType		;Generic
		move.l	#SAMP_GENERIC,d0
		clr.l	d1
		lib	Voice,PickSampler
		bsr	RemGads
		move.l	GainUGad1,a0
		or.w	#GADGDISABLED,gg_Flags(a0)
		move.l	GainDGad1,a0
		or.w	#GADGDISABLED,gg_Flags(a0)
		bsr	AddGads
		bsr	AddVTask
		rts

DoSetTimerA:	bsr	SetTimerA
		bra	Window1IDCMP

DoSetTimerB:	bsr	SetTimerB
		bra	Window1IDCMP

SetTimerA:	bsr	RemVTask1
		move.b	#TIMER_A,PrefsTimer		;Timer A=1
		move.l	#TIMER_A,d0
		lib	Voice,PickTimer
		bsr	AddVTask
		rts

SetTimerB:	bsr	RemVTask1
		move.b	#TIMER_B,PrefsTimer		;Timer B=0
		move.l	#TIMER_B,d0
		lib	Voice,PickTimer
		bsr	AddVTask
		rts

DoConfirm:	bsr	Confirm
		bra	Window1IDCMP

Confirm:	clr.b	PrefsConfirm
		move.l	mlist,a0			;Test menu
		move.l	#ConfirmMenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		move.w	$c(a0),d0
		and.w	#CHECKED,d0
		cmp.w	#CHECKED,d0
		bne	Confirm_OUT
		move.b	#$01,PrefsConfirm
Confirm_OUT:	rts

DoSetWake0:	bsr	SetWake0
		bra	Window1IDCMP

SetWake0:	move.b	#0,PrefsWake
		rts

DoSetWake5:	bsr	SetWake5
		bra	Window1IDCMP

SetWake5:	move.b	#5,PrefsWake
		bsr	ClearTimer
		move.b	PrefsWake,d0
		move.l	d0,Time
		bsr	Waiter
		rts

DoSetWake10:	bsr	SetWake10
		bra	Window1IDCMP

SetWake10:	move.b	#10,PrefsWake
		bsr	ClearTimer
		move.b	PrefsWake,d0
		move.l	d0,Time
		bsr	Waiter
		rts

DoSetWake15:	bsr	SetWake15
		bra	Window1IDCMP

SetWake15:	move.b	#15,PrefsWake
		bsr	ClearTimer
		move.b	PrefsWake,d0
		move.l	d0,Time
		bsr	Waiter
		rts

DoSetWake20:	bsr	SetWake20
		bra	Window1IDCMP

SetWake20:	move.b	#20,PrefsWake
		bsr	ClearTimer
		move.b	PrefsWake,d0
		move.l	d0,Time
		bsr	Waiter
		rts

ToFront:	tst.l	Window1
		beq	ToFront_OUT
		move.l	Window1,a0
		lib	Intuition,WindowToFront
ToFront_OUT:	rts

ToBack:		tst.l	Window
		beq	ToBack_OUT
		move.l	Window1,a0
		lib	Intuition,WindowToBack
ToBack_OUT:	rts

Zoom:		tst.l	Window1
		beq	Zoom_OUT
		move.l	Window1,a0
		lib	Intuition,ZipWindow
Zoom_OUT:	rts

DoLoad:		bsr	Load			;RemVTask1 in Load
		bsr	AddVTask
		move.l	#5,d1
		lib	Dos,Delay
		bra	ActivateGads

DoDataLoad:	bsr	RemGads				;RemVTask1 in Load
		bsr	Load2.1
		bsr	AddVTask
		bsr	AddGads			;Keep Add/RemGads (Load2.1)
		move.l	#5,d1
		lib	Dos,Delay
		bra	Window1IDCMP

DoOnOff:	move.l	#5625242,d5		;inform user
		bsr	AddVTask		;one or the other
		bsr	RemVTask		;will respond
		bra	Window1IDCMP

DoGainUp:	bsr	GainUp
		bra	Window1IDCMP
DoGainDown:	bsr	GainDown
		bra	Window1IDCMP

GainUp:		lib	Voice,GainUp
		cmp.b	#SAMP_DSS8,PrefsSampType
		bne	GainUp_OUT
		lib	Voice,WhatGain
		move.b	d0,PrefsGain
		move.l	d0,GainPointer

		tst.l	Window1
		beq	GainUp_OUT
		move.l	GainGad1,a0
		move.l	Window1,a1
		sub.l	a2,a2
		lea.l	GainGadTagList,a3
		lib	GadTools,GT_SetGadgetAttrsA
GainUp_OUT:	rts

GainDown:	lib	Voice,GainDown
		cmp.b	#SAMP_DSS8,PrefsSampType
		bne	GainDown_OUT
		lib	Voice,WhatGain
		move.b	d0,PrefsGain
		move.l	d0,GainPointer

		tst.l	Window1
		beq	GainDown_OUT
		move.l	GainGad1,a0
		move.l	Window1,a1
		sub.l	a2,a2
		lea.l	GainGadTagList,a3
		lib	GadTools,GT_SetGadgetAttrsA
GainDown_OUT:	rts

ActivateGads:	tst.l	Window1
		beq	ActivateGs_OUT
		move.l	DatStrGad1,a0
		move.l	Window1,a1
		sub.l	a2,a2
		lib	Intuition,ActivateGadget
ActivateGs_OUT:	bra	Window1IDCMP

ActGad:		tst.l	Window1
		beq	ActGad_OUT
		move.l	DatStrGad1,a0
		move.l	Window1,a1
		sub.l	a2,a2
		lib	Intuition,ActivateGadget
ActGad_OUT:	rts

ActivateGads2:	cmp.w	#55,$26(a5)
		beq	Get
		cmp.w	#1,$26(a5)
		beq	Learn
		cmp.w	#2,$26(a5)
		bne	Window2IDCMP
		cmp.l	#$00,(a5)
		beq	ActivateGads2.01
		move.l	(a5),a0
		move.l	StrGad20,a1
		cmp.l	a5,a1
		bne	ActivateGads2.1
ActivateGads2.01: move.l StrGad1,a0
ActivateGads2.1: move.l Window2,a1
		sub.l	a2,a2
		lib	Intuition,ActivateGadget
		bra	Window2IDCMP

ActGad2:	move.l	StrGad1,a0
		move.l	Window2,a1
		sub.l	a2,a2
		lib	Intuition,ActivateGadget
		rts

ActGad3:	move.l	StrGad21,a0
		move.l	Window3,a1
		sub.l	a2,a2
		lib	Intuition,ActivateGadget
		rts

ActivateGads4:	cmp.w	#55,$26(a5)
		beq	Get2
		cmp.w	#2,$26(a5)
		bne	Window4IDCMP
		cmp.l	#$00,(a5)
		beq	ActivateGads4.01
		move.l	(a5),a0
		move.l	StrGad30,a1
		cmp.l	a5,a1
		bne	ActivateGads4.1
ActivateGads4.01: move.l StrGad22,a0
ActivateGads4.1: move.l Window4,a1
		sub.l	a2,a2
		lib	Intuition,ActivateGadget
		bra	Window4IDCMP

ActGad4:	move.l	StrGad22,a0
		move.l	Window4,a1
		sub.l	a2,a2
		lib	Intuition,ActivateGadget
		rts

Learn:		move.w	Page,d0
		mulu.w	#NUMGADS,d0
		move.l	$22(a5),a0
		move.l	(a0),a0
		cmp.l	StrGadBuf1,a0
		bne	Learn1
		add.w	#1,d0
		bra	Learn10
Learn1:		cmp.l	StrGadBuf3,a0
		bne	Learn2
		add.w	#2,d0
		bra	Learn10
Learn2:		cmp.l	StrGadBuf5,a0
		bne	Learn3
		add.w	#3,d0
		bra	Learn10
Learn3:		cmp.l	StrGadBuf7,a0
		bne	Learn4
		add.w	#4,d0
		bra	Learn10
Learn4:		cmp.l	StrGadBuf9,a0
		bne	Learn5
		add.w	#5,d0
		bra	Learn10
Learn5:		cmp.l	StrGadBuf11,a0
		bne	Learn6
		add.w	#6,d0
		bra	Learn10
Learn6:		cmp.l	StrGadBuf13,a0
		bne	Learn7
		add.w	#7,d0
		bra	Learn10
Learn7:		cmp.l	StrGadBuf15,a0
		bne	Learn8
		add.w	#8,d0
		bra	Learn10
Learn8:		cmp.l	StrGadBuf17,a0
		bne	Learn9
		add.w	#9,d0
		bra	Learn10
Learn9:		cmp.l	StrGadBuf19,a0
		bne	Learn10
		add.w	#10,d0

Learn10:	sub.w	#1,d0
		lea.l	MapBuffer,a0
		move.l	$22(a5),a1
		move.l	(a1),a1
		sub.l	a2,a2		;screen
		move.l	#220,d1
		move.l	#42,d2
		lib	Voice,Learn
		move.l	(a5),a0
		bra	ActivateGads2.1

Load:		bsr	RemVTask1

		move.l	FromFile,d1		;If set to something else
		bne	Load1
		lea.l	PrefsName,a0
		move.l	a0,d1
Load1:		move.l	#MODE_OLDFILE,d2
		lib	Dos,Open
		move.l	d0,PrefsFile
		beq	Load_ERR1

		move.l	PrefsFile,d1
		lea.l	Prefs,a0
		move.l	a0,d2
		move.l	#4,d3
		lib	Dos,Read
		cmp.l	#4,d0
		bne	Load_ERR2

		cmp.l	#VSFileVersion,Prefs
		bne	Load_ERR3

		move.l	PrefsFile,d1
		add.l	#4,d2
		move.l	#PrefsSize-4,d3
		lib	Dos,Read
		cmp.l	#PrefsSize-4,d0
		bne	Load_ERR2

Load2:		bsr	SetModes		;fixes startup datafile bug
Load2.1:	move.l	DatStrGadBuf1,d1	;jump here to load data file
		move.l	#MODE_OLDFILE,d2
		lib	Dos,Open
		move.l	d0,DataFile
		beq	Load_ERR1.1

		move.l	DataFile,d1
		lea.l	MapBuffer,a0
		move.l	a0,d2
		move.l	#DataSize,d3
		lib	Dos,Read
		cmp.l	#DataSize,d0
		bne	Load_ERR4

		move.w	#1,Saved

Load_OUT:	move.l	DataFile,d1
		beq	Load_OUT0.1
		lib	Dos,Close
		clr.l	DataFile
Load_OUT0.1:	move.l	PrefsFile,d1
		beq	Load_OUT1
		lib	Dos,Close
		clr.l	PrefsFile

Load_OUT1:	rts

Load_ERR1:	lea.l	File_ERRTxt1,a1
		sub.l	a2,a2
		lea.l	OKTxt,a3
		bsr	DoAutoRequest
		bra	Load2

Load_ERR1.1:	lea.l	File_ERRTxt4,a1
		sub.l	a2,a2
		lea.l	OKTxt,a3
		bsr	DoAutoRequest
		bra	Load_OUT

Load_ERR2:	lea.l	File_ERRTxt2,a1
		sub.l	a2,a2
		lea.l	OKTxt,a3
		bsr	DoAutoRequest
		bra	Load2

Load_ERR3:	lea.l	File_ERRTxt3,a1
		sub.l	a2,a2
		lea.l	OKTxt,a3
		bsr	DoAutoRequest
		bra	Load2

Load_ERR4:	lea.l	File_ERRTxt2,a1
		sub.l	a2,a2
		lea.l	OKTxt,a3
		bsr	DoAutoRequest
		bra	Load_OUT

Save:		bsr	CheckModes

		move.l	FromFile,d1		;If set to something else
		bne	Save1
		lea.l	PrefsName,a0
		move.l	a0,d1
Save1:		move.l	#MODE_NEWFILE,d2
		lib	Dos,Open
		move.l	d0,PrefsFile
		beq	Save_ERR1

		move.l	#VSFileVersion,Prefs

		move.l	PrefsFile,d1
		lea.l	Prefs,a0
		move.l	a0,d2
		move.l	#PrefsSize,d3
		lib	Dos,Write
		cmp.l	#PrefsSize,d0
		bne	Save_ERR2

Save2:		move.l	DatStrGadBuf1,d1
		move.l	#MODE_NEWFILE,d2
		lib	Dos,Open
		move.l	d0,DataFile
		beq	Save_ERR1.1

		move.l	DataFile,d1
		lea.l	MapBuffer,a0
		move.l	a0,d2
		move.l	#DataSize,d3
		lib	Dos,Write
		cmp.l	#DataSize,d0
		bne	Save_ERR2

		move.w	#1,Saved

Save_OUT:	move.l	DataFile,d1
		beq	Save_OUT0.1
		lib	Dos,Close
		clr.l	DataFile
Save_OUT0.1:	move.l	PrefsFile,d1
		beq	Save_OUT1
		lib	Dos,Close
		clr.l	PrefsFile
Save_OUT1:	bra	ActivateGads

Save_ERR1:	lea.l	File_ERRTxt1,a1
		move.l	#$00,a2
		lea.l	OKTxt,a3
		bsr	DoAutoRequest
		clr.w	Saved
		bra	Save2

Save_ERR1.1:	lea.l	File_ERRTxt4,a1
		move.l	#$00,a2
		lea.l	OKTxt,a3
		bsr	DoAutoRequest
		clr.w	Saved
		bra	Save_OUT

Save_ERR2:	lea.l	File_ERRTxt2,a1
		move.l	#$00,a2
		lea.l	OKTxt,a3
		bsr	DoAutoRequest
		clr.w	Saved
		bra	Save_OUT

About:		move.w	#1,DisActive
		bsr	RemVTask1
		bsr	SleepPointer
		bsr	MenusOff
		bsr	RemGads

		move.l	Window1,a0
		lea.l	AboutTxt1,a1
		sub.l	a2,a2		;positive text
		lea.l	OKTxt,a3	;a bit the wrong way around but...
		clr.l	d0
		clr.l	d1
		move.l	#320,d2
		move.l	#$50,d3
		lib	Intuition,AutoRequest
		clr.w	DisActive
		bsr	AddGads
		bsr	MenusOn
		bsr	NormalPointer
		bsr	AddVTask
		bra	Window1IDCMP

;This is an emergency exit.

Break:		lea.l	BreakText1,a0
		bsr	Printer
		clr.l	d0
		rts

AddVTask:	tst.l	Window1			;BUG: Turns on anyway
		beq	AddVTask1		;Window not open
		move.l	OnOffGad1,a0
		move.w	gg_Flags(a0),d0
		and.w	#SELECTED,d0
		cmp.w	#SELECTED,d0
		bne	AddVTask_OUT		;Already active
AddVTask1:	tst.w	TaskOn
		bne	AddVTask_OUT
		lea.l	MapBuffer,a0
		move.l	VoicePort,a1
		clr.l	d0
		clr.l	d1
		move.w	#VocabSIZE,d0
		move.b	PrefsSampRes,d1
		lib	Voice,AddVoiceTask

		move.l	PrefsPriority,d0
		lib	Voice,SetVoicePri

		move.w	#1,TaskOn
		move.b	#1,PrefsOnOff

		cmp.l	#5625242,d5
		bne	AddVTask_OUT
		lea.l	TaskOnText1,a0
		bsr	GetLength
		bsr	Inform
		bsr	CXEnable
		clr.l	d5
AddVTask_OUT:	rts

RemVTask:	tst.l	Window1			;BUG: Turns off anyway?
		beq	RemVTask1		;Window not open
		move.l	#5625242,d5
		move.l	OnOffGad1,a0
		move.w	gg_Flags(a0),d0
		and.w	#SELECTED,d0
		cmp.w	#SELECTED,d0
		beq	RemVTask_OUT
RemVTask1:	tst.w	TaskOn
		beq	RemVTask_OUT

		lib	Exec,Forbid
		bsr	C3GetMsg1		;Clear messages
		lib	Exec,Permit
		lib	Voice,RemVoiceTask

		clr.w	TaskOn
		clr.b	PrefsOnOff
		cmp.l	#5625242,d5
		bne	RemVTask_OUT
		lea.l	TaskOffText1,a0
		bsr	GetLength
		bsr	Inform
		bsr	CXDisable
RemVTask_OUT:	rts

SetModes:	tst.l	Window1
		beq	SetModes_OUT2

		bsr	RemGads

		clr.l	GainPointer
		move.b	PrefsGain,GainPointer+3

		move.l	OnOffGad1,a0
		and.w	#~SELECTED,gg_Flags(a0)

		move.l	OnOffGad1,a0
		tst.b	PrefsOnOff
		beq	SetModes1
		or.w	#SELECTED,gg_Flags(a0)

SetModes1:	move.l	mlist,a0			;UnCheck SampType1
		move.l	#Samp1MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		and.w	#~CHECKED,$c(a0)

		move.l	mlist,a0			;UnCheck SampType2
		move.l	#Samp2MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		and.w	#~CHECKED,$c(a0)

		move.l	mlist,a0			;UnCheck SampType3
		move.l	#Samp3MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		and.w	#~CHECKED,$c(a0)

		move.l	mlist,a0			;UnCheck SampType4
		move.l	#Samp4MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		and.w	#~CHECKED,$c(a0)

		cmp.b	#SAMP_PERFSND,PrefsSampType		;PerfectSound
		bne	SetModes2
		move.l	mlist,a0
		move.l	#Samp1MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		or.w	#CHECKED,$c(a0)
		move.l	GainUGad1,a0
		and.w	#~GADGDISABLED,gg_Flags(a0)
		move.l	GainDGad1,a0
		and.w	#~GADGDISABLED,gg_Flags(a0)

SetModes2:	cmp.b	#SAMP_SNDMSTR,PrefsSampType		;SoundMaster
		bne	SetModes2.1
		move.l	mlist,a0
		move.l	#Samp2MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		or.w	#CHECKED,$c(a0)
		move.l	GainUGad1,a0
		or.w	#GADGDISABLED,gg_Flags(a0)
		move.l	GainDGad1,a0
		or.w	#GADGDISABLED,gg_Flags(a0)

SetModes2.1:	cmp.b	#SAMP_DSS8,PrefsSampType		;DSS 8
		bne	SetModes2.2
		move.l	mlist,a0
		move.l	#Samp3MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		or.w	#CHECKED,$c(a0)
		move.l	GainUGad1,a0
		and.w	#~GADGDISABLED,gg_Flags(a0)
		move.l	GainDGad1,a0
		and.w	#~GADGDISABLED,gg_Flags(a0)

SetModes2.2:	cmp.b	#SAMP_GENERIC,PrefsSampType		;Generic
		bne	SetModes3
		move.l	mlist,a0
		move.l	#Samp4MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		or.w	#CHECKED,$c(a0)
		move.l	GainUGad1,a0
		or.w	#GADGDISABLED,gg_Flags(a0)
		move.l	GainDGad1,a0
		or.w	#GADGDISABLED,gg_Flags(a0)

SetModes3:	move.l	mlist,a0			;UnCheck ResLo
		move.l	#ResLoMenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		and.w	#~CHECKED,$c(a0)

		move.l	mlist,a0			;UnCheck ResHi
		move.l	#ResHiMenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		and.w	#~CHECKED,$c(a0)

		cmp.b	#1,PrefsSampRes
		bne	SetModes4
		move.l	mlist,a0
		move.l	#ResLoMenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		or.w	#CHECKED,$c(a0)

SetModes4:	tst.b	PrefsSampRes
		bne	SetModes5
		move.l	mlist,a0
		move.l	#ResHiMenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		or.w	#CHECKED,$c(a0)

SetModes5:	move.l	mlist,a0			;UnCheck Lowest
		move.l	#Acc1MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		and.w	#~CHECKED,$c(a0)

		move.l	mlist,a0			;UnCheck Lower
		move.l	#Acc2MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		and.w	#~CHECKED,$c(a0)

		move.l	mlist,a0			;UnCheck Low
		move.l	#Acc3MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		and.w	#~CHECKED,$c(a0)

		move.l	mlist,a0			;UnCheck Normal
		move.l	#Acc4MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		and.w	#~CHECKED,$c(a0)

		move.l	mlist,a0			;UnCheck High
		move.l	#Acc5MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		and.w	#~CHECKED,$c(a0)

		move.l	mlist,a0			;UnCheck Higher
		move.l	#Acc6MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		and.w	#~CHECKED,$c(a0)

		move.l	mlist,a0			;UnCheck Even higher
		move.l	#Acc7MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		and.w	#~CHECKED,$c(a0)

		move.l	mlist,a0			;UnCheck Maximum
		move.l	#Acc8MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		and.w	#~CHECKED,$c(a0)

		cmp.w	#AccVal1,PrefsScore
		bne	SetModes7
		move.l	mlist,a0
		move.l	#Acc1MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		or.w	#CHECKED,$c(a0)

SetModes7:	cmp.w	#AccVal2,PrefsScore
		bne	SetModes8
		move.l	mlist,a0
		move.l	#Acc2MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		or.w	#CHECKED,$c(a0)

SetModes8:	cmp.w	#AccVal3,PrefsScore
		bne	SetModes9
		move.l	mlist,a0
		move.l	#Acc3MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		or.w	#CHECKED,$c(a0)

SetModes9:	cmp.w	#AccVal4,PrefsScore
		bne	SetModes10
		move.l	mlist,a0
		move.l	#Acc4MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		or.w	#CHECKED,$c(a0)

SetModes10:	cmp.w	#AccVal5,PrefsScore
		bne	SetModes11
		move.l	mlist,a0
		move.l	#Acc5MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		or.w	#CHECKED,$c(a0)

SetModes11:	cmp.w	#AccVal6,PrefsScore
		bne	SetModes12
		move.l	mlist,a0
		move.l	#Acc6MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		or.w	#CHECKED,$c(a0)

SetModes12:	cmp.w	#AccVal7,PrefsScore
		bne	SetModes13
		move.l	mlist,a0
		move.l	#Acc7MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		or.w	#CHECKED,$c(a0)

SetModes13:	cmp.w	#AccVal8,PrefsScore
		bne	SetModes14
		move.l	mlist,a0
		move.l	#Acc8MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		or.w	#CHECKED,$c(a0)

SetModes14:	move.l	mlist,a0			;UnCheck Left
		move.l	#Chan1MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		and.w	#~CHECKED,$c(a0)

		move.l	mlist,a0			;UnCheck Right
		move.l	#Chan2MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		and.w	#~CHECKED,$c(a0)

		move.l	mlist,a0			;UnCheck Mic
		move.l	#Input1MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		and.w	#~CHECKED,$c(a0)

		move.l	mlist,a0			;UnCheck Line
		move.l	#Input2MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		and.w	#~CHECKED,$c(a0)

		cmp.b	#CHANNEL_LEFT,PrefsChannel
		bne	SetModes15
		move.l	mlist,a0
		move.l	#Chan1MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		or.w	#CHECKED,$c(a0)

SetModes15:	cmp.b	#CHANNEL_RIGHT,PrefsChannel
		bne	SetModes16
		move.l	mlist,a0
		move.l	#Chan2MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		or.w	#CHECKED,$c(a0)

SetModes16:	cmp.b	#INPUT_MIC,PrefsInput
		bne	SetModes17
		move.l	mlist,a0
		move.l	#Input1MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		or.w	#CHECKED,$c(a0)

SetModes17:	cmp.b	#INPUT_LINE,PrefsInput
		bne	SetModes18
		move.l	mlist,a0
		move.l	#Input2MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		or.w	#CHECKED,$c(a0)

SetModes18:	move.l	mlist,a0			;UnCheck Timer A
		move.l	#Timer1MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		and.w	#~CHECKED,$c(a0)

		move.l	mlist,a0			;UnCheck Timer B
		move.l	#Timer2MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		and.w	#~CHECKED,$c(a0)

		cmp.b	#TIMER_A,PrefsTimer
		bne	SetModes19
		move.l	mlist,a0
		move.l	#Timer1MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		or.w	#CHECKED,$c(a0)

SetModes19:	cmp.b	#TIMER_B,PrefsTimer
		bne	SetModes20
		move.l	mlist,a0
		move.l	#Timer2MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		or.w	#CHECKED,$c(a0)

SetModes20:	move.l	mlist,a0			;UnCheck Confirm
		move.l	#ConfirmMenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		and.w	#~CHECKED,$c(a0)

		cmp.b	#1,PrefsConfirm
		bne	SetModes20.1
		move.l	mlist,a0
		move.l	#ConfirmMenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		or.w	#CHECKED,$c(a0)

SetModes20.1:	move.l	mlist,a0			;UnCheck Wake0
		move.l	#Wake1MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		and.w	#~CHECKED,$c(a0)

		move.l	mlist,a0			;UnCheck Wake5
		move.l	#Wake2MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		and.w	#~CHECKED,$c(a0)

		move.l	mlist,a0			;UnCheck Wake10
		move.l	#Wake3MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		and.w	#~CHECKED,$c(a0)

		move.l	mlist,a0			;UnCheck Wake15
		move.l	#Wake4MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		and.w	#~CHECKED,$c(a0)

		move.l	mlist,a0			;UnCheck Wake20
		move.l	#Wake5MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		and.w	#~CHECKED,$c(a0)

		cmp.b	#0,PrefsWake
		bne	SetModes20.2
		move.l	mlist,a0
		move.l	#Wake1MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		or.w	#CHECKED,$c(a0)

SetModes20.2:	cmp.b	#5,PrefsWake
		bne	SetModes20.3
		move.l	mlist,a0
		move.l	#Wake2MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		or.w	#CHECKED,$c(a0)

SetModes20.3:	cmp.b	#10,PrefsWake
		bne	SetModes20.4
		move.l	mlist,a0
		move.l	#Wake3MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		or.w	#CHECKED,$c(a0)

SetModes20.4:	cmp.b	#15,PrefsWake
		bne	SetModes20.5
		move.l	mlist,a0
		move.l	#Wake4MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		or.w	#CHECKED,$c(a0)

SetModes20.5:	cmp.b	#20,PrefsWake
		bne	SetModes20.9
		move.l	mlist,a0
		move.l	#Wake5MenuN,d0
		lib	Intuition,ItemAddress
		move.l	d0,a0
		or.w	#CHECKED,$c(a0)

SetModes20.9:	lea.l	DatBuffer,a0
		move.l	DatStrGadBuf1,a1
		move.l	#32,d0
		lib	Exec,CopyMem

		tst.l	Window1
		beq	SetModes21
		tst.l	OptionIconify
		beq	SetModes21
		move.l	Window1,a0
		move.w	Alt1XPos,d0
		move.w	Alt1YPos,d1
		move.w	wd_Width(a0),d2
		move.w	wd_Height(a0),d3
		lib	Intuition,ChangeWindowBox
		bra	SetModes22
SetModes21:	move.l	Alt1XPos,NewWindow1

;None of the below are allowed to assume the window is open, it might not
;be!

SetModes22:	cmp.b	#SAMP_PERFSND,PrefsSampType		;PerfectSound
		bne	SetModes23

		move.l	#SAMP_PERFSND,d0
		clr.l	d1
		lib	Voice,PickSampler

SetModes23:	cmp.b	#SAMP_SNDMSTR,PrefsSampType		;SoundMaster
		bne	SetModes24

		move.l	#SAMP_SNDMSTR,d0
		clr.l	d1
		lib	Voice,PickSampler


SetModes24:	cmp.b	#SAMP_DSS8,PrefsSampType		;DSS 8
		bne	SetModes25

		move.l	#SAMP_DSS8,d0
		clr.l	d1
		move.b	PrefsGain,d1
		lib	Voice,PickSampler

SetModes25:	cmp.b	#SAMP_GENERIC,PrefsSampType		;Generic
		bne	SetModes26

		move.l	#SAMP_GENERIC,d0
		clr.l	d1
		lib	Voice,PickSampler

SetModes26:	cmp.b	#CHANNEL_LEFT,PrefsChannel
		bne	SetModes27

		move.l	#CHANNEL_LEFT,d0
		lib	Voice,PickChannel

SetModes27:	cmp.b	#CHANNEL_RIGHT,PrefsChannel
		bne	SetModes28

		move.l	#CHANNEL_RIGHT,d0
		lib	Voice,PickChannel

SetModes28:	cmp.b	#INPUT_MIC,PrefsInput
		bne	SetModes29

		move.l	#INPUT_MIC,d0
		lib	Voice,PickInput

SetModes29:	cmp.b	#INPUT_LINE,PrefsInput
		bne	SetModes30

		move.l	#INPUT_LINE,d0
		lib	Voice,PickInput

SetModes30:	cmp.b	#TIMER_A,PrefsTimer
		bne	SetModes31

		move.l	#TIMER_A,d0
		lib	Voice,PickTimer

SetModes31:	cmp.b	#TIMER_B,PrefsTimer
		bne	SetModes32

		move.l	#TIMER_B,d0
		lib	Voice,PickTimer

SetModes32:

SetModes_OUT:	bsr	AddGads
		rts

;Here we do some 'patches' when the window isn't open and then do the
;normal stuff that needs to be done.

SetModes_OUT2:	lea.l	DatBuffer,a0
		move.l	a0,DatStrGadBuf1
		bra	SetModes22

CheckModes:	tst.l	Window1
		beq	CheckModes_OUT
		move.l	OnOffGad1,a0
		move.w	gg_Flags(a0),d0
		clr.b	PrefsOnOff
		and.w	#SELECTED,d0
		cmp.w	#SELECTED,d0
		bne	CheckModes1
		move.b	#$01,PrefsOnOff

CheckModes1:	move.l	DatStrGadBuf1,a0
		lea.l	DatBuffer,a1
		move.l	#32,d0
		lib	Exec,CopyMem

		tst.l	Window1
		beq	CheckModes_OUT
		move.l	Window1,a0
		move.l	wd_LeftEdge(a0),Alt1XY
CheckModes_OUT:	rts

RemGads:	tst.l	Window1
		beq	RemGads_OUT
		move.l	Window1,a0
		lea.l	glist,a1
		sub.l	a2,a2
		move.l	#-1,d0
		lib	Intuition,RemoveGList
RemGads_OUT:	rts

AddGads:	tst.l	Window1
		beq	AddGads_OUT
		move.l	Window1,a0
		lea.l	glist,a1
		sub.l	a2,a2
		move.l	#-1,d0
		move.l	#-1,d1
		lib	Intuition,AddGList

		lea.l	glist,a0
		move.l	Window1,a1
		sub.l	a2,a2
		move.l	#-1,d0
		lib	Intuition,RefreshGList

		move.l	GainGad1,a0
		move.l	Window1,a1
		sub.l	a2,a2
		lea.l	GainGadTagList,a3
		lib	GadTools,GT_SetGadgetAttrsA

		move.l	Window1,a0
		sub.l	a1,a1
		lib	GadTools,GT_RefreshWindow
AddGads_OUT:	rts

RemGads2:	tst.l	Window2
		beq	RemGads2_OUT
		move.l	Window2,a0
		lea.l	glist2,a1
		sub.l	a2,a2
		move.l	#-1,d0
		lib	Intuition,RemoveGList
RemGads2_OUT:	rts

AddGads2:	tst.l	Window2
		beq	AddGads2_OUT
		move.l	Window2,a0
		lea.l	glist2,a1
		sub.l	a2,a2
		move.l	#-1,d0
		move.l	#-1,d1
		lib	Intuition,AddGList

		lea.l	glist2,a0
		move.l	Window2,a1
		sub.l	a2,a2
		move.l	#-1,d0
		lib	Intuition,RefreshGList

		move.l	Window2,a0
		sub.l	a1,a1
		lib	GadTools,GT_RefreshWindow
AddGads2_OUT:	rts

RemGads4:	tst.l	Window4
		beq	RemGads4_OUT
		move.l	Window4,a0
		lea.l	glist4,a1
		sub.l	a2,a2
		move.l	#-1,d0
		lib	Intuition,RemoveGList
RemGads4_OUT:	rts

AddGads4:	tst.l	Window4
		beq	AddGads4_OUT
		move.l	Window4,a0
		lea.l	glist4,a1
		sub.l	a2,a2
		move.l	#-1,d0
		move.l	#-1,d1
		lib	Intuition,AddGList

		lea.l	glist4,a0
		move.l	Window4,a1
		sub.l	a2,a2
		move.l	#-1,d0
		lib	Intuition,RefreshGList

		move.l	Window4,a0
		sub.l	a1,a1
		lib	GadTools,GT_RefreshWindow
AddGads4_OUT:	rts

;Abort timer request

ClearTimer:	move.l	TIORequest,a1
		lib	Exec,AbortIO
		tst.l	d0
		beq	ClearTimer1
		move.l	TRPort,a0
		lib	Exec,GetMsg
ClearTimer1:	move.l	TIORequest,a1
		lib	Exec,WaitIO
		rts

;Send timer request

Waiter:		move.l	TIORequest,a1
		move.w	#TR_ADDREQUEST,IO_COMMAND(a1)
		move.l	Time,IOTV_TIME(a1)
		move.l	#2,IOTV_TIME+4(a1)	;just in case secs=0
		lib	Exec,SendIO
		rts

Quit:		tst.w	Saved
		bne	ShutDown
		bsr	RemVTask1
		bsr	SleepPointer
		bsr	MenusOff
		bsr	RemGads

		lea.l	QuitTxt1,a1
		lea.l	OKTxt,a2
		lea.l	CancelTxt,a3
		bsr	DoAutoRequest
		tst.l	d0
		bne	Quit2
		bsr	AddGads
		bsr	MenusOn
		bsr	NormalPointer
		bsr	AddVTask
		bra	Window1IDCMP

Quit2:		bsr	MenusOn
		bsr	NormalPointer
		bsr	AddGads
		bsr	AddVTask
		bra	ShutDown

ShutDown:	bsr	RemVTask1
		bsr	UnLockPubScr

ShutDown9900:	tst.w	TimerOpen
		beq	ShutDown9800
		bsr	ClearTimer
		move.l	TIORequest,a1
		lib	Exec,CloseDevice
		clr.w	TimerOpen

ShutDown9800:	move.l	TIORequest,a0
		lib	Exec,DeleteIORequest

		tst.l	TRPort
		beq	ShutDown8900

		lib	Exec,Forbid			;Remove all
		move.l	TRPort,a2			;pending messages

ClearTRPort:	move.l	a2,a0
		flib	Exec,GetMsg
		tst.l	d0
		beq	ClearTRPort2
		move.l	d0,a1
		flib	Exec,ReplyMsg
		bra	ClearTRPort
ClearTRPort2:	move.l	TRPort,a0
		flib	Exec,DeleteMsgPort
		flib	Exec,Permit

ShutDown8900:	tst.l	CXBroker1
		beq	ShutDown8800

		lib	Exec,Forbid			;Remove all
		move.l	CXPort,a2			;pending messages

ClearCX1:	move.l	a2,a0
		flib	Exec,GetMsg
		tst.l	d0
		beq	ClearCX2
		move.l	d0,a1
		flib	Exec,ReplyMsg
		bra	ClearCX1
ClearCX2:	move.l	CXBroker1,a0
		lib	Commodities,DeleteCxObjAll
		lib	Exec,Permit

ShutDown8800:	bsr	CloseWin1
		bsr	CloseWin2
		bsr	CloseWin3
		bsr	CloseWin4
		bsr	Clean2.0Magic

ShutDown8000:	move.l	PrefsFile,d1
		beq	ShutDown7000
		lib	Dos,Close

ShutDown7000:	tst.l	NILFile
		beq	ShutDown6000
		move.l	NILFile,d1
		lib	Dos,Close

ShutDown6000:	tst.l	DiskObject
		beq	ShutDown5000
		move.l	DiskObject,a0
		lib	Icon,FreeDiskObject

ShutDown5000:	move.l	OldLock,d1
		beq	ShutDown4050
		lib	Dos,CurrentDir

ShutDown4050:	move.l	WBMsg,d2
		beq	ShutDown3000
		lib	Exec,Forbid
		move.l	d2,a1
		flib	Exec,ReplyMsg

ShutDown3000:	move.l	RDArgs1,d1
		beq	ShutDown2500
		lib	Dos,FreeArgs

ShutDown2500:	tst.l	AslReq
		beq	ShutDown2000
		move.l	AslReq,a0
		lib	Asl,FreeFileRequest

ShutDown2000:	move.l	VoicePort,a0		;Messages cleared earlier
		lib	Exec,DeleteMsgPort

		move.l	CXPort,a0		;Messages cleared earlier
		lib	Exec,DeleteMsgPort

		move.l	ARexxPort,a1			;Remove possible
		cmp.l	#$00,a1				;ports from lists
		beq	ShutDown1000			;and then delete
		lib	Exec,RemPort			;the ports

		flib	Exec,Forbid			;Remove all
		move.l	ARexxPort,a2			;pending messages

ClearARexx1:	move.l	a2,a0
		flib	Exec,GetMsg
		tst.l	d0
		beq	ClearARexx2
		move.l	d0,a1
		move.l	#RC_FATAL,RESULT1(a1)		;Fail all requests
		flib	Exec,ReplyMsg
		bra	ClearARexx1
ClearARexx2:	move.l	ARexxPort,a0
		flib	Exec,DeleteMsgPort
		flib	Exec,Permit

ShutDown1000:	closlib Voice
		closlib	Commodities
		closlib Icon
		closlib Intuition
		closlib GadTools
		closlib	Asl
		closlib	Utility
		closlib Dos

		move.l	OurTask,a1		;reset task pri after
		clr.l	d0			;voice.lib has been
		lib	Exec,SetTaskPri		;opened and closed

		pull	d2-d7/a2-a6
		clr.l	d0
		rts

;CheckIDCMP gets messages from keyboard (CTRL_C/D/E), Intuition and
;voice.library, commodities.library and ARexx
;
;Give it the window structure in a0

CheckIDCMP:	clr.l	d1
		clr.l	d0
		cmp.l	#0,a0			;Window open?
		beq	CheckIDCMP1		;Nope ->
		move.l	$56(a0),a2		;Get window's port
		move.b	MP_SIGBIT(a2),d1	;IntuiMessages signals
		bset.l	d1,d0
CheckIDCMP1:	clr.l	d1			;Set signals for
		move.l	VoicePort,a0		;voice.library
		move.b	MP_SIGBIT(a0),d1
		bset.l	d1,d0
		clr.l	d1
		move.l	CXPort,a0		;commodities.library
		move.b	MP_SIGBIT(a0),d1
		bset.l	d1,d0
		clr.l	d1
		move.l	ARexxPort,a0		;ARexx
		move.b	MP_SIGBIT(a0),d1
		bset.l	d1,d0
		clr.l	d1
		move.l	TRPort,a0		;timer.device
		move.b	MP_SIGBIT(a0),d1
		bset.l	d1,d0
		bset.l	#SIGBREAKB_CTRL_C,d0	;and CTRL_C
		bset.l	#SIGBREAKB_CTRL_D,d0	;and CTRL_D
		bset.l	#SIGBREAKB_CTRL_E,d0	;and CTRL_E
		lib	Exec,Wait

		cmp.l	#SIGBREAKF_CTRL_C,d0	;If CTRL_C
		beq	Break			;go break
		cmp.l	#SIGBREAKF_CTRL_D,d0	;If CTRL_D
		bne	CheckIDCMP2		;inform about it
		move.l	#1,d0
		rts
CheckIDCMP2:	cmp.l	#SIGBREAKF_CTRL_E,d0	;If CTRL_E
		bne	CheckIDCMP3		;inform about it
		move.l	#2,d0
		rts
CheckIDCMP3:	move.l	VoicePort,a0		;If voice.library
		move.b	MP_SIGBIT(a0),d1
		btst	d1,d0
		bne	C3GetMsg1

		move.l	CXPort,a0		;If commodities.library
		move.b	MP_SIGBIT(a0),d1
		btst	d1,d0
		bne	C4GetMsg1

		move.l	TRPort,a0		;If commodities.library
		move.b	MP_SIGBIT(a0),d1
		btst	d1,d0
		bne	C5GetMsg1

		move.l	ARexxPort,a0		;If ARexx
		move.b	MP_SIGBIT(a0),d1
		btst	d1,d0
		beq	C2GetMsg1

		bsr	DoARexx			;Go do ARexx magic
		rts

C2GetMsg1:	move.l	a2,a0			;If Intuition
		lib	GadTools,GT_GetIMsg
		tst.l	d0
		beq	C2GetMsg2
	
		move.l	d0,a1 
		move.l	im_Class(a1),d2		;answers with Class in d2,
		move.w	im_Code(a1),d3		;Code in d3 and
		move.w	im_Qualifier(a1),a4	;Qualifier in a4
		move.l	im_IAddress(a1),a5	;IAddress in a5
		lib	GadTools,GT_ReplyIMsg
		bra	C2GetMsg1
C2GetMsg2:	move.l	#-1,d0
		rts

C3GetMsg1:	move.l	VoicePort,a0
		lib	Exec,GetMsg
		tst.l	d0
		beq	C3GetMsg2
	
		move.l	d0,a1
		move.l	im_Class(a1),d2		;Class in d2 and
		move.w	im_Code(a1),d3		;Code in d3
		move.w	im_Qualifier(a1),a4	;Qualifier in a4

		lib	Exec,ReplyMsg
		bra	C3GetMsg1
C3GetMsg2:	move.l	#3,d0
		rts

C4GetMsg1:	move.l	CXPort,a0
		lib	Exec,GetMsg
		tst.l	d0
		beq	C4GetMsg_OUT

		move.l	d0,a2			;Message in a2

		move.l	a2,a0
		lib	Commodities,CxMsgType
		move.l	d0,d2			;Type in d2

		move.l	a2,a0
		lib	Commodities,CxMsgID
		move.l	d0,d3			;ID in d3

		move.l	a2,a1
		lib	Exec,ReplyMsg

		bsr	CX		;Go do magic stuff
		tst.l	d0
		bne	C4GetMsg1	;Loop all messages
		rts

C4GetMsg_OUT:	move.l	#4,d0		;Return as CX
		rts

C5GetMsg1:	move.l	TRPort,a0
		lib	Exec,GetMsg
		tst.l	d0
		beq	C5GetMsg_OUT

		clr.w	Awake

C5GetMsg_OUT:	move.l	#4,d0
		rts

;Newer MenuNull subroutine

MenuNull:	move.w	d3,d0
		and.w	#$1f,d0
		move.w	d0,d6
		move.w	d3,d0
		lsr.w	#5,d0
		move.w	d0,d1
		and.w	#$3f,d0
		move.w	d0,d5
		lsr.w	#6,d1
		move.w	d1,d4
		rts

;ARexx interface

DoARexx:	move.l	ARexxPort,a0
		lib	Exec,GetMsg

		move.l	#4,d2			;answer to Window1IDCMP
		tst.l	d0
		beq	DoARexx_OUT

		move.l	d0,a5
		cmp.l	#RXCOMM,ACTION(a5)
		bne	DoARexxReply

		tst.l	Window2		;Don't do ARexx while other
		bne	DoARexxFail	;windows are open!
		tst.l	Window3
		bne	DoARexxFail

		lea.l	RexxFront,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxFront

		lea.l	RexxBack,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxBack

		lea.l	RexxZoom,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxZoom

		lea.l	RexxHide,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxHide

		lea.l	RexxShow,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxShow

		lea.l	RexxOn,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxOn

		lea.l	RexxOff,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxOff

		lea.l	RexxQuit,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxQuit

		lea.l	RexxPerfSnd,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxPerfSnd

		lea.l	RexxSndMstr,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxSndMstr

		lea.l	RexxDSS8,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxDSS8

		lea.l	RexxGeneric,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxGeneric

		lea.l	RexxResLo,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxResLo

		lea.l	RexxResHi,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxResHi

		lea.l	RexxLowest,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxLowest

		lea.l	RexxLower,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxLower

		lea.l	RexxLow,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxLow

		lea.l	RexxNormal,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxNormal

		lea.l	RexxHigh,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxHigh

		lea.l	RexxHigher,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxHigher

		lea.l	RexxEHigher,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxEHigher

		lea.l	RexxMaximum,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxMaximum

		lea.l	RexxLeft,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxLeft

		lea.l	RexxRight,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxRight

		lea.l	RexxLine,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxLine

		lea.l	RexxMic,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxMic

		lea.l	RexxGainUp,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxGainUp

		lea.l	RexxGainDown,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxGainDown

		lea.l	RexxTimerA,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxTimerA

		lea.l	RexxTimerB,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxTimerB

		lea.l	RexxConfirm,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxConf

		lea.l	RexxNoConfirm,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxNoConf

		lea.l	RexxWake0,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxWake0

		lea.l	RexxWake5,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxWake5

		lea.l	RexxWake10,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxWake10

		lea.l	RexxWake15,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxWake15

		lea.l	RexxWake20,a0
		move.l	ARG0(a5),a1
		bsr	CmpStrings
		bne	DoRexxWake20

		move.l	ARG0(a5),a1
		cmp.b	#'K',(a1)+
		bne	DoARexx2
		cmp.b	#'E',(a1)+
		bne	DoARexx2
		cmp.b	#'Y',(a1)+
		bne	DoARexx2
		cmp.b	#' ',(a1)+
		beq	DoRexxKeyInput

DoARexx2:	move.l	ARG0(a5),a1
		cmp.b	#'L',(a1)+
		bne	DoARexxFail
		cmp.b	#'O',(a1)+
		bne	DoARexxFail
		cmp.b	#'A',(a1)+
		bne	DoARexxFail
		cmp.b	#'D',(a1)+
		bne	DoARexxFail
		cmp.b	#' ',(a1)+
		beq	DoRexxLoad

DoARexxFail:	move.l	#RC_FATAL,RESULT1(a5)
		move.l	#4,d2
		bra	DoARexxReply

DoARexxOK:	move.l	#RC_OK,RESULT1(a5)
DoARexxReply:	move.l	a5,a1
		lib	Exec,ReplyMsg
DoARexx_OUT:	move.l	d2,d0
		rts


DoRexxFront:	push	a5
		bsr	ToFront
		move.l	#4,d2
		pull	a5
		bra	DoARexxOK

DoRexxBack:	push	a5
		bsr	ToBack
		move.l	#4,d2
		pull	a5
		bra	DoARexxOK

DoRexxZoom:	push	a5
		bsr	Zoom
		move.l	#4,d2
		pull	a5
		bra	DoARexxOK

DoRexxHide:	push	a5
		bsr	DoCXDisappear
		move.l	#4,d2
		pull	a5
		bra	DoARexxOK

DoRexxShow:	push	a5
		bsr	DoCXAppear
		move.l	#4,d2
		pull	a5
		bra	DoARexxOK

DoRexxOn:	tst.w	DisActive
		bne	DoARexxFail
		push	a5
		bsr	CLITypeOn
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxOff:	tst.w	DisActive
		bne	DoARexxFail
		push	a5
		bsr	CLITypeOff
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxQuit:	clr.l	d2
		bra	DoARexxOK

DoRexxPerfSnd:	push	a5
		bsr	SetSamp1
		bsr	SetModes
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxSndMstr:	push	a5
		bsr	SetSamp2
		bsr	SetModes
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxDSS8:	push	a5
		bsr	SetSamp3
		bsr	SetModes
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxGeneric:	push	a5
		bsr	SetSamp4
		bsr	SetModes
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxResLo:	push	a5
		bsr	SetResLo
		bsr	SetModes
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxResHi:	push	a5
		bsr	SetResHi
		bsr	SetModes
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxLowest:	push	a5
		bsr	SetAccLowest
		bsr	SetModes
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxLower:	push	a5
		bsr	SetAccLower
		bsr	SetModes
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxLow:	push	a5
		bsr	SetAccLow
		bsr	SetModes
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxNormal:	push	a5
		bsr	SetAccNormal
		bsr	SetModes
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxHigh:	push	a5
		bsr	SetAccHigh
		bsr	SetModes
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxHigher:	push	a5
		bsr	SetAccHigher
		bsr	SetModes
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxEHigher:	push	a5
		bsr	SetAccEHigher
		bsr	SetModes
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxMaximum:	push	a5
		bsr	SetAccMaximum
		bsr	SetModes
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxLeft:	push	a5
		bsr	SetLeft
		bsr	SetModes
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxRight:	push	a5
		bsr	SetRight
		bsr	SetModes
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxLine:	push	a5
		bsr	SetLine
		bsr	SetModes
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxMic:	push	a5
		bsr	SetMic
		bsr	SetModes
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxGainUp:	push	a5
		bsr	GainUp
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxGainDown:	push	a5
		bsr	GainDown
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxTimerA:	push	a5
		bsr	SetTimerA
		bsr	SetModes
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxTimerB:	push	a5
		bsr	SetTimerB
		bsr	SetModes
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxConf:	push	a5
		move.b	#1,PrefsConfirm
		bsr	SetModes
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxNoConf:	push	a5
		clr.b	PrefsConfirm
		bsr	SetModes
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxWake0:	push	a5
		bsr	SetWake0
		bsr	SetModes
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxWake5:	push	a5
		bsr	SetWake0
		move.b	#5,PrefsWake
		bsr	SetModes
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxWake10:	push	a5
		bsr	SetWake10
		bsr	SetModes
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxWake15:	push	a5
		bsr	SetWake15
		bsr	SetModes
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxWake20:	push	a5
		bsr	SetWake20
		bsr	SetModes
		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxLoad:	push	a5

		move.l	a1,FromFile	;Fake CLI Input :)
		bsr	Load
		bsr	AddVTask

		pull	a5
		move.l	#4,d2
		bra	DoARexxOK

DoRexxKeyInput:	move.l	a1,a0
		lea.l	StringBuffer,a1
		bsr	CopyStrs

		bsr	SendEvents
		move.l	#4,d2
		tst.l	IEvents
		beq	DoARexxFail
		clr.l	IEvents
		bra	DoARexxOK

;SendEvents converts ARexx string to lower case and converts it into input
;events and merges these events into the input chain.
;
;Inputs	StringBuffer = String to send

SendEvents:	lea.l	StringBuffer,a2
		bsr	MakeLowerCase

;Convert string into Input Events

		move.l	#0,-(sp)
		pea	StringBuffer
		jsr	_InvertString
		add.l	#8,sp
		move.l	d0,IEvents
		beq	SendEvents2

;Send Input Events

		move.l	IEvents,a0
		lib	Commodities,AddIEvents

;Free Input Events

		move.l	IEvents,-(sp)
		jsr	_FreeIEvents
		add.l	#4,sp
SendEvents2:	rts

;Compares two strings.
;
;INPUT
;
;A0 String 1
;A1 String 2
;
;OUTPUT
;
;D0 = 0 if not same
;
;BUGS
;
;String 1 has to have NULL at end!
;

CmpStrings:	bsr	GetLength
		move.l	d0,d4		;length of string1 to d4
		push	a0
		move.l	a1,a0
		bsr	GetLength
		pull	a0
		cmp.l	d4,d0		;length of string2 in d3
		bne	CmpStrings1.1
CmpStrings1:	tst.b	(a0)
		beq	CmpStrings2
		cmp.b	(a0)+,(a1)+
		beq	CmpStrings1
CmpStrings1.1:	clr.l	d0
		rts
CmpStrings2:	move.l	#-1,d0
		rts

;Get length of text in given address
;
;Input a0 = Address of null terminated text string
;
;Result d0 = Length

GetLength:	push	a0
		clr.l	d0
		cmp.l	#$00,a0		;fixes enforcer hit
		beq	GetLength_OUT
GetLength2:	add.l	#1,d0
		tst.b	(a0)+
		bne	GetLength2
		sub.l	#1,d0		;don't include NULL
GetLength_OUT:	pull	a0
		rts

;Inputs	a0 = ASCII number
;Output	d0 = Hexadecimal number

ConvASCII:	clr.l	d0
		clr.l	d1
		cmp.b	#' ',(a0)
		bne	ConvASCII2
		add.l	#1,a0
ConvASCII2:	move.b	(a0),d1
		cmp.b	#'0',d1
		bcs	ConvASCII_OUT
		cmp.b	#'9',d1
		bhi	ConvASCII_OUT
		sub.b	#'0',d1
		mulu.w	#10,d0
		add.l	d1,d0
		add.l	#1,a0
		bra	ConvASCII2
ConvASCII_OUT:	rts

;Inputs	a2 = Pointer to NULL terminated string to convert

MakeLowerCase:	tst.b	(a2)
		beq	MakeLowerCase3
		move.b	(a2),d0
		lib	Utility,ToLower
		move.b	d0,(a2)

MakeLowerCase2:	add.l	#1,a2
		bra	MakeLowerCase

MakeLowerCase3: rts

;Copies bytes from a0 to a1 until NULL is reached or maximum amount of 
;255 bytes is copied. Destination will include NULL
;
;Inputs	a0 = Source
;	a1 = Destination

CopyStrs:	move.l	#255,d0

CopyStrs1:	tst.b	(a0)
		beq	CopyStrs_OUT
		move.b	(a0)+,(a1)+
		sub.l	#1,d0
		beq	CopyStrs_OUT
		bra	CopyStrs1
CopyStrs_OUT:	clr.b	(a1)
		rts

;Joins path and filename together from ASL Requester.

MakeCmd:	move.l	AslReq,a0
		move.l	rf_Dir(a0),a1		;Source 1
		move.l	rf_File(a0),a2		;Source 2

		move.l	$22(a5),a0
		move.l	(a0),a3			;Destination

		clr.l	d0

MakeCmd1:	tst.b	(a1)
		beq	MakeCmd2
		cmp.l	#GADLENG2-1,d0
		bcc	MakeCmd2
		move.b	(a1)+,(a3)+
		add.l	#1,d0
		bra	MakeCmd1

MakeCmd2:	cmp.b	#':',-1(a3)
		beq	MakeCmd3
		tst.b	-1(a3)
		beq	MakeCmd3
		move.b	#'/',(a3)+

MakeCmd3:	tst.b	(a2)
		beq	MakeCmd4
		cmp.l	#GADLENG2-1,d0
		bcc	MakeCmd3
		move.b	(a2)+,(a3)+
		add.l	#1,d0
		bra	MakeCmd3

MakeCmd4:	clr.b	(a3)		;Add NULL to destination
		rts

SleepPointer:	tst.l	Window1
		beq	SleepPoint_OUT
		move.l	Window1,a0
		lea.l	ClockPointer1,a1
		move.l	#16,d0
		move.l	#16,d1			;WHAT-THE-HECK IS THIS FOR?
		move.l	#-6,d2
		move.l	#0,d3
		lib	Intuition,SetPointer
SleepPoint_OUT:	rts

NormalPointer:	tst.l	Window1
		beq	NormPoint_OUT
		move.l	Window1,a0
		lib	Intuition,ClearPointer
NormPoint_OUT:	rts

MenusOn:	tst.l	Window1
		beq	MenusOn_OUT
		move.l	Window1,a0
		move.l	mlist,a1
		lib	Intuition,SetMenuStrip
MenusOn_OUT:	rts

MenusOff:	tst.l	Window1
		beq	MenusOff_OUT
		move.l	Window1,a0
		lib	Intuition,ClearMenuStrip
MenusOff_OUT:	rts

;Lock PublicScreen

LockPubScr:	move.l	OptPubScreen,a0
		lib	Intuition,LockPubScreen
		move.l	d0,PubScreen
		beq	LockPubScr_OUT

;Set default sizes

		move.w	#62,Win1YSize
		move.w	#ShellTop+12*(10+INTERHEIGHT)+3*INTERHEIGHT,Win2YSize
		move.w	#30,Win3YSize
		move.w	#ShellTop+12*(10+INTERHEIGHT)+2*INTERHEIGHT,Win4YSize

;Get some sizes

		move.l	PubScreen,a0
		move.b	sc_BarHeight(a0),d0
		add.b	#1,d0
		move.b	d0,BHeight+1
		move.w	BHeight,d5
		add.w	d5,SmallYSize
		add.w	d5,Win1YSize
		add.w	d5,Win2YSize
		add.w	d5,Win3YSize
LockPubScr_OUT: rts

UnLockPubScr:	tst.l	PubScreen
		beq	UnLPubScr_OUT

		sub.l	a0,a0
		move.l	PubScreen,a1
		lib	Intuition,UnlockPubScreen
		clr.l	PubScreen
UnLPubScr_OUT:	rts

DoLayOut:	bsr	UnLockPubScr

		bsr	LockPubScr
		tst.l	PubScreen
		beq	NoPubScreen

;Get visualinfo

		move.l	PubScreen,a0
		sub.l	a1,a1
		lib	GadTools,GetVisualInfoA
		move.l	d0,vi

;Make gadget stuff

		lea.l	glist,a0
		lib	GadTools,CreateContext
		move.l	d0,ContextGad
		beq	NoContextGad

		move.l	glist,a0
		lea.l	NGOnOffGad1,a1
		move.w	#ShellTop,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#CHECKBOX_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	GadTagList,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,OnOffGad1
		move.l	d0,a0

		lea.l	NGGainUGad,a1
		move.w	#ShellTop+1*(10+INTERHEIGHT),gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#BUTTON_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	GadTagList,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,a0
		move.l	a0,GainUGad1

		lea.l	NGGainDGad,a1
		move.w	#ShellTop+2*(10+INTERHEIGHT),gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#BUTTON_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	GadTagList,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,a0
		move.l	a0,GainDGad1

		lea.l	NGGainGad,a1
		move.w	#ShellTop+2*(10+INTERHEIGHT),gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#NUMBER_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	GainGadTagList,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,a0
		move.l	a0,GainGad1

		lea.l	NGSaveGad,a1
		move.w	#OptionTop,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#BUTTON_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	GadTagList,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,a0
		move.l	a0,SaveGad1

		lea.l	NGQuitGad,a1
		move.w	#OptionTop,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#BUTTON_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	GadTagList,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,a0
		move.l	a0,QuitGad1
		or.w	#GRELRIGHT,gg_Flags(a0)

		lea.l	NGDatStrGad1,a1
		move.w	#ShellTop+28,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#STRING_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	DatStrGadTagList,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,DatStrGad1
		move.l	d0,a0
		move.l	$22(a0),a1
		move.l	(a1),DatStrGadBuf1

		lea.l	NGStatusGad,a1
		move.w	#ShellTop,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#TEXT_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StatGadTagList,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,a0
		move.l	a0,StatusGad1

		lea.l	NGLoadGad,a1
		move.w	#ShellTop+28,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#BUTTON_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	GadTagList,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,a0
		move.l	a0,LoadGad1
		or.w	#GRELRIGHT,gg_Flags(a0)

		lea.l	glist2,a0
		lib	GadTools,CreateContext
		move.l	d0,ContextGad2
		beq	NoContextGad

		move.l	glist2,a0
		lea.l	NGStrGad1,a1
		move.w	#ShellTop+1*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#STRING_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StrGadTagList1,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,StrGad1
		move.l	d0,a0
		or.w	#GADGIMMEDIATE,gg_Activation(a0)
		move.l	gg_SpecialInfo(a0),a1
		move.l	(a1),StrGadBuf1

		lea.l	NGStrGad2,a1
		move.w	#ShellTop+1*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#STRING_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StrGadTagList2,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,StrGad2
		move.l	d0,a0
		or.w	#GADGIMMEDIATE,gg_Activation(a0)
		move.l	gg_SpecialInfo(a0),a1
		move.l	(a1),StrGadBuf2

		lea.l	NGStrGad3,a1
		move.w	#ShellTop+2*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#STRING_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StrGadTagList1,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,StrGad3
		move.l	d0,a0
		or.w	#GADGIMMEDIATE,gg_Activation(a0)
		move.l	gg_SpecialInfo(a0),a1
		move.l	(a1),StrGadBuf3

		lea.l	NGStrGad4,a1
		move.w	#ShellTop+2*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#STRING_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StrGadTagList2,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,StrGad4
		move.l	d0,a0
		or.w	#GADGIMMEDIATE,gg_Activation(a0)
		move.l	gg_SpecialInfo(a0),a1
		move.l	(a1),StrGadBuf4

		lea.l	NGStrGad5,a1
		move.w	#ShellTop+3*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#STRING_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StrGadTagList1,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,StrGad5
		move.l	d0,a0
		or.w	#GADGIMMEDIATE,gg_Activation(a0)
		move.l	gg_SpecialInfo(a0),a1
		move.l	(a1),StrGadBuf5

		lea.l	NGStrGad6,a1
		move.w	#ShellTop+3*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#STRING_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StrGadTagList2,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,StrGad6
		move.l	d0,a0
		or.w	#GADGIMMEDIATE,gg_Activation(a0)
		move.l	gg_SpecialInfo(a0),a1
		move.l	(a1),StrGadBuf6

		lea.l	NGStrGad7,a1
		move.w	#ShellTop+4*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#STRING_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StrGadTagList1,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,StrGad7
		move.l	d0,a0
		or.w	#GADGIMMEDIATE,gg_Activation(a0)
		move.l	gg_SpecialInfo(a0),a1
		move.l	(a1),StrGadBuf7

		lea.l	NGStrGad8,a1
		move.w	#ShellTop+4*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#STRING_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StrGadTagList2,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,StrGad8
		move.l	d0,a0
		or.w	#GADGIMMEDIATE,gg_Activation(a0)
		move.l	gg_SpecialInfo(a0),a1
		move.l	(a1),StrGadBuf8

		lea.l	NGStrGad9,a1
		move.w	#ShellTop+5*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#STRING_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StrGadTagList1,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,StrGad9
		move.l	d0,a0
		or.w	#GADGIMMEDIATE,gg_Activation(a0)
		move.l	gg_SpecialInfo(a0),a1
		move.l	(a1),StrGadBuf9

		lea.l	NGStrGad10,a1
		move.w	#ShellTop+5*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#STRING_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StrGadTagList2,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,StrGad10
		move.l	d0,a0
		or.w	#GADGIMMEDIATE,gg_Activation(a0)
		move.l	gg_SpecialInfo(a0),a1
		move.l	(a1),StrGadBuf10

		lea.l	NGStrGad11,a1
		move.w	#ShellTop+6*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#STRING_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StrGadTagList1,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,StrGad11
		move.l	d0,a0
		or.w	#GADGIMMEDIATE,gg_Activation(a0)
		move.l	gg_SpecialInfo(a0),a1
		move.l	(a1),StrGadBuf11

		lea.l	NGStrGad12,a1
		move.w	#ShellTop+6*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#STRING_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StrGadTagList2,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,StrGad12
		move.l	d0,a0
		or.w	#GADGIMMEDIATE,gg_Activation(a0)
		move.l	gg_SpecialInfo(a0),a1
		move.l	(a1),StrGadBuf12

		lea.l	NGStrGad13,a1
		move.w	#ShellTop+7*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#STRING_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StrGadTagList1,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,StrGad13
		move.l	d0,a0
		or.w	#GADGIMMEDIATE,gg_Activation(a0)
		move.l	gg_SpecialInfo(a0),a1
		move.l	(a1),StrGadBuf13

		lea.l	NGStrGad14,a1
		move.w	#ShellTop+7*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#STRING_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StrGadTagList2,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,StrGad14
		move.l	d0,a0
		or.w	#GADGIMMEDIATE,gg_Activation(a0)
		move.l	gg_SpecialInfo(a0),a1
		move.l	(a1),StrGadBuf14

		lea.l	NGStrGad15,a1
		move.w	#ShellTop+8*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#STRING_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StrGadTagList1,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,StrGad15
		move.l	d0,a0
		or.w	#GADGIMMEDIATE,gg_Activation(a0)
		move.l	gg_SpecialInfo(a0),a1
		move.l	(a1),StrGadBuf15

		lea.l	NGStrGad16,a1
		move.w	#ShellTop+8*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#STRING_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StrGadTagList2,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,StrGad16
		move.l	d0,a0
		or.w	#GADGIMMEDIATE,gg_Activation(a0)
		move.l	gg_SpecialInfo(a0),a1
		move.l	(a1),StrGadBuf16

		lea.l	NGStrGad17,a1
		move.w	#ShellTop+9*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#STRING_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StrGadTagList1,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,StrGad17
		move.l	d0,a0
		or.w	#GADGIMMEDIATE,gg_Activation(a0)
		move.l	gg_SpecialInfo(a0),a1
		move.l	(a1),StrGadBuf17

		lea.l	NGStrGad18,a1
		move.w	#ShellTop+9*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#STRING_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StrGadTagList2,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,StrGad18
		move.l	d0,a0
		or.w	#GADGIMMEDIATE,gg_Activation(a0)
		move.l	gg_SpecialInfo(a0),a1
		move.l	(a1),StrGadBuf18

		lea.l	NGStrGad19,a1
		move.w	#ShellTop+10*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#STRING_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StrGadTagList1,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,StrGad19
		move.l	d0,a0
		or.w	#GADGIMMEDIATE,gg_Activation(a0)
		move.l	gg_SpecialInfo(a0),a1
		move.l	(a1),StrGadBuf19

		lea.l	NGStrGad20,a1
		move.w	#ShellTop+10*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#STRING_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StrGadTagList2,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,StrGad20
		move.l	d0,a0
		or.w	#GADGIMMEDIATE,gg_Activation(a0)
		move.l	gg_SpecialInfo(a0),a1
		move.l	(a1),StrGadBuf20

		lea.l	NGDesc1Gad,a1
		move.w	#ShellTop,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#TEXT_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	DescGadTagList,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,a0

		lea.l	NGDesc2Gad,a1
		move.w	#ShellTop,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#TEXT_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	DescGadTagList,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,a0
		lea.l	NGGetGad1,a1
		move.w	#ShellTop+11*(10+INTERHEIGHT)+2*INTERHEIGHT,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#BUTTON_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	GadTagList,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,a0
		move.l	a0,GetGad1

;Priority Window

		lea.l	glist3,a0
		lib	GadTools,CreateContext
		move.l	d0,ContextGad3
		beq	NoContextGad

		move.l	glist3,a0
		lea.l	NGStrGad21,a1
		move.w	#ShellTop,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#INTEGER_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StrGadTagList3,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,StrGad21
		move.l	d0,a0
		move.l	gg_SpecialInfo(a0),a1
		add.l	#si_LongInt,a1
		move.l	a1,StrGadInt21

;Error window

		lea.l	glist4,a0
		lib	GadTools,CreateContext
		move.l	d0,ContextGad4
		beq	NoContextGad

		move.l	glist4,a0
		lea.l	NGStrGad22,a1
		move.w	#ShellTop+1*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#STRING_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StrGadTagList2,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,StrGad22
		move.l	d0,a0
		or.w	#GADGIMMEDIATE,gg_Activation(a0)
		move.l	gg_SpecialInfo(a0),a1
		move.l	(a1),StrGadBuf22

		lea.l	NGStrGad23,a1
		move.w	#ShellTop+2*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#STRING_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StrGadTagList2,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,StrGad23
		move.l	d0,a0
		or.w	#GADGIMMEDIATE,gg_Activation(a0)
		move.l	gg_SpecialInfo(a0),a1
		move.l	(a1),StrGadBuf23

		lea.l	NGStrGad24,a1
		move.w	#ShellTop+3*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#STRING_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StrGadTagList2,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,StrGad24
		move.l	d0,a0
		or.w	#GADGIMMEDIATE,gg_Activation(a0)
		move.l	gg_SpecialInfo(a0),a1
		move.l	(a1),StrGadBuf24

		lea.l	NGStrGad25,a1
		move.w	#ShellTop+4*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#STRING_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StrGadTagList2,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,StrGad25
		move.l	d0,a0
		or.w	#GADGIMMEDIATE,gg_Activation(a0)
		move.l	gg_SpecialInfo(a0),a1
		move.l	(a1),StrGadBuf25

		lea.l	NGStrGad26,a1
		move.w	#ShellTop+5*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#STRING_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StrGadTagList2,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,StrGad26
		move.l	d0,a0
		or.w	#GADGIMMEDIATE,gg_Activation(a0)
		move.l	gg_SpecialInfo(a0),a1
		move.l	(a1),StrGadBuf26

		lea.l	NGStrGad27,a1
		move.w	#ShellTop+6*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#STRING_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StrGadTagList2,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,StrGad27
		move.l	d0,a0
		or.w	#GADGIMMEDIATE,gg_Activation(a0)
		move.l	gg_SpecialInfo(a0),a1
		move.l	(a1),StrGadBuf27

		lea.l	NGStrGad28,a1
		move.w	#ShellTop+7*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#STRING_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StrGadTagList2,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,StrGad28
		move.l	d0,a0
		or.w	#GADGIMMEDIATE,gg_Activation(a0)
		move.l	gg_SpecialInfo(a0),a1
		move.l	(a1),StrGadBuf28

		lea.l	NGStrGad29,a1
		move.w	#ShellTop+8*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#STRING_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StrGadTagList2,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,StrGad29
		move.l	d0,a0
		or.w	#GADGIMMEDIATE,gg_Activation(a0)
		move.l	gg_SpecialInfo(a0),a1
		move.l	(a1),StrGadBuf29

		lea.l	NGStrGad30,a1
		move.w	#ShellTop+9*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#STRING_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	StrGadTagList2,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,StrGad30
		move.l	d0,a0
		or.w	#GADGIMMEDIATE,gg_Activation(a0)
		move.l	gg_SpecialInfo(a0),a1
		move.l	(a1),StrGadBuf30

		lea.l	NGDesc3Gad,a1
		move.w	#ShellTop,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#TEXT_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	DescGadTagList,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,a0

		lea.l	NGDesc4Gad,a1
		move.w	#ShellTop,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#TEXT_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	DescGadTagList,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,a0

		lea.l	NGDesc5Gad,a1
		move.w	#ShellTop+1*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#TEXT_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	DescGadTagList,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,a0

		lea.l	NGDesc6Gad,a1
		move.w	#ShellTop+2*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#TEXT_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	DescGadTagList,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,a0

		lea.l	NGDesc7Gad,a1
		move.w	#ShellTop+3*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#TEXT_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	DescGadTagList,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,a0

		lea.l	NGDesc8Gad,a1
		move.w	#ShellTop+4*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#TEXT_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	DescGadTagList,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,a0

		lea.l	NGDesc9Gad,a1
		move.w	#ShellTop+5*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#TEXT_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	DescGadTagList,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,a0

		lea.l	NGDesc10Gad,a1
		move.w	#ShellTop+6*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#TEXT_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	DescGadTagList,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,a0

		lea.l	NGDesc11Gad,a1
		move.w	#ShellTop+7*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#TEXT_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	DescGadTagList,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,a0

		lea.l	NGDesc12Gad,a1
		move.w	#ShellTop+8*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#TEXT_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	DescGadTagList,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,a0

		lea.l	NGDesc13Gad,a1
		move.w	#ShellTop+9*(10+INTERHEIGHT)+5,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#TEXT_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	DescGadTagList,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,a0

		lea.l	NGGetGad2,a1
		move.w	#ShellTop+10*(10+INTERHEIGHT)+2*INTERHEIGHT,gng_TopEdge(a1)
		add.w	d5,gng_TopEdge(a1)
		move.l	#BUTTON_KIND,d0
		move.l	vi,gng_VisualInfo(a1)
		lea.l	GadTagList,a2
		lib	GadTools,CreateGadgetA

		move.l	d0,a0
		move.l	a0,GetGad2

		move.b	#1,GadMagic		;Make worked OK

;New style menu stuff

		lea.l	MNProjectMenu1,a0
		lea.l	MenuTagList,a1
		lib	GadTools,CreateMenusA
		move.l	d0,mlist
		beq	NoMenus

		move.l	mlist,a0
		move.l	vi,a1
		lea.l	MenuTagList,a2
		lib	GadTools,LayoutMenusA

		lea.l	MNPageMenu1,a0
		lea.l	MenuTagList2,a1
		lib	GadTools,CreateMenusA
		move.l	d0,mlist2
		beq	NoMenus

		move.l	mlist2,a0
		move.l	vi,a1
		lea.l	MenuTagList2,a2
		lib	GadTools,LayoutMenusA
		tst.l	d0
		beq	NoMenus
		move.b	#1,MenuMagic
		move.l	#-1,d0
		rts

;Open Window 1

OpenWin1:	tst.l	Window1
		bne	OpenWin1_OUT

		bsr	DoLayOut
		tst.l	d0
		beq	OpenWin1_ERR1

		move.l	OptPubScreen,Win1TagList.1
		tst.l	OptionIconify
		beq	OpenWin1.01
		lea.l	NewWindow1,a0
		and.l	#~ACTIVATE,nw_Flags(a0)
		move.l	NewWindow1,ZoomXY
		move.l	NewWindow1+4,ZoomXY+4
		move.l	Alt1XY,nw_LeftEdge(a0)
		move.w	#160,nw_Width(a0)
		move.w	BHeight,nw_Height(a0)
OpenWin1.01:	lea.l	NewWindow1,a0
		lea.l	Win1TagList,a1
		lib	Intuition,OpenWindowTagList
		move.l	d0,Window1
		beq	OpenWin1_ERR1
		move.l	Window1,AslReqTags+4
		move.l	Window1,GetReqTags+4
		bsr	AddGads			;Window refreshed here
		move.l	Window1,a0
		move.l	$32(a0),RP
		move.l	mlist,a1
		lib	Intuition,SetMenuStrip
		bsr	UnLockPubScr
;		bsr	ActGad			;BUG: Crashes in certain cases?!?
OpenWin1_OUT:	move.l	#-1,d0			;BUG: When no prefs file?
		rts
OpenWin1_ERR1:	clr.l	d0
		rts		

CloseWin1:	tst.l	Window1
		beq	CloseWin1_OUT
CloseWin1.1:	move.l	Window1,a0
		lib	Intuition,ClearMenuStrip
		move.l	Window1,a3
		bsr	ClearMSGs
CloseWin1_OUT:	clr.l	Window1
		rts

;Open Window 2 (Edit commands)

OpenWin2:	move.l	OptPubScreen,Win2TagList.1
		lea.l	NewWindow2,a0
		lea.l	Win2TagList,a1
		lib	Intuition,OpenWindowTagList
		move.l	d0,Window2
		beq	OpenWin2_ERR1
		move.l	Window2,a0
		move.l	mlist2,a1
		lib	Intuition,SetMenuStrip
		bsr	AddGads2		;Window refreshed here
		move.l	#-1,d0
		rts
OpenWin2_ERR1:	clr.l	d0
		rts		

CloseWin2:	tst.l	Window2
		beq	CloseWin2_OUT
		move.l	Window2,a0
		lib	Intuition,ClearMenuStrip
		move.l	Window2,a3
		bsr	ClearMSGs
CloseWin2_OUT:	clr.l	Window2
		rts

;Open Window 3 (Priority requester)

OpenWin3:	move.l	OptPubScreen,Win2TagList.1	;Yes, use Win2's tags...
		lea.l	NewWindow3,a0
		lea.l	glist3,a1
		move.l	a1,nw_FirstGadget(a0)
		lea.l	Win2TagList,a1
		lib	Intuition,OpenWindowTagList
		move.l	d0,Window3
		beq	OpenWin3_ERR1

		move.l	Window3,a0
		sub.l	a1,a1
		lib	GadTools,GT_RefreshWindow
		move.l	#-1,d0
		rts
OpenWin3_ERR1:	clr.l	d0
		rts		

CloseWin3:	tst.l	Window3
		beq	CloseWin3_OUT
		move.l	Window3,a3
		bsr	ClearMSGs
CloseWin3_OUT:	clr.l	Window3
		rts

;Open Window 4 (Edit commands)

OpenWin4:	move.l	OptPubScreen,Win2TagList.1	;Yes, use Win2's tags...
		lea.l	NewWindow4,a0
		lea.l	Win2TagList,a1
		lib	Intuition,OpenWindowTagList
		move.l	d0,Window4
		beq	OpenWin4_ERR1
		bsr	AddGads4		;Window refreshed here
		move.l	#-1,d0
		rts
OpenWin4_ERR1:	clr.l	d0
		rts		

CloseWin4:	tst.l	Window4
		beq	CloseWin4_OUT
		move.l	Window4,a3
		bsr	ClearMSGs
CloseWin4_OUT:	clr.l	Window4
		rts

;ClearMsgs subroutine
;a3 = window structure

ClearMSGs:	lib	Exec,Forbid
		move.l	$56(a3),a2
ClearMsg1:	move.l	a2,a0
		lib	GadTools,GT_GetIMsg
		tst.l	d0
		beq	ClearMsg2
		move.l	d0,a1
		flib	GadTools,GT_ReplyIMsg
		bra	ClearMsg1
ClearMsg2:	move.l	a3,a0
		lib	Intuition,CloseWindow
		lib	Exec,Permit
ClearMsg3:	rts

Clean2.0Magic:	tst.b	GadMagic
		beq	Clean2.0M2
		move.l	glist,a0
		lib	GadTools,FreeGadgets
		move.l	glist2,a0
		lib	GadTools,FreeGadgets
		move.l	glist3,a0
		lib	GadTools,FreeGadgets
		move.l	glist4,a0
		lib	GadTools,FreeGadgets

Clean2.0M2:	tst.b	MenuMagic
		beq	Clean2.0M3
		move.l	mlist,a0
		lib	GadTools,FreeMenus
		move.l	mlist2,a0
		lib	GadTools,FreeMenus

Clean2.0M3:	tst.l	vi
		beq	Clean2.0_OUT
		move.l	vi,a0
		lib	GadTools,FreeVisualInfo

Clean2.0_OUT:	rts

;Error etc. messages

NoRDArgs:	lib	Dos,IoErr
		move.l	d0,d1
		clr.l	d2
		lib	Dos,PrintFault
		bra	ShutDown

NoMsgPort:	lea.l	NoMsgPortText1,a0
		bsr	Printer
		bra	ShutDown

NoMsgPort2:	lea.l	NoMsgPortText2,a0
		bsr	Printer
		bra	ShutDown

NoDos:		pull	d2-d7/a2-a6
		move.l	#RETURN_FAIL,d0
		rts

NoInt:		lea.l	NoIntText1,a0
		bsr	Printer
		bra	ShutDown

NoCommodities:	lea.l	NoCommoText1,a0
		bsr	Printer
		bra	ShutDown

NoAsl:		lea.l	NoAslText1,a0
		bsr	Printer
		bra	ShutDown

NoAslReq:	lea.l	NoAslReqText1,a0
		bsr	Printer
		bra	ShutDown

NoUtility:	lea.l	NoUtilityText1,a0
		bsr	Printer
		bra	ShutDown

NoVoice:	lea.l	NoVoiceText1,a0
		bsr	Printer
		bra	ShutDown

NoGadTools:	lea.l	NoGTText1,a0
		bsr	Printer
		bra	ShutDown

NoIcon:		lea.l	NoIconText1,a0
		bsr	Printer
		bra	ShutDown

NoIOReq:	lea.l	NoIOReqText1,a0
		bsr	Printer
		bra	ShutDown

NoTimer:	lea.l	NoTimerText1,a0
		bsr	Printer
		bra	ShutDown

NoPubScreen:	lea.l	NoPubScrText1,a0
		bsr	Printer
		clr.l	d0
		rts

NoWindow1:	lea.l	NoWindowText1,a0
		bsr	Printer
		bra	ShutDown

NoContextGad:	lea.l	NoContextText1,a0
		bsr	Printer
		clr.l	d0
		rts

NoMenus:	lea.l	NoMenusText1,a0
		bsr	Printer
		clr.l	d0
		rts

NoCommodity:	lea.l	NoCommodityText1,a0
		bsr	Printer
		bra	ShutDown

NoFilter:	lea.l	BadPopKeyText1,a0
		bsr	Printer
		bra	NoCommodity

BadPriority:	lea.l	BadPriorityText1,a0
		bsr	Printer
		bra	NoCommodity

Printer:	printa	a0,_stdout
		rts

Inform:		tst.l	Window1
		beq	Inform_OUT
		push	a0
		move.l	a0,SGTL2
		move.l	StatusGad1,a0
		move.l	Window1,a1
		sub.l	a2,a2
		lea.l	StatGadTagList2,a3
		lib	GadTools,GT_SetGadgetAttrsA

		pull	a1
		bsr	SetTitle
Inform_OUT:	rts

;Give this the title pointer in a1

SetTitle:	tst.l	Window1
		beq	SetTitle_OUT
		push	a2
		move.l	Window1,a0
		move.l	#-1,a2
		lib	Intuition,SetWindowTitles
		pull	a2
SetTitle_OUT:	rts

;Does a normal AutoRequest
;
;INPUT
;
;a1 = Main text body
;a2 = Pos text
;a3 = Neg text

DoAutoRequest:	clr.l	d0
		clr.l	d1
		clr.l	d2
		clr.l	d3
		sub.l	a0,a0		;No win, cos' might be here b4 anything open
		lib	Intuition,AutoRequest
		rts

;Reservations

		libnames

_SysBase:	dc.l	0
_DOSBase:	dc.l	0
_CxBase:	dc.l	0

;Options

RDArgs1:	dc.l	0

CLArray1:
FromFile:	dc.l	0		;A pointer to filename of PREFS!
OptionIconify:	dc.l	0
OptPubScreen:	dc.l	0		;A pointer to pubscreen name
OptCXPri:	dc.l	0
OptCXPopKey:	dc.l	DefaultPopKey	;A pointer to popkey string
OptCXPopUp:	dc.l	0		;A pointer to 'Yes'/'No'
WBOptCXPri:	dc.l	0

;ASL Stuff

AslReq:		dc.l	0

;GadTools stuff

vi:		dc.l	0		;Visual Info
mlist:		dc.l	0
mlist2:		dc.l	0
ContextGad:	dc.l	0
ContextGad2:	dc.l	0
ContextGad3:	dc.l	0
ContextGad4:	dc.l	0
GadMagic:	dc.b	0
MenuMagic:	dc.b	0

;Gadgets

OnOffGad1:	dc.l	0
GainUGad1:	dc.l	0
GainDGad1:	dc.l	0
GainGad1:	dc.l	0		;Gain number
SaveGad1:	dc.l	0
QuitGad1:	dc.l	0
DatStrGad1:	dc.l	0
DatStrGadBuf1:	dc.l	0		;Only a pointer!
StatusGad1:	dc.l	0
LoadGad1:	dc.l	0
GetGad1:	dc.l	0
GetGad2:	dc.l	0

StrGad1:	dc.l	0
StrGadBuf1:	dc.l	0		;Only a pointer!
StrGad2:	dc.l	0
StrGadBuf2:	dc.l	0		;Only a pointer!
StrGad3:	dc.l	0
StrGadBuf3:	dc.l	0		;Only a pointer!
StrGad4:	dc.l	0
StrGadBuf4:	dc.l	0		;Only a pointer!
StrGad5:	dc.l	0
StrGadBuf5:	dc.l	0		;Only a pointer!
StrGad6:	dc.l	0
StrGadBuf6:	dc.l	0		;Only a pointer!
StrGad7:	dc.l	0
StrGadBuf7:	dc.l	0		;Only a pointer!
StrGad8:	dc.l	0
StrGadBuf8:	dc.l	0		;Only a pointer!
StrGad9:	dc.l	0
StrGadBuf9:	dc.l	0		;Only a pointer!
StrGad10:	dc.l	0
StrGadBuf10:	dc.l	0		;Only a pointer!
StrGad11:	dc.l	0
StrGadBuf11:	dc.l	0		;Only a pointer!
StrGad12:	dc.l	0
StrGadBuf12:	dc.l	0		;Only a pointer!
StrGad13:	dc.l	0
StrGadBuf13:	dc.l	0		;Only a pointer!
StrGad14:	dc.l	0
StrGadBuf14:	dc.l	0		;Only a pointer!
StrGad15:	dc.l	0
StrGadBuf15:	dc.l	0		;Only a pointer!
StrGad16:	dc.l	0
StrGadBuf16:	dc.l	0		;Only a pointer!
StrGad17:	dc.l	0
StrGadBuf17:	dc.l	0		;Only a pointer!
StrGad18:	dc.l	0
StrGadBuf18:	dc.l	0		;Only a pointer!
StrGad19:	dc.l	0
StrGadBuf19:	dc.l	0		;Only a pointer!
StrGad20:	dc.l	0
StrGadBuf20:	dc.l	0		;Only a pointer!

;Priority

StrGad21:	dc.l	0
StrGadInt21:	dc.l	0		;Only a pointer!

;Errors

StrGad22:	dc.l	0
StrGadBuf22:	dc.l	0		;Only a pointer!
StrGad23:	dc.l	0
StrGadBuf23:	dc.l	0		;Only a pointer!
StrGad24:	dc.l	0
StrGadBuf24:	dc.l	0		;Only a pointer!
StrGad25:	dc.l	0
StrGadBuf25:	dc.l	0		;Only a pointer!
StrGad26:	dc.l	0
StrGadBuf26:	dc.l	0		;Only a pointer!
StrGad27:	dc.l	0
StrGadBuf27:	dc.l	0		;Only a pointer!
StrGad28:	dc.l	0
StrGadBuf28:	dc.l	0		;Only a pointer!
StrGad29:	dc.l	0
StrGadBuf29:	dc.l	0		;Only a pointer!
StrGad30:	dc.l	0
StrGadBuf30:	dc.l	0		;Only a pointer!

;Display stuff

PubScreen:	dc.l	0
Window1:	dc.l	0
Window2:	dc.l	0
Window3:	dc.l	0
Window4:	dc.l	0
BHeight:	dc.w	0
RP:		dc.l	0

		ds.w	0

;Devices etc.

TRPort:		dc.l	0
TIORequest:	dc.l	0
TimerOpen:	dc.w	0

;Other stuff, part I

OurTask:	dc.l	0
PrefsFile:	dc.l	0
DataFile:	dc.l	0
NILFile:	dc.l	0
_stdout:	dc.l	0
WBMsg:		dc.l	0
DiskObject:	dc.l	0
OldLock:	dc.l	0
TaskOn:		dc.w	0		;0=Off, 1=On
TickCount:	dc.w	10		;Delay Status update
Page:		dc.w	0		;What page are we on ?
Saved:		dc.w	1		;0=No, 1=Yes
PopUp:		dc.w	1		;0=No, 1=Yes
DisActive:	dc.w	0		;0=Yes, 1=No. Can we turn on/off?
VoicePort:	dc.l	0		;Message port for voice.library
ARexxPort:	dc.l	0		;Our ARexx port
CXPort:		dc.l	0		;Message port for commodities
IEvents:	dc.l	0		;List of Input Events to add
LastGad:	dc.l	0		;Last active string gadget
LastGad2:	dc.l	0		;Last active string gadget, part II
CXBroker1:	dc.l	0		;Our commodities broker list
ConfAddress:	dc.l	0		;Address of last command
Awake:		dc.w	0		;Are we awake? (0=No, 1=Yes)
Time:		dc.l	0		;How many secs are we awake?

;Strings, error & other info

BreakText1:	dc.b	"***Break: VoiceShell",13,10,0
NoMsgPortText1: dc.b	"ERROR: Couldn't open message port!",13,10,0
NoMsgPortText2: dc.b	"ERROR: An ARexx port with the name 'VOICESHELL' already exists!",13,10,0
NoIntText1:	dc.b	"ERROR: Couldn't open intuition.library!",13,10,0
NoCommoText1:	dc.b	"ERROR: Couldn't open commodities.library!",13,10,0
NoAslText1:	dc.b	"ERROR: Couldn't open asl.library!",13,10,0
NoAslReqText1:	dc.b	"ERROR: Couldn't allocate ASL requester!",13,10,0
NoUtilityText1:	dc.b	"ERROR: Couldn't open utility.library!",13,10,0
NoVoiceText1:	dc.b	"ERROR: Couldn't open voice.library, version 8.2+!",13,10,13,10
		dc.b	"CHECK: 1. Is voice.library installed?",13,10
		dc.b	"       2. Is the parallel port available?",13,10
		dc.b	"       3. Is another program using voice.library?",13,10,0
NoGTText1:	dc.b	"ERROR: Couldn't open gadtools.library!",13,10,0
NoIconText1:	dc.b	"ERROR: Couldn't open icon.library!",13,10,0
NoTimerText1:	dc.b	"ERROR: Couldn't open timer.device",13,10,0
NoIOReqText1:	dc.b	"ERROR: Couldn't get IORequest!",13,10,0
NoPubScrText1:	dc.b	"ERROR: Couldn't lock PublicScreen!",13,10,0
NoContextText1: dc.b	"ERROR: Couldn't create context gadget!",13,10,0
NoMenusText1:	dc.b	"ERROR: Couldn't allocate menus structure!",13,10,0
NoWindowText1:	dc.b	"ERROR: Couldn't open window!",13,10,0
NoCommodityText1: dc.b	"ERROR: Couldn't create commodity!",13,10
		dc.b	"       Another copy of VoiceShell is probably running.",13,10,0
BadPopKeyText1:	dc.b	"ERROR: Bad hotkey setting!",13,10,0
BadPriorityText1: dc.b	"ERROR: Bad priority value!",13,10,0
File_ERRText1:	dc.b	"Couldn't open preferences file!",0
File_ERRText2:	dc.b	"File error!",0
File_ERRText3:	dc.b	"Incorrect file type or version!",0
File_ERRText4:	dc.b	"Couldn't open data file!",0
NoMatchText1:	dc.b	"No Match",0
LowVolText1:	dc.b	"Low Volume",0
ClippingText1:	dc.b	"Too Loud",0
NoisyText1:	dc.b	"Too Noisy",0
TaskOnText1:	dc.b	"Turned On",0
TaskOffText1:	dc.b	"Turned Off",0
ReadyText1:	dc.b	"Ready",0
InactiveText1:	dc.b	"Inactive",0
NoCMDText1:	dc.b	"No Command",0
CMDFailText1:	dc.b	"Command Failed!",0
NoConfText1:	dc.b	"Not Confirmed!",0
AwakeText1:	dc.b	"Awake",0

;Strings, names

TimerName:	dc.b	"timer.device",0
CLTemplate1:	dc.b	"FROM/K,I=ICONIFY/S,PS=PUBSCREEN/K,"	;Cont'd
		dc.b	"PRI=CX_PRIORITY/N/K,PK=CX_POPKEY/K,PU=CX_POPUP/K",0
VSVersion:	dc.b	"$VER: VoiceShell "
		PROGVERSION
		dc.b	" (c) Copyright Tomi Blinnikka 1994",0
OKText1:	dc.b	"OK",0
CancelText1:	dc.b	"Cancel",0
PrefsName:	dc.b	"ENVARC:VoiceShell.PREFS",0
NILName:	dc.b	"CON:0/10/500/70/VoiceShell_Error/CLOSE/AUTO/WAIT",0
ICONIFYText1:	dc.b	"ICONIFY",0
PUBSCREENText1:	dc.b	"PUBSCREEN",0
CXPOPUPText1:	dc.b	"CX_POPUP",0
CXPOPKEYText1:	dc.b	"CX_POPKEY",0
CXPRIText1:	dc.b	"CX_PRIORITY",0
DefaultPopKey:	dc.b	"ctrl alt v",0
YESText1:	dc.b	"YES",0
NOText1:	dc.b	"NO",0
FROMText1:	dc.b	"FROM",0
AboutText1:	dc.b	"Name   : VoiceShell",0
AboutText2:	dc.b	"Version: "
		PROGVERSION
		dc.b	0
AboutText3:	dc.b	"Author : Tomi Blinnikka",0
AboutText4:	dc.b	"  (c) Copyright  1994",0

		IFD	VS_REGISTERED
AboutText5:	dc.b	"NOTE: Registered version",0
		ENDC

		IFND	VS_REGISTERED
AboutText5:	dc.b	"NOTE: Unregistered version",0
		ENDC
AboutText6:	dc.b	"Hotkey: ",0

QuitText1:	dc.b	"The data file has not been saved!",0
QuitText2:	dc.b	"Are you sure you want to quit?",0
VSName1:	dc.b	"VoiceShell",0
VSName2:	dc.b	"VoiceShell: Edit & Learn",0
VSName3:	dc.b	"Please enter:",0
VSName4:	dc.b	"VoiceShell: Error Commands",0
VSTitle:	dc.b	"Voice recognition:",0
VSDesc:		dc.b	"Start programs with voice commands",0
GetText1:	dc.b	"Command to run",0

;ARexx strings

ARexxPortName:	dc.b	"VOICESHELL",0

;Window control

RexxFront:	dc.b	"FRONT",0
RexxBack:	dc.b	"BACK",0
RexxZoom:	dc.b	"ZOOM",0
RexxHide:	dc.b	"HIDE",0
RexxShow:	dc.b	"SHOW",0

;Misc

RexxOn:		dc.b	"ON",0
RexxOff:	dc.b	"OFF",0
RexxQuit:	dc.b	"QUIT",0

;Sampler settings

RexxPerfSnd:	dc.b	"PERFSND",0
RexxSndMstr:	dc.b	"SNDMSTR",0
RexxDSS8:	dc.b	"DSS8",0
RexxGeneric:	dc.b	"GENERIC",0

;Resolution

RexxResLo:	dc.b	"RESLO",0
RexxResHi:	dc.b	"RESHI",0

;Accuracy

RexxLowest:	dc.b	"LOWEST",0
RexxLower:	dc.b	"LOWER",0
RexxLow:	dc.b	"LOW",0
RexxNormal:	dc.b	"NORMAL",0
RexxHigh:	dc.b	"HIGH",0
RexxHigher:	dc.b	"HIGHER",0
RexxEHigher:	dc.b	"EVENHIGHER",0
RexxMaximum:	dc.b	"MAXIMUM",0

;Channel

RexxLeft:	dc.b	"LEFT",0
RexxRight:	dc.b	"RIGHT",0

;Input gain

RexxLine:	dc.b	"LINE",0
RexxMic:	dc.b	"MIC",0

RexxGainUp:	dc.b	"GAINUP",0
RexxGainDown:	dc.b	"GAINDOWN",0

;Timer

RexxTimerA:	dc.b	"TIMERA",0
RexxTimerB:	dc.b	"TIMERB",0

;Confirmation

RexxConfirm:	dc.b	"CONFIRM",0
RexxNoConfirm:	dc.b	"NOCONFIRM",0

;Wake up

RexxWake0:	dc.b	"WAKE0",0
RexxWake5:	dc.b	"WAKE5",0
RexxWake10:	dc.b	"WAKE10",0
RexxWake15:	dc.b	"WAKE15",0
RexxWake20:	dc.b	"WAKE20",0

;Others not defined here:
;
;	LOAD
;	KEY
;

		ds.w	0

;New screen & new window structures

NewWindow1:	dc.w	200,31			;X,Y POS
		dc.w	320			;WIDTH
Win1YSize:	dc.w	0			;HEIGHT
		dc.b	0,1			;PENS
		dc.l	REFRESHWINDOW!INTUITICKS!ACTIVEWINDOW!CLOSEWINDOW!VANILLAKEY!MENUPICK!GADGETUP	;IDCMP FLAGS
		dc.l	SMART_REFRESH!WINDOWDRAG!WINDOWDEPTH!WINDOWCLOSE!ACTIVATE	;FLAGS
		dc.l	0,0			;GADGETS, CHECKMARK
		dc.l	VSName1			;TITLE
		dc.l	0			;SCREEN ADDRESS
		dc.l	0			;BITMAP			
		dc.w	0,0,0,0			;MIN/MAX SIZE
		dc.w	PUBLICSCREEN		;TYPE

Win1TagList:	dc.l	WA_AutoAdjust,TRUE
		dc.l	WA_PubScreenName
Win1TagList.1:	dc.l	0
		dc.l	WA_Zoom,ZoomXY
		dc.l	TAG_DONE,0

ZoomXY:
SmallXPos:	dc.w	10
SmallYPos:	dc.w	21
SmallXSize:	dc.w	160
SmallYSize:	dc.w	0

NewWindow2:	dc.w	100,42			;X,Y POS
		dc.w	430			;WIDTH
Win2YSize:	dc.w	0			;HEIGHT
		dc.b	0,1			;PENS
		dc.l	REFRESHWINDOW!CLOSEWINDOW!VANILLAKEY!MENUPICK!GADGETUP!GADGETDOWN	;IDCMP FLAGS
		dc.l	SMART_REFRESH!WINDOWDRAG!WINDOWDEPTH!WINDOWCLOSE!ACTIVATE	;FLAGS
		dc.l	0,0			;GADGETS, CHECKMARK
		dc.l	VSName2			;TITLE
		dc.l	0			;SCREEN ADDRESS
		dc.l	0			;BITMAP			
		dc.w	0,0,0,0			;MIN/MAX SIZE
		dc.w	PUBLICSCREEN		;TYPE

Win2TagList:	dc.l	WA_AutoAdjust,TRUE
		dc.l	WA_PubScreenName
Win2TagList.1:	dc.l	0
		dc.l	TAG_DONE,0

NewWindow3:	dc.w	220,42			;X,Y POS
		dc.w	200			;WIDTH
Win3YSize:	dc.w	0			;HEIGHT
		dc.b	0,1			;PENS
		dc.l	REFRESHWINDOW!ACTIVEWINDOW!CLOSEWINDOW!VANILLAKEY!GADGETUP	;IDCMP FLAGS
		dc.l	SMART_REFRESH!WINDOWDRAG!WINDOWDEPTH!WINDOWCLOSE!ACTIVATE	;FLAGS
		dc.l	0,0			;GADGETS, CHECKMARK
		dc.l	VSName3			;TITLE
		dc.l	0			;SCREEN ADDRESS
		dc.l	0			;BITMAP
		dc.w	0,0,0,0			;MIN/MAX SIZE
		dc.w	PUBLICSCREEN		;TYPE


NewWindow4:	dc.w	100,42			;X,Y POS
		dc.w	430			;WIDTH
Win4YSize:	dc.w	0			;HEIGHT
		dc.b	0,1			;PENS
		dc.l	REFRESHWINDOW!CLOSEWINDOW!VANILLAKEY!MENUPICK!GADGETUP!GADGETDOWN	;IDCMP FLAGS
		dc.l	SMART_REFRESH!WINDOWDRAG!WINDOWDEPTH!WINDOWCLOSE!ACTIVATE	;FLAGS
		dc.l	0,0			;GADGETS, CHECKMARK
		dc.l	VSName4			;TITLE
		dc.l	0			;SCREEN ADDRESS
		dc.l	0			;BITMAP			
		dc.w	0,0,0,0			;MIN/MAX SIZE
		dc.w	PUBLICSCREEN		;TYPE

;Fonts

Topaz:		dc.l	TopazName
		dc.w	8
		dc.b	0
		dc.b	0
TopazName:	dc.b	"topaz.font",0
		ds.w	0


;ASL stuff

AslReqTags:	dc.l	ASL_Window
		dc.l	0			;Move window pointer here!
		dc.l	TAG_DONE,0
GetReqTags:	dc.l	ASL_Window
		dc.l	0			;Move window pointer here!
		dc.l	ASL_Hail,GetText1
		dc.l	ASL_FuncFlags,0
		dc.l	TAG_DONE,0

;ITextStructures

OKTxt:		dc.b	1,2			;PENS
		dc.w	0			;MODE
		dc.w	0,0			;LEFT+TOPEDGE
		dc.l	0			;FONT
		dc.l	OKText1			;TEXT
		dc.l	0			;NEXTTEXT

CancelTxt:	dc.b	1,2			;PENS
		dc.w	0			;MODE
		dc.w	0,0			;LEFT+TOPEDGE
		dc.l	0			;FONT
		dc.l	CancelText1		;TEXT
		dc.l	0			;NEXTTEXT

File_ERRTxt1:	dc.b	1,2			;PENS
		dc.w	0			;MODE
		dc.w	10,10			;LEFT+TOPEDGE
		dc.l	0			;FONT
		dc.l	File_ERRText1		;TEXT
		dc.l	0			;NEXTTEXT

File_ERRTxt2:	dc.b	1,2			;PENS
		dc.w	0			;MODE
		dc.w	10,10			;LEFT+TOPEDGE
		dc.l	0			;FONT
		dc.l	File_ERRText2		;TEXT
		dc.l	0			;NEXTTEXT

File_ERRTxt3:	dc.b	1,2			;PENS
		dc.w	0			;MODE
		dc.w	10,10			;LEFT+TOPEDGE
		dc.l	0			;FONT
		dc.l	File_ERRText3		;TEXT
		dc.l	0			;NEXTTEXT

File_ERRTxt4:	dc.b	1,2			;PENS
		dc.w	0			;MODE
		dc.w	10,10			;LEFT+TOPEDGE
		dc.l	0			;FONT
		dc.l	File_ERRText4		;TEXT
		dc.l	0			;NEXTTEXT

AboutTxt1:	dc.b	1,2			;PENS
		dc.w	0			;MODE
		dc.w	0,0			;LEFT+TOPEDGE
		dc.l	Topaz			;FONT
		dc.l	AboutText1		;TEXT
		dc.l	AboutTxt2		;NEXTTEXT

AboutTxt2:	dc.b	1,2			;PENS
		dc.w	0			;MODE
		dc.w	0,10			;LEFT+TOPEDGE
		dc.l	Topaz			;FONT
		dc.l	AboutText2		;TEXT
		dc.l	AboutTxt3		;NEXTTEXT

AboutTxt3:	dc.b	1,2			;PENS
		dc.w	0			;MODE
		dc.w	0,20			;LEFT+TOPEDGE
		dc.l	Topaz			;FONT
		dc.l	AboutText3		;TEXT
		dc.l	AboutTxt4		;NEXTTEXT

AboutTxt4:	dc.b	1,2			;PENS
		dc.w	0			;MODE
		dc.w	0,30			;LEFT+TOPEDGE
		dc.l	Topaz			;FONT
		dc.l	AboutText4		;TEXT
		dc.l	AboutTxt5		;NEXTTEXT

AboutTxt5:	dc.b	1,2			;PENS
		dc.w	0			;MODE
		dc.w	0,50			;LEFT+TOPEDGE
		dc.l	Topaz			;FONT
		dc.l	AboutText5		;TEXT
		dc.l	AboutTxt6		;NEXTTEXT

AboutTxt6:	dc.b	1,2			;PENS
		dc.w	0			;MODE
		dc.w	0,70			;LEFT+TOPEDGE
		dc.l	Topaz			;FONT
		dc.l	AboutText6		;TEXT
		dc.l	AboutTxt7		;NEXTTEXT

AboutTxt7:	dc.b	1,2			;PENS
		dc.w	0			;MODE
		dc.w	0,80			;LEFT+TOPEDGE
		dc.l	Topaz			;FONT
AboutTxt7.X:	dc.l	0			;TEXT
		dc.l	0 ;AboutTxt8		;NEXTTEXT

QuitTxt1:	dc.b	1,2			;PENS
		dc.w	0			;MODE
		dc.w	0,0			;LEFT+TOPEDGE
		dc.l	Topaz			;FONT
		dc.l	QuitText1		;TEXT
		dc.l	QuitTxt2		;NEXTTEXT

QuitTxt2:	dc.b	1,2			;PENS
		dc.w	0			;MODE
		dc.w	0,20			;LEFT+TOPEDGE
		dc.l	Topaz			;FONT
		dc.l	QuitText2		;TEXT
		dc.l	0 ;QuitTxt3		;NEXTTEXT

;Gadgets

OnOffGadText1:	dc.b	"On/Off",0
GainUGadText1:	dc.b	"Vol _Up",0
GainDGadText1:	dc.b	"Vol _Dwn",0
SaveGadText1:	dc.b	"_Save",0
QuitGadText1:	dc.b	"_Quit",0
DatGadText1:	dc.b	"Data _file",0
StatGadText1:	dc.b	"Status",0
LoadGadText1:	dc.b	"_Load",0
DescGadText1:	dc.b	"Description",0
DescGadText1.1:	dc.b	"On Error",0
DescGadText2:	dc.b	"Command to run",0
DescGadText3:	dc.b	"No Command",0
DescGadText4:	dc.b	"Cmd Failed",0
DescGadText5:	dc.b	"No Match",0
DescGadText6:	dc.b	"Too Loud",0
DescGadText7:	dc.b	"Too Low",0
DescGadText8:	dc.b	"Too Noisy",0
DescGadText9:	dc.b	"Confirm",0
DescGadText10:	dc.b	"Not Conf'd",0
DescGadText11:	dc.b	"Wake Up",0
GetGadText1:	dc.b	"_Get",0
PriGadText1:	dc.b	"Priority",0
		ds.w	0

glist:		dcb.b	gg_SIZEOF,0
glist2:		dcb.b	gg_SIZEOF,0
glist3:		dcb.b	gg_SIZEOF,0
glist4:		dcb.b	gg_SIZEOF,0

NGOnOffGad1:	dc.w	10		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	0		;gng_Width
		dc.w	13		;gng_Height
		dc.l	OnOffGadText1	;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	10		;gng_GadgetID
		dc.l	PLACETEXT_RIGHT ;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGGainUGad:	dc.w	10		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	60		;gng_Width
		dc.w	12		;gng_Height
		dc.l	GainUGadText1	;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	20		;gng_GadgetID
		dc.l	PLACETEXT_IN	;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGGainDGad:	dc.w	10		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	60		;gng_Width
		dc.w	12		;gng_Height
		dc.l	GainDGadText1	;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	30		;gng_GadgetID
		dc.l	PLACETEXT_IN	;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGGainGad:	dc.w	10+60+INTERWIDTH-3	;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	20		;gng_Width
		dc.w	12		;gng_Height
		dc.l	0		;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	0		;gng_GadgetID
		dc.l	0		;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGSaveGad:	dc.w	10		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	60		;gng_Width
		dc.w	12		;gng_Height
		dc.l	SaveGadText1	;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	98		;gng_GadgetID
		dc.l	PLACETEXT_IN	;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGQuitGad:	dc.w	-70		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	60		;gng_Width
		dc.w	12		;gng_Height
		dc.l	QuitGadText1	;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	99		;gng_GadgetID
		dc.l	PLACETEXT_IN	;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGDatStrGad1:	dc.w	100		;gng_LeftEdge
		dc.w	ShellTop+28	;gng_TopEdge
		dc.w	135		;gng_Width
		dc.w	12		;gng_Height
		dc.l	DatGadText1	;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	1		;gng_GadgetID
		dc.l	PLACETEXT_BELOW ;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGStatusGad:	dc.w	100		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	199		;gng_Width
		dc.w	12		;gng_Height
		dc.l	StatGadText1	;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	0		;gng_GadgetID
		dc.l	PLACETEXT_BELOW ;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGLoadGad:	dc.w	-70		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	60		;gng_Width
		dc.w	12		;gng_Height
		dc.l	LoadGadText1	;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	40		;gng_GadgetID
		dc.l	PLACETEXT_IN	;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

;Gadget TagLists

GadTagList:	dc.l	GT_Underscore,'_'
		dc.l	TAG_DONE,0

GainGadTagList:	dc.l	GTNM_Border,TRUE
		dc.l	GTNM_Number
GainPointer:	dc.l	0
		dc.l	TAG_DONE,0

StatGadTagList: dc.l	GTTX_Border,TRUE
		dc.l	TAG_DONE,0

StatGadTagList2: dc.l	GTTX_Border,TRUE
		dc.l	GTTX_Text
SGTL2:		dc.l	0
		dc.l	TAG_DONE,0

DatStrGadTagList: dc.l	GTST_String,DatBuffer
		dc.l	GT_Underscore,'_'
		dc.l	GTST_MaxChars,32
		dc.l	TAG_DONE,0

DisabledTags:	dc.l	GA_DISABLED,TRUE
		dc.l	TAG_DONE,0

EnabledTags:	dc.l	GA_DISABLED,FALSE
		dc.l	TAG_DONE,0

;Gadgets for edit window

NGDesc1Gad:	dc.w	10		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	100		;gng_Width
		dc.w	12		;gng_Height
		dc.l	DescGadText1	;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	0		;gng_GadgetID
		dc.l	PLACETEXT_IN	;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGDesc2Gad:	dc.w	120		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	300		;gng_Width
		dc.w	12		;gng_Height
		dc.l	DescGadText2	;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	0		;gng_GadgetID
		dc.l	PLACETEXT_IN	;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGStrGad1:	dc.w	10		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	100		;gng_Width
		dc.w	12		;gng_Height
		dc.l	0		;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	1		;gng_GadgetID
		dc.l	0		;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGStrGad2:	dc.w	120		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	300		;gng_Width
		dc.w	12		;gng_Height
		dc.l	0		;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	2		;gng_GadgetID
		dc.l	0		;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGStrGad3:	dc.w	10		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	100		;gng_Width
		dc.w	12		;gng_Height
		dc.l	0		;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	1		;gng_GadgetID
		dc.l	0		;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGStrGad4:	dc.w	120		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	300		;gng_Width
		dc.w	12		;gng_Height
		dc.l	0		;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	2		;gng_GadgetID
		dc.l	0		;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGStrGad5:	dc.w	10		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	100		;gng_Width
		dc.w	12		;gng_Height
		dc.l	0		;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	1		;gng_GadgetID
		dc.l	0		;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGStrGad6:	dc.w	120		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	300		;gng_Width
		dc.w	12		;gng_Height
		dc.l	0		;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	2		;gng_GadgetID
		dc.l	0		;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGStrGad7:	dc.w	10		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	100		;gng_Width
		dc.w	12		;gng_Height
		dc.l	0		;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	1		;gng_GadgetID
		dc.l	0		;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGStrGad8:	dc.w	120		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	300		;gng_Width
		dc.w	12		;gng_Height
		dc.l	0		;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	2		;gng_GadgetID
		dc.l	0		;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGStrGad9:	dc.w	10		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	100		;gng_Width
		dc.w	12		;gng_Height
		dc.l	0		;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	1		;gng_GadgetID
		dc.l	0		;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGStrGad10:	dc.w	120		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	300		;gng_Width
		dc.w	12		;gng_Height
		dc.l	0		;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	2		;gng_GadgetID
		dc.l	0		;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGStrGad11:	dc.w	10		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	100		;gng_Width
		dc.w	12		;gng_Height
		dc.l	0		;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	1		;gng_GadgetID
		dc.l	0		;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGStrGad12:	dc.w	120		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	300		;gng_Width
		dc.w	12		;gng_Height
		dc.l	0		;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	2		;gng_GadgetID
		dc.l	0		;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGStrGad13:	dc.w	10		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	100		;gng_Width
		dc.w	12		;gng_Height
		dc.l	0		;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	1		;gng_GadgetID
		dc.l	0		;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGStrGad14:	dc.w	120		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	300		;gng_Width
		dc.w	12		;gng_Height
		dc.l	0		;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	2		;gng_GadgetID
		dc.l	0		;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGStrGad15:	dc.w	10		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	100		;gng_Width
		dc.w	12		;gng_Height
		dc.l	0		;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	1		;gng_GadgetID
		dc.l	0		;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGStrGad16:	dc.w	120		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	300		;gng_Width
		dc.w	12		;gng_Height
		dc.l	0		;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	2		;gng_GadgetID
		dc.l	0		;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGStrGad17:	dc.w	10		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	100		;gng_Width
		dc.w	12		;gng_Height
		dc.l	0		;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	1		;gng_GadgetID
		dc.l	0		;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGStrGad18:	dc.w	120		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	300		;gng_Width
		dc.w	12		;gng_Height
		dc.l	0		;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	2		;gng_GadgetID
		dc.l	0		;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGStrGad19:	dc.w	10		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	100		;gng_Width
		dc.w	12		;gng_Height
		dc.l	0		;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	1		;gng_GadgetID
		dc.l	0		;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGStrGad20:	dc.w	120		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	300		;gng_Width
		dc.w	12		;gng_Height
		dc.l	0		;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	2		;gng_GadgetID
		dc.l	0		;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGGetGad1:	dc.w	185		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	60		;gng_Width
		dc.w	12		;gng_Height
		dc.l	GetGadText1	;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	55		;gng_GadgetID
		dc.l	PLACETEXT_IN	;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

DescGadTagList: dc.l	GTTX_Border,1
		dc.l	TAG_DONE,0

StrGadTagList1: dc.l	GTST_MaxChars,GADLENG1-1
		dc.l	TAG_DONE,0
StrGadTagList2: dc.l	GTST_MaxChars,GADLENG2-1
		dc.l	TAG_DONE,0
StrGadTagList3: dc.l	GTIN_Number,120
		dc.l	TAG_DONE,0

;Priority gadget

NGStrGad21:	dc.w	60		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	80		;gng_Width
		dc.w	12		;gng_Height
		dc.l	PriGadText1	;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	0		;gng_GadgetID
		dc.l	PLACETEXT_BELOW ;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

;Gadgets for error window

NGDesc3Gad:	dc.w	10		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	100		;gng_Width
		dc.w	12		;gng_Height
		dc.l	DescGadText1.1	;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	0		;gng_GadgetID
		dc.l	PLACETEXT_IN	;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGDesc4Gad:	dc.w	120		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	300		;gng_Width
		dc.w	12		;gng_Height
		dc.l	DescGadText2	;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	0		;gng_GadgetID
		dc.l	PLACETEXT_IN	;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGDesc5Gad:	dc.w	10		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	100		;gng_Width
		dc.w	12		;gng_Height
		dc.l	DescGadText3	;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	1		;gng_GadgetID
		dc.l	PLACETEXT_IN	;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGStrGad22:	dc.w	120		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	300		;gng_Width
		dc.w	12		;gng_Height
		dc.l	0		;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	2		;gng_GadgetID
		dc.l	0		;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGDesc6Gad:	dc.w	10		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	100		;gng_Width
		dc.w	12		;gng_Height
		dc.l	DescGadText4	;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	1		;gng_GadgetID
		dc.l	PLACETEXT_IN	;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGStrGad23:	dc.w	120		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	300		;gng_Width
		dc.w	12		;gng_Height
		dc.l	0		;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	2		;gng_GadgetID
		dc.l	0		;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGDesc7Gad:	dc.w	10		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	100		;gng_Width
		dc.w	12		;gng_Height
		dc.l	DescGadText5	;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	1		;gng_GadgetID
		dc.l	PLACETEXT_IN	;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGStrGad24:	dc.w	120		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	300		;gng_Width
		dc.w	12		;gng_Height
		dc.l	0		;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	2		;gng_GadgetID
		dc.l	0		;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGDesc8Gad:	dc.w	10		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	100		;gng_Width
		dc.w	12		;gng_Height
		dc.l	DescGadText6	;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	1		;gng_GadgetID
		dc.l	PLACETEXT_IN	;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGStrGad25:	dc.w	120		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	300		;gng_Width
		dc.w	12		;gng_Height
		dc.l	0		;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	2		;gng_GadgetID
		dc.l	0		;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGDesc9Gad:	dc.w	10		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	100		;gng_Width
		dc.w	12		;gng_Height
		dc.l	DescGadText7	;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	1		;gng_GadgetID
		dc.l	PLACETEXT_IN	;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGStrGad26:	dc.w	120		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	300		;gng_Width
		dc.w	12		;gng_Height
		dc.l	0		;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	2		;gng_GadgetID
		dc.l	0		;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGDesc10Gad:	dc.w	10		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	100		;gng_Width
		dc.w	12		;gng_Height
		dc.l	DescGadText8	;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	1		;gng_GadgetID
		dc.l	PLACETEXT_IN	;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGStrGad27:	dc.w	120		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	300		;gng_Width
		dc.w	12		;gng_Height
		dc.l	0		;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	2		;gng_GadgetID
		dc.l	0		;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGDesc11Gad:	dc.w	10		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	100		;gng_Width
		dc.w	12		;gng_Height
		dc.l	DescGadText9	;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	1		;gng_GadgetID
		dc.l	PLACETEXT_IN	;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGStrGad28:	dc.w	120		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	300		;gng_Width
		dc.w	12		;gng_Height
		dc.l	0		;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	2		;gng_GadgetID
		dc.l	0		;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGDesc12Gad:	dc.w	10		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	100		;gng_Width
		dc.w	12		;gng_Height
		dc.l	DescGadText10	;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	1		;gng_GadgetID
		dc.l	PLACETEXT_IN	;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGStrGad29:	dc.w	120		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	300		;gng_Width
		dc.w	12		;gng_Height
		dc.l	0		;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	2		;gng_GadgetID
		dc.l	0		;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGDesc13Gad:	dc.w	10		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	100		;gng_Width
		dc.w	12		;gng_Height
		dc.l	DescGadText11	;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	1		;gng_GadgetID
		dc.l	PLACETEXT_IN	;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGStrGad30:	dc.w	120		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	300		;gng_Width
		dc.w	12		;gng_Height
		dc.l	0		;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	2		;gng_GadgetID
		dc.l	0		;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

NGGetGad2:	dc.w	185		;gng_LeftEdge
		dc.w	0		;gng_TopEdge
		dc.w	60		;gng_Width
		dc.w	12		;gng_Height
		dc.l	GetGadText1	;gng_GadgetText
		dc.l	Topaz		;gng_TextAttr
		dc.w	55		;gng_GadgetID
		dc.l	PLACETEXT_IN	;gng_Flags
		dc.l	0		;gng_VisualInfo
		dc.l	0		;gng_UserData

;Menus

Menu1Name:	dc.b	"Project",0
Menu2Name:	dc.b	"Commands",0
Menu3Name:	dc.b	"Setup",0

LoadMenuText1:	dc.b	"Load",0
LoadCommKey:	dc.b	"L",0
SaveMenuText1:	dc.b	"Save",0
SaveCommKey:	dc.b	"S",0
AboutMenuText1: dc.b	"About...",0
AboutCommKey:	dc.b	"?",0
QuitMenuText1:	dc.b	"Quit",0
QuitCommKey:	dc.b	"Q",0
EditMenuText1:	dc.b	"Edit/Learn",0
EditCommKey:	dc.b	"E",0
ErrorMenuText1:	dc.b	"Errors",0
ErrorCommKey:	dc.b	"R",0

TypeMenuText1:	dc.b	"Sampler",0
PerfSMenuText1: dc.b	"PerfectSound",0
Type1CommKey:	dc.b	"1",0
SoundMMenuText1: dc.b	"SoundMaster",0
Type2CommKey:	dc.b	"2",0
DSSMenuText1:	dc.b	"GVP DSS 8",0
Type3CommKey:	dc.b	"3",0
GenericMenuText1: dc.b	"Generic",0
Type4CommKey:	dc.b	"4",0

ResMenuText1:	dc.b	"Resolution",0
ResLoMenuText1: dc.b	"Low",0
Res1CommKey:	dc.b	"-",0
ResHiMenuText1: dc.b	"High",0
Res2CommKey:	dc.b	"+",0

AccMenuText1:	dc.b	"Accuracy",0
AccLo1MenuText1: dc.b	"Lowest",0
Acc1CommKey:	dc.b	"T",0
AccLo2MenuText1: dc.b	"Lower",0
Acc2CommKey:	dc.b	"W",0
AccLo3MenuText1: dc.b	"Low",0
Acc3CommKey:	dc.b	"O",0
AccNoMenuText1: dc.b	"Normal",0
Acc4CommKey:	dc.b	"N",0
AccHi1MenuText1: dc.b	"High",0
Acc5CommKey:	dc.b	"H",0
AccHi2MenuText1: dc.b	"Higher",0
Acc6CommKey:	dc.b	"I",0
AccHi3MenuText1: dc.b	"Even higher",0
Acc7CommKey:	dc.b	"G",0
AccHi4MenuText1: dc.b	"Maximum",0
Acc8CommKey:	dc.b	"M",0

ChanMenuText1:	dc.b	"Channel",0
Chan1MenuText1: dc.b	"Left",0
Chan1CommKey:	dc.b	",",0
Chan2MenuText1: dc.b	"Right",0
Chan2CommKey:	dc.b	".",0

InputMenuText1:	dc.b	"Input level",0
Input1MenuText1: dc.b	"Microphone",0
Input1CommKey:	dc.b	"/",0
Input2MenuText1: dc.b	"Line",0
Input2CommKey:	dc.b	"*",0

TimerMenuText1: dc.b	"CIA Timer",0
TimerAMenuText1: dc.b	"Timer A",0
TimerACommKey:	dc.b	"A",0
TimerBMenuText1: dc.b	"Timer B",0
TimerBCommKey:	dc.b	"B",0

WakeMenuText1:	dc.b	"Wake up",0
WakeMenuText2:	dc.b	"0 Secs",0
WakeCommKey1:	dc.b	"5",0
WakeMenuText3:	dc.b	"5 Secs",0
WakeCommKey2:	dc.b	"6",0
WakeMenuText4:	dc.b	"10 Secs",0
WakeCommKey3:	dc.b	"7",0
WakeMenuText5:	dc.b	"15 Secs",0
WakeCommKey4:	dc.b	"8",0
WakeMenuText6:	dc.b	"20 Secs",0
WakeCommKey5:	dc.b	"9",0

PriMenuText1:	dc.b	"Priority...",0
PriCommKey:	dc.b	"P",0

ConfMenuText1:	dc.b	"Confirm",0
ConfCommKey:	dc.b	"C",0

Menu1Name2:	dc.b	"Page",0
EditMenu1Text1: dc.b	"Commands  1-10",0
Edit1CommKey:	dc.b	"1",0
EditMenu2Text1: dc.b	"Commands 11-20",0
Edit2CommKey:	dc.b	"2",0
EditMenu3Text1: dc.b	"Commands 21-30",0
Edit3CommKey:	dc.b	"3",0
EditMenu4Text1: dc.b	"Commands 31-40",0
Edit4CommKey:	dc.b	"4",0
EditMenu5Text1: dc.b	"Commands 41-50",0
Edit5CommKey:	dc.b	"5",0
EditMenu6Text1: dc.b	"Commands 51-60",0
Edit6CommKey:	dc.b	"6",0
		ds.l	0

MNProjectMenu1: dc.b	NM_TITLE		;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	Menu1Name		;gnm_Label
		dc.l	0			;gnm_CommKey
		dc.w	0			;gnm_Flags
		dc.l	0			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNLoad1:	dc.b	NM_ITEM			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	LoadMenuText1		;gnm_Label
		dc.l	LoadCommKey		;gnm_CommKey
		dc.w	0			;gnm_Flags
		dc.l	0			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNSave1:	dc.b	NM_ITEM			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	SaveMenuText1		;gnm_Label
		dc.l	SaveCommKey		;gnm_CommKey
		dc.w	0			;gnm_Flags
		dc.l	0			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNAbout1:	dc.b	NM_ITEM			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	AboutMenuText1		;gnm_Label
		dc.l	AboutCommKey		;gnm_CommKey
		dc.w	0			;gnm_Flags
		dc.l	0			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNP1SepMenu1:	dc.b	NM_ITEM			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	NM_BARLABEL		;gnm_Label
		dc.l	0			;gnm_CommKey
		dc.w	0			;gnm_Flags
		dc.l	0			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNQuit1:	dc.b	NM_ITEM			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	QuitMenuText1		;gnm_Label
		dc.l	QuitCommKey		;gnm_CommKey
		dc.w	0			;gnm_Flags
		dc.l	0			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNCmdMenu1:	dc.b	NM_TITLE		;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	Menu2Name		;gnm_Label
		dc.l	0			;gnm_CommKey
		dc.w	0			;gnm_Flags
		dc.l	0			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNEdit1:	dc.b	NM_ITEM			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	EditMenuText1		;gnm_Label
		dc.l	EditCommKey		;gnm_CommKey
		dc.w	0			;gnm_Flags
		dc.l	0			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNError2:	dc.b	NM_ITEM			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	ErrorMenuText1		;gnm_Label
		dc.l	ErrorCommKey		;gnm_CommKey
		dc.w	0			;gnm_Flags
		dc.l	0			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNSetUpMenu1:	dc.b	NM_TITLE		;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	Menu3Name		;gnm_Label
		dc.l	0			;gnm_CommKey
		dc.w	0			;gnm_Flags
		dc.l	0			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNType1:	dc.b	NM_ITEM			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	TypeMenuText1		;gnm_Label
		dc.l	0			;gnm_CommKey
		dc.w	0			;gnm_Flags
		dc.l	0			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNTypeSub1:	dc.b	NM_SUB			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	PerfSMenuText1		;gnm_Label
		dc.l	Type1CommKey		;gnm_CommKey
		dc.w	CHECKIT			;gnm_Flags
		dc.l	~1			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNTypeSub2:	dc.b	NM_SUB			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	SoundMMenuText1		;gnm_Label
		dc.l	Type2CommKey		;gnm_CommKey
		dc.w	CHECKIT			;gnm_Flags
		dc.l	~2			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNTypeSub3:	dc.b	NM_SUB			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	DSSMenuText1		;gnm_Label
		dc.l	Type3CommKey		;gnm_CommKey
		dc.w	CHECKIT			;gnm_Flags
		dc.l	~4			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNTypeSub4:	dc.b	NM_SUB			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	GenericMenuText1	;gnm_Label
		dc.l	Type4CommKey		;gnm_CommKey
		dc.w	CHECKIT			;gnm_Flags
		dc.l	~8			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNRes1:		dc.b	NM_ITEM			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	ResMenuText1		;gnm_Label
		dc.l	0			;gnm_CommKey
		dc.w	0			;gnm_Flags
		dc.l	0			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNResSub1:	dc.b	NM_SUB			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	ResLoMenuText1		;gnm_Label
		dc.l	Res1CommKey		;gnm_CommKey
		dc.w	CHECKIT			;gnm_Flags
		dc.l	~1			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNResSub2:	dc.b	NM_SUB			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	ResHiMenuText1		;gnm_Label
		dc.l	Res2CommKey		;gnm_CommKey
		dc.w	CHECKIT			;gnm_Flags
		dc.l	~2			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNAccuracy1:	dc.b	NM_ITEM			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	AccMenuText1		;gnm_Label
		dc.l	0			;gnm_CommKey
		dc.w	0			;gnm_Flags
		dc.l	0			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNAccurarySub1:	dc.b	NM_SUB			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	AccLo1MenuText1		;gnm_Label
		dc.l	Acc1CommKey		;gnm_CommKey
		dc.w	CHECKIT			;gnm_Flags
		dc.l	~1			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNAccurarySub2:	dc.b	NM_SUB			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	AccLo2MenuText1		;gnm_Label
		dc.l	Acc2CommKey		;gnm_CommKey
		dc.w	CHECKIT			;gnm_Flags
		dc.l	~2			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNAccurarySub3:	dc.b	NM_SUB			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	AccLo3MenuText1		;gnm_Label
		dc.l	Acc3CommKey		;gnm_CommKey
		dc.w	CHECKIT			;gnm_Flags
		dc.l	~4			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNAccurarySub4:	dc.b	NM_SUB			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	AccNoMenuText1		;gnm_Label
		dc.l	Acc4CommKey		;gnm_CommKey
		dc.w	CHECKIT			;gnm_Flags
		dc.l	~8			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNAccuracySub5:	dc.b	NM_SUB			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	AccHi1MenuText1		;gnm_Label
		dc.l	Acc5CommKey		;gnm_CommKey
		dc.w	CHECKIT			;gnm_Flags
		dc.l	~16			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNAccuracySub6:	dc.b	NM_SUB			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	AccHi2MenuText1		;gnm_Label
		dc.l	Acc6CommKey		;gnm_CommKey
		dc.w	CHECKIT			;gnm_Flags
		dc.l	~32			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNAccuracySub7:	dc.b	NM_SUB			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	AccHi3MenuText1		;gnm_Label
		dc.l	Acc7CommKey		;gnm_CommKey
		dc.w	CHECKIT			;gnm_Flags
		dc.l	~64			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNAccuracySub8:	dc.b	NM_SUB			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	AccHi4MenuText1		;gnm_Label
		dc.l	Acc8CommKey		;gnm_CommKey
		dc.w	CHECKIT			;gnm_Flags
		dc.l	~128			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNChannel1:	dc.b	NM_ITEM			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	ChanMenuText1		;gnm_Label
		dc.l	0			;gnm_CommKey
		dc.w	0			;gnm_Flags
		dc.l	0			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNChanSub1:	dc.b	NM_SUB			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	Chan1MenuText1		;gnm_Label
		dc.l	Chan1CommKey		;gnm_CommKey
		dc.w	CHECKIT			;gnm_Flags
		dc.l	~1			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNChanSub2:	dc.b	NM_SUB			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	Chan2MenuText1		;gnm_Label
		dc.l	Chan2CommKey		;gnm_CommKey
		dc.w	CHECKIT			;gnm_Flags
		dc.l	~2			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNInput1:	dc.b	NM_ITEM			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	InputMenuText1		;gnm_Label
		dc.l	0			;gnm_CommKey
		dc.w	0			;gnm_Flags
		dc.l	0			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNInputSub1:	dc.b	NM_SUB			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	Input1MenuText1		;gnm_Label
		dc.l	Input1CommKey		;gnm_CommKey
		dc.w	CHECKIT			;gnm_Flags
		dc.l	~1			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNInputSub2:	dc.b	NM_SUB			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	Input2MenuText1		;gnm_Label
		dc.l	Input2CommKey		;gnm_CommKey
		dc.w	CHECKIT			;gnm_Flags
		dc.l	~2			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNTimer1:	dc.b	NM_ITEM			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	TimerMenuText1		;gnm_Label
		dc.l	0			;gnm_CommKey
		dc.w	0			;gnm_Flags
		dc.l	0			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNTimerSub1:	dc.b	NM_SUB			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	TimerAMenuText1		;gnm_Label
		dc.l	TimerACommKey		;gnm_CommKey
		dc.w	CHECKIT			;gnm_Flags
		dc.l	~1			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNTimerSub2:	dc.b	NM_SUB			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	TimerBMenuText1		;gnm_Label
		dc.l	TimerBCommKey		;gnm_CommKey
		dc.w	CHECKIT			;gnm_Flags
		dc.l	~2			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNWakeUp:	dc.b	NM_ITEM			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	WakeMenuText1		;gnm_Label
		dc.l	0			;gnm_CommKey
		dc.w	0			;gnm_Flags
		dc.l	0			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNWakeSub1:	dc.b	NM_SUB			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	WakeMenuText2		;gnm_Label
		dc.l	WakeCommKey1		;gnm_CommKey
		dc.w	CHECKIT			;gnm_Flags
		dc.l	~1			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNWakeSub2:	dc.b	NM_SUB			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	WakeMenuText3		;gnm_Label
		dc.l	WakeCommKey2		;gnm_CommKey
		dc.w	CHECKIT			;gnm_Flags
		dc.l	~2			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNWakeSub3:	dc.b	NM_SUB			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	WakeMenuText4		;gnm_Label
		dc.l	WakeCommKey3		;gnm_CommKey
		dc.w	CHECKIT			;gnm_Flags
		dc.l	~4			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNWakeSub4:	dc.b	NM_SUB			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	WakeMenuText5		;gnm_Label
		dc.l	WakeCommKey4		;gnm_CommKey
		dc.w	CHECKIT			;gnm_Flags
		dc.l	~8			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNWakeSub5:	dc.b	NM_SUB			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	WakeMenuText6		;gnm_Label
		dc.l	WakeCommKey5		;gnm_CommKey
		dc.w	CHECKIT			;gnm_Flags
		dc.l	~16			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNPriority:	dc.b	NM_ITEM			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	PriMenuText1		;gnm_Label
		dc.l	PriCommKey		;gnm_CommKey
		dc.w	0 			;gnm_Flags
		dc.l	0			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNConfirm:	dc.b	NM_ITEM			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	ConfMenuText1		;gnm_Label
		dc.l	ConfCommKey		;gnm_CommKey
		dc.w	CHECKIT!MENUTOGGLE	;gnm_Flags
		dc.l	0			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

		dc.w	0			;NM_END?

;Menu TagList(s)

MenuTagList:	dc.l	GTMN_Menu,MNProjectMenu1
		dc.l	TAG_DONE,0

MNPageMenu1:	dc.b	NM_TITLE		;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	Menu1Name2		;gnm_Label
		dc.l	0			;gnm_CommKey
		dc.w	0			;gnm_Flags
		dc.l	0			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNPage1:	dc.b	NM_ITEM			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	EditMenu1Text1		;gnm_Label
		dc.l	Edit1CommKey		;gnm_CommKey
		dc.w	CHECKIT!CHECKED		;gnm_Flags
		dc.l	~1			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNPage2:	dc.b	NM_ITEM			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	EditMenu2Text1		;gnm_Label
		dc.l	Edit2CommKey		;gnm_CommKey
		dc.w	CHECKIT			;gnm_Flags
		dc.l	~2			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNPage3:	dc.b	NM_ITEM			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	EditMenu3Text1		;gnm_Label
		dc.l	Edit3CommKey		;gnm_CommKey
		dc.w	CHECKIT			;gnm_Flags
		dc.l	~4			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNPage4:	dc.b	NM_ITEM			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	EditMenu4Text1		;gnm_Label
		dc.l	Edit4CommKey		;gnm_CommKey
		dc.w	CHECKIT			;gnm_Flags
		dc.l	~8			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNPage5:	dc.b	NM_ITEM			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	EditMenu5Text1		;gnm_Label
		dc.l	Edit5CommKey		;gnm_CommKey
		dc.w	CHECKIT			;gnm_Flags
		dc.l	~16			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNPage6:	dc.b	NM_ITEM			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	EditMenu6Text1		;gnm_Label
		dc.l	Edit6CommKey		;gnm_CommKey
		dc.w	CHECKIT			;gnm_Flags
		dc.l	~32			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNP2SepMenu1:	dc.b	NM_ITEM			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	NM_BARLABEL		;gnm_Label
		dc.l	0			;gnm_CommKey
		dc.w	0			;gnm_Flags
		dc.l	0			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

MNQuit2:	dc.b	NM_ITEM			;gnm_Type
		dc.b	0			;gnm_Pad
		dc.l	QuitMenuText1		;gnm_Label
		dc.l	QuitCommKey		;gnm_CommKey
		dc.w	0			;gnm_Flags
		dc.l	0			;gnm_MutualExclude
		dc.l	0			;gnm_UserData

		dc.w	0			;NM_END?

;Menu TagList(s) for Edit window

MenuTagList2:	dc.l	GTMN_Menu,MNPageMenu1
		dc.l	TAG_DONE,0

;Commodities stuff (Brokers etc..)

NewBroker1:	dc.b NB_VERSION,0		;Version, Reserved 1
		dc.l VSName1,VSTitle,VSDesc	;Name, Title, Description
		dc.w NBU_UNIQUE!NBU_NOTIFY,COF_SHOW_HIDE	;Uniq, Flags
NBPri:		dc.b 0,0			;Priority, Reserved 2
		dc.l 0				;Port
		dc.w 0				;Reserved channel

PREFS_START:

Prefs:		dc.l	VSFileVersion
PrefsOnOff:	dc.b	0		;0=Off, 1=On
PrefsSampType:	dc.b	SAMP_GENERIC	;0=Perf.Snd, 1=SndMstr, 2=Generic, 3=DSS8
PrefsSampRes:	dc.b	RES_HI		;0=High, 1=Low
PrefsTimer	dc.b	TIMER_B		;0=Timer B, 1=Timer A
PrefsGain:	dc.b	0		;DSS gain
PrefsChannel:	dc.b	CHANNEL_LEFT	;0=right, 1=left
PrefsInput:	dc.b	INPUT_LINE	;0=mic, 1=line
PrefsConfirm:	dc.b	0		;0=No, 1=Yes
PrefsPriority:	dc.l	120		;Priority
PrefsScore:	dc.w	AccVal4		;Score needed
PrefsWake:	dc.b	0		;0=No, Other = Seconds
PrefsPad1:	dc.b	0
Future1:	dc.w	0
Future2:	dc.l	0
Future3:	dc.l	0
Future4:	dc.l	0

Alt1XY:
Alt1XPos:	dc.w	200
Alt1YPos:	dc.w	31

DatBuffer:	dc.b	"S:VoiceShell.DAT"
		dcb.b	34-12,0

PREFS_END:	dc.l	0,0

PrefsSize:	EQU	(PREFS_END-PREFS_START)

		Section VS,BSS

DATA_START:

MapBuffer:	ds.b	(VocabSIZE*304)		;64 words

CmdList:	ds.b	(VocabSIZE*GADLENGTH)

ErrCmd1:	ds.b	GADLENG2		;No Command
ErrCmd2:	ds.b	GADLENG2		;Cmd Failed
ErrCmd3:	ds.b	GADLENG2		;No Match
ErrCmd4:	ds.b	GADLENG2		;Too Loud
ErrCmd5:	ds.b	GADLENG2		;Too Low
ErrCmd6:	ds.b	GADLENG2		;Too Noisy
ConfCmd1:	ds.b	GADLENG2		;Confirm
ConfCmd2:	ds.b	GADLENG2		;Not Confirmed
WakeCmd1:	ds.b	GADLENG2		;Confirm

DATA_END:	ds.l	1

DataSize:	EQU	(DATA_END-DATA_START)

StringBuffer:	ds.b	256

		Section VS,DATA,CHIP

		ds.w	0

ClockPointer1:	dc.w	$0000,$0000
		dc.w	$0400,$07C0,$0000,$07C0,$0100,$0380,$0000,$07E0
		dc.w	$07C0,$1FF8,$1FF0,$3FEC,$3FF8,$7FDE,$3FF8,$7FBE
		dc.w	$7FFC,$FF7F,$7EFC,$FFFF,$7FFC,$FFFF,$3FF8,$7FFE
		dc.w	$3FF8,$7FFE,$1FF0,$3FFC,$07C0,$1FF8,$0000,$07E0
		dc.w	$0000,$0000

		end
