ùúùú  W  ;Ô  Q1  >dÿ;¶×ÿ;¶×ÿ;¶×ÿ;¶×ÿ;¶×ExecBase		equ	+$004

;	     Exec functions

Forbid			equ	-$084
Permit			equ	-$08A
AddIntServer		equ	-$0A8
RemIntServer		equ	-$0AE
FindTask		equ	-$126
GetMsg			equ	-$174
ReplyMsg		equ	-$17A
WaitPort		equ	-$180
OldOpenLibrary		equ	-$198
CloseLibrary		equ	-$19E
AddResource		equ	-$1E6
RemResource		equ	-$1EC
OpenResource		equ	-$1F2

;         Intuition functions

CloseWindow		equ	-$048
DisplayAlert		equ	-$05A
DrawBorder		equ	-$06C
DrawImage		equ	-$072
PrintIText		equ	-$0D8
RefreshGadgets		equ	-$0DE
SetWindowTitles		equ	-$114
LockPubScreen		equ	-$1FE
UnlockPubScreen		equ	-$204
EasyRequestArgs		equ	-$24C
OpenWindowTagList	equ	-$25E

;	   Gadtools functions

CreateGadgetA		equ	-$01E
FreeGadgets		equ	-$024
Gt_GetIMsg		equ	-$048
Gt_ReplyIMsg		equ	-$04E
Gt_RefreshWindow	equ	-$054
CreateContext		equ	-$072
GetVisualInfoA		equ	-$07E
FreeVisualInfo		equ	-$084

;	   Dos functions

DateStamp		equ	-$0C0
Delay			equ	-$0C6

;	Graphics functions

RectFill		equ	-$132
SetAPen			equ	-$156

;		MathFFPFunctions

SpFix			equ	-$01E
SpFlt			equ	-$024
SpAdd			equ	-$042
SpMul			equ	-$04E
SpDiv			equ	-$054

WA_Left			equ	+$80000064
WA_Top			equ	+$80000065
WA_Width		equ	+$80000066
WA_Height		equ	+$80000067
WA_IDCMP		equ	+$8000006A
WA_Flags		equ	+$8000006B
WA_Gadgets		equ	+$8000006C
WA_Title		equ	+$8000006E
WA_CustomScreen		equ	+$80000070
WA_InnerWidth		equ	+$80000076
WA_InnerHeight		equ	+$80000077
WA_PubScreen		equ	+$80000079
WA_Zoom			equ	+$8000007D

WFLG_DRAGBAR		equ	+$00000002
WFLG_DEPTHGADGET	equ	+$00000004
WFLG_CLOSEWINDOW	equ	+$00000008
WFLG_GIMMEZEROZERO	equ	+$00000400
WFLG_ACTIVATE		equ	+$00001000

RT_FileReq		equ	+$00000000
RT_ReqPos		equ	+$80000003
RT_PubScrName		equ	+$80000006
RT_Screen		equ	+$80000007
RT_DefaultFont		equ	+$80000009
RT_SharelIDCMP		equ	+$8000000C
RT_ScreenToFront	equ	+$8000000E
RT_TextAttr		equ	+$8000000F
RT_Locale		equ	+$80000011
RTEZ_ReqTitle		equ	+$80000014
RTEZ_Flags		equ	+$80000016
RTGL_Min		equ	+$8000001E
RTGL_Max		equ	+$8000001F
RTGL_Width		equ	+$80000020

REQPOS_CENTERSCR	equ	+$00000002
EZREQF_CENTERTEXT	equ	+$00000004
TAG_DONE		equ	+$00000000

ASL_FILEREQUEST		equ	+$00000000
ASL_WINDOW		equ	+$80080002
ASL_LEFTEDGE		equ	+$80080003
ASL_TOPEDGE		equ	+$80080004
ASL_WIDTH		equ	+$80080005
ASL_HEIGHT		equ	+$80080006
ASL_FILE		equ	+$80080008
ASL_DIR			equ	+$80080009
ASL_MINHEIGHT		equ	+$80080010
ASL_MAXHEIGHT		equ	+$80080011

MODE_OLDFILE		equ	+$000003ED
MODE_NEWFILE		equ	+$000003EE
ACCES_READ		equ	-$00000002
ACCES_WRITE		equ	-$00000001
OFFSET_BEGINNING	equ	-$00000001
OFFSET_CURRENT		equ	+$00000000
OFFSET_END		equ	+$00000001

MEMF_PUBLIC		equ	+$00000001
MEMF_FAST		equ	+$00000004
MEMF_CLEAR		equ	+$00010000
MEMF_LARGEST		equ	+$00020000

BUTTON_KIND		equ	+$0001
CHECKBOX_KIND		equ	+$0002
LISTVIEW_KIND		equ	+$0004
MX_KIND			equ	+$0005
SCROLLER_KIND		equ	+$0009
SLIDER_KIND		equ	+$000B
STRING_KIND		equ	+$000C
TEXT_KIND		equ	+$000D

GTLV_Labels		equ	+$80080006
GTLV_ScrollWidth	equ	+$80080008
GTLV_ShowSelected	equ	+$80080035
GTLV_Selected		equ	+$80080036
GTTX_Text		equ	+$8008000B
GTTX_Border		equ	+$80080039
GTCB_Checked		equ	+$80080004
GTSC_Top		equ	+$80080015
GTSC_Total		equ	+$80080016
GTSC_Visible		equ	+$80080017
GTSC_Arrows		equ	+$8008003B
GTMX_Labels		equ	+$80080009
GTMX_Active		equ	+$8008000A
GTMX_Spacing		equ	+$8008003D
GTST_String		equ	+$8008002D
GTST_MaxChars		equ	+$8008002E
PGA_Freedom		equ	+$80031001

BUTTONIDCMP		equ	+$00000040
CHECKBOXIDCMP		equ	+$00000040
SCROLLERIDCMP		equ	+$00000070
MXIDCMP			equ	+$00000020
MENUPICKIDCMP		equ	+$00000100
RAWKEYIDCMP		equ	+$00000400
LISTVIEWIDCMP		equ	+$00400078
STRINGIDCMP		equ	+$00000040
CLOSEWINDOWIDCMP	equ	+$00000200
REFRESHWINDOWIDCMP	equ	+$00000004

PLACETEXT_LEFT		equ	+$001
PLACETEXT_RIGHT		equ	+$002
PLACETEXT_ABOVE		equ	+$004
PLACETEXT_BELOW		equ	+$006
PLACETEXT_IN		equ	+$010

GA_Immediate		equ	+$80030015
GA_Relverify		equ	+$80030016
GA_Disabled		equ	+$8003000E
GA_Selected		equ	+$80030013
GA_ToggleSelect		equ	+$8003001C

DDRA			equ	+$00BFD200
TALO			equ	+$00BFD400
TAHI			equ	+$00BFD500
TBLO			equ	+$00BFD600
TBHI			equ	+$00BFD700
ICR			equ	+$00BFDD00
CRA			equ	+$00BFDE00
CRB			equ	+$00BFDF00
	Section	Code,CODE_P

Start:
	MOVE.L	ExecBase,A6
	SUBA.L	A1,A1
	JSR	FindTask(A6)
	MOVE.L	D0,A4
	TST.L	$AC(A4)
	BNE.B	From_CLI
	LEA	$5C(A4),A0
	JSR	WaitPort(A6)
	LEA	$5C(A4),A0
	JSR	GetMsg(A6)
	MOVE.L	D0,WBMessage

From_CLI:
	LEA	DosName,A1
	JSR	OldOpenLibrary(A6)
	MOVE.L	D0,DosBase
	BEQ.W	Close_Freqmeter
	LEA	IntuiName,A1
	JSR	OldOpenLibrary(A6)
	MOVE.L	D0,IntuiBase
	BEQ.W	Close_Freqmeter
	LEA	GraphName,A1
	JSR	OldOpenLibrary(A6)
	MOVE.L	D0,GraphBase
	BEQ.W	Close_Freqmeter
	CMP.W	#$24,$14(A6)
	BMI.W	KickstartToLow
	LEA	GadtoolsName,A1
	JSR	OldOpenLibrary(A6)
	MOVE.L	D0,GadtoolsBase
	BEQ.W	Close_Freqmeter
	LEA	MathFFPName,A1
	JSR	OldOpenLibrary(A6)
	MOVE.L	D0,MathFFPBase
	BEQ.W	Close_Freqmeter
	LEA	CiaName,A1
	JSR	OpenResource(A6)
	LEA	OutText03,A0
	MOVE.L	D0,CiaBase
	BEQ.W	DisplayMessage
	MOVE.L	CiaBase,A1
	JSR	RemResource(A6)
	MOVE.L	IntuiBase,A6
	SUBA.L	A0,A0
	JSR	LockPubScreen(A6)
	LEA	OutText04,A0
	MOVE.L	D0,Screen
	BEQ.W	DisplayMessage
	MOVE.L	GadtoolsBase,A6
	MOVE.L	Screen,A0
	SUBA.L	A1,A1
	JSR	GetVisualInfoA(A6)
	LEA	OutText05,A0
	MOVE.L	D0,Visual
	BEQ.W	DisplayMessage
	LEA	GList,A0
	JSR	CreateContext(A6)
	LEA	OutText06,A0
	MOVE.L	D0,Gadget
	BEQ.W	DisplayMessage
	MOVE.L	Screen,A0
	LEA	TagList01,A1
	MOVE.L	Screen,$2C(A1)
	MOVE.L	GList,$44(A1)
	MOVEQ	#$00,D0
	MOVE.W	$0C(A0),D0
	SUB.W	#$011A,D0
	LSR.W	#$01,D0
	MOVE.L	D0,$04(A1)
	MOVE.W	$0E(A0),D0
	SUB.W	#$00A0,D0
	LSR.W	#$01,D0
	MOVE.L	D0,$0C(A1)
	MOVE.L	IntuiBase,A6
	SUBA.L	A0,A0
	LEA	TagList01,A1
	JSR	OpenWindowTagList(A6)
	LEA	OutText07,A0
	MOVE.L	D0,Window
	BEQ.W	DisplayMessage
	MOVE.L	D0,A0
	MOVE.L	50(A0),RP
	MOVE.L	IntuiBase,A6
	MOVE.L	RP,A0
	LEA	Image20,A1
	MOVEQ	#$09,D0
	MOVEQ	#$05,D1
	JSR	DrawImage(A6)
	MOVE.L	GraphBase,A6
	MOVE.L	RP,A1
	MOVEQ	#$00,D0
	JSR	SetAPen(A6)
	MOVE.L	RP,A1
	MOVE.W	#$90,D0
	MOVEQ	#$10,D1
	MOVE.W	#260,D2
	MOVEQ	#$1B,D3
	JSR	RectFill(A6)
	MOVE.L	IntuiBase,A6
	MOVE.L	RP,A0
	LEA	Border01,A1
	MOVEQ	#$00,D0
	MOVEQ	#$00,D1
	JSR	DrawBorder(A6)
	MOVE.L	GadtoolsBase,A6
	MOVEQ	#BUTTON_KIND,D0
	MOVE.L	Gadget,A0
	LEA	NewGadget01,A1
	LEA	TagList02,A2
	MOVE.L	Visual,$16(A1)
	JSR	CreateGadgetA(A6)
	LEA	OutText08,A0
	MOVE.L	D0,Gadget
	BEQ.W	DisplayMessage
	MOVEQ	#BUTTON_KIND,D0
	MOVE.L	Gadget,A0
	LEA	NewGadget02,A1
	LEA	TagList02,A2
	MOVE.L	Visual,$16(A1)
	JSR	CreateGadgetA(A6)
	LEA	OutText08,A0
	MOVE.L	D0,Gadget
	BEQ.W	DisplayMessage
	MOVEQ	#BUTTON_KIND,D0
	MOVE.L	Gadget,A0
	LEA	NewGadget03,A1
	LEA	TagList02,A2
	MOVE.L	Visual,$16(A1)
	JSR	CreateGadgetA(A6)
	LEA	OutText08,A0
	MOVE.L	D0,Gadget
	BEQ.W	DisplayMessage
	MOVE.L	GadtoolsBase,A6
	MOVE.L	Window,A0
	SUBA.L	A1,A1
	JSR	Gt_RefreshWindow(A6)
	MOVE.L	IntuiBase,A6
	MOVE.L	GList,A0
	MOVE.L	Window,A1
	SUBA.L	A2,A2
	JSR	RefreshGadgets(A6)
	MOVEQ	#$00,D7

CopyAbout:
	LEA	OutText11,A0
	LEA	OutText12,A1
	MOVE.W	#197,D0

CopyAbout01:
	MOVE.B	(A0)+,(A1)+
	DBF	D0,CopyAbout01
	MOVE.L	IntuiBase,A6
	MOVE.L	Window,A0
	LEA	OutText12,A1
	ADD.W	D7,A1
	CLR.B	30(A1)
	LEA	-1,A2
	JSR	SetWindowTitles(A6)
	MOVE.L	DosBase,A6
	MOVEQ	#$05,D1
	JSR	Delay(A6)
	ADDQ.W	#$01,D7
	CMP.W	#180,D7
	BNE.B	CopyAbout
	MOVE.L	IntuiBase,A6
	MOVE.L	Window,A0
	LEA	WindowName,A1
	LEA	-1,A2
	JSR	SetWindowTitles(A6)
	MOVE.L	ExecBase,A6
	LEA	Interrupt,A1
	MOVEQ	#$05,D0
	JSR	AddIntServer(A6)
	MOVE.W	#$FFFF,Interrupt+$16
	ANDI.B	#$C0,CRA
	ANDI.B	#$80,CRA
	ANDI.B	#$FD,DDRA
	MOVE.B	#$FF,TALO
	MOVE.B	#$FF,TAHI
	MOVE.B	#$FF,TBLO
	MOVE.B	#$FF,TBHI
	ORI.B	#$55,CRB
	ORI.B	#$35,CRA
	MOVE.B	#$7F,ICR

WaitForMessage:
	MOVE.L	GraphBase,A6
	MOVE.L	DosBase,A6
	MOVEQ	#$01,D1
	JSR	Delay(A6)
	MOVE.L	#DateStampRecord,D1
	JSR	DateStamp(A6)
	MOVE.L	DateStampRecord+$04,D0
	LEA	TimerDigits,A0
	LEA	TimerText,A1
	DIVU	#$3C,D0
	LSL.L	#$01,D0
	MOVE.W	$00(A0,D0.W),$00(A1)
	SWAP	D0
	MOVE.B	$00(A0,D0.W),$03(A1)
	MOVE.B	$01(A0,D0.W),$04(A1)
	MOVE.L	DateStampRecord+$08,D0
	DIVU	#$32,D0
	LSL.W	#$01,D0
	MOVE.W	$00(A0,D0.W),$06(A1)
	MOVE.L	IntuiBase,A6
	MOVE.L	RP,A0
	LEA	IntuiText01,A1
	MOVEQ	#$00,D0
	MOVEQ	#$00,D1
	JSR	PrintIText(A6)
	MOVE.L	Frequency,D0
	LEA	PowerTable,A0
	LEA	ValueBuffer,A1
	CLR.L	$00(A1)
	CLR.L	$04(A1)
	CLR.W	$08(A1)

HexadecimalToDecimal:
	CMP.L	(A0),D0
	BMI.B	HexadecimalToDecimal01
	SUB.L	(A0),D0
	ADDQ.B	#$01,(A1)
	BRA.B	HexadecimalToDecimal

HexadecimalToDecimal01:
	ADDQ.L	#$04,A0
	ADDQ.L	#$01,A1
	TST.L	D0
	BNE.B	HexadecimalToDecimal
	CMP.L	#10000000,Frequency
	BPL.B	HexadecimalToDecimal03
	LEA	ValueBuffer,A0
	MOVEQ	#$08,D0

HexadecimalToDecimal02:
	TST.B	(A0)
	BNE.B	HexadecimalToDecimal04
	MOVE.B	#$0A,(A0)+
	DBF	D0,HexadecimalToDecimal02
	BRA.B	HexadecimalToDecimal04

HexadecimalToDecimal03:
	LEA	ValueBuffer,A0
	MOVE.L	#$00000001,(A0)+
	MOVE.L	#$0A0A0A0A,(A0)+
	MOVE.W	#$0A0A,(A0)+

HexadecimalToDecimal04:
	LEA	ValueBuffer+$03,A2
	MOVEQ	#$06,D7
	MOVEQ	#$1E,D2
	
HexadecimalToDecimal05:
	MOVE.L	IntuiBase,A6
	MOVE.L	RP,A0
	LEA	BigDigitsList,A1
	MOVEQ	#$00,D0
	MOVE.B	(A2)+,D0
	LSL.W	#$02,D0
	MOVE.L	(A1,D0.W),A1
	MOVE.W	D2,D0
	MOVEQ	#$1C,D1
	JSR	DrawImage(A6)
	ADD.W	#$1F,D2
	DBF	D7,HexadecimalToDecimal05
	TST.L	Frequency
	BEQ.B	ComputePeriod02
	MOVE.L	MathFFPBase,A6
	MOVEQ	#$01,D0
	JSR	SpFlt(A6)
	MOVE.L	D0,D2
	MOVE.L	Frequency,D0
	JSR	SpFlt(A6)
	MOVE.L	D0,D1
	MOVE.L	D2,D0
	JSR	SpDiv(A6)
	MOVE.L	D0,D2
	MOVE.L	#1000000,D0
	JSR	SpFlt(A6)
	MOVE.L	D2,D1
	JSR	SpMul(A6)
	JSR	SpFix(A6)
	LEA	PowerTable,A0
	LEA	ValueBuffer,A1
	CLR.L	$00(A1)
	CLR.L	$04(A1)
	CLR.W	$08(A1)

ComputePeriod:
	CMP.L	(A0),D0
	BMI.B	ComputePeriod01
	SUB.L	(A0),D0
	ADDQ.B	#$01,(A1)
	BRA.B	ComputePeriod

ComputePeriod01:
	ADDQ.L	#$01,A1
	ADDQ.L	#$04,A0
	TST.L	D0
	BNE.B	ComputePeriod
	BRA.B	ComputePeriod03

ComputePeriod02:
	LEA	ValueBuffer,A0
	MOVE.L	#$00000001,(A0)+
	MOVE.L	#$0A0A0A0A,(A0)+
	MOVE.W	#$0A0A,(A0)+

ComputePeriod03:
	LEA	ValueBuffer+$03,A2
	MOVE.W	#$94,D2
	MOVEQ	#$06,D7

ComputePeriod04:
	MOVE.L	IntuiBase,A6
	MOVE.L	RP,A0
	LEA	SmallDigitsList,A1
	MOVEQ	#$00,D0
	MOVE.B	(A2)+,D0
	LSL.W	#$02,D0
	MOVE.L	(A1,D0.W),A1
	MOVE.W	D2,D0
	MOVEQ	#$42,D1
	ADD.W	#15,D2
	JSR	DrawImage(A6)
	DBF	D7,ComputePeriod04
	MOVE.L	GraphBase,A6
	MOVE.L	RP,A1
	TST.L	Frequency
	SNE	D0
	ANDI.W	#$01,D0
	JSR	SetAPen(A6)
	MOVE.L	RP,A1
	MOVE.W	#$A3,D0
	MOVEQ	#$54,D1
	MOVE.W	#$A4,D2
	MOVEQ	#$55,D3
	JSR	RectFill(A6)
	MOVE.L	AverageFrequency,D0
	ADD.L	Frequency,D0
	LSR.L	#$01,D0
	MOVE.L	D0,AverageFrequency
	LEA	PowerTable,A0
	LEA	ValueBuffer,A1
	CLR.L	$00(A1)
	CLR.L	$04(A1)
	CLR.W	$08(A1)

ComputeAverage:
	CMP.L	(A0),D0
	BMI.B	ComputeAverage01
	SUB.L	(A0),D0
	ADDQ.B	#$01,(A1)
	BRA.B	ComputeAverage

ComputeAverage01:
	ADDQ.L	#$01,A1
	ADDQ.L	#$04,A0
	TST.L	D0
	BNE.B	ComputeAverage
	CMP.L	#10000000,AverageFrequency
	BPL.B	ComputeAverage03
	LEA	ValueBuffer,A0
	MOVEQ	#$08,D0

ComputeAverage02:
	TST.B	(A0)
	BNE.B	ComputeAverage04
	MOVE.B	#$0A,(A0)+
	DBF	D0,ComputeAverage02
	BRA.B	ComputeAverage04

ComputeAverage03:
	LEA	ValueBuffer,A0
	MOVE.L	#$00000001,(A0)+
	MOVE.L	#$0A0A0A0A,(A0)+
	MOVE.W	#$0A0A,(A0)+

ComputeAverage04:
	LEA	ValueBuffer+$03,A2
	MOVEQ	#$06,D7
	MOVEQ	#$1E,D2
	
ComputeAverage05:
	MOVE.L	IntuiBase,A6
	MOVE.L	RP,A0
	LEA	SmallDigitsList,A1
	MOVEQ	#$00,D0
	MOVE.B	(A2)+,D0
	LSL.W	#$02,D0
	MOVE.L	(A1,D0.W),A1
	MOVE.W	D2,D0
	MOVEQ	#$42,D1
	JSR	DrawImage(A6)
	ADD.W	#$0F,D2
	DBF	D7,ComputeAverage05
	MOVE.L	GadtoolsBase,A6
	MOVE.L	Window,A0
	MOVE.L	86(A0),A0
	JSR	Gt_GetIMsg(A6)
	MOVE.L	D0,A5
	BEQ.W	WaitForMessage
	CMP.L	#CLOSEWINDOWIDCMP,20(A5)
	BEQ.B	Message_CloseWindow
	CMP.L	#BUTTONIDCMP,20(A5)
	BEQ.B	Message_GadgetPressed
	
ReplyToMessage:
	MOVE.L	GadtoolsBase,A6
	MOVE.L	A5,A1
	JSR	Gt_ReplyIMsg(A6)
	BRA.W	WaitForMessage

Message_CloseWindow:
	MOVE.L	IntuiBase,A6
	LEA	EasyRequest02,A1
	SUBA.L	A0,A0
	SUBA.L	A2,A2
	SUBA.L	A3,A3
	JSR	EasyRequestArgs(A6)
	TST.L	D0
	BEQ.B	ReplyToMessage
	MOVE.L	GadtoolsBase,A6
	MOVE.L	A5,A1
	JSR	Gt_ReplyIMsg(A6)
	BRA.B	Close_FreqMeter

Message_GadgetPressed:
	MOVE.L	28(A5),A0
	TST.W	38(A0)
	BEQ.W	Function_Hold
	CMP.W	#$01,38(A0)
	BEQ.W	Function_Store
	CMP.W	#$02,38(A0)
	BEQ.W	Function_Recall
	BRA.B	ReplyToMessage

Close_FreqMeter:
	TST.L	Visual
	BEQ.B	Close_FreqMeter01
	MOVE.L	GadtoolsBase,A6
	MOVE.L	Visual,A0
	JSR	FreeVisualInfo(A6)

Close_FreqMeter01:
	TST.L	Window
	BEQ.B	Close_FreqMeter02
	MOVE.L	IntuiBase,A6
	MOVE.L	Window,A0
	JSR	CloseWindow(A6)

Close_FreqMeter02:
	TST.L	GList
	BEQ.B	Close_FreqMeter03
	MOVE.L	GadtoolsBase,A6
	MOVE.L	GList,A0
	JSR	FreeGadgets(A6)

Close_FreqMeter03:
	TST.L	Screen
	BEQ.B	Close_FreqMeter04
	MOVE.L	IntuiBase,A6
	MOVE.L	Screen,A0
	JSR	UnlockPubScreen(A6)

Close_FreqMeter04:
	TST.W	Interrupt+$16
	BEQ.B	Close_FreqMeter05
	MOVE.L	ExecBase,A6
	LEA	Interrupt,A1
	MOVEQ	#$05,D0
	JSR	RemIntServer(A6)

Close_FreqMeter05:
	TST.L	DosBase
	BEQ.B	Close_FreqMeter06
	MOVE.L	ExecBase,A6
	MOVE.L	DosBase,A1
	JSR	CloseLibrary(A6)

Close_FreqMeter06:
	TST.L	IntuiBase
	BEQ.B	Close_FreqMeter07
	MOVE.L	ExecBase,A6
	MOVE.L	IntuiBase,A1
	JSR	CloseLibrary(A6)

Close_FreqMeter07:
	TST.L	GadtoolsBase
	BEQ.B	Close_FreqMeter08
	MOVE.L	ExecBase,A6
	MOVE.L	GadtoolsBase,A1
	JSR	CloseLibrary(A6)

Close_FreqMeter08:
	TST.L	GraphBase
	BEQ.B	Close_FreqMeter09
	MOVE.L	ExecBase,A6
	MOVE.L	GraphBase,A1
	JSR	CloseLibrary(A6)

Close_FreqMeter09:
	TST.L	MathFFPBase
	BEQ.B	Close_FreqMeter10
	MOVE.L	ExecBase,A6
	MOVE.L	MathFFPBase,A1
	JSR	CloseLibrary(A6)

Close_FreqMeter10:
 	TST.L	CiaBase
 	BEQ.B	Close_FreqMeter11
 	MOVE.L	ExecBase,A6
 	MOVE.L	CiaBase,A1
 	JSR	AddResource(A6)

Close_FreqMeter11:
	TST.L	WBMessage
 	BEQ.B	Close_FreqMeter12
 	MOVE.L	ExecBase,A6
 	JSR	Forbid(A6)
	MOVE.L	WBMessage,A1
	JSR	ReplyMsg(A6)

Close_FreqMeter12:
	MOVEQ	#$00,D0
	RTS

KickstartToLow:
	MOVE.L	IntuiBase,A6
	LEA	OutText01,A0
	MOVEQ	#$01,D0
	MOVEQ	#$20,D1
	JSR	DisplayAlert(A6)
	BRA.W	Close_FreqMeter

DisplayMessage:
	MOVE.L	IntuiBase,A6
	LEA	EasyRequest01,A1
	MOVE.L	A0,$0C(A1)
	SUBA.L	A0,A0
	SUBA.L	A2,A2
	SUBA.L	A3,A3
	JSR	EasyRequestArgs(A6)
	BRA.W	Close_FreqMeter

Function_Hold:
	MOVE.W	HoldFlag,D0
	SEQ	D0
	MOVE.W	D0,HoldFlag
	BNE.B	Function_Hold01
	MOVE.L	GraphBase,A6
	MOVE.L	RP,A1
	MOVEQ	#$00,D0
	JSR	SetAPen(A6)
	MOVE.L	RP,A1
	MOVE.W	#$BD,D0
	MOVEQ	#$0F,D1
	MOVE.W	#$E1,D2
	MOVEQ	#$19,D3
	JSR	RectFill(A6)
	BRA.W	ReplyToMessage

Function_Hold01:
	MOVE.L	IntuiBase,A6
	MOVE.L	RP,A0
	LEA	Image22,A1
	MOVE.W	#$BD,D0
	MOVEQ	#$0F,D1
	JSR	DrawImage(A6)
	BRA.W	ReplyToMessage

Function_Store:
	LEA	MeasureBuffer,A0
	MOVE.L	Frequency,$00(A0)
	MOVE.L	AverageFrequency,$04(A0)
	MOVE.L	IntuiBase,A6
	MOVE.L	RP,A0
	LEA	Image21,A1
	MOVE.W	#$93,D0
	MOVEQ	#$0F,D1
	JSR	DrawImage(A6)
	BRA.W	ReplyToMessage

Function_Recall:
	MOVE.W	#$00FF,HoldFlag
	MOVE.L	IntuiBase,A6
	MOVE.L	RP,A0
	LEA	Image22,A1
	MOVE.W	#$BD,D0
	MOVEQ	#$0F,D1
	JSR	DrawImage(A6)
	MOVE.L	GraphBase,A6
	MOVE.L	RP,A1
	MOVEQ	#$00,D0
	JSR	SetAPen(A6)
	MOVE.L	RP,A1
	MOVE.W	#$93,D0
	MOVEQ	#$0F,D1
	MOVE.W	#$B7,D2
	MOVEQ	#$19,D3
	JSR	RectFill(A6)
	LEA	MeasureBuffer,A0
	MOVE.L	$00(A0),Frequency
	MOVE.L	$04(A0),AverageFrequency
	BRA.W	ReplyToMessage

InterruptRoutine:
	SUBQ.W	#$01,FrequencyEnable
	BNE.B	InterruptRoutine01
	MOVE.L	ExecBase,A0
	MOVEQ	#$00,D0
	MOVE.B	$0212(A0),D0
	MOVE.W	D0,FrequencyEnable
	ANDI.B	#$FE,CRA
	MOVE.B	TBHI,D0
	LSL.W	#$08,D0
	MOVE.B	TBLO,D0
	LSL.L	#$08,D0
	MOVE.B	TAHI,D0
	LSL.L	#$08,D0
	MOVE.B	TALO,D0
	MOVE.B	#$FF,TBHI
	MOVE.B	#$FF,TBLO
	MOVE.B	#$FF,TAHI
	MOVE.B	#$FF,TALO
	ORI.B	#$11,CRB
	ORI.B	#$11,CRA
	TST.W	HoldFlag
	BNE.B	InterruptRoutine01
	NOT.L	D0
	MOVE.L	D0,Frequency

InterruptRoutine01
	MOVEQ	#$00,D0
	RTS

	Section Data,DATA_C

DosBase:
	DC.L	0

IntuiBase:
	DC.L	0

GadtoolsBase:
	DC.L	0

GraphBase:
	DC.L	0

MathFFPBase:
	DC.L	0

CiaBase:
	DC.L	0

Screen:
	DC.L	0

Window:
	DC.L	0

Visual:
	DC.L	0

Gadget:
	DC.L	0

GList:
	DC.L	0

RP:
	DC.L	0

Frequency:
	DC.L	0

AverageFrequency:
	DC.L	0

MeasureBuffer:
	DC.L	0
	DC.L	0

HoldFlag:
	DC.W	0

FrequencyEnable:
	DC.W	1

WBMessage:
	DC.L	0

Interrupt:
	DC.L	$00,$00
	DC.B	$02,$7F
	DC.L	InterruptName
	DC.L	0
	DC.L	InterruptRoutine
	DC.W	0

TextAttr:
	DC.L	FontName
	DC.W	8
	DC.B	0,1

EasyRequest01:
	DC.L	0,0
	DC.L	0,0
	DC.L	OutText02

EasyRequest02:
	DC.L	0,0
	DC.L	0
	DC.L	OutText09
	DC.L	OutText10

DateStampRecord:
	DC.L	0
	DC.L	0
	DC.L	0

TagList01:
	DC.L	WA_Left
	DC.L	0
	DC.L	WA_Top
	DC.L	0
	DC.L	WA_InnerWidth
	DC.L	282
	DC.L	WA_InnerHeight
	DC.L	160
	DC.L	WA_Title
	DC.L	OutText12
	DC.L	WA_PubScreen
	DC.L	0
	DC.L	WA_Flags
	DC.L	WFLG_DRAGBAR!WFLG_DEPTHGADGET!WFLG_CLOSEWINDOW!WFLG_ACTIVATE!WFLG_GIMMEZEROZERO
	DC.L	WA_IDCMP
	DC.L	CLOSEWINDOWIDCMP!BUTTONIDCMP
	DC.L	WA_Gadgets
	DC.L	0
	DC.L	TAG_DONE

TagList02:
	DC.L	GA_Relverify
	DC.L	1
	DC.L	TAG_DONE

BigDigitsList:
	DC.L	Image00
	DC.L	Image01
	DC.L	Image02
	DC.L	Image03
	DC.L	Image04
	DC.L	Image05
	DC.L	Image06
	DC.L	Image07
	DC.L	Image08
	DC.L	Image09
	DC.L	Image23
	
SmallDigitsList:
	DC.L	Image10
	DC.L	Image11
	DC.L	Image12
	DC.L	Image13
	DC.L	Image14
	DC.L	Image15
	DC.L	Image16
	DC.L	Image17
	DC.L	Image18
	DC.L	Image19
	DC.L	Image24

Image00:
	DC.W	0,0
	DC.W	32,35
	DC.W	1
	DC.L	BigDigit0
	DC.B	3,0
	DC.L	0

Image01:
	DC.W	0,0
	DC.W	32,35
	DC.W	2
	DC.L	BigDigit1
	DC.B	3,0
	DC.L	0

Image02:
	DC.W	0,0
	DC.W	32,35
	DC.W	2
	DC.L	BigDigit2
	DC.B	3,0
	DC.L	0

Image03:
	DC.W	0,0
	DC.W	32,35
	DC.W	2
	DC.L	BigDigit3
	DC.B	3,0
	DC.L	0

Image04:
	DC.W	0,0
	DC.W	32,35
	DC.W	2
	DC.L	BigDigit4
	DC.B	3,0
	DC.L	0

Image05:
	DC.W	0,0
	DC.W	32,35
	DC.W	2
	DC.L	BigDigit5
	DC.B	3,0
	DC.L	0

Image06:
	DC.W	0,0
	DC.W	32,35
	DC.W	2
	DC.L	BigDigit6
	DC.B	3,0
	DC.L	0

Image07:
	DC.W	0,0
	DC.W	32,35
	DC.W	2
	DC.L	BigDigit7
	DC.B	3,0
	DC.L	0

Image08:
	DC.W	0,0
	DC.W	32,35
	DC.W	2
	DC.L	BigDigit8
	DC.B	3,0
	DC.L	0

Image09:
	DC.W	0,0
	DC.W	32,35
	DC.W	2
	DC.L	BigDigit9
	DC.B	3,0
	DC.L	0

Image10:
	DC.W	0,0
	DC.W	16,18
	DC.W	2
	DC.L	SmallDigit0
	DC.B	3,0
	DC.L	0

Image11:
	DC.W	0,0
	DC.W	16,18
	DC.W	2
	DC.L	SmallDigit1
	DC.B	3,0
	DC.L	0

Image12:
	DC.W	0,0
	DC.W	16,18
	DC.W	2
	DC.L	SmallDigit2
	DC.B	3,0
	DC.L	0

Image13:
	DC.W	0,0
	DC.W	16,18
	DC.W	2
	DC.L	SmallDigit3
	DC.B	3,0
	DC.L	0

Image14:
	DC.W	0,0
	DC.W	16,18
	DC.W	2
	DC.L	SmallDigit4
	DC.B	3,0
	DC.L	0

Image15:
	DC.W	0,0
	DC.W	16,18
	DC.W	2
	DC.L	SmallDigit5
	DC.B	3,0
	DC.L	0

Image16:
	DC.W	0,0
	DC.W	16,18
	DC.W	2
	DC.L	SmallDigit6
	DC.B	3,0
	DC.L	0

Image17:
	DC.W	0,0
	DC.W	16,18
	DC.W	2
	DC.L	SmallDigit7
	DC.B	3,0
	DC.L	0

Image18:
	DC.W	0,0
	DC.W	16,18
	DC.W	2
	DC.L	SmallDigit8
	DC.B	3,0
	DC.L	0

Image19:
	DC.W	0,0
	DC.W	16,18
	DC.W	2
	DC.L	SmallDigit9
	DC.B	3,0
	DC.L	0

Image20:
	DC.W	0,0
	DC.W	264,100
	DC.W	2
	DC.L	Display
	DC.B	3,0
	DC.L	0

Image21:
	DC.W	0,0
	DC.W	37,12
	DC.W	2
	DC.L	Image_MEM
	DC.B	3,0
	DC.L	0

Image22:
	DC.W	0,0
	DC.W	37,12
	DC.W	2
	DC.L	Image_HOLD
	DC.B	3,0
	DC.L	0

Image23:
	DC.W	0,0
	DC.W	32,35
	DC.W	2
	DC.L	BigDigitBlank
	DC.B	3,0
	DC.L	0

Image24:
	DC.W	0,0
	DC.W	16,18
	DC.W	2
	DC.L	SmallDigitBlank
	DC.B	3,0
	DC.L	0

Border01:
	DC.W	0,0
	DC.B	1,0
	DC.B	1,2
	DC.L	TopTable01
	DC.L	Border02

Border02:
	DC.W	0,1
	DC.B	2,0
	DC.B	1,2
	DC.L	TopTable01
	DC.L	Border03

Border03:
	DC.W	167,120
	DC.B	1,0
	DC.B	1,3
	DC.L	TopTable02
	DC.L	Border04

Border04:
	DC.W	167,120
	DC.B	2,0
	DC.B	1,3
	DC.L	TopTable03
	DC.L	0

IntuiText01:
	DC.B	1,0
	DC.B	1,0
	DC.W	185,123
	DC.L	TextAttr
	DC.L	TimerText
	DC.L	0

NewGadget01:
	DC.W	15,120
	DC.W	120,12
	DC.L	GadgetText01
	DC.L	TextAttr
	DC.W	0
	DC.L	PLACETEXT_IN
	DC.L	0
	DC.L	0

NewGadget02:
	DC.W	15,138
	DC.W	120,12
	DC.L	GadgetText02
	DC.L	TextAttr
	DC.W	1
	DC.L	PLACETEXT_IN
	DC.L	0
	DC.L	0

NewGadget03:
	DC.W	167,138
	DC.W	102,12
	DC.L	GadgetText03
	DC.L	TextAttr
	DC.W	2
	DC.L	PLACETEXT_IN
	DC.L	0
	DC.L	0

TopTable01:
	DC.W	0,110,281,110
	
TopTable02:
	DC.W	0,12,0,0,100,0	
	
TopTable03:
	DC.W	1,12,100,12,100,0
	
BigDigit0:
	INCBIN Ram:BigDigit0

BigDigit1:
	INCBIN Ram:BigDigit1

BigDigit2:
	INCBIN Ram:BigDigit2

BigDigit3:
	INCBIN Ram:BigDigit3

BigDigit4:
	INCBIN Ram:BigDigit4

BigDigit5:
	INCBIN Ram:BigDigit5

BigDigit6:
	INCBIN Ram:BigDigit6

BigDigit7:
	INCBIN Ram:BigDigit7

BigDigit8:
	INCBIN Ram:BigDigit8

BigDigit9:
	INCBIN Ram:BigDigit9

BigDigitBlank:
	BLK.L	70,$00000000

SmallDigit0:
	INCBIN Ram:SmallDigit0

SmallDigit1:
	INCBIN Ram:SmallDigit1

SmallDigit2:
	INCBIN Ram:SmallDigit2

SmallDigit3:
	INCBIN Ram:SmallDigit3

SmallDigit4:
	INCBIN Ram:SmallDigit4

SmallDigit5:
	INCBIN Ram:SmallDigit5

SmallDigit6:
	INCBIN Ram:SmallDigit6

SmallDigit7:
	INCBIN Ram:SmallDigit7

SmallDigit8:
	INCBIN Ram:SmallDigit8

SmallDigit9:
	INCBIN Ram:SmallDigit9

SmallDigitBlank:
	BLK.W	36,$0000

Display:
	INCBIN Ram:Display

Image_MEM:
	INCBIN Ram:OptionMEM
	
Image_HOLD:
	INCBIN Ram:OptionHOLD
	
TimerDigits:
	DC.B	'000102030405060708091011'
	DC.B	'121314151617181920212223'
	DC.B	'242526272829303132333435'
	DC.B	'363738394041424344454647'
	DC.B	'484950515253545556575859'

TimerText:
	DC.B	'00:00:00',0,0

PowerTable:
	DC.L	1000000000
	DC.L	100000000
	DC.L	10000000
	DC.L	1000000
	DC.L	100000
	DC.L	10000
	DC.L	1000
	DC.L	100
	DC.L	10
	DC.L	1

ValueBuffer:
	BLK.B	10,0
	
DosName:
	DC.B	'dos.library',0

IntuiName:
	DC.B	'intuition.library',0

GadtoolsName:
	DC.B	'gadtools.library',0

GraphName:
	DC.B	'graphics.library',0

MathFFPName:
	DC.B	'mathffp.library',0

CiaName:
	DC.B	'ciab.resource',0

FontName:
	DC.B	'topaz.font',0
	
WindowName:
	DC.B	'Digital frequency meter',0

InterruptName:
	DC.B	'Frequency meter interrupt',0
	
GadgetText01:
	DC.B	'Hold',0

GadgetText02:
	DC.B	'Store',0

GadgetText03:
	DC.B	'Recall',0

OutText01:
	DC.B	0,150,17
	DC.B	'This program needs Kickstart 2.0 or higher.',0
	DC.B	0,0

OutText02:
	DC.B	'Accept',0

OutText03:
	DC.B	'Cannot open ciab.resource.',0

OutText04:
	DC.B	'Cannot lock default screen.',0

OutText05:
	DC.B	'Cannot get visual info.',0

OutText06:
	DC.B	'Cannot create gadget context.',0

OutText07:
	DC.B	'Cannot open window.',0

OutText08:
	DC.B	'Cannot create gadgets.',0

OutText09:
	DC.B	'Are you sure ?',0

OutText10:
	DC.B	'Yes|No',0

OutText11:
	DC.B	'                                     '
	DC.B	'Digital frequency meter. Version 1.0 '
	DC.B	'Copyright (C) 1997 by Piotr Wyderski.'
	DC.B	' All rights reserved. Program is free'
	DC.B	'ware. Release date 09.03.97.         '
	DC.B	'             '	

OutText12:
	BLK.B	256,0
	

