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