Compucolor.org – Virtual Media

Listing of file='GENHDR.MAC;0B' on disk='vmedia/printer_pkg_src-sideB-sector.ccvf'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;	GENERATE A HEADER FOR A PRINT FILE
;
;	VALUES ON ENTRY:
;	   A  -  DRIVE NUMBER ON WHICH FILE RESIDES
;	   BC => BUFFER FOR DIRECTORY READ
;	   DE => FPB
;	   HL => BUFFER FOR HEADER MESSAGE
;
;	DESTROYS:
;	   ALL REGISTERS
;
;	RETURNS:
;	   HL => LAST BYTE OF HEADER MESSAGE
;
	TITLE	GENHDR

	EXTRN	FCS
	EXTRN	GTTIME,GTDATE
	EXTRN	HEXOUT
	EXTRN	LINLEN

;	SPECIAL CONTROL CHARACTERS

LF	EQU	10
FF	EQU	12
CR	EQU	13
ESC	EQU	27
SPACE	EQU	32

	ENTRY	GENHDR

GENHDR:	ADI	'0'		;SET DRIVE NUMBER
	STA	DRIVE
	SHLD	HDRPTR		;SAVE POINTERS TO HEADER MSG
	XCHG
	SHLD	FNPTR		;   AND FILE NAME
	PUSH	B		;GENERATE ADDRESS FOR FCS
	MOV	A,B		;   READ COMMAND
	LXI	H,RDADR
	CALL	HEXOUT
	MOV	A,C
	LXI	H,RDADR+2
	CALL	HEXOUT
	LXI	H,VOLMSG
	CALL	FCS		;READ VOLUME NAME OFF DISK

	POP	D		;COPY VOLUME NAME TO THE
	LHLD	HDRPTR		;   HEADER MESSAGE
	INX	D
	INX	D
	INX	D
	MVI	B,10
	MVI	C,0
MOVVOL:	LDAX	D
	CPI	32		;IGNORE CONTROL CHRS - THEY
	JC	SKPCHR		;   ARE PROBABLY COLOR CODES
	MOV	M,A
	INR	C		;COUNT THE NO. CHRS IN HEADER
	INX	H
SKPCHR:	INX	D
	DCR	B
	JNZ	MOVVOL
	MVI	A,SPACE		;CHOP OFF TRAILING SPACES
	DCX	H
TRIM:	DCR	C
	CMP	M
	DCX	H
	JZ	TRIM
	INR	C
	INX	H
	INX	H

	MVI	M,'>'		;ADD '>' TO THE VOLUME NAME
	INR	C
	INX	H

	XCHG
	LHLD	FNPTR
	XCHG
	INX	D
	INX	D
	MVI	B,6
MOVFN:	LDAX	D		;COPY THE FILE NAME TO THE
	CPI	' '		;   HEADER MESSAGE TOO
	JZ	SKPSPC
	MOV	M,A
	INR	C
	INX	H
SKPSPC:	INX	D
	DCR	B
	JNZ	MOVFN

ENDFN:	MVI	M,'.'		;ADD A PERIOD
	INR	C
	INX	H
	MVI	B,3		;   AND THE FILE TYPE
MOVFT:	LDAX	D
	MOV	M,A
	INR	C
	INX	D
	INX	H
	DCR	B
	JNZ	MOVFT
	MVI	M,';'		;ADD SEMICOLON
	INR	C
	INX	H
	LDAX	D
	CALL	HEXOUT		;   AND VERSION NUMBER
	INR	C
	INR	C
	INX	H
	MVI	M,SPACE		;TWO SPACES
	INR	C
	INX	H
	MVI	M,SPACE
	INR	C
	PUSH	B
	CALL	GTTIME		;PUT THE TIME IN HEADER
	POP	B
	MOV	A,C
	ADI	8
	MOV	C,A
	MVI	M,SPACE
	INR	C
	PUSH	B
	CALL	GTDATE		;   AND THE DATE
	POP	B
	MOV	A,C
	ADI	8
	MOV	C,A
	LDA	LINLEN		;CALCULATE SPACE LEFT ON LINE
	SUB	C
	JM	TOOBAD
	JZ	TOOBAD
	SUI	8		;LEAVE ROOM FOR PAGE NO.
	JM	TOOBAD
	JZ	TOOBAD
FILL:	MVI	M,SPACE		;PAD WITH SPACES
	INX	H
	DCR	A
	JNZ	FILL
TOOBAD:	XRA	A
	MOV	M,A		;MARK END OF HEADER MSG
	RET

;..............................................................
;
;	MESSAGES

VOLMSG:	DB	'READ CD'
DRIVE:	DB	'0'
	DB	': 0,'
RDADR:	DB	'A000,80',0

;	DATA AREA

HDRPTR:	DS	2
FNPTR:	DS	2

	END