Listing of file='RECV.MAC;01' on disk='vmedia/terminal_em-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