SUREG/ ;	SUREG/TXT	SUREG/TOO	SUREG
 	ORG	7000H
 ENTRY	DI			;DISABLE INTERUPTS
 	LD	SP,6FF0H	;STACK BELOW PROGRAM
 	LD	HL,MSG1		;POINT TO MESSAGE
 	CALL	PRINT		;DISPLAY IT
 	LD	HL,INPUT	;INPUT BUFFER
 	LD	B,1		;ALLOW 1 CHARACTER INPUT
 	CALL	40H		;GET KEYBOARD INPUT
 	LD	A,(HL)		;GET FIRST CHARACTER
 	CP	'1'		;TEST & JUMP
 	JP	Z,ADD
 	CP	'2'
 	JP	Z,EDIT
 	CP	'3'
 	JP	Z,LBAKUP
 	CP	'4'
 	JP	Z,LNREG
 	CP	'5'
 	JP	Z,402DH		;JUMP TO "DOS READY"
 	JR	ENTRY		;INVALID INPUT
 MSG1	DEFW	1F1CH		;CLEAR SCREEN
 	DEFM	'- SUPER UTILITY REGISTRATION PROGRAM -'
 	DEFW	0A0AH
 	DEFM	'<1>.  ADD REGISTRATIONS'
 	DEFB	0AH
 	DEFM	'<2>.  EDIT REGISTRATIONS'
 	DEFB	0AH
 	DEFM	'<3>.  BACKUPS NOT DELIVERED'
 	DEFB	0AH
 	DEFM	'<4>.  LIST NON-REGISTERED COPIES'
 	DEFB	0AH
 	DEFM	'<5>.  EXIT PROGRAM'
 	DEFB	0AH
 	DEFM	'SELECTION ? '
 	DEFB	3		;TERMINATOR BYTE
 PRINT	LD	A,(HL)		;GET A BYTE
 	INC	HL		;POINT TO NEXT
 	CP	3		;TERMINATOR ?
 	RET	Z		;DONE IF YES
 	CP	0DH		;CARRIAGE RETURN
 	RET	Z		;DONE IF YES
 	CALL	33H		;DISPLAY BYTE IN A REG.
 	JR	PRINT		;NEXT BYTE
 INPUT	DEFS	64		;64 BYTE BUFFER FOR KYB
 ADD	LD	HL,MSG2		;POINT TO MESSGE
 	CALL	PRINT		;DISPLAY IT
 	LD	B,4		;ALLOW 4 CHARACTERS
 	LD	HL,SER1		;SERIAL # BUFFER
 	CALL	40H		;GET KEY INPUT
 	LD	A,(HL)		;GET FIRST BYTE
 	CP	0DH		;NO INPUT ?
 	JP	Z,ENTRY		;BACK TO MENU
 	LD	A,B		;GET INPUT LENGTH
 	CP	4		;IS IT 4 ?
 	JR	NZ,ADD		;BAD INPUT
 	LD	A,4
 	LD	(DRIVE),A	;DEFAULT TO DRIVE 2
 	CALL	VALUE		;ASCII TO BINARY
 	JR	C,ADD		;NON-NUMERIC INPUT
 	LD	A,B
 	OR	C		;0
 	JR	Z,ADD
 	LD	HL,800		;ALLOW 800 REGS.
 	OR	A		;CLEAR CARRY FLAG
 	SBC	HL,BC		;COMPARE TO 800
 	JR	NC,CONT2	;DRIVE 2
 	LD	A,8
 	LD	(DRIVE),A	;DRIVE 3
 	LD	HL,1600		;UP TO 1600 ON DRIVE 3
 	OR	A		;CLEAR CARRY
 	SBC	HL,BC		;COMPARE TO 1600
 	JR	C,ADD		;NO GOOD
 	PUSH	BC
 	POP	HL		;HL = NUMBER
 	LD	BC,-800
 	ADD	HL,BC		;SUBTRACT 800
 	PUSH	HL
 	POP	BC
 CONT2	LD	(SERIAL),BC	;SAVE DISK RELATIVE
 	CALL	MAKETR		;CONVERT TO TRACK/SECTOR
 	CALL	IFUSED		;IF SER# USED
 	LD	HL,MSG3		;NAME ?
 	CALL	PRINT		;DISPLAY IT
 	LD	HL,NAME		;NAME BUFFER
 	LD	B,30		;30 CHAR
 	CALL	40H		;GET KEY INPUT
 	LD	HL,MSG4		;ADDRESS ?
 	CALL	PRINT
 	LD	HL,ADDRES	;ADDRESS BUFFER
 	LD	B,30
 	CALL	40H
 	LD	HL,MSG5		;CITY/STATE/ZIP
 	CALL	PRINT
 	LD	HL,CITY
 	LD	B,30
 	CALL	40H
 	LD	HL,MSG6		;PHONE
 	CALL	PRINT
 	LD	HL,PHONE
 	LD	B,14
 	CALL	40H
 	LD	HL,MSG7		;DATE PURCHASED
 	CALL	PRINT
 	LD	HL,PURDAT
 	LD	B,8
 	CALL	40H
 	LD	HL,MSG8		;PLACE PURCHASED
 	CALL	PRINT
 	LD	HL,PLACE
 	LD	B,20
 	CALL	40H
 	LD	HL,MSG9		;DATE REG RECEIVED
 	CALL	PRINT
 	LD	HL,REGDAT
 	LD	B,8
 	CALL	40H
 	LD	HL,MSG10	;BACKUP REQUESTED ?
 	CALL	PRINT
 	LD	HL,REQ
 	LD	B,1
 	CALL	40H
 	LD	HL,MSG11	;DATE BACKUP SENT
 	CALL	PRINT
 	LD	HL,SENT
 	LD	B,8
 	CALL	40H
 	LD	HL,MSG12	;BACKUP SER #
 	CALL	PRINT
 	LD	HL,SER2
 	LD	B,4
 	CALL	40H
 	LD	HL,MSG13	;REMARKS
 	CALL	PRINT
 	LD	HL,REMARK
 	LD	B,55
 	CALL	40H
 	CALL	SAVE		;SAVE FILE TO DISK
 	JP	ADD		;BACK TO ADD
 MSG2	DEFW	1F1CH		;CLEAR SCREEN
 	DEFM	'- ADD REGISTRATION FORMS -'
 	DEFW	0A0AH
 	DEFM	'SERIAL NUMBER: '
 	DEFB	3
 MSG3	DEFM	'NAME: '
 	DEFB	3
 MSG4	DEFM	'ADDRESS: '
 	DEFB	3
 MSG5	DEFM	'CITY/STATE/ZIP: '
 	DEFB	3
 MSG6	DEFM	'PHONE: '
 	DEFB	3
 MSG7	DEFM	'DATE PURCHASED: '
 	DEFB	3
 MSG8	DEFM	'PLACE PURCHASED: '
 	DEFB	3
 MSG9	DEFM	'DATE REGISTRATION RECEIVED: '
 	DEFB	3
 MSG10	DEFM	'BACKUP REQUESTED: '
 	DEFB	3
 MSG11	DEFM	'DATE BACKUP SENT: '
 	DEFB	3
 MSG12	DEFM	'BACKUP SERIAL NUMBER: '
 	DEFB	3
 MSG13	DEFM	'REMARKS: '
 	DEFB	3
 SER1	DEFS	4
 SER2	DEFS	4
 NAME	DEFS	30
 ADDRES	DEFS	30
 CITY	DEFS	30
 PHONE	DEFS	14
 PURDAT	DEFS	8
 PLACE	DEFS	20
 REGDAT	DEFS	8
 REQ	DEFS	1
 SENT	DEFS	8
 REMARK	DEFS	55
 IFUSED	RET
 SAVE	RET
 VALUE	LD	BC,0		;INITIALIZE TO 0
 	PUSH	HL
 	EX	DE,HL		;DE==>> STRING
 	LD	A,(DE)		;FIRST BYTE IN STRING
 	SUB	30H		;REMOVE ASCII
 	JR	C,VALBAD	;<0
 	CP	10
 	JR	NC,VALBAD	;>9
 	LD	L,A
 	LD	H,0		;HL=NUMBER
 	CALL	BYTEN
 	CALL	BYTEN
 	CALL	BYTEN		;HL X 1000
 	ADD	HL,BC		;ADD TO TOTAL
 	LD	B,H
 	LD	C,L		;PUT INTO BC
 	INC	DE		;NEXT BYTE
 	LD	A,(DE)		;NEXT BYTE IN STRING
 	SUB	30H
 	JR	C,VALBAD
 	CP	10
 	JR	NC,VALBAD
 	LD	L,A
 	LD	H,0
 	CALL	BYTEN
 	CALL	BYTEN
 	ADD	HL,BC
 	LD	B,H
 	LD	C,L
 	INC	DE
 	LD	A,(DE)
 	SUB	30H
 	JR	C,VALBAD
 	CP	10
 	JR	NC,VALBAD
 	LD	L,A
 	LD	H,0
 	CALL	BYTEN
 	ADD	HL,BC
 	LD	B,H
 	LD	C,L
 	INC	DE
 	LD	A,(DE)
 	SUB	30H
 	JR	C,VALBAD
 	CP	10
 	JR	NC,VALBAD
 	LD	L,A
 	LD	H,0
 	ADD	HL,BC
 	LD	B,H
 	LD	C,L
 	POP	HL
 	SCF
 	CCF
 	RET
 VALBAD	POP	HL
 	SCF
 	RET
 BYTEN	PUSH	DE
 	PUSH	BC
 	EX	DE,HL
 	LD	B,10
 	LD	HL,0
 LOOP2	SRL	B
 	JR	NC,CONT
 	ADD	HL,DE
 CONT	JR	Z,DONE2
 	EX	DE,HL
 	ADD	HL,HL
 	EX	DE,HL
 	JR	LOOP2
 DONE2	POP	BC
 	POP	DE
 	RET
 SERIAL	DEFW	0
 DRIVE	DEFB	0
 SECTOR	DEFW	0
 MAKETR	LD	DE,0
 LOOP3	DEC	BC
 	LD	A,B
 	OR	C
 	JR	Z,MAKDON
 	INC	E
 	LD	A,E
 	SUB	0AH
 	JR	NZ,LOOP3
 	LD	E,A
 	INC	D
 	JR	LOOP3
 MAKDON	LD	(SECTOR),DE
 	RET
 IFUSED	LD	DE,(SECTOR)
 	LD	BC,BUFFER
 	CALL	READ
 	LD	HL,BUFFER
 	LD	B,0
 LOOP4	LD	A,(HL)
 	INC	HL
 	OR	A
 	JR	NZ,USED
 	DJNZ	LOOP4
 	RET
 USED	LD	HL,MSG14
 	CALL	PRINT
 	POP	HL
 	LD	HL,BUFFER
 	LD	B,1
 	CALL	40H
 	JP	ADD
 MSG14	DEFB	0AH
 	DEFM	'SERIAL NUMBER ALREADY ALLOCATED !!'
 	DEFB	3
OR	A
 	JR	NZ,USED
 	DJNZ	LOOP4
 	RET
 