Compucolor.org – Virtual Media

Listing of file='TEXT.MAC;02' on disk='vmedia/text_formatter-sector.ccvf'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;	SMART PRINTER DRIVER
;	   V3.3	12/80
;
;	COPYRIGHT 1980 BY TREVOR TAYLOR
;
	TITLE	PRINT

;
;	REQD ROUTINES:
;
	EXTRN	JMPVEC,CO,OSTR
	EXTRN	FILVEC,FCS,GTBYT
	EXTRN	SETFIL
	EXTRN	CPYRGT
	EXTRN	PRTCHR
	EXTRN	GENHDR
	EXTRN	FFEED,HEADER
	EXTRN	PRTLIN
	EXTRN	GETLIN
	EXTRN	PROCES
;
;	EXTERNAL VARIABLES:
;
	EXTRN	CHRCNT,LINCNT,PAGCNT,HDRMSG
;
;	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,SNGLE
	PUBLIC	HDRFLG,DELTIM

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: IF SKPLEN <> 0, THEN
;		PAGLEN + SKPLEN = ACTUAL PHYSICAL PAGE LENGTH
;

SNGLE:	DB	0	;SINGLE PAGE FLAG (I.E. PAPER IS NOT
			;   CONTINUOUS):
			;    0        = CONTINUOUS FORMS
			;    NOT ZERO = SINGLE SHEETS

HDRFLG:	DB	0FFH	;HEADER FLAG:
			;    0        = NO HEADER
			;    NOT ZERO = PRINT PAGE HEADINGS

DFAULT:	DB	'TXT'	;DEFAULT FILE TYPE

DELTIM:	DB	1	;DELAY TIME FOR MECHANICAL PRINTER
			;   MOTIONS:
			;   CR = 4*DELTIM
			;   LF = DELTIM (OR 2*DELTIM IN FF'S)
			;   FF = 20*DELTIM
;
;*** NOTE: DO NOT SET THIS TO ZERO - ZERO CAUSES ENORMOUS
;	   DELAYS. THE MAXIMUM VALUE EVER USED SHOULD BE 12.
;
;.............................................................
;
;	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

	CALL	SETUP		;DO HOUSEKEEPING

	LXI	H,IDMSG		;PRINT STARTUP MSG
	CALL	OSTR

	LXI	H,IBUF
	CALL	CPYRGT		;PRINT/CHECK COPYRIGHT NOTICE

FILES:	LXI	H,IFPB1		;OPEN INPUT FILE
	LXI	D,IBUF1
	LXI	B,DFAULT
	XRA	A
	CALL	SETFIL
	XRA	A
	STA	FILE		;SET NO OUTPUT FILE
	STA	READY
	STA	KBCHA
	LXI	H,OUTMSG	;ASK USER IF OUTPUT TO FILE
	CALL	OSTR
OUTOPT:	LDA	KBCHA
	ORA	A
	JZ	OUTOPT
	CPI	'Y'
	JNZ	PRTOUT
	STA	FILE		;YES, SETUP OUTPUT FILE
	LXI	H,OFPB
	LXI	D,OBUF
	LXI	B,PRTTYP
	MVI	A,0FFH
	CALL	SETFIL

PRTOUT:	XRA	A		;NO, IGNORE
	STA	SNGLE		;SET CONTINUOUS FORMS
	STA	READY
	STA	KBCHA
	LXI	H,STPMSG	;ASK IF SINGLE SHEETS
	CALL	OSTR
STPOPT:	LDA	KBCHA
	ORA	A
	JZ	STPOPT
	CPI	'Y'
	JNZ	CONT
	STA	SNGLE		;YES, FLAG IT

CONT:

LOOP:	LXI	H,LINBUF
	CALL	GETLIN
	LXI	H,LINBUF
	MOV	A,M
	ORA	A
	JZ	EXIT
	CALL	PROCES

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

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

EXIT:	LDA	FILE
	ORA	A
	JZ	PRT
	LXI	H,OFPB		;CLOSE OUTPUT FILE
	CALL	CLSEQO
	JMP	FIN
PRT:	XRA	A
	STA	SNGLE
	CALL	FFEED		;FINISH WITH A FORM FEED
FIN:	MVI	A,13		;RESTORE INPUT TO FCS
	STA	KBDFL
	MVI	B,0		;SETUP NO ERROR
	LHLD	FCSSP		;RESTORE FCS STACK
	SPHL
	RET			;AND EXIT TO FCS

SETUP:	XRA	A
	STA	LINCNT
	STA	NESTLV
	STA	PAGCNT
	RET

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

IDMSG:	DB	29,27,11,15,6,1,CR,LF,'   TEXT '
	DB	6,7,'V1.0 ',239
OUTMSG:	DB	13,10,11,6,3,'OUTPUT TO FILE (Y/N) ? ',6,2,239
STPMSG:	DB	13,10,11,6,3,'SINGLE SHEETS  (Y/N) ? ',6,2,239
ERRMSG:	DB	17,'*** HARDWARE ERROR ***',13,10,239

;	DATA AREAS

PRTTYP:	DB	'PRT'	;FILE TYPE FOR OUTPUT FILES

FILE:	DB	0	;FLAG TO INDICATE FILE OUTPUT

	DB	0FFH
LINBUF:	DS	81
	DB	0FFH

IBUF1:	DS	1024	;INPUT BUFFERS - TWO BECAUSE OF IMBED
IBUF2:	DS	1024

;	THIS BUFFER IS USED AS FREE STORAGE IF OUTPUT IS TO
;	THE PRINTER DIRECTLY

	PUBLIC	OFPB

OBUF:	DS	1024	;OUTPUT BUFFER
OFPB:	DS	38

	DS	200	;STACK AREA
STACK:	DS	2

	PUBLIC	FCSSP	;USED TO EXIT ELSEWHERE

FCSSP:	DS	2	;FCS STACK POINTER

	PUBLIC	FPBPTR,NESTLV,FPB1,FPB2

FPBPTR:	DW	IFPB1	;POINTER TO CURRENT FPB
NESTLV:	DB	0	;FILE NESTING LEVEL
IFPB1:	DS	38	;INPUT FILE PARAMETER BLOCKS
IFPB2:	DS	38

	END	TEXT