Compucolor.org – Virtual Media

Listing of file='RECV.MAC;01' on disk='vmedia/comm_pgms-sideB-sector.ccvf'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;	COMPUCOLOR II PRINT PROGRAM
;		V3.1	11/80
;
;	WRITTEN BY TREVOR TAYLOR
;
	TITLE	PRINT

	PUBLIC	FCSSP

	EXTRN	JMPVEC,CO,OSTR
	EXTRN	FILVEC,FCS,GTBYT
	EXTRN	SETFIL
	EXTRN	CPYRGT
	EXTRN	PRTCHR,CHRCNT,LINCNT,PAGCNT,HDRMSG
	EXTRN	GENHDR
	EXTRN	FFEED,HEADER
	EXTRN	PRTLIN

;	SYSTEM EQUATES

KBDFL	EQU	81DFH		;HOLDS NUMBER OF JUMP VECTOR
BAUD	EQU	81E2H		;CURRENT BAUD RATE
READY	EQU	81FFH		;KEYBOARD STATUS
KBCHA	EQU	81FEH		;KEYBOARD CHAR

;	SPECIAL CONTROL CHARACTERS

TAB	EQU	9
LF	EQU	10
FF	EQU	12
CR	EQU	13
ESC	EQU	27

FDRV	EQU	29

;..............................................................
;
;	USER DEFINED PARAMETERS
;
	PUBLIC	RATE,LINLEN,PAGLEN,FFFLAG,SKPLEN,HDRFLG

RATE:	DB	88H	;BAUD RATE (88H=1200)
LINLEN:	DB	80	;LINE LENGTH
PAGLEN:	DB	60	;PAGE LENGTH (NO. OF LINES
			;   ACTUALLY PRINTED ON A PAGE)
FFFLAG:	DB	0FFH	;FORM FEED FLAG:
			;    0        = PRINTER CANNOT DO FF'S
			;    NOT ZERO = PRINTER CAN FORM FEED
SKPLEN:	DB	0	;NUMBER OF LINES TO SKIP FOR
			;   PAGE PERFORATIONS:
			;    0  = PRINTER DOES IT
			;    N  = NUMBER OF LINE-FEEDS
;
;    NOTE:	PAGLEN + SKPLEN = ACTUAL PHYSICAL PAGE LENGTH
;

HDRFLG:	DB	0FFH	;HEADER FLAG:
			;    0        = NO HEADER
			;    NOT ZERO = PRINT PAGE HEADINGS
DFAULT:	DB	'SRC'	;DEFAULT FILE TYPE
;
;.............................................................
;
;	START OF PROGRAM

PRINT:	DI
	LXI	H,0		;SAVE FCS STACK POINTER
	DAD	SP
	SHLD	FCSSP
	LXI	SP,STACK	;SETUP RUNOFF STACK
	CALL	JMPVEC		;SETUP REQUIRED JUMP VECTORS
	CALL	FILVEC
	MVI	A,12		;SET KEYBOARD INPUT TO DUMP
	STA	KBDFL
	LDA	RATE		;FIX BAUD RATE
	OUT	5
	STA	BAUD
	EI

	XRA	A
	STA	CHRCNT		;START AT COLUMN ZERO,
	STA	LINCNT		;   LINE ZERO AND
	STA	PAGCNT		;   PAGE ZERO

	LXI	H,IDMSG		;PRINT STARTUP MSG
	CALL	OSTR

	CALL	CPYRGT		;PRINT/CHECK COPYRIGHT NOTICE

FILES:	LXI	H,FPB		;OPEN FILE
	LXI	D,IBUF
	LXI	B,DFAULT
	XRA	A
	CALL	SETFIL
	SHLD	FILPTR		;SAVE POINTER TO FILE NAME

	LDA	HDRFLG		;SKIP GENERATING HEADER IF IT
	ORA	A		;   IS NOT REQUIRED
	JZ	LOOP
	LDA	FPB+FDRV	;GET DRIVE NUMBER AND
	LHLD	FILPTR		;   FILE NAME
	XCHG
	LXI	H,HDRMSG	;   AND POINT TO HEADER MSG
	CALL	GENHDR		;MAKE MESSAGE
	CALL	HEADER		;PRINT HEADER TO START WITH

LOOP:	LXI	H,FPB		;POINT AT FILE PARAMETER BLOCK
	CALL	GTBYT		;GET NEXT BYTE
	JC	EOFTST		;<C>=ERROR OR END OF FILE
	CALL	PRTCHR		;PRINT CHAR
ABTEST:	LDA	READY		;SEE IF BREAK
	CPI	50H		;
	JZ	ABTEST		;HANG UNTIL ANOTHER IS STRUCK
	CPI	80H
	JNZ	LOOP
	XRA	A
	STA	READY
	LDA	KBCHA		;READ NEXT CHARACTER
	CPI	LF		;SEE IF LF
	JZ	EXIT		;EXIT IF LF
	CPI	ESC
	JZ	EXIT		;   OR IF ESCAPE
	JMP	LOOP

EOFTST:	JZ	EOF

ERROR:	LXI	H,ERRMSG	;PRINT ERROR MESSAGE
	CALL	OSTR

EXIT:	CALL	FFEED		;FINISH WITH A FORM FEED
	MVI	B,0		;SETUP NO ERROR
	LHLD	FCSSP		;RESTORE FCS STACK
	SPHL
	RET			;AND EXIT TO FCS

EOF:	JMP	EXIT

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

IDMSG:	DB	29,27,11,15,6,1,CR,LF,TAB,'PRINT '
	DB	6,7,'V3.1 ',239
ERRMSG:	DB	17,'*** HARDWARE ERROR ***',13,10,239

;	DATA AREAS

FILPTR:	DS	2	;POINTER TO FILE NAME
IBUF:	DS	1024	;INPUT BUFFER

	DS	300	;STACK AREA
STACK:

FCSSP:	DS	2	;FCS STACK POINTER
FPB:	DS	38	;INPUT FPB

	END	PRINT