*SOURCELISTING for DevPac 2
*
* CALL, makes nice tones for DTMF-phones
* version 3.0, 29-nov-90
* by GJ van Ratingen
*    P. Dijkmansstraat 1c
*    5611 RA  EINDHOVEN  Holland
*
	incdir	"sys:include/"
	include	"intuition/intuition.i"
	include "graphics/rastport.i"

* coordinates for hook
sx	equ	23
sy	equ	33
ex	equ	sx+56			;width = 56
ey	equ	sy+84			;height = 84

**** exec ****
_LVOCloseWindow	equ	-72
Forbid		equ	-132
AllocMem	equ	-198
OpenWindow	equ	-204
FreeMem		equ	-210
SetMenuStrip	equ	-264
FindTask	equ	-294
GetMsg		equ	-372
ReplyMsg	equ	-378
WaitPort	equ	-384
OpenLibrary	equ	-408
CloseLibrary	equ	-414
*** graphics ***
Text		equ	-60
Move		equ	-240
RectFill	equ	-306
PolyDraw	equ	-336
SetAPen		equ	-342
ScrollRaster	equ	-396

DELAY		equ	$8000
SPACE		equ	$3000
NULL		equ	0

*-------------------------------------------------*
* startup-stuff: were we launched from WB or CLI?
*-------------------------------------------------*

call	movem.l	d0/a0,-(sp)
	movea.l	4,a6
	movea.l	#0,a1			;this task
	jsr	FindTask(a6)		;find task
	movea.l	d0,a4
	movem.l	(sp)+,d0/a0
	tst.l	172(a4)			;started from cli?
	bne	main

w_b	lea	92(a4),a0		;messageport
	jsr	WaitPort(a6)
	lea	92(a4),a0
	jsr	GetMsg(a6)		;getmsg
	move.l	d0,w_bmsg
	move.l	#0,arglen
	bsr	wbmain
	movea.l	4,a6
	jsr	Forbid(a6)
	movea.l	w_bmsg,a1
	jsr	ReplyMsg(a6)		;reply message
	rts
w_bmsg	dc.l 0

*--------------------------------------*
* open libraries, window, etc.
*--------------------------------------*

main	move.l	A0,argstart
	move.l	D0,arglen
	sub.w	#1,D0
	move.b	#0,(A0,D0.W)
wbmain	movea.l	4,a6			;Execbase
	lea	intname(pc),a1
	jsr	OpenLibrary(a6)		;open intuition library
	move.l	d0,intbase
	beq	closestuffexit
	lea	dosname(pc),a1
	jsr	OpenLibrary(a6)		;open dos library
	move.l	d0,dosbase
	beq	closeint

opengfx	lea	gfxname(pc),a1
	jsr	OpenLibrary(a6)		;open graphics library
	move.l	d0,gfxbase
	beq	closedos

	movea.l	intbase,a6
	lea	new_window(pc),a0
	jsr	OpenWindow(a6)		;open main window
	move.l	d0,windowptr
	beq	closegfx
	movea.l	d0,a0
	move.l	50(a0),win_rport	;window's rastport
	move.l	86(a0),win_mport	;   ''    messageport

	move.l	windowptr,a0
	lea	Menu1(pc),a1
	jsr	SetMenuStrip(a6)

	move.l	gfxbase,a6
	move.l	win_rport,a1
	lea	pattern(pc),a0
	move.l	a0,rp_AreaPtrn(a1)	;set startadres pattern
	move.b	#1,rp_AreaPtSz(a1)	;set patternsize (here: 1*2 words)

	move.l	#sx,d0
	move.l	#sy,d1
	move.l	#ex,d2
	move.l	#ey,d3
	jsr	RectFill(a6)

	move.l	win_rport,a1		;rastport
	moveq	#2,d0			;color 2 (black)
	jsr	SetAPen(a6)

	move.l	win_rport,a1		;rastport
	moveq	#sx,d0
	moveq	#sy,d1
	jsr	Move(a6)		;set cursor at start

	move.l	win_rport,a1		;rastport
	moveq	#polycount,d0		;count
	lea	polytable(pc),a0		;list of coords.
	jsr	PolyDraw(a6)		;draw the lines

	move.l	win_rport,a1		;rastport
	moveq	#1,d0			;color 1 (white)
	jsr	SetAPen(a6)


*--------------------------------------*
* copy waveform to chipmem
*--------------------------------------*

	MOVEA.L	4,A6
	MOVE.L	#17,D0			;bytesize=17
	MOVE.L	#$10002,D1		;requirements: chipmem
	JSR	AllocMem(A6)		;allocate it
	MOVE.L	D0,memory
	BEQ	end2
	MOVE.L	D0,D6
	MOVE.L	#15,D0			;copy 16 bytes
	MOVEA.L	#sinus,A0
	MOVEA.L	D6,A1
copysnd	MOVE.B	(A0)+,(A1)+
	DBRA	D0,copysnd

	MOVE.L	D6,$DFF0B0		;address of audiodata
	MOVE.W	#8,$DFF0B4		;8 words audiodata
	MOVE.W	#0,$DFF0B6		;cycles
	MOVE.L	D6,$DFF0C0		;address audiodata
	MOVE.W	#8,$DFF0C4		;8 words audiodata
	MOVE.W	#0,$DFF0C6		;cycles
	MOVE.W	#$10,$DFF09E
	MOVE.W	#$8206,$DFF096		;all DMA on, set AUD1 & AUD2-DMA

	CMP.L	#1,arglen
	BLE	getm
	bsr	playarg

getm	movea.l	4,a6			;execbase
	movea.l	win_mport,a0		;Msgport
	jsr	WaitPort(a6)
	movea.l	win_mport,a0		;Msgport
	jsr	GetMsg(a6)		;get message
	move.l	d0,msg
	beq	getm			;still no message !?
	move.l	d0,a1
	move.l	20(a1),class
	move.w	24(a1),code
	move.l	28(a1),iaddress
	jsr	ReplyMsg(a6)

	move.l	class,d0
	movea.l	iaddress,a0
	cmp.l	#CLOSEWINDOW,d0
	beq	closestuff
	cmp.l	#VANILLAKEY,d0
	beq	keydown
	cmp.l	#GADGETDOWN,d0
	beq	gaddown
	cmp.l	#GADGETUP,d0
	beq	gadup
	cmp.l	#MENUPICK,d0
	bne	getm

	move	code,d1
	move	d1,d2
	asr.l	#5,d2			;bit 5..10 of code to bit 0..5
	and	#$3f,d2			;itemnumber
	and	#$1f,d1			;menunummer
	cmp	#$00,d1			;first menu?
	bne	getm
	cmp	#1,d2			;quit?
	bne	getm
	bra	closestuff

keydown	move.w	code,d1
	beq	getm
	cmp.w	#27,d1			;esc
	beq	closestuff
	bsr	soundon
	bsr	soundoff
	bra	getm

gaddown	adda.l	#adroffset,a0
	move.l	(a0),d1			;get gadget 'key'
	beq	getm
soundkey:
	bsr	soundon
	bra	getm

gadup	cmpa.l	#Gadget1,a0		;stringgadget?
	beq	playstring
	bsr	soundoff
	bra	getm

*--------------------------------------*
* play characters from stringbuffer
*--------------------------------------*

playstring:
	lea	Buffer(pc),a0
	move.l	a0,argstart
	lea	Buffeind(pc),a1
fndbufend:
	cmp.b	#0,-(a1)
	beq	fndbufend
bufendfnd:
	suba.l	a0,a1			;number of karakters
	move.l	a1,d0
	bmi	endplay
	bsr	playarg
endplay	bra	getm

playarg:
	MOVE.L	argstart,A2
nextdigit:
	TST.B	(A2)
	bne	playdigit		;stop at end of phonenumber
	rts
playdigit:
	MOVE.B	(A2)+,D1		;get next char from phonenumber
	bsr	soundon			;play it
	bsr	soundoff
	MOVE.L	#SPACE,D0		;delay between tones
wait2:	SUB.L	#1,D0
	bne	wait2
	bra	nextdigit		;play next char

*--------------------------------------*
* play byte-character in D1
*--------------------------------------*

soundon:
	CMP.B	#$30,D1 		;"0" ?
	BNE	notzero
	bsr	printchr
	ADD.B	#11,D1			;add 11 (due to 123456789*0#)
	BRA	digit
notzero:
	CMP.B	#$2A,D1 		;"*" ?
	BNE	notaster
	bsr	printchr
	ADD.B	#16,D1			;add 16
	BRA	digit
notaster:
	CMP.B	#$23,D1 		;"#" ?
	BNE	nothash
	bsr	printchr
	ADD.B	#25,D1			;add 25
	BRA	digit
nothash:
	CMP.B	#"0",D1 		;< 0 ?
	BLO	nodigit 		;yes, skip this one
	CMP.B	#"9",D1 		;<= 9 ?
	BLS	number 			;yes, we can play it
	AND.L	#$5F,D1			;make uppercase
	CMP.B	#"A",D1			;< A ?
	BLO	nodigit			;if yes, don't play it
	CMP.B	#"D",D1			;> D ?
	BHI	nodigit			;then don't play it
	bsr	printchr		;let's see what we play
	SUB.B	#$41,D1
	MOVE.B	D1,D2			;d2=row
	MOVEQ	#3,D1			;4th column
	BRA	char

number:	bsr	printchr
digit:	SUB.B	#$31,D1 		;ascii to number-1
	DIVU	#3,D1			;divide by 3
	MOVE.W	D1,D2			;d2.w=div (row)
	SWAP	D1			;d1.w=mod (column)
char:	ASL.W	#1,D1			;times 2 ('cause they're words!)
	ASL.W	#1,D2			;times 2
	AND.L	#$FF,D1
	AND.L	#$FF,D2
	LEA	tones1(pc),A0
	LEA	tones2(pc),A1
	MOVE.W	(A0,D1.W),$DFF0B6	;cycle time
	MOVE.W	(A1,D2.W),$DFF0C6	;cycle time
	MOVE.W	#$38,$DFF0B8		;volume on
	MOVE.W	#$38,$DFF0C8		;volume on
	MOVE.L	#DELAY,D0		;delay during tones
wait:	SUB.L	#1,D0
	BNE	wait
nodigit:
	rts

soundoff:
	MOVE.W	#0,$DFF0B8		;volume off
	MOVE.W	#0,$DFF0C8		;volume off
	rts

printchr:
	movem.l	d0-d6/a0-a2,-(sp)
	move.b	d1,arglen		;store it somewhere
	movea.l	win_rport,a1
	move.l	#8,d0			;dx
	moveq	#0,d1			;dy
	move.l	#8,d2			;minx
	move.l	#14,d3			;miny
	move.l	#88,d4			;maxx
	move.l	#23,d5			;maxy
	movea.l	gfxbase,a6
	jsr	ScrollRaster(a6)
	movea.l	win_rport,a1
	move.l	#80,d0			;x
	move.l	#22,d1			;y
	jsr	Move(a6)
	movea.l	win_rport,a1
	lea	arglen,a0		;string
	moveq	#1,d0			;count
	jsr	Text(a6)
	movem.l	(sp)+,d0-d6/a0-a2
	rts

*--------------------------------------*
* end of show: give everything back
*--------------------------------------*

closestuff:
end	MOVE.W	#$0006,$DFF096		;stop AUD1- & AUD2-DMA
	movea.l	$4,a6
	MOVEA.L	memory,A1
	MOVE.L	#17,D0
	JSR	FreeMem(A6)
end2	movea.l	intbase,a6
	movea.l	windowptr,a0
	jsr	_LVOCloseWindow(a6)			;close window
closegfx:
	movea.l	gfxbase,a1
	movea.l	$4,a6
	jsr	CloseLibrary(a6)
closedos:
	movea.l	dosbase,a1
	jsr	CloseLibrary(a6)
closeint:
	movea.l	intbase,a1
	movea.l	$4,a6
	jsr	CloseLibrary(a6)
closestuffexit:
	moveq	#0,d0
	rts
;-------------------------------------------------------------------------
	even

class		dc.l 0
code		dc.w 0
iaddress	dc.l 0
msg		dc.l 0

intbase		dc.l 0
gfxbase		dc.l 0
dosbase		dc.l 0
windowptr	dc.l 0
win_rport	dc.l 0
win_mport	dc.l 0
memory		dc.l 0
argstart	dc.l 0
arglen		dc.l 0
intname		dc.b 'intuition.library',0
gfxname		dc.b 'graphics.library',0
dosname		dc.b 'dos.library',0
;-------------------------------------------------------------------------
; keys & frequencies
;
;		      00B9    00A7    0097    0089 (in cycles)
; cycl./freq	      1209    1336    1477    1633 (in Hertz)
; 0140/697	 ->	1	2	3	a
;
; 0122/770	 ->	4	5	6	b
;
; 0106/852	 ->	7	8	9	c
;
; 00ED/941	 ->	*	0	#	d
;

	cnop	0,2
tones1:	dc.w $00B9,$00A7,$0097,$0089
tones2:	dc.w $0140
	dc.w $0122
	dc.w $0106
	dc.w $00ED
	dc.w $0000

sinus:	dc.b $00,$26,$47,$5C,$64,$5C,$47,$26
	dc.b $00,$DA,$B9,$A4,$9C,$A4,$B9,$DA
	cnop	0,2
pattern:
	dc.w	%1100110011001100
	dc.w	%0011001100110011

polycount	equ	19		;19 coord.pairs

polytable:
	dc.w	sx,sy,  ex,sy,  ex,ey,  sx,ey,  sx,sy
	dc.w	sx+8,sy+10, ex-8,sy+10, ex,sy, ex-8,sy+10
	dc.w	ex-8,sy+30, sx+8,sy+30, sx+8,sy+10, sx+8,ey-10
	dc.w	sx,ey, sx+8,ey-10, ex-8,ey-10, ex,ey
	dc.w	ex-8,ey-10, ex-8,sy+30

	cnop	0,2
new_window:
	dc.w	120,26,  270,130
	dc.b	0,1
	dc.l	MOUSEBUTTONS+GADGETDOWN+GADGETUP+CLOSEWINDOW+VANILLAKEY+MENUPICK
	dc.l	WINDOWDRAG+WINDOWDEPTH+WINDOWCLOSE+ACTIVATE+NOCAREREFRESH
	dc.l	GadgetList1,NULL,NewWindowName1,NULL,NULL
	dc.w	5,5,  -1,-1,  WBENCHSCREEN
NewWindowName1:
	dc.b	'A perfect phoneCALL',0
	cnop	0,2
UNDOBUFFER:
	ds.b	30
	cnop	0,2
Buffer:	ds.b	30
Buffeind:	equ	*
	cnop	0,2
GadgetList1:
Gadget1:
	dc.l	Gadget2
	dc.w	100,16,  138,15
	dc.w	NULL
	dc.w	RELVERIFY
	dc.w	STRGADGET
	dc.l	Border0, NULL,NULL,NULL, Gadget1SInfo
	dc.w	NULL
adroffset	equ	*-Gadget1
	dc.l	NULL
Gadget1SInfo:
	dc.l	Buffer,UNDOBUFFER
	dc.w	0,30,0,0,0,0,0,0
	dc.l	0,0,NULL
Border0:	dc.w	-2,-3
	dc.b	3,0,RP_JAM1
	dc.b	5
	dc.l	BorderVectors0
	dc.l	NULL
BorderVectors0:
	dc.w	0,0, 140,0, 140,13, 0,13, 0,0
Gadget2:
	dc.l	Gadget3
	dc.w	100,34,  25,17
	dc.w	NULL
	dc.w	RELVERIFY+GADGIMMEDIATE
	dc.w	BOOLGADGET
	dc.l	Border1, NULL, IText1, NULL, NULL
	dc.w	NULL
	dc.l	'1'
Border1:
	dc.w	-1,-1
	dc.b	3,0,RP_JAM1
	dc.b	5
	dc.l	NumVectors, NULL
NumVectors:
	dc.w	0,0,  26,0,  26,18,  0,18,  0,0
IText1:
	dc.b	1,0,RP_JAM2,0
	dc.w	9,5
	dc.l	NULL, ITextText1, NULL
ITextText1:
	dc.b	'1',0
	cnop 0,2
Gadget3:
	dc.l	Gadget4
	dc.w	134,34,  25,17
	dc.w	NULL
	dc.w	RELVERIFY+GADGIMMEDIATE
	dc.w	BOOLGADGET
	dc.l	Border1, NULL, IText2, NULL, NULL
	dc.w	NULL
	dc.l	'2'
IText2:
	dc.b	1,0,RP_JAM2,0
	dc.w	8,5
	dc.l	NULL, ITextText2, NULL
ITextText2:
	dc.b	'2',0
	cnop 0,2
Gadget4:
	dc.l	Gadget5
	dc.w	168,34,  25,17
	dc.w	NULL
	dc.w	RELVERIFY+GADGIMMEDIATE
	dc.w	BOOLGADGET
	dc.l	Border1, NULL, IText3, NULL, NULL
	dc.w	NULL
	dc.l	'3'
IText3:
	dc.b	1,0,RP_JAM2,0
	dc.w	8,5
	dc.l	NULL, ITextText3, NULL
ITextText3:
	dc.b	'3',0
	cnop 0,2
Gadget5:
	dc.l	Gadget6
	dc.w	100,56,  25,17
	dc.w	NULL
	dc.w	RELVERIFY+GADGIMMEDIATE
	dc.w	BOOLGADGET
	dc.l	Border1, NULL, IText4, NULL, NULL
	dc.w	NULL
	dc.l	'4'
IText4:
	dc.b	1,0,RP_JAM2,0
	dc.w	9,5
	dc.l	NULL, ITextText4, NULL
ITextText4:
	dc.b	'4',0
	cnop 0,2
Gadget6:
	dc.l	Gadget7
	dc.w	134,56,  25,17
	dc.w	NULL
	dc.w	RELVERIFY+GADGIMMEDIATE
	dc.w	BOOLGADGET
	dc.l	Border1, NULL, IText5, NULL, NULL
	dc.w	NULL
	dc.l	'5'
IText5:
	dc.b	1,0,RP_JAM2,0
	dc.w	9,5
	dc.l	NULL, ITextText5, NULL
ITextText5:
	dc.b	'5',0
	cnop 0,2
Gadget7:
	dc.l	Gadget8
	dc.w	168,56,  25,17
	dc.w	NULL
	dc.w	RELVERIFY+GADGIMMEDIATE
	dc.w	BOOLGADGET
	dc.l	Border1, NULL, IText6, NULL, NULL
	dc.w	NULL
	dc.l	'6'
IText6:
	dc.b	1,0,RP_JAM2,0
	dc.w	9,5
	dc.l	NULL, ITextText6, NULL
ITextText6:
	dc.b	'6',0
	cnop 0,2
Gadget8:
	dc.l	Gadget10
	dc.w	100,78,  25,17
	dc.w	NULL
	dc.w	RELVERIFY+GADGIMMEDIATE
	dc.w	BOOLGADGET
	dc.l	Border1, NULL, IText7, NULL, NULL
	dc.w	NULL
	dc.l	'7'
IText7:
	dc.b	1,0,RP_JAM2,0
	dc.w	9,5
	dc.l	NULL, ITextText7, NULL
ITextText7:
	dc.b	'7',0
	cnop 0,2
Gadget10:
	dc.l	Gadget11
	dc.w	214,100,  25,17
	dc.w	NULL
	dc.w	RELVERIFY+GADGIMMEDIATE
	dc.w	BOOLGADGET
	dc.l	Border1, NULL, IText8, NULL, NULL
	dc.w	NULL
	dc.l	'D'
IText8:
	dc.b	3,0,RP_JAM2,0
	dc.w	9,5
	dc.l	NULL, ITextText8, NULL
ITextText8:
	dc.b	'D',0
	cnop 0,2
Gadget11:
	dc.l	Gadget12
	dc.w	134,78,  25,17
	dc.w	NULL
	dc.w	RELVERIFY+GADGIMMEDIATE
	dc.w	BOOLGADGET
	dc.l	Border1, NULL, IText9, NULL, NULL
	dc.w	NULL
	dc.l	'8'
IText9:
	dc.b	1,0,RP_JAM2,0
	dc.w	9,5
	dc.l	NULL, ITextText9, NULL
ITextText9:
	dc.b	'8',0
	cnop 0,2
Gadget12:
	dc.l	Gadget13
	dc.w	214,78,  25,17
	dc.w	NULL
	dc.w	RELVERIFY+GADGIMMEDIATE
	dc.w	BOOLGADGET
	dc.l	Border1, NULL, IText10, NULL, NULL
	dc.w	NULL
	dc.l	'C'
IText10:
	dc.b	3,0,RP_JAM2,0
	dc.w	9,5
	dc.l	NULL, ITextText10, NULL
ITextText10:
	dc.b	'C',0
	cnop 0,2
Gadget13:
	dc.l	Gadget14
	dc.w	168,78,  25,17
	dc.w	NULL
	dc.w	RELVERIFY+GADGIMMEDIATE
	dc.w	BOOLGADGET
	dc.l	Border1, NULL, IText11, NULL, NULL
	dc.w	NULL
	dc.l	'9'
IText11:
	dc.b	1,0,RP_JAM2,0
	dc.w	9,5
	dc.l	NULL, ITextText11, NULL
ITextText11:
	dc.b	'9',0
	cnop 0,2
Gadget14:
	dc.l	Gadget15
	dc.w	100,100,  25,17
	dc.w	NULL
	dc.w	RELVERIFY+GADGIMMEDIATE
	dc.w	BOOLGADGET
	dc.l	Border1, NULL, IText12, NULL, NULL
	dc.w	NULL
	dc.l	'*'
IText12:
	dc.b	1,0,RP_JAM2,0
	dc.w	8,5
	dc.l	NULL, ITextText12, NULL
ITextText12:
	dc.b	'*',0
	cnop 0,2
Gadget15:
	dc.l	Gadget16
	dc.w	214,56,  25,17
	dc.w	NULL
	dc.w	RELVERIFY+GADGIMMEDIATE
	dc.w	BOOLGADGET
	dc.l	Border1, NULL, IText13, NULL, NULL
	dc.w	NULL
	dc.l	'B'
IText13:
	dc.b	3,0,RP_JAM2,0
	dc.w	9,5
	dc.l	NULL, ITextText13, NULL
ITextText13:
	dc.b	'B',0
	cnop 0,2
Gadget16:
	dc.l	Gadget17
	dc.w	214,34,  25,17
	dc.w	NULL
	dc.w	RELVERIFY+GADGIMMEDIATE
	dc.w	BOOLGADGET
	dc.l	Border1, NULL, IText14, NULL, NULL
	dc.w	NULL
	dc.l	'A'
IText14:
	dc.b	3,0,RP_JAM2,0
	dc.w	9,5
	dc.l	NULL, ITextText14, NULL
ITextText14:
	dc.b	'A',0
	cnop 0,2
Gadget17:
	dc.l	Gadget18
	dc.w	168,100,  25,17
	dc.w	NULL
	dc.w	RELVERIFY+GADGIMMEDIATE
	dc.w	BOOLGADGET
	dc.l	Border1, NULL, IText15, NULL, NULL
	dc.w	NULL
	dc.l	'#'
IText15:
	dc.b	1,0,RP_JAM2,0
	dc.w	9,5
	dc.l	NULL, ITextText15, NULL
ITextText15:
	dc.b	'#',0
	cnop 0,2
Gadget18:
	dc.l	NULL
	dc.w	134,100,  25,17
	dc.w	NULL
	dc.w	RELVERIFY+GADGIMMEDIATE
	dc.w	BOOLGADGET
	dc.l	Border1, NULL, IText16, NULL, NULL
	dc.w	NULL
	dc.l	'0'
IText16:
	dc.b	1,0,RP_JAM2,0
	dc.w	8,5
	dc.l	NULL, ITextText16, NULL
ITextText16:
	dc.b	'0',0
	cnop 0,2

Menu1:
	dc.l	NULL
	dc.w	0,0,  103,16
	dc.w	MENUENABLED
	dc.l	Menu1Name, MenuItem1
	dc.w	0,0,0,0
Menu1Name:
	dc.b	'CALLING MENU',0
	cnop 0,2
MenuItem1:
	dc.l	MenuItem2
	dc.w	0,1,  100,8
	dc.w	ITEMTEXT+ITEMENABLED+HIGHCOMP
	dc.l	0, IText17, NULL
	dc.b	NULL, NULL
	dc.l	SubItem0
	dc.w	MENUNULL
IText17:
	dc.b	3,1,RP_COMPLEMENT,0
	dc.w	0,0
	dc.l	NULL, ITextText17, NULL
ITextText17:
	dc.b	'About',0
	cnop 0,2
SubItem0:
	dc.l	SubItem1
	dc.w	85,-4,  278,8
	dc.w	ITEMTEXT+ITEMENABLED+HIGHCOMP+HIGHBOX
	dc.l	0, IText18, NULL
	dc.b	NULL
	dc.b	NULL
	dc.l	NULL
	dc.w	MENUNULL
IText18:
	dc.b	3,1,RP_COMPLEMENT,0
	dc.w	0,0
	dc.l	NULL, ITextText18, NULL
ITextText18:
	dc.b	' CALL / version 3.0 / Nov. 1990',0
	cnop 0,2
SubItem1:
	dc.l	SubItem2
	dc.w	85,8,  278,8
	dc.w	ITEMTEXT+ITEMENABLED+HIGHCOMP+HIGHBOX
	dc.l	0, IText18a, NULL
	dc.b	NULL
	dc.b	NULL
	dc.l	NULL
	dc.w	MENUNULL
IText18a:
	dc.b	3,1,RP_COMPLEMENT,0
	dc.w	0,0
	dc.l	NULL, ITextText18a, NULL
ITextText18a:
	dc.b	' Makes nice tunes for DTMF-phones',0
	cnop 0,2
SubItem2:
	dc.l	SubItem3
	dc.w	85,20,  278,8
	dc.w	ITEMTEXT+ITEMENABLED+HIGHCOMP+HIGHBOX
	dc.l	0, IText19, NULL
	dc.b	NULL
	dc.b	NULL
	dc.l	NULL
	dc.w	MENUNULL
IText19:
	dc.b	3,1,RP_COMPLEMENT,0
	dc.w	0,0
	dc.l	NULL, ITextText19, NULL
ITextText19:
	dc.b	'      by GJ van Ratingen',0
	cnop 0,2
SubItem3:
	dc.l	SubItem4
	dc.w	85,28,  278,8
	dc.w	ITEMTEXT+ITEMENABLED+HIGHCOMP+HIGHBOX
	dc.l	0, IText20, NULL
	dc.b	NULL
	dc.b	NULL
	dc.l	NULL
	dc.w	MENUNULL
IText20:
	dc.b	3,1,RP_COMPLEMENT,0
	dc.w	0,0
	dc.l	NULL, ITextText20, NULL
ITextText20:
	dc.b	'      P. Dijkmansstraat 1c',0
	cnop 0,2
SubItem4:
	dc.l	SubItem5
	dc.w	85,36,  278,8
	dc.w	ITEMTEXT+ITEMENABLED+HIGHCOMP+HIGHBOX
	dc.l	0, IText21, NULL
	dc.b	NULL
	dc.b	NULL
	dc.l	NULL
	dc.w	MENUNULL
IText21:
	dc.b	3,1,RP_COMPLEMENT,0
	dc.w	0,0
	dc.l	NULL, ITextText21, NULL
ITextText21:
	dc.b	'      5611 RA  Eindhoven',0
	cnop 0,2
SubItem5:
	dc.l	NULL
	dc.w	85,44,  278,8
	dc.w	ITEMTEXT+ITEMENABLED+HIGHCOMP+HIGHBOX
	dc.l	0, IText22, NULL
	dc.b	NULL
	dc.b	NULL
	dc.l	NULL
	dc.w	MENUNULL
IText22:
	dc.b	3,1,RP_COMPLEMENT,0
	dc.w	0,0
	dc.l	NULL, ITextText22, NULL
ITextText22:
	dc.b	'               Holland',0
	cnop 0,2
MenuItem2:
	dc.l	NULL
	dc.w	0,10,  100,8
	dc.w	ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP
	dc.l	0, IText23, NULL
	dc.b	'Q'
	dc.b	NULL
	dc.l	NULL
	dc.w	MENUNULL
IText23:
	dc.b	3,1,RP_COMPLEMENT,0
	dc.w	0,0
	dc.l	NULL, ITextText23, NULL
ITextText23:
	dc.b	'Quit  ',0
