/"LPT" HANDLER FOR LS8E PRINTER /HAS DEFAULT EJECT AT 61 LINES, /WHICH IS USEFUL WITH UNPAGINATED FILES. /FOR PDP-8/E & LATER MODELS. DECIMAL MARGIN= 80 / OR 120 OR... OCTAL *0 /HEADER BLOCK: -1 / 1 HANDLER /DESCRIPTOR BLOCK: DEVICE LS8E /GENERIC NAME DEVICE LPT /"LPT", HANDLER NAME DCB, 1040 /OUTPUT TYPE DEVICE 4000+ENTRY-200 / 2-PAGE; OFFSET VALUE 0 0 *200 / RELATIVE ADDRESS COUNT1, 0 COUNT2, 0 M24, -24 / USED TO COUNT 0.5 SECS. PTR, 0 FIRST, 0 / 3-FROM-2 UNPACK: 1ST CHAR. SECOND, THIRD, 0 RECRDS, 0 / NO. OF 128-WD. RECORDS K3700, 3700 K7400, 7400 CONTRL, 0 / CONTROL WORD FORMC, 214 ARG= 0 / MERELY A TAG LSPF= 6660 LTSF= 6661 LTLS= 6666 XXXXIT, CLA CMA /NASTY ERROR JMP EXIT+1 /TO ERROR RETURN EXITF, JMS ESCAPE /PRINT ARG FORMC /FORM CODE EXIT, 7600 /NON-ERROR RETURN ISZ ENTRY 0 /GETS CDF CIF N JMP I .+1 /EXIT VIA RETURN ADRS. ENTRY, 0 / SUBROUTINE ENTRY POINT *** CLA CLL RDF /D.F. OF CALL TAD KCDI DCA EXIT+2 /SET UP RETURN FIELDS TIMOUT, TAD M24 DCA COUNT2 /OUTER LOOP (20 TIMES) DCA COUNT1 /INNER " (4096) LTSF SKP JMP PROCED /FLAG READY ISZ COUNT1 JMP .-4 ISZ COUNT2 JMP .-6 LSPF /ENOUGH! FORCE THE FLAG. PROCED, TAD I ENTRY /1ST ARGUMENT DCA CONTRL /CONTROL WORD ISZ ENTRY /TO NEXT ARG. TAD I ENTRY /BUFFER ADDRESS DCA PTR ISZ ENTRY /POINT TO BLOCK NO. TAD CONTRL /SHOULD BE NEGATIVE SMA JMP XXXXIT /READ? ABSURD! AND K3700 /HOW MANY RECORDS? BSW SZA /0 IS 0 AND NOT 32 JMP .+3 ISZ ENTRY / TREAT AS NOP, JMP EXIT / TAKE NON-ERROR RET. CIA DCA RECRDS TAD I ENTRY /BLOCK NO. ISZ ENTRY /TO 1ST (ERROR) RET. SZA CLA /BLOCK #0 = INITIALIZE JMP .+3 /NOT FIRST WRITE JMS ESCAPE / WRITE ARG FORMC / EJECT PAGE TAD CONTRL AND K70 TAD KCDF DCA RECFLD /DATA FLD. OF BUFFER LOOPRC, TAD EXIT /-200 OCTAL STL RAR /-100 (DOUBLE WORDS) DCA COUNT1 /RECORD = 2*64 WDS. LOOPCH, RECFLD, 6211 /GETS CHANGED TO D.F. TAD I PTR / OF TEXT BUFFER DCA FIRST /CHAR. #1. ISZ PTR /SECOND WORD TAD I PTR DCA SECOND ISZ PTR /NEXT 2 WORDS K70, 70 /PROTECT ISZ JMS ESCAPE ARG FIRST JMS ESCAPE /GET RID OF CHARS. 1 & 2 ARG SECOND TAD SECOND AND K7400 /LOW 4 BITS, CHAR. #3. BSW DCA THIRD /SHIFTED 6 PLACES TAD FIRST AND K7400 /1ST 4 BITS CLL RTR /SHIFT 2 PLACES TAD THIRD /NOW JOIN TO LOW BITS RTR /...& COMPLETE SHIFT DCA THIRD JMS ESCAPE ARG THIRD KSF JMP NOSIG /NO SIGNAL FROM USER /------- SIGNAL, KRB /SOMETHING. AND MASK / (7 BITS ONLY) TAD MCTRLO /^O ?? SNA JMP EXITO /YES. EXIT. TAD K14 /NO. SEE IF IT'S ^C. SZA CLA / ^C JMP NOSIG /NEITHER. CONTINUE. KCDI, CDF CIF 0 JMP I EXIT /TO MONITOR (^C) EXITO, JMS ESCAPE ARG VTAB JMP EXIT /^O FEEDS FRESH LINE, /AND THEN EXITS. MASK, 177 MCTRLO, -17 VTAB, 213 K14, 14 /------- NOSIG, ISZ COUNT1 /DOUBLE WORD JMP LOOPCH /HAVEN'T DONE 128 YET // RECORD FINISHED: ISZ RECRDS /DONE ALL RECORDS? JMP LOOPRC /NO, GET NEXT. JMP EXIT /YES, BUFFER EMPTIED. *374 ESCAPE, 0 / LINKAGE TO "OUTPUT" SUBR.: TAD .-1 /FOR LATER RETURN KCDF, CDF /DATA FLD. 0 SKP /BUST OUT OF STIR OUTPUT, 0 / RETURN ADRS. GOES HERE DCA .-1 TAD OUTPUT AND K7600 /N*200 = PG. 1 BOTM. TAD M200 DCA AUGMNT /RELOCATION CONST. TAD I OUTPUT TAD AUGMNT /REAL ARG. ADDRESS DCA PTR2 ISZ OUTPUT /FOR CORRECT RETURN /FIX UP "EXITF" POINTER: TAD XEXITF / RELATIVE ADDRESS TAD AUGMNT DCA PEXITF / TRUE ADDRESS TAD I PTR2 /GET ARGUMENT AND K177 /7 BITS ONLY SNA JMP RETURN /IGNORE BLANKS TAD M32 /^Z ? SNA JMP I PEXITF /YES, E.O.F. TAD K15 /C.R.? SNA JMS CR /C.R., SNA JMP RETURN /...EXIT IF C.R. IAC /FORM FEED? SNA JMP FORM /YES. IAC SNA JMP CRLF /VERT. TAB. = CR/LF IAC /LINE FEED? SNA JMP LFEED /YES IAC /NO. TAB? SZA /YES, PRINT SPACES JMP NEITHR /NO, PLAIN OLE CHAR. DOTAB, TAD TABCTR /CHARS. ON LINE SO FAR AND K7 TAD M10 /TO NEXT TAB STOP DCA CTR2 TAD SPACE JMS TYPE ISZ TABCTR /NEW CHARACTERS ISZ CTR2 JMP .-4 JMP CHECKL /LINE TOO LONG? /------- LFEED, ISZ FORMFL /L.F. ALLOWED? SKP /YES. JMP NOFORM /NO, FOLLOWS FORM ISZ LINCTR /61? SKP /NO, NOT YET. EJCT, JMP FORM+3 /YES. EJECT. IAC /------- /FORM FEED, WHETHER PROGRAMMED (214) OR A /DEFAULT EJECTION (61 LINES), INHIBITS /FURTHER FORM OR LINE FEEDS. NEITHR, TAD M162 /TOO LARGE (RBT.) ? SMA JMP RETURN /YES. IGNORE. TAD K133 /PRINTING CHAR.? SMA /NO, DON'T COUNT IT ISZ TABCTR /YES, ONE MORE TAD SPACE /RESTORE CHAR. JMS TYPE /(CLEARS FORM FLAG) CHECKL, TAD TABCTR TAD MWIDTH /MARGIN SPA CLA JMP RETURN /STILL ROOM ON LINE CRLF, JMS CR /OVERFLOW, ISSUE CR JMP LFEED /ISSUE L.F. (OR FORM) FORM, ISZ FORMFL /2 FORMS IN A ROW? SKP /NO, DO THIS ONE JMP NOFORM /YES. EXIT. JMS CR /JUST TO BE SURE TAD K214 /TRUE FORM FEED JMS TYP SPACE, NOFORM, CLA CMA DCA FORMFL /INHIBIT FORM SUBR. TAD VSIZE DCA LINCTR /RESET JMP RETURN TYP, 0 / TYPE ONLY: LTSF JMP .-1 LTLS M200, K7600, 7600 JMP I TYP TYPE, 0 / NORMAL ROUTINE: JMS TYP DCA FORMFL /ENABLE FORM & L.F. JMP I TYPE CR, 0 TAD K15 JMS TYP /FORM FLAG UNCHANGED JMS TYP /OFTEN HELPFUL WITH LS8E DCA TABCTR /CLEAR CHAR. CTR. JMP I CR RETURN, CLA CLL /GO BACK CLEAN JMP I OUTPUT K7, 7 K15, 15 K133, 133 K177, 177 K214, 214 M10, -10 M162, -162 M32, -32 RELADR= .-200 /USE WITH 'ALTER'; CF. BELOW MWIDTH, -MARGIN / CURRENTLY -80 (DECIMAL) /ABOVE CAN BE CHANGED WITH 'ALTER' COMMAND IN /BUILD. DECIMAL -120 = 7610 OCTAL. / -132 = 7574 " / - 72 = 7670 " DECIMAL VSIZE, -61 / 61 LINES BEFORE EJECTION OCTAL AUGMNT, 0 / RELOCATION CONSTANT PTR2, 0 CTR2, 0 TABCTR, 0 / CHARS. ON ONE LINE LINCTR, 7703 / LINES PER PAGE FORMFL, 0 / -1 AFTER PAGE EJECTION /POINTERS, RELATIVE & TRUE, TO PG. #1.: XEXITF, EXITF PEXITF, 0 / (GETS TRUE ADRS.) $$$$ PAS REV. 2/75 $$$$