SUB3   ;		* * * * * * * * * * * * *
 ;		*  PROGRAM BY KIM WATT  *
 ;		* BREEZE COMPUTING INC. *
 ;		*     P.O. BOX  1013    *
 ;		* BERKLEY, MICH.  48072 *
 ;		*    (313)  288-9422    *
 ;		* * * * * * * * * * * * *											
 ;	=====  SUBROUTINES # 3  =====												
 ;  THIS IS A SUBROUTINE SECTON FOR LIBRARY USAGE										
 	ORG	4E00H		;ABOVE LAST SUB SECTION
 ;  EQUATE LABELS TO LINK WITH PREVIOUSLY DEFINED ROUTINES
 ENTRY	EQU	4400H
 LENGTH	EQU	48D9H
 READ	EQU	4403H
 RDTYPE	EQU	443AH
 WRITE	EQU	445AH
 SKTYPE	EQU	4485H
 WRTYPE	EQU	4490H
 DERROR	EQU	44AFH
 DRIVE	EQU	459EH
 STOP	EQU	4702H
 ASCII	EQU	476BH
 VALUE	EQU	478CH
 GETSTR	EQU	48DCH
 STRING	EQU	47D9H
 CHAR	EQU	48DBH
 STROBE	EQU	4980H
 SET	EQU	4987H
 RESET	EQU	498BH
 POINT	EQU	498FH
 FILL	EQU	49C8H
 MOVE	EQU	49D0H
 LCFIX	EQU	49E4H
 SEARCH	EQU	4C07H
 FLASH	EQU	4C18H
 TONE	EQU	4C72H
 VID	EQU	4C8FH
 BACKUP	EQU	4CD4H
 TIME10	EQU	4DBDH
 RESTOR	EQU	4DC4H
 RSTYPE	EQU	4DCBH
 ;
 ;  THE FOLLOWING MEMORY IS USED FOR RESIDENT DATA
 S1	DEFB	0
 ;BIT 7 IF INITIALIZED / BIT 6 IF SELF DESTRUCT
 ;BIT 5 IF LOWER CASE  / BIT 1&0 # OF DRIVES AVAILABLE
 ;BIT 3 IF THIS IS A BACKUP DISK
 S2	DEFB	23H		;# OF TRACKS AVAILABLE
 S3	DEFW	0		;DISKETTE SERIAL #
 S4	DEFW	0		;CURRENT CHECK #
 S5	DEFW	0		;# OF PAYROLLS COMPLETED
 S6	DEFW	0		;# EMPLOYEES IN FILES
 S7	DEFM	'CBREEZE '	;MASTER PASSWORD
 S8	DEFM	'TIMETOGO'	;RESTRICTED PASSWORD
 S9	DEFB	0		;PASSWORD LEVEL
 S10	DEFW	0		;PAYPERIODS PER YEAR
 S11	DEFW	0		;SINGLE PRECISION
 	DEFW	1		;OVERTIME FACTOR
 S12	DEFM	'MICHIGAN  '	;STATE OF OPERATION
 S13	DEFM	'                     '	;TAX NUMBER
 S14	DEFM	'   AA'		;CURRENT EMPLOYEE #
 S15	DEFB	0		;CURRENT LIBRARY OVERLAY
 S16	DEFM	'00/00/00'	;CURRENT DATE
 S17	DEFM	'00/00/00'	;DESTRUCT DATE
 S18	DEFW	0100H
 ;  NEXT AVAILABLE TRACK/SECTOR FOR DATA
 S19	DEFB	0		;HIGHEST DRIVE #
 S20	DEFB	0
 ;  BIT 7 IF OUTPUT TO PRINTER / BIT 6 IF OUTPUT TO VIDEO
 ;  BIT 5 IF OUTPUT TO CASSETTE / BIT 4 IF OUTPUT TO DISK
 S21	DEFW	0		;STACK POINTER POINTER
 S22	DEFW	0		;ERROR MESSAGE POINTER
 S23	DEFB	0		;ERROR CODE
 S24	DEFW	0		;END OF PROGRAM +1
 S25	DEFW	0		;END OF MEMORY
 S26	DEFB	0
 ;  BIT 7 FOR CASSETTE 1 / BIT 6 FOR CASSETTE 2
 S27	DEFB	0		;# OF ACTIVE STORES
 S28	DEFW	0	;CURRENT TRACK/SECTOR OF DATA
 S29	DEFW	0	;NEXT RELATIVE LOOK-UP BYTE
 	DEFS	151	;BALANCE OF SECTOR LENGTH
 ;
 ;  FOLLOWING AREA FOR BUSINESS STRUCTURE INFORMATION
 ;RELATIVE BYTES:	0-13 = STORE NAME
 ;			14-16 = LEFT 3 LETTERS OF CITY
 ;			17-20 = MUNICIPAL TAX %
 ;			21-24 = EXEMPTION ALLOWANCE
 T1	DEFB	0
 	DEFS	24
 T2	DEFS	25
 T3	DEFS	25
 T4	DEFS	25
 T5	DEFS	25
 T6	DEFS	25
 T7	DEFS	25
 T8	DEFS	25
 T9	DEFS	25
 T10	DEFS	25
 	DEFS	6	;BALANCE OF SECTOR LENGTH
 ; FOLLOWING IS THE FEDERAL & STATE TAX TABLES
 ;	ALL VALUES ARE SINGLE PRECISION
 V1	DEFB	0	;FICA MAXIMUM TAXABLE INCOME
 	DEFS	3
 V2	DEFS	4	;FICA MAXIMUM TAX
 V3	DEFS	4	;FICA TAX %
 V4	DEFS	4	;STATE TAX %
 V5	DEFS	4	;STATE EXEMPTION ALLOWANCE
 ;  FOLLOWING IS THE MARRIED FEDERAL TABLE
 V6	DEFS	96
 ;  FOLLOWING IS THE SINGLE FEDERAL TABLE
 V14	DEFS	96
 	DEFS	44	;BALANCE OF SECTOR
 ;  FOLLOWING 6 SECTORS CONTAIN THE EMPLOYEE
 ;	LOOK-UP TABLE FOR FAST ACCESS
 ;	TO THE 150 EMPLOYEE DATA FILES
 ;  EACH SECTOR CONTAINS 25 ENTRIES
 ;	WITH 6 UNUSED BYTES ENDING EACH SECTOR
 ;  RELATIVE BYTES 0-7 CONTAIN
 ;	THE FIRST 8 BYTES OF THE NAME AS ENTERED
 ;  RELATIVE BYTES 8-9 CONTAIN
 ;	THE RELATIVE TRACK/SECTOR OF THE DATA
 X1	DEFB	0
 	DEFS	0FFH
 	DEFS	500H
 ; THE FOLLOWING AREA IS USED TO HOLD
 ;	CURRENT EMPLOYEE DATA
 D1	DEFB	0
 ;BIT 7 IF ACTIVE / BIT 6 IF INACTIVE
 ;BIT 5 IF VACATION / BIT 4 IF HOLIDAY
 ;BIT 3 IF SICK / BIT 2 IF QUIT
 ;BIT 1 IF FIRED
 D2	DEFB	0
 ;BIT 7 IF OFFICER / BIT 6 IF SALARY
 ;BIT 5 IF WAGE / BIT 4 IF COMMISSION
 ;BIT 1 IF LOAN ACTIVE / BIT 0 IF MARRIED
 D3	DEFS	26	;NAME
 D4	DEFS	26	;ADDRESS
 D5	DEFS	26	;CITY/STATE/ZIP
 D6	DEFS	14	;PHONE NUMBER
 D7	DEFS	11	;SOCIAL SECURITY #
 D8	DEFS	8	;BIRTH DATE
 D9	DEFS	5	;EMPLOYEE #
 D10	DEFB	0	;EXEMPTIONS
 D11	DEFB	65	;COMPENSATION CODE
 D12	DEFS	8	;HIRE DATE
 D13	DEFS	4	;REGULAR PAY RATE
 D14	DEFS	4	;COMMISSION RATE
 D15	DEFS	4	;LOAN BALANCE
 D16	DEFS	10	;HIRE POSITION
 D17	DEFS	10	;CURRENT POSITION
 D18	DEFS	4	;LOAN DEDUCTION
 D19	DEFB	0	;STORE ASSIGNED TO
 D20	DEFS	4	;CURRENT HOURS
 D21	DEFS	4	;OVERTIME HOURS
 D22	DEFS	4	;COMMISSION PIECES
 D23	DEFS	4	;INSURANCE DEDUCTION
 D24	DEFS	4	;BONUS
 D25	DEFS	4	;VACATION HOURS
 D26	DEFS	4	;HOLIDAY HOURS
 D27	DEFS	4	;SICK HOURS
 D28	DEFS	4	;VACATION HOURS LEFT
 D29	DEFS	4	;HOLIDAY HOURS LEFT
 D30	DEFS	4	;SICK HOURS LEFT
 D31	DEFS	4	;EXTRA INCOME
 D32	DEFS	4	;EXTRA DEDUCTION #1
 D33	DEFS	4	;EXTRA DEDUCTION #2
 D34	DEFS	10	;TITLE EXTRA INCOME
 D35	DEFS	10	;	     DEDUCTION #1
 D36	DEFS	10	;	     DEDUCTION #2
 	DEFS	5	;REMAINDER OF SECTOR
 ; BUFFER AREA FOR EMPLOYEE PAYROLL DATA
 E0	DEFW	0	;LAST CHECK # RECEIVED
 ; FOLLOWING ALL IN SINGLE PRECISION
 ; CURRENT MONTHLY QUARTERLY YEARLY TOTALS
 E1	DEFS	20	;REGULAR HOURS
 ;  YEARLY TOTAL FOR REG HOURS IS DOUBLE PRECISION
 E2	DEFS	16	;O/T HOURS
 E3	DEFS	16	;COMMISSION
 E4	DEFS	16	;BONUS
 E5	DEFS	16	;VACATION
 E6	DEFS	16	;HOLIDAY
 E7	DEFS	16	;SICK PAY
 E8	DEFS	16	;EXTRA INCOME
 E9	DEFS	16	;FICA TAX WITHHELD
 E10	DEFS	16	;FEDERAL TAX WITHHELD
 E11	DEFS	16	;STATE TAX WITHHELD
 E12	DEFS	16	;INSURANCE PAYMENTS
 E13	DEFS	16	;LOAN PAYMENTS
 E14	DEFS	16	;EXTRA DEDUCTION #1
 E15	DEFS	16	;EXTRA DEDUCTION #2
 E16	DEFW	0	;NUMBER OF PAYROLLS COMPUTED
 	DEFS	8	;BALANCE OF SECTOR
 ; ROUTINE TO LOAD EMPLOYEE FILE INTO BUFFER
 ;	DE CONTAINS START TRACK/SECTOR
 EMLOAD	LD	HL,2	;# OF SECTORS
 	LD	BC,D1	;POINT TO BUFFER
 	PUSH	DE	;SAVE WHERE IT IS FOR WRITE
 	CALL	READ	;READ 'EM
 	JP	NZ,DERROR
 	POP	DE	;RESTORE WHERE IT CAME FROM
 	RET		;DONE
 ; ROUTINE TO FIND EMPLOYEE NAME IN LOOK-UP TABLE
 ;	Z FLAG SET IF FOUND AND LOADED INTO BUFFER
 ;	NZ = NOT FOUND, BUFFER CONTAINS INVALID DATA
 ;	NAME TO BE FOUND IS IN (STRING)
 FINDEM	LD	IX,X1	;RESIDENT LOOK-UP TABLE
 	LD	DE,10	;10 BYTES / ENTRY
 	LD	B,8	;8 BYTE NAME TO FIND
 	LD	HL,STRING	;POINT TO DATA
 	LD	C,150	;150 ENTRIES TO SCAN
 FINDLP	PUSH	IX	;SAVE POINTER
 	LD	HL,STRING
 	PUSH	BC	;SAVE COUNTER
 FINLP1	LD	A,(IX)	;GET A BYTE
 	CP	(HL)	;MATCH ?
 	JR	NZ,NOPE	;NO MATCH
 	INC	HL
 	INC	IX
 	DJNZ	FINLP1	;GO 8 TIMES
 ; MATCH WAS FOUND IF WE GET THIS FAR
 	LD	E,(HL)	;GET SECTOR OF DATA
 	INC	HL
 	LD	D,(HL)	;GET TRACK OF DATA
 	CALL	EMLOAD	;LOAD THE EMPLOYEE
 	POP	BC
 	POP	IX
 	CALL	ISIT	;TEST LOADED NAME WITH INPUT
 	JR	NZ,FINDLP;ALL COUNTERS ARE STILL VALID
 	XOR	A	;SET ZERO FLAG
 	RET
 NOPE	POP	BC
 	POP	IX
 	ADD	IX,DE
 	PUSH	IX
 	DEC	C
 	PUSH	BC
 	JR	NZ,FINLP1	;TRY NEXT ENTRY
 	POP	BC		;DONE WITH TABLE
 	POP	IX
 	LD	A,0FFH		;-1
 	OR	A		;RESET Z FLAG
 	RET
 ISIT	EXX		;ALTERNATE REGISTERS
 	LD	HL,STRING	;POINT TO INPUT
 	LD	A,(LENGTH)	;LENGTH OF INPUT
 	LD	B,A		;TO BYTE COUNTER
 	LD	DE,D3	;POINT TO EMPLOYEE NAME
 	CALL	SCOMPR	;STRING COMPARE ROUTINE
 	EXX		;SWAP BACK
 	RET		;DONE WITH FLAGS SET
 SCOMPR	LD	A,(DE)	;GET NAME BYTE
 	CP	(HL)	;SAME AS INPUT ?
 	RET	NZ	;BAD COMPARE
 ;  CARRY FLAG IS SET IF (DE) < (HL)
 	INC	HL
 	INC	DE
 	DJNZ	SCOMPR	;GO FOR THE ENTIRE LENGTH
 	RET		;ZERO FLAG IS SET
 EMSAVE	LD	HL,2	;# OF SECTORS
 	LD	BC,D1	;POINT TO BUFFER
 	PUSH	DE	;SAVE IT
 	CALL	WRITE	;WRITE 'EM
 	JP	NZ,DERROR
 	POP	DE	;RESTORE IT
 	RET		;DONE
 ;	ADD NAME AND WRITE DATA
 EMNEW	LD	DE,(S18)	;NEXT AVAILABLE SECTOR
 	PUSH	DE		;SAVE FOR TABLE ENTRY
 	CALL	EMSAVE		;SAVE EMPLOYEE DATA
 	LD	(S28),DE	;UPDATE BUFFER CONTENTS
 	INC	E		;NEXT SECTOR
 	INC	E		;	2 OF 'EM
 	JR	NZ,HGH		;NOT AT END OF TRACK
 	INC	D		;INCREMENT TRACK
 	PUSH	DE		;SAVE ACTUAL
 	LD	A,(S2)		;# OF AVAILABLE TRACKS
 	PUSH	AF		;PASS TO DE
 	LD	A,D		;GET TRACK
 	POP	DE		;D HAS AVAILABLE TRACKS
 	CP	D		;COMPARE THEM
 	JR	C,BHGH		;NOT AT THE END YET
 	LD	HL,S1		;CONTROL BYTE
 	SET	2,(HL)		;SET DISK FULL BIT
 BHGH	POP	DE		;RESTORE IT
 HGH	LD	(S18),DE	;SAVE NEXT AVAILABLE TR/S
 	LD	DE,(S29)	;FIND FREE LOOK-UP BYTE
 	LD	HL,D3
 	LD	BC,8		;8 CHARACTERS
 	LDIR			;MOVE IT TO TABLE
 	POP	DE		;RESTORE TRACK/SECTOR
 	LD	(HL),E		;SAVE SECTOR
 	INC	HL
 	LD	(HL),D		;SAVE TRACK
 	INC	HL		;NEXT AVAILABLE
 	LD	(S29),HL	;SAVE POINTER
 	LD	HL,S6		;# OF EMPLOYEES IN TABLE
 	INC	(HL)		;ONE MORE
 	RET			;COMPLETED
 ; ROUTINE TO DISPLAY EMPLOYEE DATA FILE
 ;	ONLY THE UPPER SKELETON IS SHOWN
 TEMDIS	CALL	1C9H		;CLEAR SCREEN
 	LD	HL,TEMDAT	;POINT TO DATA
 	CALL	SPDISP		;SPECIAL DISPLAY ROUTINE
 	RET
 BEMDIS	LD	HL,BEMDAT
 	CALL	SPDISP
 	RET
 AEMDIS	CALL	TEMDIS
 	CALL	BEMDIS
 	RET
 ;  SPECIAL DISPLAY ROUTINE
 ;	03 MEANS CURSOR ADDRESS FOLLOWS
 ;	00 TERMINATOR
 SPDISP	LD	A,(HL)		;GET A BYTE
 	INC	HL		;POINT TO NEXT
 	OR	A		;ZERO BYTE ?
 	RET	Z		;DONE IF YES
 	CP	3		;ADDRESS MARKER ?
 	JR	NZ,NOCHY	;DON'T CHANGE CURSOR
 	LD	E,(HL)		;LOW NIBBLE
 	INC	HL
 	LD	D,(HL)		;HIGH NIBBLE
 	INC	HL
 	LD	(4020H),DE	;NEW CURSOR POSITION
 	JR	SPDISP
 NOCHY	CALL	33H		;DISPLAY BYTE
 	JR	SPDISP		;BACK FOR MORE
 ;  DATA FOR DISPLAYING EMPLOYEE FILE
 TEMDAT	DEFW	1F1CH		;CLEAR SCREEN
 	DEFB	3		;ADDRESS FOLLOWS
 	DEFW	3C00H+16
 	DEFM	'* * *  EMPLOYEE DATA FILE  * * *'
 	DEFB	3
 	DEFW	3C00H+64
 	DEFM	'NAME:'
 	DEFB	3
 	DEFW	3C00H+97
 	DEFM	'AD:'
 	DEFB	3
 	DEFW	3C00H+128
 	DEFM	'CTY/ST/ZIP:'
 	DEFB	3
 	DEFW	3C00H+167
 	DEFM	'PHONE:'
 	DEFB	3
 	DEFW	3C00H+192
 	DEFM	'SS#:'
 	DEFB	3
 	DEFW	3C00H+209
 	DEFM	'B/D'
 	DEFB	3
 	DEFW	3C00H+223
 	DEFM	'EMP#:'
 	DEFB	3
 	DEFW	3C00H+235
 	DEFM	'EX:'
 	DEFB	3
 	DEFW	3C00H+242
 	DEFM	'MS:'
 	DEFB	3
 	DEFW	3C00H+248
 	DEFM	'COMP:'
 	DEFB	3
 	DEFW	3C00H+256
 	DEFM	'ST POS:'
 	DEFB	3
 	DEFW	3C00H+275
 	DEFM	'CUR POS:'
 	DEFB	3
 	DEFW	3C00H+295
 	DEFM	'VAC:'
 	DEFB	3
 	DEFW	3C00H+303
 	DEFM	'HOL:'
 	DEFB	3
 	DEFW	3C00H+311
 	DEFM	'SICK:'
 	DEFB	3
 	DEFW	3C00H+320
 	DEFM	'TYPE:'
 	DEFB	3
 	DEFW	3C00H+334
 	DEFM	'RATE:'
 	DEFB	3
 	DEFW	3C00H+347
 	DEFM	'STATUS:'
 	DEFB	3
 	DEFW	3C00H+357
 	DEFM	'LOAN STATUS:'
 	DEFB	3
 	DEFW	3C00H+372
 	DEFM	'BAL:'
 	DEFB	0		;TERMINATOR
 BEMDAT	DEFB	3
 	DEFW	3C00H+448
 	DEFM	'REG HOURS:'
 	DEFB	3
 	DEFW	3C00H+466
 	DEFM	'O/T HOURS:'
 	DEFB	3
 	DEFW	3C00H+483
 	DEFM	'COMM:'
 	DEFB	3
 	DEFW	3C00H+496
 	DEFM	'BONUS:'
 	DEFB	3
 	DEFW	3C00H+512
 	DEFM	'VAC HOURS:'
 	DEFB	3
 	DEFW	3C00H+526
 	DEFM	'HOLIDAY HOURS:'
 	DEFB	3
 	DEFW	3C00H+544
 	DEFM	'SICK HOURS:'
 	DEFB	3
 	DEFW	3C00H+559
 	DEFM	'INSURANCE:'
 	DEFB	0		;TERMINATOR
