/PRINT DM-II V2.0 PRINTER RESIDENT CODE / /239 EMcD 24-Sep-85 Dutch and Spanish Xlations (conditional) /238 EMcD 14-SEp-85 Nordic translations /237 MART 2 JUL 85 ALLOW PLWIDE TO WORK IN BOTH DIRECTIONS /236 Mart 28 Jun 85 Get rid of some LQPSE (not supported 3.0) / to make room for Tech Char Required Space /235 Mart 25 June85 change location of OLDHIT to page zero /234 mart 12 jun 85 change cross field call to prchar / and add an escape sequence to reset modes /233 Mart 5 june 85 initialise PLNRCS to 72 /232 mart 25 may 85 Change location of PUM mode flag and initialise /231 Mart 15 May 85 Allow cross field access to PRCHAR from SYS /230 MART 3 MAY 85 add PUM mode flag /229 Mart 2 may 85 cross field call to prescs and more esc seqences /228 MART 24 APR 85 OVERLAY STARTUP SECTION IN DSKHND / with 8 bit fallback code for LQPs /227 Mart 26-mar-85 Allow 8 bit output and BLASTR hook /226 rcme 18-MAR-85 Enable differentiation of LA100 and LA100PC / by VTWHO code. Also reserve hole space in / read buffer. / / ------------------------All subsequent mods to V2.0 and earlier / /225 HLP 22-JAN-85 Fix hang caused by re-entering PROV when / comm errors occur during disk reading /224 HLP 10-JAN-85 Reset PRTABF at beginning of each line /223 HLP 08-JAN-85 Fix ap bug induced when combined LSPACE / by reinstating LSPAC2 etc. /222 HLP 03-JAN-85 Combine LSPAC2 and LSPACE / Delete conversion of leading spc to tabspc / Rework PRPCHR again to handle tab spc and / non tab spc separately / Add a space preceding HPA command to / trigger underline! / Pick up attribute of leading spaces(#321) / Add variables for tab fixes / Delete NCONDOR condx & L4 support / Make BLKBOX not output nulls /221 HLP 14-DEC-84 Fix parser so DCS does not write over / everything! /220 HLP 08-DEC-84 192 Fix PCTMRS so no LQPSE /219 HLP 03-DEC-84 191 Reimplement reset printer PCTMRS /218 HLP 26-NOV-84 Fix parser so not confused by DDCHST /217 HLP 06-NOV-84 Add PNRSVL page number reset value / Fix old TW justification bug also WPSV2-361 /216 HLP 16-OCT-84 19XZ Fix indent tab bug 276 /215 HLP 12-OCT-84 Add PFS (Page Format Select) command to PRESCS / Expand mask to allow for 10 fonts / Move PRJSPC so new text processor can use TTYIN / Add PRFPFS PFS flag /214 HLP 24-SEP-84 19W Fix range check fix / LN03 Driver integration /213 HLP 18-SEP-84 19V Range Limit Error Codes / PLCHBS was not detecting BS correctly /212 HLP 28-AUG-84 Add RULRCM, RULRLM, RULRRM for centering /211 HLP 16-AUG-84 Changes for LN03 driver /209 HLP 02-AUG-84 Fix ppnl tabs LQP02 /208 HLP 25-JUL-84 Changes for sixel graphics print controls /207 HLP 24-JUL-84 Fix DD CHST blank line problem /206 HLP 20-JUL-84 Change PLCHBS for tech characters /205 LJJ 13-JUL-84 Fixes for \d\p\s expansion/contraction bug /204 HLP 05-JUL-84 Move PLSPCX and PLREST from resident to overlay /203 HLP 09-JUL-84 Delete PRQPMU /202 HLP 06-JUL-84 Technical character justification fix PLCHBS /201 HLP 02-JUL-84 Change AND P177 to AND (2177 in ESCST / 29-JUN-84 Change IDANSW philosophy /200 HLP 18-JUN-84 Add escape seqs for technical chrs /199 LJJ 14-JUN-84 Delete PRYEAR and PRMTDY (new \d method) /198 HLP 13-JUN-84 Increase multicolumns from 10 to 20 /197 HLP 12-JUN-84 Save 10 locations in BLKBOX /196 HLP 10-JUN-84 Make ASCOUT add 4000 bit /195 HLP 08-JUN-84 Add escape seq for absolute col posn PCCOLA / Add PRQPMU variable for print margin units /194 HLP 31-MAY-84 Move PRJL5A to overlay / Fix vertical motion to LQPSE broken on 189 /193 HLP 30-MAY-84 Add code for required space / Add escape sequence to set quality mode / Move CSTRNG, reenable L4 for DECmate-I / Bugfix calling OBJUSL on LQPs (critical hang) /192 HLP 29-MAY-84 Recognize LN03 as an LA100 /191 HLP 25-MAY-84 Fix problem clearing VSTACK; multiple errors / (cover,pause,ribbon caused program hlt) /190 HLP 15-MAY-84 More changes for DD HOST1 /189 HLP 14-MAY-84 Initial Changes for adding DD HOST1 /188 HLP 11-MAY-84 F and N rulers, EX in print menu DP changes / ESMVV vertical move routine used by ALL printers /187 HLP 10-MAY-84 Change XXSTGN names to match G0 and G1 properly /186 HLP 30-APR-84 Restructure justificationn overlays / Eliminate thrashing when DD HOST /185 HLP 25-APR-84 Change end of document scheme to / detect LQP02 done with D2XONF / ... delete SNDCHR routine--ADD PCTMID / FOUND BUG near VMALF--MISSING CDF / would clobber 11600,11601 if / LQP02 reported error 21,23, or 29 /184 HLP 24-APR-84 Free up HS2IN /183 HLP 20-APR-84 Changes for RDFIO to use PRQRX / Concatenate R2FILP to this module /182 HLP 16-APR-84 Fixups due to common QBLK / Add British-US date flag PRDTFG /181 HLP 13-APR-84 Move document header storage to R2FILP /180 HLP 10-APR-84 Add JEXIT code so print field can be used by other jobs /179 HLP 05-APR-84 Replace RPSTX by STSTTS in all places /178 HLP 28-MAR-84 Do not include overlay areas in binary /177 HLP 27-MAR-84 Fix bold interpretation initialization bug /176 HLP 14-MAR-84 Move justification variables to page zero / Add comments about system initialization code / moved to overlay area (runs at boot time) /175 HLP 09-MAR-84 Move TSTFUL to WPSYS /------------------SDC Submission DECmate-II V1.5---------------------- /174 HLP 29-FEB-84 Change LPIND to function only for LA50 / Use GDH's new TSTFUL etc. / Fix extra CSI in table select esc seq /173 HLP 10-FEB-84 Add label MISCT1 for R2FILP / Add table select escape sequence PCTABL / Make PCDPIT and PCTABL work if printing inh'd / Delete L4 functions in FLABUZ for space rsns DM-I /172 HLP 05-FEB-84 Change LPONLN for 13;2 and 13;3 to ASF01 /171 WCE 16-JAN-84 Rework FLASH-BUZZ to correct status line bug /170 HLP 16-JAN-84 Rework get character routines for better / processing of controls /169 HLP 11-JAN-84 Generalize ID code logic so use secondary / attributes only where we need more info /168 HLP 04-JAN-84 Fix ASF detection for LQPSE (DECII-156) /167 HLP 27-DEC-83 Call PRSTUP in PRESET (ref DECII-121) / Modify STSTTS not to report duplicate errors / Delete PFLASH and PBUZZ and refs /166 HLP 20-DEC-83 Move overlay area to beginning of printer so can / save 3 blocks on system disk /165 HLP 16-DEC-83 Save some space in PRESCS so can make PROV / detect illegal returns / Modify PRESCS not to send certain escape / sequences to LQPSE /164 HLP 13-DEC-83 Modify ESC02 again so only CHRSET and FONT / esc seqs go out when printing inhibited /163 HLP 08-DEC-83 Detect EOF within Control block indicating / missing end print control /162 HLP 06-DEC-83 Allow ESC02 to work if printing inhibited / Make PROV more general / Add PTSTST to test for user stop /161 HLP 22-NOV-83 Fix DD HOST hang caused in edit 158 /160 HLP 21-NOV-83 Allow String Finals for CHRSET /159 HLP 21-NOV-83 Make LPIND work for DD=HOST /158 HLP 17-NOV-83 Move all overlays to WPRTOV module / Send no escape seqs to HOST /157 HLP 14-NOV-83 Move READCH to R2FILP /156 HLP 11-NOV-83 Reorganize FLABUZ /155 HLP 04-NOV-83 Patch PRRSST to disable status report request /154 HLP 01-NOV-83 Bugfix FONT selection in LPBI /153 HLP 29-OCT-83 Bugfixes: / Restore prefetch of next chr at top of page / necessary for proper function of RESET in / To/From / LA34 PM bug / LQP02 OLC overlay loading problem / DP overlay thrashing fixed /152 HLP 22-OCT-83 Installing Bold Interpretation code into / LPLINE code /151 HLP 21-OCT-83 Add escape sequences for G1 and G2 /150 HLP 12-OCT-83 Put Overlay Areas on Block Boundaries / so we can soon save 3 blocks on disk / Add PRBIF etc. to page zero /149 HLP 09-OCT-83 Fix Draft Printer Overlay load /148 HLP 04-OCT-83 Fix Adjacent super/sub in justified text bug /147 HLP 29-SEP-83 Fix DECII-7; enable extended reports / after any visit to printer stop code /146 HLP 28-SEP-83 Fix DECII-9 LQPSE not working / LQPSE replacement chr routine not loaded when called / Make another OLC overlay for LQPSE /145 HLP 17-AUG-83 Reword ESC02 routines /144 HLP 11-AUG-83 Changed order of processing so SE stop / processing takes place before reading anything /143 HLP 23-JUN-83 Restructure overlays so there can be / up to 16 overlay areas and / up to 256 overlays which can load into given area / Delete loading of printer handler--serial / handler always resident in WPSYS, loaded / at boot time / General cleanup /142 WCE 17-AUG-83 Delete redefinition of "RXE??" handler commands /141 WCE 17-AUG-83 Reworte FLABUZ for better use of IOA calls /140 HLP 10-AUG-83 Modify PRTRID so if call with AC=0002 we / check doc dest and set quality mode on / LA50/LA100 /139 HLP 02-AUG-83 Add ID for LQP02 emulating printer /135 HLP 22-JUN-83 Fix induced bug where pause became sheet feeder error /134 HLP 21-JUN-83 Further fix Bug #140 so won't print on platen /133 HLP 17-JUN-83 Fix bug in FLABUZ TIME routine which / was causing excessive system overhead, / slowing down to/from and possibly having / other effects /132 HLP 10-JUN-83 Make SQPINP ignore pause if there are / other errors in the same report /131 HLP 07-JUN-83 Add IDANSW flag /130 HLP 06-JUN-83 LQPSE ASF error sets PRSTOP /129 HLP 26-MAY-83 Delete old FLABUZ routine, deconditionalize / new FLABUZ routine on NEWFLABUZ /128 HLP 25-MAY-83 Delete MAXMOV and simplify PRMOVE routine /127 HLP 23-MAY-83 Spooler to reset status if comm error / Comm error to stop printer /126 HLP 12-MAY-83 Improve processing of the CANCEL chr (SQPINP) / Change communications error to code 26 in VERRTB /125 HLP 10-MAY-83 Delete superfluous RABORT routine / Fix PRSTUP routine (missing CLA) /124 GDH 03-MAY-83 Corrected TSTFUL HOST INPUT BUFFER size reference /123 HLP 29-APR-83 Fix justification on draft printers /122 HLP 28-APR-83 Make PRRSST resident / PRRSST resets to 1 if something in queue, else 0 / Reorganize PRSTTS and PRSTT2, and their / setting and resetting. See comments at PRSTTS / Delete WS102 conditionals /121 HLP 14-APR-83 Move UNDERL to resident so PCBOLD call near / DONCL1 in overlay will work / (if a variable is referenced in more than / one overlay it should not be in an overlay) / Add PCSTAT status report command for LQPSE /120 HLP 08-APR-83 Make NEWFLABUZ routine light L4 on CONDOR, / display printer status messages once/second /119 HLP 04-APR-83 Moved STSTTS to be in parser section / Added AND P177 to SQPINP for LA120, LA34 /118 HLP 01-APR-83 Fix new parser LQPSE status reports /117 HLP 26-MAR-83 Fix draft printer dead key seq underline bug /116 HLP 13-MAR-83 Speed up TW printing /115 HLP 04-MAR-83 Rewrite to report all disk errors /114 HLP 25-FEB-83 Rewrite printer parser /113 HLP 15-FEB-83 Rework to incorporate printer parser / and LPONLN (deleting PRASF and IDFLAG) /112 HLP 14-FEB-83 Conditionalize FLABUZ on NEWFLABUZ (was CONDOR) /111 HLP 24-JAN-83 Change LQP02 right margin from 158 to 330 rel units /110 HLP 14-JAN-83 Fix FLABUZ to display once in editor (it used to) /-------------19-JAN-83-------SDC SUBMISSTION DECmate-II V1.0.0 thru rev 109 /109 HLP 28-DEC-82 Move IDSTTM near PRTRID, etc. /108 HLP 14-DEC-82 Move PRSTT2 to PRSTTS+1 (see also WPF1.058) /107 HLP 07-DEC-82 Add IDTMC timout compare variable on page 0 /106 HLP 28-NOV-82 Change sheet feeder error code to 24 for LQPSE only /105 HLP 18-NOV-82 Fix for AP-no giving extra pages at end of doc /104 HLP 15-NOV-82 Add PRSTT3 to page zero /103 HLP 12-NOV-82 Change to a calculated slack constant / (LQP02 ignores rollbacks beyond top of page) /102 HLP 15-OCT-82 Move DCA PREVST and hold interrupts in FLABUZ / (Occasionally messages not seen or not cleared) /101 HLP 13-OCT-82 Put PRACTS on page zero so can use in mult ovs /100 GDH 11-OCT-82 Changed FLABUZ to display only once per second. /099 HLP 22-SEP-82 Fixed LQP02 super/subsrcipts at end of lines /D169 DELETED PREVIOUS EDIT HISTORY (PRIOR TO HLP) /THESE ARE SOME OF THE PRINTER TYPES /A143 LA12=DPMSK /A143 LA34=DPMSK+03 /C169 LA50=DPMSK+MCMSK+XRPMSK+MNMSK+1 /m226 /C188 LA100=DPMSK+MCMSK+XRPMSK+2 /m226 LN03=DPMSK+MCMSK+XRPMSK+MNMSK /m226 /A214 LQP03=LQP02+MNMSK /a226 LA120=DPMSK+MCMSK /A188 /THESE ARE COMMONLY USED CHARACTERS. BS=10 /BACKSPACE TAB=11 /TAB LF=12 /LINE FEED HLF=2412 /HYPHENATED LINE FEED SRET=2012 /SOFT RETURN /A143 GNL=55 /SIXEL GRAPHICS NEW LINE CODE /A208 FF=14 /FORM FEED BPC=1014 /BEGIN PRINT CONTROL EPC=1414 /END PRINT CONTROL PM=2014 /PAGE MARKER CR=15 /CARRIAGE RETURN AND END DEAD KEY SEQUENCE SO=16 /SHIFT OUT ASCII CODE /A152 SI=17 /SHIFT IN ASCII CODE /A200 RSTRT=16 /RULER START REND=17 /RULER END ESC=33 /ESCAPE SPC=40 /SPACE TSPC=2040 /TAB SPACE RQSP=177 /REQUIRED SPACE (USED BY PRINTER ONLY) /A193 BSLH=134 /BACK SLASH UNDL=137 /UNDERLINE /THESE ARE THE TERMINATORS OF THE ESCAPE SEQUENCES USED BY THE PRINTER. NLQPSE=4000 /IF THIS CODE IS SET NO OUTPUT WILL OCCUR TO THE LQPSE /A165 /FOR THIS SEQUENCE /A165 PCSTAT="0&177 /LQPSE REQUEST STATUS--OTHERS ENABLE REPORTS & SEND STATUS/A121 PCSTG0="1&177+NLQPSE /ENABLE G0 /C165 PCSTG1="2&177+NLQPSE /ENABLE G1 /C165 PCSTFN="3&177+NLQPSE /ENABLE FONTS (ACTUALLY ANY ATTRIBUTE) /A151 /C165 PCDPIT="4&177+NLQPSE /DRAFT PRINTER PITCH /A151 /C165 PCTABL="5&177 /LQP02 TABLE SELECT /A173 / NOTE: THE FOLLOWING 2 CODES ARE IDENTICAL BUT HAVE DIFFERENT /A195 / USES AS EXPLAINED IN THE COMMENTS /A195 PCREST="6&177 /LQPSE RESTORE PCTMRS="6&177+NLQPSE /RESET PRINTER /C219 PCTMID="7&177 /REQUEST TERMINAL IDENTIFICATION /A185 PCCOLA="8&177 /NOT LQPSE--COLUMN POSITION ABSOLUTE PCMPUP="9&177 /TRANSMIT BUT DO NOT FORCE VERTICAL MOTION PCSQM=":&177+NLQPSE /SET QUALITY MODE (ONLY FROM OVLAY WITH XSTQM) /A193 PCMRT=";&177 /TRANSMIT BUT DO NOT FORCE HORIZONTAL MOTION PCSS=74&177+NLQPSE /SEND SS2 OR SS3 /A200 PCPROP=75 /ENABLE PROPORTIONAL PRINTING (LQP02 ONLY) /A040 PCMFV=">&177 /FORCE ACCUMULATED VERTICAL MOTION PCSUB1="?&177 /USE PRINT POSITION 177--THE FIRST SUBSTITUTE CHARACTER PCSUB2="@&177 /USE PRINT POSITION 40--THE SECOND SUBSTITUTE CHARACTER PCCSIZ="A&177 /SET CHARACTER SIZE PCSPUM="B&177 /SET PUM MODE PCRPUM="C&177 /RESET PUM MODE PCBOLD="D&177 /SET HIT COUNT PCIND="E&177 /SET INDENTATION PCWSIZ="F&177 /SET SPACE SIZE PCPLU="G&177 /HALF LINE REVERSE /A193 PCPSIZ="H&177 /SET PAGE SIZE PCPLD="I&177 /HALF LINE FORWARD /A193 PCTRAY="J&177 /SELECT TRAY FOR CUT SHEET FEEDER PCTCSI="K&177+NLQPSE /TECHNICAL CHARACTER SET INIT /A200 PCGR="L&177+NLQPSE /BEGIN SIXEL GRAPHICS /A208 PCGREX="M&177+NLQPSE /EXIT SIXEL GRAPHICS /A208 PCSGR="N&177 /SELECT GRAPHICS RENDITION (BOLD, UNDERLINE, FONT)/A211 /MUST *** NOT *** HAVE NLQPSE ATTRIBUTE AS IS /A211 /SOMETIMES EXECUTED AS A HARMLESS AND INSTRUCTION/A211 PCPFS="O&177 /PAGE FORMAT SELECT /A215 PCIVPR="P&177 /increment vertical position relative /a230 PCDVPR="Q&177 /decrement vertical position relative /a230 PCIHPR="R&177 /increment horizontal position relative /a230 PCDHPR="S&177 /decrement horizontal position relative /a230 PCRSET="T&177 /reset MODES /a234 /THESE ARE FREQUENTLY USED CONSTANTS PRMSLK=60 /THE MAXIMUM AMOUNT TO MOVE WHEN GOING IN A REVERSE DIRECTION TO /CORRECT SLACK IN PAPER. USED IN SUPER SCRIPT AND MULTI COLUMN /D128 DELETE MAXMOV SINCE IT IS A REMNANT FROM THE PARALLEL INTERFACE PRNLSZ=10 /NORMAL LINE SIZE (1/6 INCH) PRNHL=4 /NORMAL HALF LINE SIZE (1/12) INCH /THESE ARE THE CIF AND CDF INSTRUCTIONS USED IN THE CODE. CIFMYF=CIFPRT /CHANGE INSTRUCTION FIELD TO THIS FIELD CDFMYF=CDFPRT /CHANGE DATA FIELD TO THIS FIELD CDFQUE=CDFMNU /QUEUE FIELD IS FIELD 2 /A069 FIELD 0 /THIS IS THE PRINTER JOB CONTROL BLOCK. *PRJOB 0 CDFPRT&70^2 0 FLD3R /PRINTER JOB STARTS HERE (ONCE ONLY CODE) 0 FIELD CDFPRT&70%10 /CHOOSE THE PROPER FIELD /VALUES ON PAGE ZERO ARE INITIALIZED BY ONCE ONLY CODE NEAR FLD3R /A166 /THEY ARE *** NOT *** WRITTEN OUT /A166 /******************************************************************** / / THE FOLLOWING LOCATIONS ARE THE LOCATIONS ON THE LOWER HALF / OF PAGE ZERO THAT THE PRINTER CODE DOES NOT USE. WE NOW / REV176 BEGIN TO USE THEM / * 0 GRALNC, 0 / NUMBER OF GRAPHIC NEW LINES ENCOUNTERED * 1 PRFPFS, 0 / PFS SELECTION FLAG /A215 * 2 PNRSVL, 0 / PAGE NUMBER RESET VALUE /A217 * 3 * 4 * 5 * 6 * 7 / TTYIN IS CLOBBERED BY NEW TEXT PROCESSOR /A215 * XLTIN&177 PRJPOS, 0 / THE NUMBER OF JUSTIFIABLE INTER POSITION SPACES * HLTFLG&177 PRJSPC, 0 / THE NUMBER OF JUSTIFIABLE SPACES * UDKOPS&177 PRLBCT, 0 / USED TO SAVE PLCNT THROUGH VARIOUS PASSES * DEQUE&177 PRRCH, 0 / THE VALUE IN PRINT UNITS OF THE RIGHT END OF LINE * FRKINT&177 PLPFLG, 0 / ZERO IFF PROPORTIONAL PRINTING IN EFFECT * FRKXIT&177 PLPS, 0 / THE NUMBER OF EXTRA PRINT UNITS TO ADD TO EACH / JUSTIFIABLE SPACE * FRKCHN&177 PLSS, 0 / THE NUMBER OF EXTRA PRINT UNITS TO ADD TO EACH / JUSTIFIABLE INTERPOSITION SPACE * 44 PLBOLD, 0 / SET TO 400 IF SP YES AND PROPORTONAL PRINTING LQP02 * 45 PRJRET, 0 / THE TYPE OF RETURN IN THE LINE--ZERO IF HARD RET, / NON ZERO IF SOFT (WORD WRAPPED) * 46 RULRCM, 0 /COLUMN OF A CENTERING MARK IN A RULER /A210 * 47 RULRLM, 0 /COLUMN OF AN F,L,N, OR D IN RULER (LEFT MARGIN) /A212 * PRPUMM PRPUMM, 0 / the PUM mode flag /a230 * 51 OLDHIT, 0 / oldhit flag for LQP's /a235 * 52 * 53 * 54 * 55 * 56 * 57 * 60 RULRRM, 0 /COLUMN OF AN R OR J IN RULER (RIGHT MARGIN) /A212 * MNUCAL&177 PRMCMG, 0 /COLUMN OF MULTICOLUMN MARGIN /A212 * MUBASE&177 PRJENB, 0 / COUNT ENABLE FLAG--IS SET UNTIL THE RIGHTMOST TAB / IS FOUND, WHEREUPON IT IS CLEARED / ALSO DOUBLES AS THE DEFICIENCY VARIABLE USED IN / JUSTIFICATION AND IN THE DIVISION ROUTINE * TIMCAL&177 * OLAYCL&177 * FILEIO&177 / IOACAL IS DONE BY FLABUZ * INACAL * NXACAL * STCCAL * CVDCAL * DIGCAL * PGSWAP&177 *PRSTOP PRSTOP, 0 /THE STOP FLAG PRACTN, 0 /THE USER SUPPLIED STOP ACTION PRACTV, 0 /THE ARGUMENT ASSOCIATED WITH THE STOP ACTION /***********************************************************************/ / / PRSTTS, 0 /THE CURRENT PRINTER STATUS / / THIS LOCATION IS SET AS FOLLOWS: / / 1. IF 0000 IT MAY BE SET TO 0001 (BUSY)(GETDC) / / 2. IF 0000 OR 0001 IT MAY BE SET TO AN ERROR CODE (PRSTUP) / / 3. IF AN ERROR DECLARED BY THE SPOOLER IT MAY BE RESET / / TO 0000 (IF QUEUE IS EMPTY) ELSE 0001 (PRRSST) / / 4. IF AN ERROR FROM PRINTER THEN IT MAY BE RESET IF THE / / PRINTER REPORTS NO ERROR ANYMORE (PRESET) / / / /***********************************************************************/ / / PRSTT2, 0 /SECOND PRINTER ERROR STATUS CODE / / THIS LOCATION IS SET AND CLEARED AS FOLLOWS: / / 1. IF 0000 IT MAY BE SET TO AN ERROR CODE (STSTTS) / / 2. RESET TO 0000 WHEN ROLLUP OCCURS (PRSTUP) / / 3. RESET TO 0000 OR 0001 IF PRINTER REPORTS NO ERROR / / / /***********************************************************************/ PRFNO, 0 /THE FILE NUMBER OF THE PRINTER JOB PRIRFD, 0 /THE FIELD TO READ FROM IN LIST PROCESSING PRIRAD, 0 /THE ROUTINE TO USE IN READING IN LIST PROCESSING PABORT, 0 /THE ABORT FLAG LPONLN, 0 / IDENTIFIES TYPE OF PRINTER, FEEDER, ETC /A113 PRTID, 0 /PRINTER ID ROUTINE ENTRY POINT /A054 /THIS LOCATION IS INITIALIZED BY ONCE ONLY CODE /A166 /TO CONTAIN PRTRID /A166 /THESE ARE COMMONLY USED GLOBAL VARIABLES. PREST1, 0 / TEMPORARY USED BY PRESCS / PROVT1, 0 / TEMPORARY USED BY PROV AND PRESCS PROVT2, 0 / TEMPORARY USED BY PROV AND PRESCS RDCHAR, 0 /THE LINK TO THE READ ROUTINE WHICH SHOULD BE USED. THE /POSSIBILITIES ARE THE FILE READER (FOR NON-LIST PROCESSING), /THE EDITOR READER (FOR LIST PROCESSING WITHOUT HEADERS OR /FOOTERS), AND THE DISK BUFFER READER (FOR LIST PROCESSING /HEADERS AND FOOTERS). THE VALUE IS ZEROED WHEN THE END OF /THE FILE BEING READ IS FOUND. PRRM, 0 /RIGHT MARGIN POSITION SPECIFIED BY RULER IF JUSTIFICATION IS /IN EFFECT; OTHERWISE, IS ZERO PRGCBK, 0 /BACKUP LOCATION FOR THE GET CHARACTER ROUTINE PRCCH, 0 /POSITION WHERE PRINT HEAD WILL STOP AFTER LINE PLNRCS, 12 /NUMBER OF PRINT UNITS PER CHARACTER /a233 / initialised by once only code /a233 PRGSVP, 0 /VERTICAL POSITION ON PAGE RELATIVE TO THE TOP PRGSAP, 0 /ABSOLUTE VERTICAL POSITION ON PAGE RELATIVE TO TOP OF /PHYSICAL PAGE. PRGSVP AND PRGSAP DIFFER ONLY WHEN THE USER /STOPS PRINTING, DOES A NEW PAGE, AND CONTINUES. EVEN THEN, /THEY ONLY DIFFER UNTIL THE NEXT PAGE IS STARTED. PRGSMX, 0 /MAXIMUM VERTICAL POSITION FOR CURRENT TYPE OF PRINTING PRRLSZ, 0 /SIZE OF THE LINE AS DEFINED BY THE RULER PRLLSZ, 0 /SIZE OF THE LINE AS DEFINED BY RULER PLUS EXTRA SPACING /SET BY PRINT MENU; TRUNCATED TO NEAREST WHOLE LINE IF /PRINTING TO DRAFT PRINTER. THE EXTRA SPACING IS NOT /ADDED IF A HEADER OR FOOTER IS BEING PRINTED. PRSCNM, 0 /SECTION NUMBER PRPGNM, 0 /PAGE NUMBER PRPCNT, 0 /PAGE COUNT--IS NOT SUBJECT TO BEING RESET PRRSRT, 0 /THE RESTART PAGE COUNT--USED WHEN INSTRUCTED TO GO BACK N /PAGES AND RESTART PRYES, 0 /PRINT INHIBIT (0=PRINT ENABLED, NON-ZERO=PRINT DISABLED) PRSTNX, 0 /STOP AFTER NEXT DONE FLAG PLPTR, 0 /POINTER INTO THE LINE BUFFER PLCNT, 0 /COUNTER OF CHARACTERS IN THE BUFFER PLDIR, 0 /THE DIRECTION OF PRINTING MOTION PLPOS, 0 /THE SIZE OF THE POSITION CURRENTLY BEING PRINTED PRFLAG, 0 /HEADER (POSITIVE)/FOOTER (NEGATIVE)/TEXT (ZERO) FLAG PRMCLM, 0 /LEFT MARGIN OF THE COLUMN IN PRINT UNITS PRMCTM, 0 /TOP MARGIN OF THE COLUMN IN VERTICAL PRINT UNITS PRMCBM, 0 /BOTTOM MARGIN OF THE COLUMN IN VERTICAL PRINT UNITS PRMCPC, 0 /NUMBER OF THE COLUMN PRESENTLY PRINTING PRMCLL, 0 /MAXIMUM VALUE WHICH RULRRM ATTAINS IN A GIVEN COLUMN; I.E., /THE LONGEST LINE IN A COLUMN PRMCRF, 0 /THE MULTI-COLUMN REQUEST FLAG PRHSIZ, 0 /VERTICAL SPACE OCCUPIED BY HEADER; ZERO IF NO HEADER PRFSIZ, 0 /VERTICAL SPACE OCCUPIED BY FOOTER; ZERO IF NO FOOTER LPFLAG, 0 /NON-ZERO IF LIST PROCESSING IS IN PROGRESS, ZERO OTHERWISE PRPASS, 0 /The pass number PLASPC, 0 / ACCUMULATED HORIZONTAL MOTION /M039 PLOLNC, 0 /HORIZONTAL SPACING LAST CHARACTER /M039 PRJDEF, 0 / USABLE BY LQPSE AND LQP02 /M067 PRACTS, 0 / SAVED STOP ACTION /A101 PRSTT3, 0 / SAVED PRSTTS WHEN DISPATCH THROUGH STOP OVERLAY /A104 PLWMUL, 0 / proportional printing multinational char flag /a227 IDTMC, 0 / VALUE TO COMPARE TIMOUT AGAINST /A107 PRTMOV, 0 /THE TOTAL MOTION WHICH HAS BEEN TRANSMITTED TO THE HANDLER /BUT NOT YET FORCED. IT IS CLEARED EACH TIME PRTMOV /IS INVOKED TO FORCE THE MOTION. VPTR, 0 /A POINTER USED BY THE PARSER /A114 NUMPTR, 0 /A POINTER USED BY CSISTR PRBIF, 0 /BOLD INTERPRETATION FLAG /A150 PRBIFN, 0 /FONT FINAL FOR NONBOLDED TEXT /A150 PRBIFB, 0 /FONT FINAL FOR BOLDED TEXT /A150 PRDTFG, 0 /US (ZERO) BRITISH (NONZERO) DATE FLAG /A182 EXPCNT, 0 / COUNT OF EXPANSION WHEN PROCESSING BACKSLASH STUFF /A205 BSLCNT, 0 / COUNT OF BACKSLASHES IN HEADER/FOOTER LINE /A205 SOFTPT, 0 / POSITION OF RIGHTMOST SOFT SPACE IN BUFFER /A205 XSADX, 0 / POINTER USED BY ESCST ROUTINE MNCFLG, 0 / print a multinational char next if -1 /a227 PAGE /***********************************************************************/ / / / OVERLAY AREAS / / THE OVERLAY AREAS AND PAGE ZERO ARE DESIGNED SO THAT / / THEY NEED NOT BE WRITTEN OUT, THUS SAVING SOME / / BLOCKS ON THE SYSTEM DISK. SEE DSKHND AND WP2CMF / / IF OVERLAYS ARE EXPANDED / PROVA, *PROVA+1400 /A178 /***********************************************************************/ / / / /A176 NOTE NOTE NOTE NOTE NOTE NOTE A176 / / / / Some system initialization code resides in field one at boot / time in this overlay area. That code is assembled with WPSYSA, / but resides here. The writeout code in WP2CMF and the read in / table in DSKHND specify that this initialization code get / loaded as though it were contiguous with the WPRINT resident / code. / / See label PRBOTM defined in WPF1 which defines the bottom / of the printer field writeout/read-in code X=PRBOTM /PRINTS VALUE OF PRBOTM IN LISTING /THIS IS THE RESIDENT ENTRY FOR THE TOP OF PAGE PROCESSING ROUTINE. IT /MUST BE RESIDENT BECAUSE THE CALL TO PRGCHR CAN SOMETIMES REQUIRE THE /USE OF BOTH OVERLAY AREAS. THIS ONE CHARACTER LOOK-AHEAD IS PERFORMED SO /THAT ANY HEADER DEFINITIONS WHICH ARE AT THE BEGINNING OF THE PAGE CAN BE /FOUND. THE CHARACTER IS SAVED, AND THE OVERLAY CODE WHICH HANDLES THE TOP /OF THE PAGE IS PROCESSED. AS WITH ANY FORMATTING ROUTINE, THE EVENTUAL /RETURN IS TO PRGSL1 IN THE SPACING ROUTINE. /NOTE THAT THIS POINT IS THE ENTRY INTO THE COPY INITIALIZATION SECTION INTO /THE COPY PRINTING SECTION. THUS, THE BASIC PRINTING LOOP IS ENTERED FROM /THE OUTSIDE VIA THE RETURN FROM THE SPACING ROUTINE--WHICH JUMPS TO PRLOOP. /DURING DEVELOPMENT OF PRINTER SEND (SENDING ESCAPE SEQUENCES TO PRINTER) / IT WAS FOUND THAT IT MAY NOT BE DESIREABLE NOT TO DO ALL OF THE THINGS / THAT TAKE PLACE AT THE TOP OF THE PAGE, BEFORE PROCESSING ESCAPE SEQUENCES. / FOR INSTANCE, THE HEADER FUNCTIONS OCCURRED / BEFORE ANY ESCAPE SEQUENCES THAT WERE TO BE TRANSMITTED. THIS IS BECAUSE / THERE IS NO WAY TO BE ABLE TO INSERT CONTROLS BOTH AT THE TOP OF THE / PAGE AND THE TOP OF THE HEADER. THE LOOKAHEAD GUARANTEES THAT THE CONTROLS / WILL BE PROCESSED BEFORE ANY TOP OF PAGE PROCESSING. THIS IS NECESSARY FOR / THE PROPER OPERATION OF RESET. PRTOPP, JMS PRGCHR /GET THE NEXT CHARACTER DCA PRGCBK /AND SAVE IT IN THE BACKUP BUFFER TAD (OVTOPP) /INVOKE THE TOP OF PAGE PROCESSING OVERLAY JMS PROV OBTOPP PREOF, 0 / SET TO 1 WHEN E-O-F IS SEEN. BOTP LOOKS AT THIS/A096 /THIS IS THE BASIC LOOP WHICH DOES THE PRINTING. THERE ARE TWO WAYS /TO LEAVE THE LOOP: 1) THE USER STOPS THE PRINTING, AND 2) THE SPACING /ROUTINE FINDS THE END OF THE DOCUMENT. /WHEN EVERYTHING IS INITIALIZED FOR A COPY, THE COPY INITIALIZATION /SECTION INVOKES THE TOP OF PAGE FORMATTING ROUTINE, WHICH RETURNS VIA /THE SPACING ROUTINE TO PRLOOP. THIS EFFECTIVELY TRANSFERS CONTROL TO /THE LOOP. PRLOOP, /IF THE STOP FLAG IS SET, THE STOP OVERLAY IS INVOKED. WHEN THE STOP /OVERLAY COMPLETES, CONTROL RETURNS TO PRLOOP IF PRINTING IS TO CONTINUE. /OTHERWISE, CONTROL REMAINS ELSEWHERE AND THE LOOP IS TERMINATED. TAD PRSTOP /TIME TO STOP? SZA CLA JMP PRLOO1 /YES--INVOKE STOP OVERLAY TAD PRMCLL / IF NO COLUMN WIDTH YET SET TO CURRENT RULER. /A091 SZA CLA / SKIP IF NO MAX COL WIDTH YET. /A091 JMP PRLO1A / JMP BECAUSE THERE IS A COLUMN WIDTH. /A091 TAD RULRRM / GET CURRENT RULER WIDTH. /A091 DCA PRMCLL / AND SET MAX COL WIDTH TO IT. /A091 PRLO1A, /A091 /PRGTLN READS A LINE FROM THE FILE AND PUTS INTO THE PRINT BUFFER. IT /QUITS READING WHEN IT ENCOUNTERS AN EOL CHARACTER. DCA BSLCNT / CLEAR COUNTERS FOR HEADER/FOOTER /A205 DCA EXPCNT / PROCESSING OF BACKSLASHES /A205 DCA SOFTPT /A205 JMS PRGTLN TAD SOFTPT / GET POINTER TO LAST SOFT SPACE /A205 SZA CLA / IF THERE ARE NO SOFT SPACES... /A205 TAD BSLCNT / GET BACKSLASH CHARACTER COUNTER /A205 SNA / IF THERE WERE NONE... /A205 JMP PRINHB / ...WE DON'T NEED TO DO ANYTHING /A205 CIA / MAKE NEGATIVE FOR COMPARE /A205 TAD EXPCNT / ADD IN EXPANSION COUNT /A205 SNA / IF NO BIGGER THAN AT FIRST... /A205 JMP PRINHB / ...THEN DO NOTHING /A205 DCA EXPCNT / ELSE SAVE ADJUSTED VALUE /A205 JMS PROV / LOAD OVERLAY /A205 OBCLUP /A205 JMS PRCLUP / GO CLEAN UP /A205 /THE PRINT LINE ROUTINE JUSTIFIES (IF NECESSARY) AND PRINTS THE LINE. IT /RETURNS TO ONE OF THE TWO ENTRY POINTS INTO THE SPACING ROUTINE, DEPENDING /ON WHETHER IT HAS PRINTED ANYTHING OR NOT. IF PRYES IS SET TO INHIBIT /PRINTING, THERE IS NO REASON TO INVOKE THE PRINT OVERLAY AND THE SPACING /ROUTINE IS INVOKED DIRECTLY. THE SPACING ROUTINE RETURNS TO PRLOOP TO /CONTINUE THE LOOP, UNLESS THE END OF THE FILE IS FOUND, IN WHICH CASE IT /INVOKES THE END OF COPY OVERLAY. PRINHB, TAD PRYES /GET THE PRINT INHIBIT FLAG /C205 SZA CLA JMP PRGSL1 /GO DIRECTLY TO SPACING ROUTINE / DETERMINE WHETHER WE ARE PRINTING TO AN LQP OR A DP/HOST /C186 / CALL THE APPROPRIATE JUSTIFICATION OVERLAY /A186 JMS SKIPIF / /A186 LQPMSK / /A186 JMP PRLLDP / GO SEE IF LN03 OR NOT /A214 TAD (OVJUSL / LQP, LOAD OVJUSL /A186 JMS PROV / /A186 OBJUSL / /C193 PRLLDP, / LN03, DP, OR HOST /A214 JMS SKIPIF / SEE IF LN03 /A214 LN03 / /A214 JMP PRLOPD / NO, DP OR HOST /A214 TAD (OVLN3A / IS LN03, DISPATCH TO OVERLAY /A214 JMS PROV / /A214 OBLN3A / /A214 PRLOPD, TAD (OVJUSD / DP OR HOST /A186 JMS PROV / /A186 OBJUSD / /A186 PRLOO1, TAD (OVSTP2) /INVOKE THE STOP OVERLAY JMS PROV OBSTP2 /***********************************************************************/ / / / PROV----OVERLAY LOADER / / LOADS OVERLAYS INTO ONE OF THREE OVERLAY AREAS / / EACH OVERLAY IS ONE BLOCK (256 LOCS) IN SIZE / / THE LOCATION FOLLOWING THE JMS PROV / / CONTAINS A VALUE, FOUR BITS OF WHICH DESIGNATE / / WHERE THE OVERLAY IS TO RESIDE, AND 8 BITS OF / / WHICH DESIGNATE THE OVERLAY NUMBER OVNUM / / / / CALLING SEQUENCE: / / TAD (OVENTR /ADDRESS OFFSET / / JMS PROV / / OBENTR /BLOCK OFFSET AND TYPE / / / / IF THE ADDRESS OFFSET IS ZERO (PROV CALLED WITH CLEAR AC)/A162 / / THEN THE OVERLAY IS LOADED BUT CONTROL IS RETURNED /A162 / / INLINE. IN THIS MANNER WE HAVE AN OVERLAY LOAD /A162 / / WITHOUT A CORRESPONDING JUMP TO THAT OVERLAY /A162 / / THIS CAN BE USED TO LOAD AN OVERLAY THAT CONTAINS ONLY TABLES / / OR TO MAKE SURE AN OVERLAY IS LOADED WHEN WE WANT TO CALL / / / / A SUBROUTINE IN A **** DIFFERENT **** !!!! OVTYPE OVERLAY, CF: / / CLA / / JMS PROV / / OBXYZQ /BLOCK # OF OV OF SUB / / JMS SUB / / / / IF THE LOADED OVERLAY IS OF THE SAME TYPE AS THE OVERLAY/A165 / / THAT CALLED PROV, WE HAVE A CONFLICT. PROV CONTAINS CODE TO / / DETECT THIS ERROR CONDITION AND HALT. / / / /***********************************************************************/ PROV, XX DCA PROVT1 /SAVE THE ADDRESS TAD I PROV /GET BLOCK OFFSET/TYPE AND (7400 /MASK OFF BLOCK BITS TAD (PROVA) /FORM ADDRESS OF ID LOCATION IN OVERLAY DCA PROVT2 /SAVE THE ADDRESS OF THE FIRST WORD TAD I PROVT2 /ADD THE NEGATIVE OF THE ALREADY LOADED OVERLAY /ID NUMBER TAD I PROV /TO THE DESIRED OVERLAY NUMBER AND P377 /LOOK ONLY AT OVERLAY NUMBER BITS SNA CLA JMP PROVL1 /THE RIGHT OVERLAY IS ALREADY LOADED TAD PROVT2 /GET THE ADDRESS OF THE FIRST WORD OF THE AREA DCA PROVQ+3 /SAVE ADDRESS TO LOAD THE OVERLAY IN CALL/C183 TAD I PROV /GET THE BLOCK/TYPE OFFSET AND P377 /MASK TYPE BITS OFF TAD (DLOPRO /ADD OVERLAY BASE BLOCK PROVQ, JMS PRQRX /LOAD THE OVERLAY RXERD+4000 /READ /A183 0 /SYSTEM DRIVE /A183 0 /BUFFER ADDRESS /A183 JMP PRQSDE /IF ERROR, REPORT IT /A183 /AT THIS POINT, THE PROPER OVERLAY IS LOADED. JUMP TO THE REQUESTED ADDRESS. PROVL1, TAD PROVT1 /GET THE ARGUMENT SNA /IF ORIGINAL ARGUMENT WAS ZERO /A162 JMP PROVL2 /GO VALIDATE RETURN ADDRESS /A162 /C165 TAD PROVT2 /ADD THE ADDRESS OF THE FIRST WORD DCA PROVT1 /SAVE TO JUMP THROUGH JMP I PROVT1 /JUMP THERE PROVL2, /VALIDATE THE RETURN ADDRESS /A165 /IF IT IS TO THE SAME OVERLAY AREA WE LOADED /A165 /THEN OUR RETURN IS INVALID /A165 IFDEF DEVEL1 < /THIS CODE IS FOR DEVELOPMENT /A214 TAD PROVT2 /GET ID WORD ADDRESS /A165 CIA /COMPLEMENT IT /A165 TAD PROV /COMPARE TO RETURN ADDRESS /A165 AND (7400 /LOOK AT 4 TOP BITS /A165 SNA CLA /SKIP IF DIFFERENT /A165 HLT /THIS IS AN OVERLAY ADDRESS CONFLICT /A165 > / END IFDEF DEVEL1 /A214 ISZ PROV /BUMP RETURN ADDRESS /A162 JMP I PROV /RETURN TO OVERLAY THAT CALLED US /A162 /***********************************************************************/ / / / PRGTLN--PRINTER GET LINE ROUTINE. GETS A LINE OF TEXT INTO THE / / LINE BUFFER. HANDLES DEAD KEY SEQUENCES, TECHNICAL / / CHARACTERS, AND LEADING SPACES IN SPECIAL WAYS / / / /***********************************************************************/ PRGTLN, XX /THERE ARE SEVERAL VARIABLES ASSOCIATED WITH READING CHARACTERS AND WRITING /THEM INTO THE BUFFER WHICH MUST BE INITIALIZED. AC0001 DCA PLDIR /MOVE TO THE RIGHT THROUGH THE LINE BUFFER TAD (PRLBUF) /GET ADDRESS OF BEGINNING OF BUFFER DCA PLPTR /INITIALIZE THE BUFFER POINTER TAD (-MAXLIN) /GET THE NEGATIVE OF THE SIZE OF THE BUFFER DCA PLCNT /SAVE AS A COUNT OF SPACE REMAINING DCA PRTABF /CLEAR TAB FLAG /A224 /WE NOW ENTER A LOOP WHICH GETS A CHARACTER AND PUTS INTO THE BUFFER. WHEN /AN EOL IS PUT INTO THE BUFFER, THE ROUTINE RETURNS. PRPCHR MAKES A NORMAL /RETURN FOR UNLESS EOL IS FOUND, WHEN IT MAKES A SKIP RETURN. PRGLI1, JMS PRGCHR /GET NEXT CHARACTER JMS PRPCHR /STORE IT IN THE BUFFER JMP PRGLI1 /EOL NOT FOUND--CONTINUE THE LOOP /THE EOL HAS BEEN FOUND. RECOVER THE EOL TO SAVE IN THE BACKUP BUFFER AND /THEN RETURN. TAD I PLPTR /GET THE EOL CHARACTER DCA PRGCBK /SAVE IN THE BACKUP BUFFER LOCATION JMP I PRGTLN /AND RETURN /PART OF PRPCHR SUBROUTINE WHICH HAS OVERFLOWED ITS PAGE! /A222 /THIS SECTION TREATS BACKSLASHES. IF A HEADER OR FOOTER IS BEING /PROCESSED, AN OVERLAY IS INVOKED TO CHECK FOR A DATE OR PAGE INSERTION /COMMAND. OTHERWISE, THE BACKSLASH IS TREATED AS A NORMAL CHARACTER. BSLASH="=&177 /A238 PRGLO7, TAD (40-BSLASH)/IS THE TEXT A BACKSLASH? /mrcm SZA CLA JMP PRGL7A /NO--TREAT AS NORMAL CHARACTER TAD PRFLAG /IS A HEADER OR FOOTER BEING PRINTED? SNA CLA JMP PRGL7A /NO--TREAT BACKSLASH AS NORMAL CHARACTER DCA PRTABF /CLEAR TAB FLAG /A222 TAD (OVBSLH) /TREAT IN AN OVERLAY JMS PROV OBBSLH /------------------- PAGE /PRGSPC HANDLES VERTICAL SPACING AND FORMATTING ON THE PAGE. THERE ARE TWO /ENTRY POINTS. THE ENTRY POINT PRGSPC IS USED BY THE LQP LINE PRINTING /ROUTINE IF IT HAS ACTUALLY PRINTED A LINE (AS OPPOSED TO STRIPPING THE /WHOLE THING) IN WHICH CASE IT HAS ALREADY PERFORMED TWO HALF-SPACING /OPERATIONS WHICH ARE COMPENSATED FOR BY INITIALIZING PRGSVS TO NEGATIVE /THE LINE SIZE. PRGSL1 IS THE ENTRY POINT USED IN ALL OTHER CASES (LINE /PRINTER PRINTING, LQP PRINTING BUT ENTIRE LINE STRIPPED, PRINTING SUPPRESSED /DUE TO PRINT INHIBIT FLAG. /PRGSL1 IS ALSO THE RETURN POINT FOR THE FORMATTING ROUTINES WHICH ARE INVOKED /DURING THIS ROUTINE. PRGSPC RETURNS TO PRLOOP AT THE TOP OF THE BASIC /PRINTING LOOP. PRGSPC, TAD (-PRNLSZ) /SET PRGSVS TO COMPENSATE FOR SPACING ALREADY /PERFORMED IN LQP LINE PRINTIG ROUTINE /THIS IS THE POINT TO WHICH ANY FORMATTING ROUTINES PERFORM. NOTE THAT /ANY UNCOMPLETED VERTICAL SPACING IS FORGOTTEN UPON RETURN FROM A FORMATTING /ROUTINE. THIS IS A DESIRABLE SIDE EFFECT SINCE, FOR INSTANCE, SPACE /ACCUMUATED AT THE END OF A PAGE HAS NO BUSINESS SPILLING OVER ONTO THE NEXT /PAGE. PRGSL1, DCA PRGSVS /CLEAR ACCUMULATED VERTICAL SPACING /WE NOW ENTER A LOOP WHICH DOES SPACING AND DETERMINES WHAT FORMATTING IS /NECESSARY. THE CALL TO PRGCHR CAN RESULT IN ONE OF FIVE POSSIBLE RETURNS, /AS WELL AS IN A FLAG'S BEING SET. THE ACTION OF THE ROUTINE IS BASED ON /THE TYPE OF RETURN. PRGSL2, DCA PRMCRF /CLEAR THE MULTI-COLUMN REQUEST FLAG JMS PRGCHR /GET A CHARACTER DCA T1 /AND SAVE IT /AS MENTIONED ABOVE, WE ARE INTERESTED IN THE STATE OF THE MULTI-COLUMN /REQUEST FLAG (PRMCRF) AND IN THE RETURN CHARACTER (T1). THERE ARE TWO /CASES BASED ON THE STATE OF THE FLAG. /CASE ONE - THE MULTI-COLUMN REQUEST FLAG IS SET /IN THIS CASE, A NEW SET OF COLUMNS MUST BE BEGUN. EXACTLY WHAT HAPPENS /DEPENDS ON WHETHER THE NEW COLUMNS CAN BEGIN ON THIS PAGE OR IF THEY MUST /BE DEFERRED TO THE NEXT PAGE. /1. THE NEW COLUMNS MAY BEGIN ON THE CURRENT PAGE ONLY IF WE ARE CURRENTLY / PRINTING THE FIRST COLUMN, AND ONLY IF THE ACCUMLATED VERTICAL SPACING / ADDED TO THE CURRENT VERTICAL POSITION DOES NOT EXCEED THE BOTTOM / MARGIN (THE LATTER POINT A CONCERN ONLY UNDER AUTOMATIC PAGINATION). / IN THIS CASE, THE ACCUMULATED SPACING IS PERFORMED AND THE NEW COLUMN / FORMATTING ROUTINE IS EXECUTED. /2. IN ANY OTHER CASE, THE TOP OF FOOTER FORMATTING ROUTINE IS EXECUTED / SO THAT A NEW PAGE ON WHICH TO BEGIN THE COLUMNS WILL BE FORCED. /CASE TWO - THE MULTI-COLUMN REQUEST FLAG IS NOT SET /IN THIS CASE, WE ARE INTERESTED IN THE TYPE OF RETURNED CHARACTER. THE /POSSIBILITIES ARE: /1. LINE FEED - THE VARIABLE PRGSVS IS THE ACCUMULATED VERTICAL SPACING / SINCE THIS ROUTINE WAS ENTERED OR A FORMATTING ROUTINE / WAS EXECUTED. WE MERELY UPDATE PRGSVS BY ADDING IN THE / CURRENT SIZE OF A LINE AND CONTINUE THE LOOP. /2. PAGE MARKER - IF AUTOMATIC PAGINATION IS IN EFFECT, THIS CHARACTER IS / IGNORED AND WE CONTINUE THE LOOP. OTHERWISE, THIS / CHARACATER IS TREATED AS A NEW PAGE. /3. NEW PAGE - IF PRINTING A HEADER, BOTTOM OF HEADER FORMATTING IS DONE. / IF PRINTING A FOOTER, BOTTOM OF FOOTER FORMATTING IS DONE. / IF PRINTING REGULAR TEXT, NEXT COLUMN FORMATTING IS DONE. /4. END OF FILE - IF PRINTING A HEADER, BOTTOM OF HEADER FORMATTING IS DONE. / - IF PRINTING A FOOTER, BOTTOM OF FOOTER FORMATTING IS DONE. / - IF PRINTING REGUALR TEXT, TOP OF FOOTER FORMMTTING IS / DONE. / NOTE THAT IN THE CASE OF HEADERS OR FOOTERS, THE END OF FILE FLAG'S / BEING SET MEANS ONLY THE END OF THE HEADER OR FOOTER WAS FOUND. IN / THE CASE OF REGULAR TEXT, IT MEANS THE END OF THE FILE WAS ACTUALLY / FOUND. HENCE, ANOTHER COLUMN IS NOT ATTEMPTED AS IN A NEW PAGE BECAUSE / THERE CAN BE NO MORE TEXT FOR ANOTHER COLUMN. /5. NONE OF ABOVE - IF AUTOMATIC PAGINATION IS NOT IN EFFECT, THE ACCUMULATED / VERTICAL SPACING IS PERFORMED AND WE RETURN TO THE BASIC / LOOP. IF AUTOMATIC PAGINATION IS IN EFFECT, THE / ACCUMULATED SPACING IS PERFORMED ONLY IF IT DOES NOT / EXCEED THE LOWER MARGIN. OTHERWISE, THE SITUATION IS / TREATED AS A NEW PAGE. IN ANY CASE, THE RETURNED / CHARACTER IS SAVED IN THE BACKUP BUFFER. /WE NOW BRANCH ACCORDING TO WHICH CASE IS IN EFFECT. TAD PRMCRF /IS THE MULTI-COLUMN REQUEST FLAG SET? SNA CLA JMP PRGSL3 /NO--CONTINUE BY EXAMINING THE CHARACTER /THE MULTI-COLUMN REQUEST FLAG IS SET. TAD T1 /GET THE RETURNED CHARACTER DCA PRGCBK /SAVE IN THE BACKUP BUFFER /IF THE ACCUMULATED SPACING WILL CAUSE A BOUNDARY OVERFLOW, /A031 /LSPACE WILL MAKE A NORMAL RETURN. OTHERWISE, /IT WILL DO THE SPACING AND MAKE A SKIP RETURN. JMS LSPACE /SEE IF THE ACCUMULATED SPACING FITS ON THIS PAGE JMP PRGSLA /NO---JUMP TO FORCE A NEW PAGE /BEGIN NEW COLUMNS ON THE CURRENT PAGE, IMMEDIATELY BELOW LONGEST OF /PREVIOUS COLUMNS. TAD PRGSVP /YES--START NEW COLUMNS ON CURRENT PAGE CIA /ADVANCE TO FOOT OF LONGEST COLUMN TAD PRMCBM / AMOUNT = PRMCBM-PRGSVP SMA / CURRENT COLUMN IS LONGEST IF MINUS JMS PRMOVE / GO DO IT CLA /IN CASE WE SKIPPED PRMOVE TAD PRQINU /RETURN TO NORMAL INDENTION JMS PRESCS / SEND INDENT TO HANDLER PCIND DCA PRMCLM / RESET LEFT MARGIN VARIABLE TAD PRQIND / GET INDENT FROM PRINT MENU IN COLUMNS /A212 DCA PRMCMG / RESET MULTICOLUMN LEFT COLUMN VALUE /A212 TAD (CR) / SEND CARRIAGE RETURN TO FORCE INDENT JMS PRCHAR JMP PRGSL8 /THEN START NEW COLUMNS /BEGIN NEW COLUMNS ON NEXT PAGE SINCE NO ROOM ON CURRENT PAGE. PRGSLA, TAD PRMCAY /GET THE NUMBER OF COLUMNS DCA PRMCPC /SET THE CURRENT COLUMN TO THAT VALUE--A NEW PAGE /WILL NOW BE FORCED JMP PRGSL6 /JUMP TO TREAT AS A FORM FEED /THE MULTI-COLUMN REQUEST IS NOT SET, SO CASE TWO HOLDS. SEE WHAT TYPE /OF CHARACTER WAS RETURNED AND BRANCH ACCORDINGLY. PRGSL3, TAD T1 /RECOVER THE CHARACTER TAD (-PM) /IS IT A PAGE MARKER? SNA CLA JMP PRGSL5 /YES--JUMP TO TREAT IT TAD T1 /RECOVER THE CHARACTER AND P177 /STRIP THE MODE BITS SZA /IS IT THE END OF THE FILE? TAD (-FF) /OR A FORM FEED? SNA JMP PRGSL6 /YES--JUMP TO TREAT IT TAD (FF-LF) /IS IT A LINE FEED? SNA CLA JMP PRGSL4 /YES--JUMP TO TREAT IT /WE HAVE FOUND A NON-SPECIAL CHARACTER. IF THE ACCUMULATED VERTICAL /SPACING FORCES A TRANSITION, TREAT AS A NEW PAGE. OTHERWISE, DO THE /SPACING AND RETURN. TAD T1 /RECOVER THE CHARACTER DCA PRGCBK /SAVE IN THE BACKUP LOCATION JMS LSPACE /SEE IF THE SPACING FITS IN THIS COLUMN, /HEADER, OR FOOTER JMP PRGSL6 /NO--EXECUTE THE NEXT COLUMN ROUTINE JMS LSPAC2 /SEE IF NEXT(NEW/CURRENT) LINE FIXS ON THIS PAGE/A097 JMP PRGSL6 /NO--EXECUTE THE NEXT COLUMN ROUTINE. /A097 JMP PRLOOP /YES--THE SPACING IS NOW DONE SO RETURN PRGSL4, /WE HAVE FOUND THE LINE FEED PRGSL4, /WE HAVE FOUND THE LINE FEED TAD PRLLSZ /GET THE SIZE OF THE LINE TAD PRGSVS /ADD TO THE ACCUMULATED VERTICAL SPACING JMP PRGSL1 /GO SAVE AS THE NEW ACCUMULATED VERTICAL SPACING /AND CONTINUE THE LOOP /WE HAVE FOUND A PAGE MARKER. IF AUTOMATIC PAGINATION IS IN EFFECT, IGNORE /IT. OTHERWISE, TREAT AS A NEW PAGE. PRGSL5, TAD PRQAPG /IS AUTOMATIC PAGINATION IN EFFECT? SZA CLA JMP PRGSL2 /YES--IGNORE THE CHARACTER /WE HAVE FOUND A NEW PAGE, THE END OF THE FILE, A VALID PAGE MARKER, OR AN /AUTOMATIC PAGINATION END OF COLUMN. IF WE ARE CURRENTLY PRINTING A HEADER, /WE CONTINUE WITH BOTTOM OF HEADER PROCESSING. IF WE ARE CURRENTLY PRINTING /A FOOTER, WE CONTINUE WITH BOTTOM OF FOOTER PROCESSING. IF WE ARE CURRENTLY /PRINTING REGULAR TEXT, WE CONTINUE WITH NEXT COLUMN PROCESSING. IN THE /OVERLAY, IT IS DETERMINED WHETHER OR NOT THE END OF FILE WAS REACHED. IF /IT WAS, A TRANSFER IS MADE TO TOP OF FOOTER PROCESSING. /IN THIS WAY, THE ACTIONS SPECIFIED IN THE COMMENTS ABOVE ARE CARRIED OUT. PRGSL6, TAD PRFLAG /GET THE TYPE OF PRINTING GOING ON SNA JMP PRGSL7 /REGULAR TEXT--NEXT COLUMN PROCESSING SPA CLA TAD (OVBOTF-OVBOTH) /END OF FOOTER PROCESSING TAD (OVBOTH-OVNXTC) /END OF HEADER PROCESSING PRGSL7, TAD (OVNXTC-OVNEWC) /NEXT COLUMN PROCESSING PRGSL8, TAD (OVNEWC) /NEW COLUMN PROCESSING JMS PROV OBNEWC /ALL OF THE ABOVE OFFSETS MUST BE IN THE SAME /OVERLAY ELSE WE WILL HAVE TO CHANGE THIS PRGSVS, 0 /ACCUMULATED VERTICAL SPACING /THIS ROUTINE IS A UTILITY ROUTINE FOR THE SPACING ROUTINE. IF THE /ACCUMULATED VERTICAL SPACING WILL FIT IN THE CURRENT COLUMN WITHOUT /CAUSING AN AUTOMATIC PAGINATION OVERFLOW, THE MOVE IS MADE AND A SKIP /RETURN EXECUTED. OTHERWISE, A REGULAR RETURN IS MADE. /AC=0 /JMS LSPACE /AC=0, NO ROOM /AC=0, ROOM LSPACE, XX TAD PRFLAG /ARE WE PRINTING A HEADER OR FOOTER? SNA TAD PRQAPG /OR IS AUTOMATIC PAGINATION IN EFFECT? SNA CLA JMP LSPAC1 /NO--THE SPACING FITS BY DEFINITION /AUTOMATIC PAGINATION IS IN EFFECT. SEE IF THE SPACING WILL FIT INTO THE /MAXIMUM ALLOWABLE. TAD PRGSVS /GET ACCUMULATED VERTICAL SPACING TAD PRGSVP /ADD TO THE CURRENT VERTICAL POSITION CIA TAD PRGSMX /SUBTRACT FROM THE MAXIMUM VERTICAL POSITION SPA SNA CLA JMP I LSPACE /IT DOESN'T FIT--MAKE A REGULAR RETURN /THE SPACING FITS. DO THE MOVE AND MAKE A SKIP RETURN. LSPAC1, TAD PRGSVS /GET ACCUMULATED VERTICAL SPACE JMS PRMOVE /DO THE MOVE ISZ LSPACE /INCREMENT THE RETURN JMP I LSPACE /AND RETURN /THIS ROUTINE IS A UTILITY ROUTINE FOR THE SPACING ROUTINE. IF THE /A097 /VERTICAL SPACING FOR THE NEW LINE WILL FIT IN THE CURRENT COLUMN /A097 /WITHOUT CAUSING AN AUTOMATIC PAGINATION OVERFLOW, A SKIP RETURN IS /A097 /EXECUTED. OTHERWISE, A REGULAR RETURN IS MADE. /A097 /A097 /AC=0 /A097 /JMS LSPAC2 /A097 /AC=0, NO ROOM /A097 /AC=0, ROOM /A097 /A097 LSPAC2, /A097 XX /A097 /A097 TAD PRFLAG /ARE WE PRINTING A HEADER OR FOOTER? /A097 SNA /A097 TAD PRQAPG /OR IS AUTOMATIC PAGINATION IN EFFECT? /A097 SNA CLA /A097 JMP LSP2C1 /NO--THE SPACING FITS BY DEFINITION /A097 /A097 /AUTOMATIC PAGINATION IS IN EFFECT. SEE IF THE SPACING WILL FIT INTO /A097 /THE MAXIMUM ALLOWABLE. /A097 /A097 TAD PRLLSZ /GET SIZE OF LINE TO BE PRINTED ON THIS PAGE. /A097 TAD PRGSVP /ADD TO THE CURRENT VERTICAL POSITION /A097 CIA /A097 TAD PRGSMX /SUBTRACT FROM THE MAXIMUM VERTICAL POSITION /A097 SMA CLA /SKIP IF IT DOESN'T FIT. MAKE A REGULAR RETURN. /A097 LSP2C1, ISZ LSPAC2 /THE SPACING FITS. DO A SKIP RETURN. /A097 JMP I LSPAC2 /AND RETURN /A097 PRFBC, 0 / contains fallback characters loaded from panel /a227 0 / contains fallback characters loaded from panel /a227 /------------------ PAGE /PRPCHR - INSERTS THE CHARACTER IN THE AC INTO THE LINE BUFFER (PRLBUF) /AC=CHARACTER TO STORE /JMS PRPCHR /REGULAR RETURN /EOL RETURN /THIS ROUTINE TREATS SIX DISTINCT TYPES OF CHARACTERS TO INSERT INTO /THE BUFFER--TEXT CHARACTERS, SPACES, TABS, LINE TERMINATORS, BEGINNINGS /OF DEAD KEY SEQUENCES, AND ENDS OF DEAD KEY SEQUENCES. EACH IS TREATED /SEPARATELY. PRPCHR, XX DCA I PLPTR /SAVE THE CHARACTER IN THE BUFFER TAD I PLPTR /AND RECOVER IT TAD (-2040) /SEE IF TAB SPACE /A222 SNA / /A222 JMP PRPTSP /YES /A222 AND P177 /MASK OUT THE MODE BITS /WE NOW DETERMINE WHAT TYPE OF CHARACTER IT IS AND JUMP ACCORDINGLY. /THE AC WILL BE ZERO IF IT IS A SPACE /A222 SNA CLA /C222 JMP PRGLO1 /YES--JUMP TO HANDLE IT TAD I PLPTR /GET CHR AGAIN /A216 AND P177 /MASK AGAIN /A216 TAD (-SPC) /SEE IF A CONTROL CHARACTER /A216 SMA /OR A TEXT CHARACTER? JMP PRGLO7 /TEXT--JUMP TO HANDLE IT TAD (SPC-15) /IS IT THE END OF A DEAD KEY SEQUENCE? (15) SNA JMP PRGLO9 /YES--JUMP TO HANDLE IT TAD (15-BS) /IS IT THE BEGINNING OF A DEAD KEY SEQUENCE? SNA JMP PRGLO8 /YES--JUMP TO HANDLE IT /THREE THINGS CAN END A LINE--14 (FORM FEED), 12 (LINE FEED), 0 (END OF FILE) TAD (BS) /IS IT THE END OF THE FILE OR COMMAND BLOCK? SZA TAD (-14) /IS IT A FORM FEED? SZA TAD (14-12) /IS IT A LINE FEED? SNA JMP PRGL10 /YES--JUMP TO HANDLE IT TAD (12-TAB) /IS IT A TAB? SZA CLA JMP I PRPCHR /NO--THE CHARACTER IS NOT RECOGNIZED SO RETURN /FALL THROUGH TO HANDLE A TAB. /THIS SECTION TREATS TABS. ALL SPACES WHICH FOLLOW AND ARE PART OF THE TAB /SPACE (BIT 1 IS SET) MUST HAVE THIS TAB CHARACTER'S MODE BITS ATTACHED. /HENCE, WE CREATE A TAB SPACE (2040) COMBINED WITH THIS TAB'S MODE BITS. /ALL TAB SPACES WHICH FOLLOW WILL BE REPLACED BY THIS CHARACTER. PRPTAB, /ALSO ENTER HERE IF A SPACE AND PRTABF NONZERO /A222 TAD I PLPTR /RECOVER THE TAB OR SPACE AND (1600) /GET THE MODE BITS TAD (2040) /ATTACH TO A TAB SPACE DCA PRTABF /SAVE IT AS THE REPLACEMENT CHARACTER JMP PRPTSP /CONTINUE BY REPLACING THE TAB ITSELF /C222 PRGLO1, /THIS SECTION TREATS NON TAB SPACES /C193 /SPACES MAY OCCUR IN NORMAL TEXT OR IN DEAD KEY SEQEUCES. SPACES WHICH /A193 /ARE THE FIRST CHARACTER IN A DEAD KEY SEQUENCE HAVE SPECIAL MEANING. /A193 /THERE ARE CURRENTLY TWO TYPE OF SPECIAL DEAD KEY SEQUENCES WHERE THE /A193 /FIRST CHARACTER IS A SPACE: /A193 / 1. REQUIRED SPACE SD-SP-SP-ED /A193 / 2. TECHNICAL CHR SD-SP-DG-TC-ED /A193 / DG IS AN ASCII DIGIT INDICATING THE G SET THE TC IS IN /A193 / TC IS THE ASCII POSITION IN THAT G SET /A193 / 3. TECHNICAL CHR DEADED WITH NORMAL CHR /A193 / SD-SP-DG-TC-CH-CH .. ED /A193 / IN THIS CASE, CH'S ARE NORMAL CHARACTERS WHICH /A193 / HAVE BEEN DEADED IN TO THE TECHNICAL CHARACTER /A193 / CHARACTERS WHICH HAVE BEEN DEADED INTO THE TECH CHR /A193 /FIRST WE MUST SEE WHETHER THIS SPACE IS THE FIRST CHARACTER /A193 /OF A DEAD KEY SEQUENCE /A193 TAD PRDKFG /GET DEAD KEY FLAG /A193 IAC /SEE IF WAS 7777 /C194 SNA / /C194 JMP PRGL20 /YES, SPACE FIRST CHR IN DKS /A193 SPA CLA /IF STILL MINUS MUST HAVE BEEN 7776 /A194 JMP PRGL21 /7776, HANDLE REQUIRED SPACE /A193 JMP PRGL2A /ELSE /A222 /TREAT TAB SPACES ONLY. IF A SPACE /C222 /IS PART OF A TAB, IT IS REPLACED BY THE VALUE STORED IN PRTABF. (PROVIDED /THERE IS A VALUE THERE. IN THE CASE OF CENTERED LINES AND INDENTED /WORDWRAP, FLAGGED SPACES ARE NOT PRECEEDED BY A TAB. THESE ARE NOT /REPLACED SINCE PRTABF WILL BE ZERO. PRPTSP, TAD PLPTR / GET POINTER FOR THIS SOFT SPACE /A205 DCA SOFTPT / PUT IT IN HERE FOR FUTURE REFERENCE /A205 TAD PRTABF /GET THE TAB OF WHICH THIS SPACE IS A PART SZA PRGL2B, DCA I PLPTR /REPLACE IT IN THE BUFFER PRGL2A, TAD PRDKFG /GET THE OVERSTRIKE FLAG SMA SZA /IF FLAG IS POSITIVE, WE ARE IN OVERSTRIKE MODE JMP PRGLO4 /JUMP TO INSERT BACKSPACE INTO BUFFER /IF THE FLAG IS ZERO, WE WANT IT TO REMAIN ZERO. IF THE FLAG IS NEGATIVE, /WE SHOULD ENTER OVERSTRIKE MODE WITH THE NEXT CHARACTER, SO THE FLAG SHOULD /BECOME POSITIVE. CIA /IF FLAG IS NEGATIVE, IT BECOMES POSITIVE. IF /FLAG IS ZERO, IT REMAINS ZERO DCA PRDKFG /UPDATE THE DEAD KEY FLAG JMP PRGLO5 /SKIP DEAD KEY CODE /THIS SECTION HANDLES TEXT CHARACTERS, SPACES, AND TABS ALIKE AFTER /THEY HAVE RECEIVED MORE SPECIFIC TREATMENT. THE BASIC IDEA IS TO INSURE /A CHARACTER'S POSITION IN THE BUFFER BY CALLING PLNXT TO INCREMENT THE /BUFFER VARIABLES. HOWEVER, IF WE ARE PROCESSING A DEAD KEY SEQUENCE, /WE MUST BE SURE TO INSERT A BACKSPACE BEFORE EACH CHARACTER IN THE /SEQUENCE AFTER THE FIRST. PRGL7A, DCA PRTABF /CLEAR TAB FLAG /A222 PRGLO3, AC0002 /SEE IF WE ARE PROCESSING THE FIRST /A194 TAD PRDKFG /(TECHNICAL) CHARACTER /A194 SPA / if so skip /a227 JMP PRGSCH / this must be the special char we have been /a227 / waiting for /a227 SNA CLA / /A194 JMP PRGL22 /YES, GO PROCESS /A194 TAD I PLPTR /RECOVER THE CHARACTER /A018 AND (1777) /MASK OUT THE TWO HIGH BITS--THESE BITS ARE /A018 /USED FOR JUSTIFICATION PURPOSES AND ANY /A018 /GARBAGE WHICH MAY BE THERE MUST BE REMOVED /A018 JMP PRGL2B /GO SAVE BACK IN THE BUFFER /C222 /THIS SECTION INSERTS A BACKSPACE INTO THE BUFFER BEFORE THE CURRENT /CHARACTER SINCE IT IS IN A DEAD KEY SEQUENCE. PRGLO4, CLA TAD I PLPTR /GET THE CHARACTER FROM THE BUFFER DCA T1 /SAVE IT TAD (BS) /GET A BACKSPACE DCA I PLPTR /AND STORE IT IN THE BUFFER JMS PLNXT /UPDATE THE BUFFER NOP /OVERWRITE IF THERE'S NO MORE ROOM TAD T1 /GET THE CHARACTER BACK PRGL4A, /A193 DCA I PLPTR /SAVE IT IN THE BUFFER /THIS SECTION WRITES THE CHARACTER PERMANANTLY INTO THE BUFFER PRGLO5, TAD I PLPTR /RECOVER THE CHARACTER AND (1600) /SAVE THE MODE BITS DCA PRHMOD /SAVE FOR MODE OF HYPHEN EOL FUTURE COMPARISON /D018 JMS PLNXT /UPATE THE BUFFER POINTERS NOP /OVERWRITE IF THERE'S NO MORE ROOM /THIS IS ALSO THE RETURN POINT FOR THE OVERLAY WHICH HANDLES BACKSLASHES. PRGLO6, JMP I PRPCHR /RETURN PRGL20, /SPACE IS FIRST CHR IN DEAD KEY SEQUENCE /A193 AC7776 /SET THE DEAD KEY FLAG TO -2 /A193 JMP PRGLO9 /GO SET DEAD KEY FLAG & EXIT /C222 PRGL21, /REQUIRED SPACE /A193 TAD I PLPTR /GET CHR WITH MODE BITS /A193 AND (1600) /ISOLATE MODE BITS /A193 TAD (RQSP) /ADD IN CODE FOR REQUIRED SPACE /A193 JMP PRGL4A /GO SAVE, BUMP, AND EXIT /A193 /****************** NOTE ***********************************************/A194 / /A194 /IF WE ARE PROCESSING THE FIRST NORMAL CHARACTER IN A SEQUENCE /A194 /THAT BEGAN (START DEAD) (SPACE) THEN IT IS A TECHNICAL CHARACTER /A194 /THIS CHARACTER IS AN ASCII DIGIT WHICH IDENTIFIES THE GX SET WHERE /A194 /THE TECHNICAL CHARACTER WILL BE FOUND AS FOLLOWS: /A194 / G1 USASCII /A194 / G2 DEC SUPPLEMENTAL /A194 / G3 DEC TECHNICAL /A194 / /A194 /****************** NOTE ***********************************************/A194 / /A194 / THE ABOVE IMPLIES THAT NOT ALL THE TECHNICAL CHARACTERS ARE /A194 / FOUND IN THE DEC TECHNICAL CHARACTER SET. /A194 / /A194 /****************** NOTE ***********************************************/A194 / /A194 / IN ORDER TO IMPLEMENT TECHNICAL CHARACTERS WE WILL MULTIPLEX THE /A194 / USE OF G1 IN ORDER TO PRESERVE THE BOLD INTERPRETATION FUNCTIONALITY /A194 / INTRODUCED IN VERSION 1.5 OF DECMATE-II /A194 / /A194 /****************** NOTE ***********************************************/A194 PRGL22, /TECHNICAL CHARACTER /A194 /d227 ISZ PRDKFG /ENTER NORMAL DEAD KEY MODE (-2 TO -1) /A194 TAD I PLPTR /GET THE DIGIT /A194 AND (7337) /MASK ITS ATTRIBUTE BITS AND /C211 /MAKE IT A CONTROL CODE IN THE RANGE /A194 /OF 21-23 /A194 /d227 JMP PRGL4A /GO RESAVE IN BUFFER & DO NXT CHR /A194 DCA PRGCCS /save the control code /a227 AC7775 / set up tech/multinat char expected /a227 JMP PRGLO9 / go wait for the next char /a227 /THIS SECTION TREATS DEAD KEY SEQUENCE DELIMITORS. IF A DEAD KEY SEQUENCE /IS BEGINNING, SET THE OVERSTRIKE NEGATIVE. IF AT THE END, CLEAR IT. PRGLO8, /BEGINNING OF DEAD KEY SEQUENCE AC7777 PRGLO9, /END OF DEAD KEY SEQUENCE DCA PRDKFG JMP I PRPCHR /DON'T STORE BUT MAKE NORMAL RETURN /THIS SECTION TREATS LINE TERMINATORS. IF THE LINE TERMINATOR IS A WORD- /WRAPPED (AC1=1) AND HYPHENATED (AC3=1) END OF LINE, A HYPHEN IS INSERTED /INTO THE BUFFER. IN ANY CASE, THE END OF LINE IS THEN INSERTED INTO THE /BUFFER. PRGL10, ISZ PRPCHR /PREPARE TO MAKE EOL RETURN TAD I PLPTR /RECOVER THE CHARACTER TAD (-2412) /SEE IF IT'S A HYPHENATED END OF LINE (AC1=1, AC3=1) SZA CLA JMP I PRPCHR /RETURN IF NOT /WE MUST INSERT A HYPHEN INTO THE BUFFER. THIS IS DONE IN AN OVERLAY. TAD (OVIHYP) /RETURN IS MADE TO PRGLO6 JMS PROV OBIHYP / Deal with the special char /a227 PRGSCH, JMS BHOOK / call the blaster /a227 SPECEN / table entry /a227 ISZ PRDKFG / enter normal dead key mode /a227 ISZ PRDKFG / enter normal dead key mode /a227 JMP PRGLO6 / return /a227 PRGCCS, 0 / holds the control code 21,22,23 for tech/multinat/line /a227 PRHMOD, 0 /RECORDS MODE BITS OF LAST CHARACATER INSERTED INTO BUFFER SO /THAT AN INSERTED HYPHEN CAN TAKE ITS MODE BITS PRDKFG, 0 /DEAD KEY FLAG. CAN TAKE VALUES: /C194 /7775 -- Tech/multinat/line char expected /a227 /7776 -- START DEAD, SPACE /7777 -- START DEAD /0000 -- NO DEAD KEY SEQUENCE IN PROCESS /0001 -- SUCCESSIVE CHR IN DEAD KEY SEQUENCE /0002 -- SUCCESSIVE ASCII CHR DEADED ON A TECH CHR PRTABF, 0 /CONTAINS THE VALUE TO REPLACE TAB SPACES WITH /------------------------- PAGE /PRGCHR - GET A CHARACTER FROM THE INPUT STREAM / USED WHEN KNOWN TO BE OUTSIDE OF A CONTROL BLOCK... /A170 /THIS ROUTINE RETURNS THE CONTENTS OF THE BACKUP LOCATION IF IT IS NOT /CLEARED. IT GETS THE NEXT CHARACTER AND TESTS IT FOR START CONTROL. /IF IT IS A START CONTROL WE INVOKE AN OVERLAY TO PROCESS CONTROL BLOCKS. /SOONER OR LATER WE RETURN THE FIRST CHARACTER WHICH IS NOT PART OF A /A PRINT CONTROL BLOCK. /AC=0 /JMS PRGCHR /AC=CHARACTER PRGCHR, XX PRGCH1, TAD PRGCBK /GET THE BACKUP LOCATION CHARACTER SNA /USE IT IF NOT CLEAR JMS PRRULE /NO--READ ANOTHER CHARACTER /A CHARACTER HAS BEEN FOUND. IF THE CHARACTER IS A BEGIN PRINT CONTROL, /THE PRINT CONTROL IS PROCESSED AND WE TRY FOR ANOTHER CHARACTER. OTHERWISE, /THE CHARACTER IS RETURNED. DCA T2 /SAVE THE CHARACTER DCA PRGCBK /CLEAR THE BACKUP LOCATION TAD T2 /RESTORE THE CHARACTER TAD (-1014) /IS IT THE BEGINNING OF A PRINT CONTROL? SNA CLA JMP PRGCH2 /YES -- JUMP TO HANDLE IT /RETURN THE CHARACTER. TAD T2 /GET CHARACTER AGAIN INTO AC JMP I PRGCHR /AND RETURN /THIS SECTION HANDLES PRINT CONTROL BLOCKS. THE PRINT CONTROL CODE IS /INVOKED. WHEN IT COMPLETES, IT RETURNS TO PRGCH1, PRGCH2, OR PRGCH4. PRGCH2, TAD (OVCNTL) /CONTROL BLOCK CODE MUST BE INVOKED JMS PROV OBCNTL /***********************************************************************/ / / / PRGCHC--GET A CHARACTER WHILE IN A CONTROL BLOCK / / THIS ROUTINE IS USED TO GET CHARACTERS WHILE IN CONTROL / / BLOCKS. IF AN END OF FILE IS FOUND BEFORE AN END / / CONTROL, WE REPORT MISMATCHED CONTROLS AND STOP / / PROCESSING. / / / / JMS PRGCHC / CALL / / JMP EOC... / END OF CONTROL / / ..CONTINUE HERE WITH CHR IN AC IF NOT EOC OR EOF / / / ROUTINE GOESTO TO MISCTL IF EOF / PRGCHC, XX /A170 JMS PRRULE / GET A CHARACTER SZA / SKIP IF EOC OR EOF ISZ PRGCHC / BUMP RETURN IF NOT EOF OR EOC SZA / SKIP IF EOC OR EOF JMP I PRGCHC / NOT END CONTROL OR END FILE TAD T1 / SEE WHICH SZA CLA JMP I PRGCHC / END OF CONTROL--RETURN SANS INCREMENT JMP MISCTL / END OF FILE--BAD NEWS /THIS ROUTINE GETS THE NEXT CHARACTER FROM THE FILE INTERFACE. IF THE /CHARACTER IS THE BEGINNING OF A RULER, THE RULER IS PROCESSED AND THE /NEXT CHARACTER IS CONSIDERED. THE FIRST NON-RULER CHARACTER ENCOUNTERED /IS RETURNED. PRRULE, XX PRRUL1, JMS READCH /GET ANOTHER CHARACTER /WHEN RETURN CHR IS IN AC AND T1 EXCEPT IF END /PRINT CONTROL, IN WHICH CASE AC IS CLEAR BUT /T1 STILL CONTAINS EPC SNA /SEE IF EPC OR EOF /A163 JMP I PRRULE /YES, RETURN /A163 TAD (-16) /IS IT A RULER START? SNA CLA JMP PRRUL2 /YES--PROCESS THE RULER /WE MERELY HAVE A NORMAL CHARACTER--RETURN IT TAD T1 /RECOVER THE CHARACTER PRRUL3, / IF END OF FILE IS FOUND IN A RULER RETURN HERE JMP I PRRULE /AND RETURN IT /THE CHARACTER IS A RULER. CONTINUE ON THE RULER OVERLAY. PRRUL2, TAD (OVRULR) /GET THE OVERLAY ADDRESS JMS PROV /AND CONTINUE--CONTROL RETUNS TO PRRUL1 OBRULR /THIS ROUTINE MAINTAINS THE VERTICAL POSITION OF THE PRINTER. IT EXPECTS /AS AN ARGUMENT THE NUMBER OF VERTICAL UNITS TO MOVE. AFTER UPDATING THE /VERTICAL POSITION, IT DOES THE MOVE. /TAD MOVE (POSITIVE OR NEGATIVE) /JMS PRMOVE /AC=0 PRMOVE, XX DCA PRMOVT /SAVE THE MOVE /WE WANT THE MOTION TO TAKE PLACE EVEN IF WE ARE PRINTING TO /A189 /A HOST. WE MUST MAKE LPONLN NONZER ONLY IF IT IS ZERO (HOST) /C194 /SO THAT PRESCS THINKS WE HAVE A PRINTER ONLINE /A189 TAD LPONLN /GET TYPE OF PRINTER ONLINE /A189 SNA CLA /SKIP IF A PRINTER IS ATTACHED /C194 ISZ LPONLN /IF LPONLN 0000 MAKE 0001 /C194 /UPDATE THE VERTICAL POSITION. TAD PRGSVP /GET THE CURRENT VERTICAL POSITION JMS CKMOVE /CHECK FOR BOUNDARY OVERFLOW /A105 DCA PRGSVP /SAVE AS THE NEW VERTICAL POSITION TAD PRGSAP /GET THE ABSOLUTE VERTICAL POSITION JMS CKMOVE /CHECK FOR BOUNDARY OVERFLOW /A105 DCA PRGSAP /SAVE AS THE NEW ABSOLUTE VERTICAL POSITION /FORWARD AND BACKWARD MOTION ARE HANDLED DIFFERENTLY. TAD PRMOVT /GET THE REQUESTED MOVE SMA JMP PRMOV3 /JUMP TO HANDLE A FORWARD MOVE /OTHERWISE, CONTINUE TO HANDLE A BACKWARD MOVE /WHEN PRINTING TO THE LQP, THE BOTTOMS OF THE HOLES IN THE FORM PAPER /ARE TIGHT AGAINST THE SPROCKETS. WHEN WE MOVE BACK AND BEGIN PRINTING, /THOUGH, THE TOPS OF THE HOLES ARE TIGHT AGAINST THE SPROCKETS. AS THE /PAPER MOVES FORWARD AGAIN, THE PAPER SLIPS UNTIL THE BOTTOMS ARE TIGHT /AGAIN, CAUSING MISALIGNMENT. /TO REMEDY THIS, WE FORCE THE PAPER TO MOVE BACK A LITTLE BIT MORE THAN /IS NECESSARY, AND THEN MOVE FORWARD AGAIN. THE BOTTOMS OF THE HOLES ARE /THEN TIGHT. /REMOVED THE BREAKING UP OF THE MOVE INTO CHUNKS /A128 /ACCORDING TO MAXMOV LOGIC /A128 JMS PRCALK /CALCULATE THE SLACK KONSTANT /A103 TAD PRSLCK /LOAD THE SLACK KONSTANT /A103 CIA /NEGATE /A103 TAD PRMOVT /ADD THE NEGATIVE AMOUNT TO MOVE /A103 /WE NOW ENTER A LOOP TO FORCE THE BACKWARD MOTION. JMS PRFMOV /FORCE THE MOTION /THE BACKWARD MOTION IS NOW COMPLETED, AND THE PAPER HAS BEEN FORCED BACK /PRSLCK UNITS PAST THE ULTIMATE DESTINATION. NOW MOVE FORWARD THAT AMOUNT /AND RETURN. TAD PRSLCK /GET THE SLACK AMOUNT /A103 DCA PRMOVT /SAVE AS THE AMOUNT TO MOVE TAD PRMOVT /RECOVER THE NEW MOVE /THE CODE FOR A REGULAR FORWARD MOVE JOINS HERE. THIS SECTION MOVES FORWARD /THE AMOUNT IN PRMOVT. PRMOV3, JMS PRESCS /SEND BUT DO NOT FORCE THE REQUESTED MOTION PCMPUP TAD PRTMOV /ADD TOTAL UNFORCED MOTION TO REQUESTED MOTION DCA PRTMOV /SAVE AS NEW TOTAL UNFORCED MOTION PRMOV6, /MAKE LPONLN 0000 IF NOW 0001 (HOST) SEE TOP ROUTINE /C194 AC7777 / /A194 TAD LPONLN /A194 SNA CLA /A194 DCA LPONLN /MAKE 0000 IF NOW 0001 (HOST) /C194 JMP I PRMOVE /RETURN PRSLCK, 0 /THE CALCULATED SLACK KONSTANT /A103 /THIS ROUTINE EXPECTS AN AMOUNT TO MOVE IN THE AC. IT TRANSMITS THE /MOTION AND THEN FORCES IT (AND ANY ACCUMULATED UNFORCED MOTION) TO /TAKE PLACE. /THE VALUE PRTMOV CONTAINS THE TOTAL MOTION WHICH HAS BEEN TRANSMITTED /BUT NOT FORCED TO DATE. IT IS CLEARED BY THIS ROUTINE (WHICH FORCES /THE MOTION). /THIS ROUTINE DOES NOT RECORD THE FORCED MOTION IN THE VERTICAL POSITION /VARIABLES, BECAUSE THIS ROUTINE IS PROVIDED ONLY FOR CALL BY PRMOVE, /WHICH HAS PREVIOUSLY RECORDED THE MOVEMENT. ALL OTHER CALLERS SHOULD /USE PRMOVE TO MAKE THE MOTION AND RECORD THE MOVE, AND ONLY THEN CALL /PRFMOV WITH A ZERO ARGUMENT TO FORCE THE MOTION. /AC=AMOUNT TO MOVE /JMS PRFMOV /AC=0 PRFMOV, XX JMS PRESCS /SEND THE REQUESTED MOTION PCMPUP CLA JMS PRESCS /FORCE THE MOTION TO OCCUR PCMFV DCA PRTMOV /CLEAR TOTAL UNFORCED MOTION JMP I PRFMOV /AND RETURN /***********************************************************************/ / / / CKMOVE--CHECK VERTICAL MOVEMENT FOR PAGE OVERFLOW / / IF AUTO-PAGINATION IS NOT IN EFFECT WRAP IF / / NECESSARY SO THAT VERTICAL POSITION IS ALWAYS / / WITHIN CURRENT PAGE / / ROUTINE ADDED REV105 / / / / THE ROUTINE IS CALLED WITH A VALUE IN THE AC. / / THIS VALUE IS COMPARED TO THE PAGE SIZE / / IF IT EXCEEDS THE PAGE SIZE, THE PAGE SIZE IS / / SUBTRACTED FROM IT AND A NEW VALUE IS RETURNED / / OTHERWISE, THE ORIGINAL VALUE IS RETURNED / / / /***********************************************************************/ CKMOVE, XX TAD PRMOVT / ADD IN CURRENT LINE SIZE / DCA CKTEMP / SAVE / TAD PRQAPG / IS AUTO-PAGINATION IN EFFECT? / SZA CLA JMP CKMOV1 / NO, JUMP TAD PRQPSZ / GET "-PAGE SIZE" CIA TAD CKTEMP / SEE IF VERTICAL PSN IS BEYOND PS SPA / SKIP IF YES. DON'T UN-NORMALIZE TAD PRQPSZ / NORMALIZE BACK TO CURRENT VERT PSN DCA CKTEMP / SAVE CKMOV1, TAD CKTEMP / GET UPDATED RETURN VALUE JMP I CKMOVE / RETURN CKTEMP, 0 / A TEMPORARY FOR THIS ROUTINE PRMOVT, 0 / TEMPORARY FOR PRMOVE ROUTINE /m227 /A105 /***********************************************************************/ / / / PLNXT---SUBROUTINE TO GET POINT TO NEXT CHARACTER IN PRLBUF / / THE POINTER PLPTR MAY BE ADVANCED EITHER FORWARD / / OR BACKWARD DEPENDING ON PLDIR BEING 0001 OR 7777, / / WHICH IS SET UP BEFORE CALLING THE ROUTINE / / / / PLCNT IS THE NEGATIVE OF THE SPACE REMAINING THE THE BUFFER / / IF THERE IS MORE ROOM, THE BUFFER POINTER IS MOVED AND / / THE SKIP RETURN IS MADE, OTHERWISE THE POINT IS UNMOVED / / AND A NORMAL RETURN IS MADE INDICATING NO MORE CHRS / / / /***********************************************************************/ /AC=0 /JMS PLNXT /AC=0--NO MORE ROOM IN BUFFER /AC=0--MORE ROOM IN BUFFER PLNXT, XX ISZ PLCNT /INCREMENT THE COUNTER NOP /DON'T CARE IF IT SKIPS TAD PLCNT /GET THE COUNT--IS THERE ROOM LEFT? SMA CLA JMP I PLNXT /THE COUNT HAS REACHED ZERO, NO MORE ROOM TAD PLDIR /THERE IS ROOM FOR NEXT TIME--MOVE THE POINTER TAD PLPTR DCA PLPTR ISZ PLNXT /INCREMENT THE RETURN LOCATION JMP I PLNXT /AND RETURN / THESE ARE THE BUFFERS FOR THE CHRSET FINAL STRINGS /A160 / THEY MUST BE RESIDENT. EACH TIME A PRINTER CHRSET BOLD /A160 / OR NONBOLD IS ENCOUNTERED A NEW STRING IS PUT IN THE APPROPRIATE /A160 / BUFFER. THE BUFFERS ARE THEN COMPARED. IF THE STRINGS ARE /A160 / THE SAME THERE IS NO BOLD INTERPRETATION, IF THEY ARE DIFFERENT /A160 / THERE IS BOLD INTERPRETATION /A160 CHRSSZ=4 / SIZE OF EACH BUFFER INCLUDING ZERO TERMINATOR /A160 PCHFBO, ZBLOCK CHRSSZ / THE BOLD FINAL STRING /A160 PCHFNB, ZBLOCK CHRSSZ / THE NONBOLD FINAL STRING /A160 / THE XSXD STRING IS SENT BY THE ESCXD ROUTINE RESIDING IN ESC02 TO / SET OR RESET PROPORTIONAL MODE / THE P2PSET IS THE VARIABLE PART WHICH IS DETERMINED BY THE CODE / IN P2INIT / / XSXD, 77 ; 62 ; 67 / ? 2 7 P2PSET, 0 / either "h or "l /-------------------- PAGE /***********************************************************************/ / / / THE FOLLOWING STRINGS ARE ALL SENT AS ESCAPE SEQUENCES BY THE / / ESC02 MODULE. / / / /***********************************************************************/ XSSGR, 52; 4155 / GENERAL SGR, 1 PARAMETER /A211 XDUNDR, 64 / ESC [ 4 m / SET UNDERLINING XDRST, 4155 / ESC [ m / RESET ALL MODES XDSHAD, 77; 62; 4155 / ESC [ ? 2 m / SET SHADOW XDSEC, 77; 61; 4155 / ESC [ ? 1 m / SET SECONDARY XDPRIM, 61; 4155 / ESC [ 1 m / SET PRIMARY XDSBL, "8&177; "m&177+4000 / ESC [ 8 m / DISABLE HAMMAR XSTRAY, "*&177 ; 41 ; 4166 / ESC [ TRAY SELECT ! v XSPAGS, "*&177 ; 4164 / ESC [ PAGESIZE t XSMOVE, "*&177;"a&177+4000 / LQP02 ESCAPE SEQ TO ADVANCE PRINT HEAD/A080 / IN "PRINT UNITS" INCREMENTS. /A080 XSLEFT, "*&177;"!&177;"t&177+4000/ LQP02 ESC SEQ TO ADV LEFT PRINT UNITS/A084 XSPLD, ESC; 4113 / CAPITAL K FOR PLD (FWD) /C207 XSPLU, ESC; 4114 / PARTIAL LINE UP (REV) /C188 XSXE, 33; 43; 4071 / ESC # 9 / FORCE VERTICAL ADVANCE / THE FOLLOWING SEQUENCE IS USED TO SET G2 TO DEC MULTINATIONAL /A200 / AND G3 TO DEC TECHNICAL CHARACTER SET /A200 XSTCSI, ESC; 2052; "<&177; ESC; 53; ">&177 /a200 ESC; 51; "0&177+4000 /A236 / THE FOLLOWING ARE FOR THE SS2 AND SS3 SEQUENCE GENERATION XSSS, ESC; 4052 / * IS A STRING POINTER /A200 XSSS2, 4116 / ESC N IS SS2 /A200 4117 / ESC O IS SS3 /A200 / NOTE THAT XST94 AND XST95 HAVE SS3 IMBEDED IN THEM /A200 XST94, 33; 117; 4041 / ESC O ! / SELECT TABLE POSITION 94 XST95, 33; 117; 4042 / ESC O " / SELECT TABLE POSITION 95 / / SET HORIZONTAL CHAR SIZE / /ESC [ 120 ; *-200 ; Sp G XSCHRS, 61 ; 62 ; 60 ; 73 ; "*-200 ; 40 ; 4107 / THE RIGHT MARGIN WAS CHANGED FROM 158 TO 330 BECAUSE THE LQP02 /A111 / CALCULATES THE RIGHT MARGIN IN RELATIVE UNITS (NUMBERS OF CHARACTERS) /A111 / WHICH VARIES ACCORDING TO PITCH. SINCE WE CAN HAVE 13.2 INCHES OF /A111 / CHARACTERS AT 25 PITCH, THE RIGHT MARGIN BELONGS AT 330 CHARACTERS /A111 / THIS SITUATION CAN OCCUR EASILY IN MULTICOLUMN APPLICATIONS /A111 / / ESC [ LEFT MARGIN ; RIGHT MARGIN s XSMARG, "*-200 ; 73; 63 ; 63 ; 60 ; 4163 / LM;330s /A111 XSJSFY, "*; ";; "*; ";; "*; ";; "*; "!; 4163 /DECFIL JUSTIFY /M217 XSSPUM, "1&177;"1&177;"h&177+4000 / set PUM mode ($[11h) /A080 XSRPUM, "1&177;"1&177;"l&177+4000 / reset PUM mode ($[11l) /A080 XSIVPR, "*;"e+4000 / increment vertical position relative /a229 XSDVPR, "*;"k+4000 / decrement vertical position relative /a229 XSIHPR, "*;"a+4000 / increment horizontal position relative/a229 XSDHPR, "*;"j+4000 / decrement horizontal position relative/a229 XSEXRP, 77 ; 52 ; 4156 /ESC [ ? * n ENABLE/DISBLE/SEND STATUS XSSPAC, "*-200 ; 41 ; 4171 /ESC [ space size ! y PRSTG0, 33; 50; 4052 / ESC-(-FINAL /A151 PRSTG1, 33; 51; 4052 / ESC-)-FINAL /A151 XDFONT, 52; 4155 / ESC [ * m /A152 XSPITCH,52; 4167 / ESC [ * w /A152 XSTABL, 52; 41; 4170 / ESC [ * ! x LQP02 TABLE SELECT/A173 /C174 XSCOLA, SPC; ESC; 133; 52; 4140 / SPACE ESC [ * @ /C222 XSPFS, 77; 52; 40; 4112 / ESC [ ? * SPC J PAGE FORMAT SELECT /A215 / THE XSXD STRING IS SENT BY THE ESCXD ROUTINE RESIDING IN ESC02 TO / SET OR RESET PROPORTIONAL MODE / THE P2PSET IS THE VARIABLE PART WHICH IS DETERMINED BY THE CODE / IN P2INIT / / / moved to previous page /d236XSXD, 77 ; 62 ; 67 / ? 2 7 /d236P2PSET, 0 / either "h or "l /***********************************************************************/ / / / PRCALK--CALCULATE SLACK KONSTANT. (ADDED REV103) / / THE LQP02 DOES NOT LET US ROLLBACK BEYOND THE TOP / / OF THE PAGE, AS WE WOULD IF THE TOP MARGIN WAS 3 / / AND THE ROLLBACK CONSTANT WAS 4. IN THIS CASE THE / / LQP02 IS KNOWN TO THROW AWAY ONE LINE OF ROLLBACK, / / BUT NOT THROW AWAY ONE LINE OF ROLLAHEAD, CREATING / / A MULTICOLUMN FORMAT WHERE THE LEFTMOST GROUP IS / / ONE COLUMN HIGHER THAN THE OTHER GROUPS. / / / / THIS ROUTINE CHECKS TO SEE IF THAT IS WHAT WOULD / / HAPPEN. IT SPECIFIES THAT THE ROLLBACK AMOUNT / / PRSLCK BE THE SMALLER OF PRMSLK OR THE DISTANCE / / TO THE TOP OF THE PAGE / / / /***********************************************************************/ PRCALK, XX TAD PRGSAP / LOAD ABSOLUTE VERTICAL POSITION / TAD (-PRMSLK) / SEE IF WE WILL ROLLBACK TOO FAR / SMA CLA JMP PRCAL2 / NO, EVERYTHING IS OK / TAD PRGSAP / YES, SO USE ABSOLUTE POSITION / PRCAL1, DCA PRSLCK / SET SLACK KONSTANT / JMP I PRCALK / RETURN / PRCAL2, / NORMAL SLACK / TAD (PRMSLK) / LOAD NORMAL VALUE / JMP PRCAL1 / GO STUFF & EXIT / IFDEF DEVEL1 < /A143 /THIS LITTLE ROUTINE IS FOR DIAGNOSING ESCAPE SEQUENCES SENT TO THE PRINTER /IF THE COLUMN MARGIN IS SET TO 430 AND THE DEVELOPMENT SWITCH IN WP27F0 /IS ON, WE WILL BE ABLE TO PRINT AN E IN PLACE OF EVERY ESCAPE. /IN THIS WAY WE WILL BE ABLE TO GET A HARD COPY OF WHAT IS GOING TO THE PRINTER. /IF WE ENCOUNTER A CARRIAGE RETURN WE WILL ALSO ADD A LINE FEED /SO WE WILL NOT OVERPRINT PRCHR5, TAD (-656) / SEE IF COLUMN MARGIN IS 430 DECIMAL / THIS WONDERFUL MAGIC NUMBER IS / HARRY PREBLE' BIRTHDAY, IN CASE / YOU ASTUTE READERS CARED TAD PRQCM SZA CLA JMP PRCHR4 / NO, PROCEED NORMALLY TAD PRCHAT / GET THE CHARACTER TO BE PRINTED TAD (-33) / SEE IF ESCAPE SNA JMP PRCESC / YES, GO PRINT AN ASCII E TAD (33-15) / SEE IF CARRIAGE RETURN SZA CLA JMP PRCHR4 / NO, PROCEED AS USUAL TAD (LF) / IS CARRIAGE RETURN, SEND A LINE FEED FIRST PRCHR6, CIFSYS LPTOU SKP CLA / NO ROOM JMP PRCHR4 / LINE FEED OUT, NOW DO A CR CIFSYS JWAIT JMS SQPINP TAD (LF) / LOAD LINE FEED AGAIN JMP PRCHR6 / TRY AGAIN PRCESC, TAD (105 / LOAD AN ASCII E DCA PRCHAT / STUFF IT JMP PRCHR4 / AND PROCEED AS USUAL > / END IFDEF DEVEL1 /------------------------ PAGE /***********************************************************************/ / / / ESC02--PART OF PRESCS. CALLED IF PRINTER IS NOT LQPSE / / / THE PHILOSOPHY IS THAT ALL OTHER PRINTERS ARE DESIGNED TO / DEC SPECIFICATIONS AND STANDARDS. IN PARTICULAR, THEY ARE / COMPATIBLE WITH DEFINITIONS OF STANDARD ESCAPE SEQUENCES / WHICH HAVE CERTAIN DEFINED INTRODUCERS, INTERMEDIATE, AND / FINAL CHARACTERS. IF A PARTICULAR PRINT CANNOT PERFORM THE / FUNCTION SPECIFIED BY A PARTICULAR ESCAPE SEQUENCE AT LEAST / IT WILL PROPERLY IGNORE THE SEQUENCE AND NOT PRINT EXACTLY / THOSE CHARACTERS BELONGING TO THE ESCAPE SEQUENCE AND BEGIN / PRINTING AGAIN EXACTLY WHEN IT SHOULD. / / ENTER ACC = BINARY Ps OR Pn VALUE / EXIT ACC = " " " " " / / CALLING SEQUENCE: TAD Ps or Pn VALUE / JMS PRESCS / CODE / THE PARAMETER "CODE" WHICH FOLLOWS THE CALL IS IN GENERAL / AN ASCII VALUE. THIS IS DONE TO MAINTAIN COMPATIBLITIY / WITH THE EARLIEST VERSION OF PRESCS WRITTEN TO HANDLE THE LQPSE / THE ASCII CODES FOR THIS ROUTINE ARE BASED AT 071 OCTAL--ASCII 9 / VARIABLES USED: / XSADX POINTER TO THE ESCAPE STRING AS IT IS BEING TRANSMITTED. / ESCNUM A VARIABLE STRING, TO CONTAIN ASCII NUMERIC CHARACTERS. / THESE STRINGS ARE THE VARIABLE PARTS OF ESCAPE SEQUENCES. / NUMPTR A POINTER INTO ESCNUM THAT IS USED IN BOTH PUTTING ASCII / NUMERIC CHARACTERS INTO ESCNUM AND IN TRANSMITTING THEM. / / IF AN ESCAPE STRING HAS A VARIABLE COMPONENT, THE STRING CONTAINS / AN '*' (52 OCTAL). WHEN OUTPUTTING THE STRING, IF AN '*' IS FOUND / THE OUTPUT SWITCHES TO 'ESCNUM' UNTIL THE NUMBER HAS BEEN SENT. / THEN XSADX TAKES OVER AGAIN AS THE OUTPUT POINTER. / ////////////////////////////////////////////////////////////////////// / ESC / [ / YYY / * / WWW / 4000 / ////////////////////////////////////////////////////////////////////// / ^ | / | | / | |---->/////////////////////////////////// / | ESCNUM / '0-9' / '0-9' / '0-9' / 4000 / | //////////////////////////////// / | ^ / |----XSADX | / | / |----NUMPTR / ///////////////////////////////////////////////////////////////////// / / ALL OF THE ROUTINES ACTIVATED BY THIS CASE STRUCTURE SEND ONE / OR MORE ESCAPE STRINGS. THE ROUTINES ARE CALLED ESC--- AND / THE STRINGS ARE DESIGNATED XS---. WHERE THE ESCAPE STRING HAS / A PARAMETER, THE ROUTINE WILL CONVERT THE BINARY VALUE INTO / ASCII AND STORE THE RESULT IN 'ESCNUM'. THE ESCAPE STRINGS ARE / STORED WITHOUT THE 'ESC [' AS THESE ARE PRESENT IN ALL ESCAPE / STRINGS. THE OUTPUT ROUTINE 'CSISTR' AUTOMATICALLY OUTPUTS / THOSE TWO COMPONENTS. ESC02, / NO LONGER A SUBROUTINE /C165 / WE SAVE PRYES. CERTAIN ESCAPE SEQUENCES MUST BE OUTPUT /A164 / EVEN IF PRINTING IS INHIBITED AS WE SCROLL THROUGH THE DOCUMENT /A164 / EXAMPLES OF THESE ARE THOSE THAT DO NOT CAUSE PRINTING BUT DO /A173 / AFFECT THE STATE OF THE PRINTER, SUCH AS PITCH, CHRSET, FONT, ETC. /A173 / THOSE ROUTINES THAT MUST OUTPUT EVEN IF PRINTING IS INHIBITED /A173 / CLEAR PRYES SOMEPLACE BEFORE CALLING PRCHAR /A173 TAD PRYES / SAVE PRYES INCASE PRINTING /A162 DCA PRYES1 / IS INHIBITED /A162 TAD (ESCNUM-1 DCA NUMPTR / INITIALIZE THE NUMERIC OUTPUT PTR TAD PRESCS / GET POINTER TO CASE CODE DCA ESCT1 / STORE TO INDIRECT THROUGH TAD I ESCT1 / GET THE CASE CODE AND P177 / STRIP ANY POSSIBLE NLQPSE BIT /A165 TAD (-60 / SUBTRACT BASE CODE VALUE ASCII 0 CLL RAL / MULTIPLY BY TWO WORDS PER ENTRY TAD (ESCCTB / ADD ESCAPE COMMAND TABLE BASE DCA ESCT1 / PREPARE TO READ THE TABLE PAIR TAD I ESCT1 / FIRST GET THE STRING ADDRESS DCA XSADX / SET THE STRING PTR ISZ ESCT1 / BUMP POINTER TAD I ESCT1 / GET THE ADDRESS OF THE ROUTINE DCA ESCT1 / STUFF IT FOR INDIRECT JMP I ESCT1 / JUMP TO THE CASED ROUTINE / WHEN WE ARE THROUGH SENDING THE ESCAPE SEQUENCE WE COME BACK HERE / TO MAKE A NICE CLEAN EXIT OF THIS ROUTINE PRESXT, CLA / CLEAR THE ACCUMULATOR TAD PRYES1 / RESTORE PRYES /A162 DCA PRYES / /A162 JMP PRESC4 / GO RETURN FROM PRESCS /C165 ESCT1, 0 PRYES1, 0 / SAVE PRYES HERE FOR ESC02 /A162 ESCCTB, / ESCAPE SEQUENCE TABLE /STRING ; /ROUTINE XSEXRP ; ESCXRP / 60 ENABLE/DISABLE EXTENDED REPORTS /A147 PRSTG0 ; PRESF / 61 SET G0 CHRSET /A151 PRSTG1 ; PRESF / 62 SET G1 CHRSET /A151 XDFONT ; PREFNT / 63 FONT SELECT /A152 XSPITCH ; CSIUWV / 64 DRAFT PRINTER PITCH /C173 XSTABL ; CSIUWV / 65 LQP02 TABLE SELECT /A173 XSTMRS ; PRESF / 66 RESET PRINTER (EXCEPT LQPSE) /C219 XSTMID ; CSIUWV / 67 REQUEST TERMINAL ID /A185 XSCOLA ; ESCSTV / 70 ABSOLUTE COLUMN POSITION /C222 XSPLD ; ESC9 / 71 ACCUMULATE VERTICAL ADVANCE XSTQM ; CSIUWV / 72 SET QUALITY MODE (ONLY FROM OVDDCK)/C193 XSMOVE ; ESCXB / 73 ACCUMULATE HORIZONTAL ADVANCE XSSS ; PRESF1 / 74 SS2 OR SS3 /C200 XSXD ; ESCXD / 75 ENABLE/DISABLE PROPORTIONAL PRINTING XSXE ; ESCSTG / 76 FORCE VERTICAL MOVEMENT XST94 ; ESCSTG / 77 TABLE ENTRY 94 FOR WHEEL POSITION XST95 ; ESCSTG / 100 TABLE ENTRY 95 FOR WHEEL POSITION XSCHRS ; ESCA / "A SET CHARACTER SIZE XSSPUM ; ESCB / "B SET PUM MODE XSRPUM ; ESCC / "C RESET PUM MODE XDRST ; ESCD / "D HIT COUNT XSMARG ; ESCE / "E SET MARGIN (IN HAI) XSSPAC ; ESCF / "F SET SPACE SIZE XSPLU ; ESCSTG / "G HALF LINE REVERSE /C193 XSPAGS ; ESCH / "H PAGE SIZE (IN LINES) XSPLD ; ESCSTG / "I HALF LINE FORWARD /C208 XSTRAY ; ESTGWV / "J SELECT TRAY XSTCSI ; PRESF / "K SETUP G2 AND G3 FOR TECHNICAL CHR /A200 XSGRAP ; ESCSTG / "L BEGIN SIXEL GRAPHICS /C222 XSGRET ; ESCSTG / "M END SIXEL GRAPHICS /C222 XSSGR ; ESTGWV / "N SGR, 1 PARAMETER /A211 XSPFS ; CSIUWV / "O PFS, PAGE FORMAT SELECT /A215 XSIVPR ; ESTGWV / "P increment vertical position rel. /a229 XSDVPR ; ESTGWV / "Q decrement vertical position rel. /a229 XSIHPR ; ESTGWV / "R increment horizontal position rel. /a229 XSDHPR ; ESTGWV / "S decrement horizontal position rel. /a229 XDRST ; ESCDR / "T reset attributes /a234 ESC9, /***********************************************************************/ / / / ESMVV--PART OF PRESCS WHICH HANDLES VERTICAL MOVEMENT / / DESIGNED TO WORK FOR LQP02, LQP03, AND ALL DP / / / / CURRENTLY THE ASSUMPTION IS THAT THE VERICAL PITCH IS / / ALWAYS 6 LINES PER INCH AND IS NEVER CHANGED / / A PLU OR PLD IS A 1/2 A LINE OR 1/12 INCH / / / / ALL REVERSE MOTION IS DONE WITH PLU / / / /***********************************************************************/ ESMVV, /ESCAPE SEQUENCE--VERTICAL MOTION TAD PREST1 /GET SIGNED AMOUNT IN 48THS SNA /SKIP IF MOTION REQUIRED JMP PRESXT /NO MOTION REQUIRED SMA /IF POSITIVE NEGATE CIA STL RAR STL RAR /DIVIDE BY 4, NOW WE HAVE 12THS DCA ESCT1 /SAVE BACK AS A COUNTER / IF THE MOTION IS REVERSE WE HANDLE BY DOING THE PROPER NUMBER / OF PLD COMMANDS TAD PREST1 SMA CLA JMP ESMVV2 /GO HANDLE FORWARD MOTION TAD (XSPLU) DCA XSADX /SET UP STRING ADDRESS ESMVV1, JMS ESCST /PUT OUT STRING AC7777 TAD XSADX DCA XSADX /BACK UP STRING POINTER ISZ ESCT1 /SEE IF WE ARE DONE JMP ESMVV1 /NO JMP PRESXT /YES /---------------------- PAGE / ESCD IMPLEMENTS THE TEXT ENHANCEMENT FUNCTIONS / / / PREST1 CONTAINS THE VALUE DEPOSITED BY THE SPOOLER WHICH IS THE SUM / OF THE BOLD BIT AND THE DARKNESS BIT. THIS ROUTINE ADDS IN / 'DARKNESS' (BIT 11 OF PRQOVP) AGAIN, TO ISOLATE THE BOLD BIT. / THE RESULT IS THEN EXCLUSIVE OR'ED WITH THE SHADOW BIT / (BIT 5 OF PRQOVP). THE RESULT OF THIS IS THEN ADDED TO BIT 11 / OF PRQOVP (DARKNESS) TO YIELD THE HIT COUNT. / / (BOLD EXOR SHADOW) + (DARKNESS) ==> HIT COUNT / / THE EFFECT OF THIS IS THAT 'BOLD' TEXT WITH THE 'SHADOW' ATTRIBUTE / IS NOT GIVEN AN EXTRA 'HIT'. / THE 'BOLD' BIT IS THEN AND'ED WITH THE 'SHADOW' BIT, SO THAT / ONLY 'BOLD' TEXT IS PRINTED AS SHADOW, IF WE ARE IN SHADOW MODE. / THE HIGHLIGHTING MODES OF THE LQP02 ARE THEN RESET AND THE / ESCAPE SEQUENCES GENERATED TO A)SET SHADOW PRINTING MODE, B)SET / SECONDARY MODE IF 2 HITS REQUIRED, C)SET PRIMARY MODE IF 3 HITS / REQUIRED. / ESCD, / BEFORE CALLING PRESCS(PCBOLD), SPOOLER DID : / RAL PUTTING 'BOLD' BIT IN ACC 11 / TAD PRQOVP ADDING IN THE DARKNESS BIT / GIVING A VALUE IN ACC OF 0-2. BY ADDING IN DARKNESS / AGAIN, ACC BIT 11 WILL REFLECT THE ORIGINAL VALUE OF 'BOLD' / BOLD + DARK + DARK / 0 0 0 = 00 / 0 1 1 = 10 / 1 0 0 = 01 * / 1 1 1 = 11 * / JMS CSISTR / OUTPUT 'RESET' ESCAPE STRING TAD PREST1 / GET HIT COUNT SPA / IF POSITIVE CONTINUE, /A060 JMP DSABL / ELSE DISABLE HAMMAR FOR TW PASS /A060 TAD PRQOVP / CANCEL DARKNESS COMPONENT DCA ESCT1 / ESCT1 = BOLD BIT (AC11) / AC0001 AND PRQSP / ISOLATE BIT 11 DCA ESCT2 / ESCT2 = SHADOW BIT (AC11) / TAD ESCT2 AND ESCT1 / SHADOW (AND) BOLD => ACC 11 RAR / INTO LINK CLA TAD (XDSHAD / SEND SHADOW IF BOLD AND SHADOW JMS XDSTR SNL / BOLD BIT IS IN LINK JMP ESCDRK / ACC IS CLEAR TAD ESCT2 / BOLD, SO IF NOT SHADOW CMA AND (1 / THEN INCREMENT HIT COUNT ESCDRK, TAD PRQOVP / ADD DARKNESS DCA ESCT1 TAD UNDERL / GET UNDERLINE FLAG CLL RAR TAD (XDUNDR JMS XDSTR / (MAYBE) SEND UNDERLINE ENABLE / TAD (XDSEC JMS XDSTR / (MAYBE) SEND SECONDARY ENABLE TAD (XDPRIM ECXT, JMS XDSTR / (MAYBE) SEND PRIMARY ENABLE JMP PRESXT / RETURN / XDSTR, XX / DCA XSADX / FIX UP STRING PTR SZL / IF TRANSMIT ENABLED JMS CSISTR / THEN SEND THE ESCAPE STRING / TAD ESCT1 RAR DCA ESCT1 / SET UP TO TEST FOR NEXT STRING JMP I XDSTR / RETURN /DISABLE PRINT HAMMAR ROUTINE, USED FOR TWO WHEEL PRINTING DSABL, CLA CLL CML / CLEAR AC AND SET LINK SO ESCAPE IS SENT TAD (XDSBL / GET ESCAPE SEQUENCE TO DISABLE HAMMAR JMP ECXT / SEND TO PRINTER AND EXIT / UNDERL, 0 / UNDERLINE FLAG ESCT2, 0 /***********************************************************************/ / / / ESCXRP--ENABLE EXTENDED REPORTS (ALL EXCEPT LQPSE) /A147 / / / ESCXRP, AC0003 / CODE TO ENABLE REPORTS AND GET ONE / JMP XSMXT / GO TRANSMIT. NOTE WE WILL RETURN / / RETURN WITH CLEAR AC SINCE WE DID / / DID NOT LOAD PREST1 / /***********************************************************************/ ////////////////////////////////////////////////////////////////// / / CHARACTER SIZE IS SET BY MULTIPLYING THE 120ths COUNT IN PREST1 / BY 6, AS REQUIRED BY THE LQP02. THE LQP02 DIVIDES THE RECEIVED / SIZE PARAMTER TO YIELD ITS 'HAI' IN 120ths. / / LIKEWISE FOR SETTING SPACE SIZE / / / /D051 ESCF, / SET SPACE SIZE ESCA, / SET CHARACTER SIZE TAD PREST1 / MULTIPLY BY 6 CLL RTL / BY MULTIPLYING BY 4 TAD PREST1 / AND ADDING TWICE MORE JMP ESTGWV / (ONCE MORE AT ESTGWV) CSIUWV, / UNCONDITIONAL CSI WITH VALUE /A174 DCA PRYES / OUTPUT EVEN IF PRINTING INHIBITED /A173 ESTGWV, / ESCAPE STRING WITH VALUE TAD PREST1 XSMXT, JMS ESCOUT / CONVERT TO ASCII AND STUFF INTO STRING JMS CSISTR / AND TRANSMIT /A222 JMP PRESXT / RETURN / /////////////////////////////////////////////////////////////////////////// / / / PAGE SIZE IS DELIVERED IN 48THS. DIVIDE BY LINE SIZE TO GET / THE PAGE SIZE IN LINES, WHICH IS WHAT THE LQP02 LIKES / ESCH, / SET PAGE SIZE TAD LPONLN / INIT DIVIDEND TO 5 FOR ASF OR 0. /M093 AND (ASFMSK) / /A113 SZA CLA / SKIP IF NOT ASF. SET PAGE SIZE AS SPEC/A095 TAD (5) /IFIED. IF ASF ADD 5 (TOO MAKE PAPER FEED/A095 DCA ESCT2 /INTO FEEDER TRAY. /M095 TAD (PRNLSZ / ALWAYS = 8 FOR 6 LINES/INCH JMP XSDX / DIVIDE, CONVERT, PUT IN STRING AND TX / HORIZONTAL ADVANCE COMMAND ESCXB, TAD PREST1 / TO THE RIGHT OR THE LEFT? SMA / MINUS MEANS LEFT. JMP XSMXT / GO DO THE RIGHT THING. CIA / MAKE POSITIVE. DCA ESCT2 / SAVE AMOUNT TO MOVE TAD XSLEFT / SET "LEFT" MOVEMENT COMMAND. DCA XSADX / SET STRING ADDRESS... ESCXB1, /A219 TAD ESCT2 / GET AMOUNT TO MOVE JMP XSMXT / DO THE LEFT THING. / ////////////////////////////////////////////////////////////////////////// / / SET LEFT MARGIN / THE LEFT MARGIN IS DELIVERED AS A 120THS COUNT. DIVIDE THIS BY / THE CHARACTER SIZE TO GET THE LEFT MARGIN IN SPACES, WHICH IS WHAT / THE LQP02 LIKES / ESCE, AC0001 / INIT DIVIDEND. LM BEGINS AT 1 (NOT 0)./A082 DCA ESCT2 / ... /A082 TAD PLNRCS / DIVIDE 120THS MARGIN BY CHARACTER SIZE XSDX, CIA / THE DIVISOR MUST BE IN ACC UPON ENTRY DCA ESCT1 / IT WILL BE REPEATEDLY SUBTRACTED / FROM THE DIVIDEND, GIVING QUOTNT / TAD PREST1 / GET THE DIVIDEND DVLP, TAD ESCT1 / SUBTRACT THE DIVISOR SPA / UNTIL NEGATIVE JMP DIVX / ISZ ESCT2 JMP DVLP DIVX, CLA / /M082 TAD ESCT2 / NO REMAINDER, SO ACC ALWAYS ZERO JMP XSMXT / GO STUFF VALUE, OUTPUT A CSI STRING /C222 / / ////////////////////////////////////////////////////////////////////////// / / / THE FOLLOWING JUST SEND THE STRING DESIGNATED BY THE ADDRESS / IN THE CALLING CASE TABLE. / ESCXD, / ENABLE/DISABLE PROPORITONAL PRINTING ESCB, / SET PUM MODE. /A080 ESCC, / RESET PUM MODE. /A080 ESCDR, / reset underline/bold flags /a234 JMS CSISTR JMP PRESXT / RETURN /////////////////////////////////////////////////////////////////////// / / ESCOUT - CALL THE BINARY TO ASCII BCD CONVERSION ROUTINE / AND PUT RESULT INTO THE ESCAPE STRING. GET READY TO TX IT / ESCOUT, XX MQL / SAVE THE VALUE /A143 TAD (ESCNUM-1 / SET UP NUMPTR /A143 DCA NUMPTR / /A143 ACL / RESTORE THE VALUE /A143 JMS ASCOUT / MAKE IT ASCII NUMERIC DCA I XSNX / PUT IT BACK TAD (ESCNUM / ADDRESS OF BEGINNING OF STRING DCA NUMPTR / READY FOR OUTPUT /D222 JMS CSISTR / SEND THE ESCAPE STRING JMP I ESCOUT / RETURN TO PRESCS XSNX, 0 PRESF, / ESCAPE SEQUENCE WITH "FINAL" STRING /A151 DCA PRYES / ENABLE OUTPUT EVEN IF PRINTING OFF /A164 PRESF1, TAD PREST1 / GET ADDRESS PASSED TO PRESCS /C200 DCA NUMPTR / SAVE AS THE SUBSTRING /A151 /C160 ESCSTG, /HERE TO OUTPUT STRING WITH NO VALUE /A222 /*** ONLY IF PRINTING ENABLED *** /A188 JMS ESCST / DO STRING WITH SUBSTRING FINAL /A151 JMP PRESXT / GO EXIT /A151 ESCSTV, /ESCAPE STRING WITHOUT CSI PREFIX /A222 TAD PREST1 / GET VALUE /A222 JMS ESCOUT / CONVERT /A222 JMP ESCSTG / GO OUTPUT /A222 /------------------- PAGE / FLABUZ will do 1 of 3 things to top middle of menu pages: / 1. Display "PRINTER STOPPED" when PRSTTS indicates a / printer stop condition (PRSTTS greater than 1). / (will buzz on 1st pass). / / 2.Display "PRINTER BUSY" when status word PRSTTS / indicates printing (is 0001). / / 3.Blank out previous message when printer 1st changes / to idle. (PRSTTS=0) / AND ONLY one thing when called from the editor: /M171 / The FIRST time that a STOPPED condition is detected the PRINTER /M141 / STOPPED message will be displayed and the buzzer shall buzz. /M141 FLABUZ, XX / SUBROUTINE ENTRY POINT /A098 CLA / MAKE SURE THAT ACCUMULATOR IS CLEAR /M171 TAD CIDF0 / GET CIF CDF INSTRUCTION /M156 RDF / MAKE IT WORK TO THE CALLERS FIELD /M156 DCA FLEXIT / AND PATCH INTO EXIT ROUTINE /M171 / TIME will exit FLABUZ if at least one second has not elapsed since the last / time the saved time was tested. TIME is necessary because of the large / system overhead caused when direct cursor addressing is used in both / DECmate-I and DECmate-II. TIME serves not so much to reduce the number of / instructions executed but to eliminate escape sequences which can cause the / panel code to be executed for a fairly long time (about 1 millisecond in / DECmate-I), causing possible system problems such as dropped characters. TIME, CDFSYS / CHANGE DATA FIELD TO SYSTEM FIELD TAD I (CLOCK+2) / GET THE ONCE PER SECOND COUNTER CIA / NEGATE THE VALUE TAD TIMESE / ADD WHAT IT WAS THE LAST TIME WE LOOKED SNA CLA / HAS IT CHANGED? JMP FLEXIT / NO, SO EXIT FLABUZ /C120 TAD I (CLOCK+2) / GET THE TIME AGAIN CDFMYF / RESET DATA FIELD TO THIS FIELD /A133 DCA TIMESE / AND SAVE FOR NEXT TIME TAD FLEXIT / GET CALLER'S CIF-CDF INSTRUCTION /A171 TAD (-6233) / COMBINE WITH NEGATIVE OF EDIT FIELD /A171 SZA CLA / IS THIS CALL COMMING FROM THE EDITOR /A171 JMP FLABZ1 / NO, CONTINUE WITH NORMAL FLOW /A171 JMS FLTEST / YES, EXIT IF STATUS HAS NOT CHANGED /A171 AC7776 / CHECK FOR PRINTER/SPOOLER STOPPED /A110 TAD PRSTTS / ... /A110 SPA CLA / DO WE NEED TO FLASH STOPPED MSG? /A110 JMP FLEXIT / NO, EXIT BECAUSE OF CALL FROM EDITOR /A110 JMP FLABZ2 / YES, DISPLAY STOPPED MESSAGE ONLY ONCE/A110 FLABZ1, TAD PRSTTS / GET CURRENT PRINTER STATUS /A171 CIA / NEGATE VALUE /A171 SNA / IS STATUS VALUE EQUAL TO ZERO ? /A171 JMP BLANKP / YES, GO BLANK PREVIOUS STATUS MESSAGE /A171 IAC / INCREMENT STATUS VALUE /A171 SNA CLA / IS STATUS VALUE EQUAL TO ONE ? /A171 JMP PNTING / YES, GO PUT UP "BUSY" MESSAGE /A171 FLABZ2, CIFMNU / NO, PUT UP PRINTER/SPOOLER STOPPED /A171 JMS I IOACAL / USE IOA TO OUTPUT STRING TO SCREEN /A098 0 / USE IOA DEFAULT OUTPUT ROUTINE /A098 PRTEXT / CONTROL STRING TO DISPLAY "PRINTER" /M141 TOPMID / SAVE CURSOR, SELECT TOP MIDDLE SCREEN./M141 BLKREV / SET BLINK, REVERSE ATTRIBUTES /M141 STPTXT / TEXT FOR "STOPPED" /A141 LED4ON / TURN LED 4 ON AND RESTORE CURSOR /A141 JMS FLTEST / EXIT IF STATUS HAS NOT CHANGED /A171 SNDBUZ, CIFMNU / SOUND_BUZZER /A098 JMS I IOACAL / USE IOA TO OUTPUT STRING TO SCREEN /A098 0 / USE IOA DEFAULT OUTPUT ROUTINE /A098 CSTRNG / ADDRESS OF CONTROL STRING /A098 BELTXT / ADDRESS OF BELL CODE /A098 JMP FLDONE / GO UPDATE STATUS VALUE AND EXIT /A171 BLANKP, JMS FLTEST / EXIT IF STATUS HAS NOT CHANGED /A171 CIFMNU / DON'T ERASE MORE THAN ONCE /A098 JMS I IOACAL / USE IOA TO OUTPUT STRING TO SCREEN /A098 0 / USE IOA DEFAULT OUTPUT ROUTINE /A098 BLANKM / SEQUENCE TO ERASE MIDDLE OF SCREEN /M141 TOPMID / SAVE CURSOR, SELECT TOP MIDDLE SCREEN./M141 LEDOFF / TURN LED 4 OFF AND RESTORE CURSOR /A141 JMP FLDONE / GO UPDATE STATUS VALUE AND EXIT /A171 PNTING, CIFMNU / DISPLAY PRINTER BUSY MESSAGE /A098 JMS I IOACAL / USE IOA TO OUTPUT STRING TO SCREEN /A098 NULTXT, 0 / USE IOA DEFAULT OUTPUT ROUTINE /A098 PRTEXT / CONTROL STRING TO DISPLAY "PRINTER" /M141 TOPMID / SAVE CURSOR, SELECT TOP MIDDLE SCREEN./M141 NULTXT / NUL TEXT STRING (POINTS TO A ZERO) /A141 BSYTXT / ADDRESS OF "BUSY " TEXT /A098 LEDOFF / TURN LED 4 OFF AND RESTORE CURSOR /A141 / AND FALL THRU TO EXIT /A098 FLDONE, TAD PRSTTS / GET CURRENT PRINTER STATUS /A171 DCA PREVST / SAVE FOR NEXT PASS TO REFERENCE /A171 JMP FLEXIT / DONE, GO RETURN TO CALLER /A171 FLTEST, XX / CHECK FOR PRINTER STATUS CHANGE /A171 TAD PRSTTS / GET CURRENT PRINTER STATUS /A098 CIA / MAKE IT NEGATIVE /A098 TAD PREVST / GET PREVIOUS STATUS (FROM LAST PASS) /A098 SZA CLA / HAS THERE BEEN A CHANGE ? /A171 JMP I FLTEST / YES, GO HANDLE THE DIFFERENCE /A171 FLEXIT, XX / LOADED WITH A CDF CIF TO CALLERS FIELD/M171 JMP I FLABUZ / RETURN TO CALLER PREVST, 0 / FOR STORAGE OF PREVIOUS STATUS /A098 TIMESE, 0 / FOR STORAGE OF CURRENT SECOND COUNT /M171 / ASCOUT CONVERTS A BINARY CODED VALUE IN THE RANGE / 0000-3777 INTO ITS ASCII ENCODED BCD EQUIVALENT / LEADING ZEROS ARE SUPPRESSED, BUT AT LEAST ONE CHARACTER / IS CONVERTED, EVEN IF IT IS A ZERO. THE RESULT IS PLACED IN / THE BUFFER POINTED TO BY NUMPTR / / THE LAST CHR CONVERTED IS MARKED WITH THE 4000 BIT /A196 / ENTER ACC = BINARY VALUE / NUMPTR = ADDRESS OF OUTPUT STORAGE / EXIT ACC = 0 / NUMPTR = ADDRESS OF LAST DIGIT PLACED IN OUTPUT / SIGNIFICANT ASCII OUTPUT / ASCOUT, 00 DCA BINVAL / TEMP STORAGE FOR INPUT VALUE TAD (DECTAB-1 DCA DECPTR / SET POINTER TO WEIGHTED DECIMAL VALUE DCA ASCFLG / / ASCLP1, DCA ASCNT / ZERO THE RESULT COUNT ISZ DECPTR / GET NEXT DECIMAL WEIGHT TAD I DECPTR SNA / IF ITS ZERO, WE'RE DONE JMP ASCOUX / GO CLEANUP & EXIT /C196 CMA / IF ITS (-1) CMA MAKES IT 0000 SNA CLA / IF ITS (-1), SET FLAG SO AT ISZ ASCFLG / LEAST ONE DIGIT IS OUTPUT / ASCLP2, TAD BINVAL TAD I DECPTR / SUBTRACT DECIMAL WEIGHT FROM BINARY SPA JMP ASCDGT / UNTIL BINARY GOES NEGATIVE DCA BINVAL ISZ ASCNT / COUNTING UP THE ASCII WEIGHT JMP ASCLP2 / ASCDGT, CLA TAD ASCFLG / HAS ANYTHING GONE OUT YET ? TAD ASCNT / GET THE RESULT SNA CLA JMP ASCLP1 / THIS DOES NOT OUTPUT LEADING ZEROS ISZ NUMPTR TAD (60 / CONVERT COUNT TO ASCII TAD ASCNT DCA I NUMPTR / PUT ASCII VALUE INTO OUTPUT /M073 ISZ ASCFLG / NON-LEADING ZEROS MUST BE OUTPUT JMP ASCLP1 / ASCOUX, AC4000 / FLAG LAST CHARACTER OUTPUT /A196 TAD I NUMPTR / /A196 DCA I NUMPTR / /A196 JMP I ASCOUT / EXIT /A196 ASCFLG, 0 / DONT OUTPUT ZEROS UNTIL THIS IS SET DECPTR, 0 / PTR INTO THE FOLLOWING TABLE DECIMAL DECTAB, -1000 -100 -10 -1 0 OCTAL BINVAL, 0 / THIS GETS DIMINISHED BY ADDING FROM / / THE ABOVE TABLE ASCNT, 0 / THIS GETS INCREMENTED UNTIL BINVAL / / IS NEGATIVE /---------------------- PAGE PREFNT, / ENABLE A PARTICULAR FONT /A152 DCA PRYES / ENABLE OUTPUT EVEN IF PRINTING OFF /A164 TAD PREST1 / GET THE VALUE /A152 AND (17 / ALLOW FONTS 8,9,10 /C215 TAD (11 / FONT 1 MEANS A VALUE OF 10 /A152 JMP XSMXT / GO TRANSMIT A VALUE IN A CSISTR /A152 /***********************************************************************/ / / / PRQRX---GENERAL PURPOSE ROUTINE TO READ/WRITE THE DISK / / / / CALLING SEQUENCE: / / TAD BLKNO /LOAD AC WITH BLK NO / / JMS PRQRX / / FUNCTION CODE /E.G. RXERD+4000 / / DRIVE /E.G. 0 FOR SYSTEM DISKK / / BUFFER ADDRESS / / JMP ERROR / ERROR RETURN / / ... / NORMAL RETURN / / / /***********************************************************************/ PRQRX, XX DCA PRQB+RXQBLK / SET BLOCK NUMBER IN QBLK /A183 TAD I PRQRX / PICK UP FUNCTION CODE /A183 DCA PRQB+RXQFNC / SET IN QBLK /A183 ISZ PRQRX / NEXT PARAMETER /A183 TAD I PRQRX / PICK UP DRIVE NUMBER /A183 DCA PRQB+RXQDRV / SET IN QBLK /A183 ISZ PRQRX / NEXT PARAMETER /A183 TAD I PRQRX / PICK UP THE BUFFER ADDRESS /A183 DCA PRQB+RXQBAD / SET IN QBLK /A183 ISZ PRQRX / NEXT PARAMETER /A183 PRQRX1, CIFSYS / QUEUE THE REQUEST ENQUE PRQBLK PRQRX2, JMS SQPINP /HANDLE ANY CHRS COMING BACK /A113 CIFSYS /WAIT JWAIT TAD PRQB+RXQCOD /GET THE DONE FLAG SNA /SKIP IF DONE /M059 JMP PRQRX2 /IF ZERO SERVICE NOT DONE /A059 SMA CLA /SKIP BUMP IF ERROR / WE HAVE HAD A READ ERROR. RETURN TO CALLER WITHOUT BUMPING /A183 / RETURN ADDRESS /A183 ISZ PRQRX /BUMP RETURN IF NO ERROR /A183 JMP I PRQRX MISCTL, AC0004 / MISSING END CONTROL /A183 PRQSDE, IAC /SYSTEM DISK READ ERROR HERE /C183 PRQDDE, TAD (22) /DOCUMENT DISK READ ERROR HERE /C183 JMS STSTTS /SET PRINTER STATUS /C122 TAD (OVSTP1 /A059 JMS PROV /A059 OBSTP1 RDFIO4, / ENTRY POINT TO CREATE A DOCUMENT READ /A009 / FATAL ERROR FROM OTHER PLACES /A009 / USED IF THE HEADER BLOCK NUMBER IS /A009 / FOUND TO BE 0000 /A009 CLA / CLEAR AC AND /A009 DCA PRQB+RXQCOD / MAKE THIS LOCATION ZERO INCASE /A009 / USER HITS RESUME AFTER ENTERING /A009 / THE STOP PRINTER MENU TO SERVICE /A009 / THE ERROR. IN THIS WAY THE RESUME /A009 / COMMAND WILL NOT DO ANYTHING AND /A009 / THE USER WILL EVENTUALLY HAVE TO "S" /A009 JMP PRQDDE / GO ENTER ABOVE TO CREATE DOC RD ERR /A009 /THIS IS THE INFORMATION BLOCK FOR DISK BLOCKS REQUESTED BY THE PRINTER. PRQBLK, DSKQUE;0;0 PRQB, 0 / RXQCOD FLAGS RETURNED HERE 0 / RXQFNC FUNCTION CODE 0 / RXQDN1 0 / RXQDN2 0 / RXQFNO FILE NUMBER 0 / RXQID1 0 / RXQSPC 0 / RXQCTL 0 / RXQDRV DRIVE NUMBER 0 / RXQBLK BLOCK NUMBER 0 / RXQRS1 0 / RXQBAD BUFFER ADDRESS CDFMYF / RXQBFD BUFFER FIELD CDF 0 / RXQTRK TRACK 0 / RXQSEC SECTOR /***********************************************************************/ / / / CSISTR--ROUTINE TO OUTPUT ESC [ FOLLOWED BY A STRING / / THE STRING MAY CONTAIN A PARAMETER, TYPICALLY / / A STRING OF ASCII DIGITS ALREADY STORED AT "NUMPTR" / / / /***********************************************************************/ CSISTR, XX TAD (ESC JMS PRCHAR TAD (133 JMS PRCHAR / [ JMS ESCST / OUTPUT THE REST OF THE STRING JMP I CSISTR / RETURN /***********************************************************************/ / / / ESCST--OUTPUTS STRINGS / / ENTER ACC = 0 / / XSADX = POINTER TO STRING / / NUMPTR = POINTER TO SUBSTRING (NUMERIC PARAMTER) / / / / IF AN ASCII '*' IS ENCOUNTERED IN THE STRING AT XSADX / / CONTROL IS PASSED TO THE SUBSTRING. THE SUBSTRING IS / / USUALLY A NUMERIC PARAMETER BUT NOT NEED BE / / / / THE LAST CHARACTER OF A STRING HAS THE SIGN BIT SET / / / /***********************************************************************/ ESCST, XX / ROUTINE TO JUST OUTPUT STRINGS ESCST1, TAD I XSADX / GET CHARACTER FROM STRING AND (2177 / MASK POSSIBLE END BIT /C201 TAD (-52 / IF CHAR = '*' SNA CLA JMP TXENUM / THEN TRANSMIT NUMERIC STRING TAD I XSADX / ELSE GET CHARACTER AND P177 / REMOVE POSSIBLE END MARK JMS PRCHAR / SEND THE CHARACTER ESLP, TAD I XSADX / IF CHAR SENT WAS LAST ONE SPA CLA JMP I ESCST / THEN RETURN ISZ XSADX / ELSE POINT TO NEXT CHAR JMP ESCST1 / CONTINUE / TXENUM, TAD I NUMPTR / GET NUMERIC CHARACTER AND P177 / REMOVE POSSIBLE END MARK JMS PRCHAR TAD I NUMPTR / WAS THAT THE LAST ONE ? ISZ NUMPTR / BUMP POINT NOW! /C196 SPA CLA JMP ESLP / YES, BACK TO CHARACTER STRING JMP TXENUM ESCNUM, 0 ; 0 ; 0 ; 0 /***********************************************************************/ / / / PTSTST--TEST FOR STOP. IF THE USER WANTS TO STOP WE INVOKE / / THE STOP OVERLAYS. THIS ROUTINE SHOULD ONLY BE CALLED / / WHEN WE ARE PROCESSING A CONTROL STATEMENT (WHICH BY / / DEFINITION CAN OCCUR ONLY BETWEEN LINES). THE STOP / / OVERLAYS ARE OF TYPE OVTYPE=OLC. ALL OTHER TYPE C / / OVERLAYS MUST BE CAPABLE OF BEING OVERLAYED BY THE / / STOP CODE WHICH THIS ROUTINE MAY INVOKE / / / /***********************************************************************/ PTSTST, XX /TEST FOR STOP /A162 TAD PRSTOP / DOES USER WANT TO STOP? SNA CLA JMP I PTSTST / NO, RETURN AC0001 / YES, SET FLAG /A162 DCA PRSTPF / INDICATING SPECIAL STOP /A162 TAD (OVSTP2 / GO TO STOP OVERLAY JMS PROV OBSTP2 PTSTSX, / COME BACK HERE IF R, P, C RESPONSE /A162 DCA PRSTPF / CLEAR FLAG /A162 JMP I PTSTST / AND RETURN /A162 PRSTPF, 0 / SPECIAL STOP FLAG /A162 IDSTTM, XX / ROUTINE TO SET THE TIMER /A109 / READ LOCATION TIMOUT IN SYS AND ADD DELAY /A109 / IN SECONDS /A109 DCA T2 / SAVE THE PRTID TIME DELAY /A109 CDFSYS / /A109 TAD I (TIMOUT / GET VALUE OF THE SYS TIMER /A109 CDFMYF /A109 TAD T2 / ADD THE DELAY /A109 DCA IDTMC / SAVE AS THE VALUE TO COMPARE AGAINST /A109 JMP I IDSTTM / RETURN /A109 /------------------ PAGE /CAUTION - THE FOLLOWING TWO PAGES ARE OCCUPIED BY THE BLKBOX ROUTINE /A002 / AND TSTFUL ROUTINE DUE TO LACK OF SPACE IN THE EDITOR AND /A002 / SYSTEM FIELDS RESPECTIVELY. /A002 /CAUTION - THE FOLLOWING TWO PAGES ARE OCCUPIED BY THE BLKBOX ROUTINE /A002 / DUE TO LACK OF SPACE IN THE EDITOR AND WPSYS /C175 / /A021 /++ /A021 /BLACKBOX PROGRAM FOR VIDEO COSMETICS /A021 / /A021 /FUNTIONAL DESCRIPTION: BLKBOX /A021 / BLKBOX points us to the user's video cosmetics routine. It /A021 / sets up parameters needed for exiting video cosmetics as well /A021 / as pointing to the callers TTYOU routine. In the case of a two /A021 / user system (WS82) it determines which user called and sends us /A021 / to that user's video cosmetic routine. /A021 / /A021 / BLACKBOX PSEUDO-CODE: /A021 / /A021 / BLKBOX: hold character /A021 / setup for exit to caller's field /A021 / get pointer to user's TTYOU routine /A021 / if [defined WS82] /A021 / determine which user called. (result in LINK) /A021 / cdf to my field /A021 / if [defined WS82] /A021 / if [user2 called] /A021 / exit to USER2 /A021 / exit to USER1 /A021 / /A021 /CALLING SEQUENCE:EDOCHR, XX /M021 / CDFMYF /A021 / CIFPRT /A021 / JMS I (BLKBOX) /A021 / JMP I EDOCHR /A021 / /A021 / BLKBOX IS CALLED FROM THE EDITOR (WPEDIT) AS ABOVE. /A021 / /A021 /INPUT PARAMETERS: /A021 / AC contains character to be displayed along with attrib. bits. /A021 / /A021 /IMPLICIT INPUTS: TTYPTR, BLKBOX /A021 / /A021 /OUTPUT PARAMETERS: AC = Subroutine return address /A021 / MQ = char. and attribute bits /A021 / /A021 /IMPLICIT OUPUT: HLDFLD, TTYHLD /A021 / /A021 /COMPLETION CODE: none /A021 / /A021 /SIDE EFFECTS: /A002 / 1) Due to lack of room in fld. 3 (and fld.5 if WS82) of the /A021 / WPEDIT, BLACKBOX resides here in field 1 of WPRINT at /A021 / address 4000. If location of BLKBOX is changed be sure to /A021 / change WPF1.PA (BLKBOX = 4000). /A021 / /A021 /-- /A021 /USER1 AND USER2 VIDEO COSMETICS /A021 / /A021 /FUNCTIONAL DESCRIPTION: USER1 and USER2 /A021 / The USER1 and USER2 routines turn on or off the character /A021 / attributes of the video display controller, to enable the user /A021 / to see attributed text (bolded, underlined, bolded & underlined)/A021 / as it will appear in a printed document. /A021 / /A021 / USER1 and USER2 PSEUDO-CODE /A021 / /A021 / The pseudo code described here is applicable for both routines. /A021 / It appears here so as not to be redundant at USER2's listing. /A021 / /A021 / USER1 and USER2: /A021 / save return address /A021 / save character /A021 / get cif cdf instruction /A021 / save it /A021 / get pointer to user's TTYOU routine /A021 / install it /A021 / get character's attribute /A021 / store in current attribute location /A021 / if [current char. attrib. = prev. char. attrib.] /A021 / process char /A021 / else /A021 / if [prev. char. was attributed] /A021 / turn off attributes /A021 / set prev. attribute = -current attribute /A021 / CASE ATTRIBUTE MODE OF /A021 / 0 : NO ATTRIBUTES /A021 / 1 : BOLD /A021 / 2 : UNDERLINE /A021 / 3 : BOLD & UNDERLINE /A021 / 4 : SUPERSCRIPT /A021 / 5 : BOLD (+ SUPERSCRIPT) /A021 / 6 : SUBSCRIPT /A021 / 7 : BOLD (+ SUBSCRIPT) /A021 / process character /A021 / /A021 / ATTRIBUTE ROUTINE(ALL OFF, BOLD, UNDERLINE) /A021 / TYPE 'ESCAPE' (ASCII 33) /A021 / TYPE '[' /A021 / TYPE APPROPRIATE CODE (0, 1, OR 4 RESPECTIVELY) /A021 / TYPE 'm' /A021 / /A021 / /A021 / TYPE CHAR ON SCREEN /A021 / /A021 / REPEAT /A021 / TRY TO PUT CHAR ON SCREEN & IN BUFFER /A021 / UNTIL BUFFER NOT FULL /A021 / /A021 / ATTRIBUTE ROUTINE(BOLD & UNDERLINE) /A021 / DO ATTRIBUTE ROUTINE (BOLD) /A021 / DO AN UNDERLINE /A021 / /A021 / /A021 / PROCESS CHAR /A021 / /A021 / GET CHAR /A021 / MASK OUT MODE BITS /A021 / TYPE IT /A021 / CHANGE INSTR. & DATA FIELD TO CALLER FIELD /A021 / EXIT ROUTINE /A021 / /A021 / THIS ROUTINE ACCEPTS ATTRIBUTED ASCII CHARS FROM THE EDITOR AND /A021 / PROCESSESES THEM ACCORDING TO THE SPECIFICATIONS GIVEN IN /A021 / "VT278 - THE PHASE II PLAN" /A021 / -- SECTION 8.4.16 -- /A021 / "ESC[Xm" TO THE TERMINAL PRODUCES ATTRIBUTED CHARS THEREAFTER, /A021 / WHERE X = 0 ALL ATTRIBUTES OFF /A021 / 1 DISPLAY BOLDED /A021 / 4 DISPLAY UNDERLINED /A021 / /A021 /INPUT PARAMETERS: AC = Subroutine return address /A021 / MQ = character with attribute bits /A021 / /A021 /IMPLICIT INPUTS: HLDFLD, TTYHLD, CHAR, CURATR, PRVATR, ATRBUT /A021 / P177 /A021 / /A021 /OUTPUT PARAMETER: AC = 0 /A021 / /A021 /IMPLICIT OUTPUT: USER1EXIT, CHAR, EXTFLD, TTYOUP, CURATR, /A021 / PRVATR, ATRBUT /A021 / /A021 /COMPLETION CODE: none /A021 / /A021 /SIDE EFFECTS: /A021 / 1) USER1 and USER2 should ONLY be called through the BLKBOX /A021 / routine due to dependence on parameters supplied by BLKBOX. /A021 / 2) Due to lack of room in fld. 3 (and fld.5 if WS82) of the /A021 / WPEDIT, USER1 and USER2 resides here in field 1 of WPRINT. /A021 / /A021 /WPEDIT LOOKS AT CURATR IN THE BOLDING AND UNDERLINING OF TABS /A057 CURATR, 0 / CURRENT ATTRIBUTE /M057 BLKBOX, XX /A021 DCA CHAR /SAVE CHARACTER /M186 TAD CIDF0 /SETUP FOR EXIT TO PROPER FIELD /A021 RDF /A021 DCA EXTFLD /PLACE IN EXIT FIELD LOC. /M174 CDFMYF /A021 USER1, TAD CHAR /GET CHARACTER'S ATTRIBUTE /A021 RAR;BSW / BITS 2,3,4 BECOME BITS 9,10,11 /A021 AND (7) / MASK OUT REST /A021 DCA CURATR /STORE NEW CHARACTER'S ATTRIBUTE /A021 TAD CURATR /IF CURRENT CHAR.'S ATTRIB. TAD PRVATR / = PREV CHARS ATTRIB. SNA CLA / THEN /A021 JMP PRCCHR / PROCESS CHARACTER /A021 / /A021 /HERE PREV. ATTRIB. SET EQUAL TO -CURRENT ATTRIB. THEN /A021 /ATTRIBUTE MODE IS ADDED TO START OF ATTRIBUTE TABLE, /A021 /AND PROGRAM EXECUTES THE PROPER SUBROUTINE. /A021 / /A021 /ELSE /A021 TAD PRVATR /IF PREV. CHAR. ATTRIBUTED /A021 SNA CLA / /C197 JMP BLKBO1 / /A197 JMS TYPATR /TURN OFF ALL ATTRIBUTES /C197 "0&177 /A021 BLKBO1, TAD CURATR /PREV. ATTRIB. = -CURRENT ATTRIB. /A021 CIA /A021 DCA PRVATR /A021 TAD CURATR /CASE ATTRIBUTE MODE OF /A021 TAD (ATRTBL) /0 /A021 DCA ATRBUT /THRU /A021 TAD I ATRBUT /7 /A021 DCA ATRBUT /A021 JMP I ATRBUT /JMP TO APPROPRIATE ATTRIBUTE ROUTINE /C197 / NOW PROCESS THE CHARACTER ITSELF PRCCHR, TAD CHAR /GET CHAR /A021 AND P177 /MASK OUT MODE BITS /A021 SZA /SKIP IF A NULL /A222 JMS T1YPE /TYPE IT /A021 EXTFLD, 0 /CHANGE TO CALLER DATA AND INSTR. FIELD /A021 JMP I BLKBOX / Return to caller. /M174 ATRBUT, 0 /ATTRIBUTE TABLE POINTER /A021 / /A021 / ATTRIBUTE TABLE /A021 / /A021 ATRTBL, PRCCHR /NO ATTRIBUTE /C197 BOLD /DO ATTRIBUTE ROUTINE (BOLD) /A021 UNDRLN / " " " (UNDERLINE) /A021 BLDUND / " " " (BOLD & UNDERLINE)/A021 PRCCHR /SUPERSCRIPT /C197 BOLD /BOLD (+ SUPERSCRIPT) /A021 PRCCHR /SUBSCRIPT /C197 BOLD /BOLD (+ SUBSCRIPT) /A021 / /A021 / ATTRIBUTE ROUTINE(BOLD) /A021 / /A021 BOLD, JMS TYPATR /TYPE ATTRIBUTE USE ASCII '1' PARAMETER /C197 "1&177 /A021 JMP PRCCHR /C197 / /A021 / ATTRIBUTE ROUTINE(UNDRLN) /A021 / /A021 UNDRLN, JMS TYPATR /TYPE ATTRIBUTE USEASCII '4' PARAMETER /C197 "4&177 /A021 JMP PRCCHR /C197 / /A021 / ATTRIBUTE ROUTINE(BOLD & UNDERLINE) /A021 / /A021 BLDUND, JMS TYPATR /FIRST DO THE UNDERLINE /C197 "4&177 / /C197 JMP BOLD /AND FINISH WITH THE BOLD /A197 / TYPE ATTRIBUTE ROUTINE(ALLOFF, BOLD, UNDERLINE) /A021 / /A021 TYPATR, XX /A021 TAD (ESC) /A021 JMS T1YPE /TYPE "ESCAPE" /A021 TAD ("[&177) /A021 JMS T1YPE /TYPE '[' /A021 TAD I TYPATR /A021 JMS T1YPE /TYPE APPROPRIATE CODE(0, 1, OR 4) /A021 TAD ("m&177 JMS T1YPE /TYPE 'm' /A021 ISZ TYPATR /BUMP POINTER PAST PARAMETER /A021 JMP I TYPATR /A021 / /A021 / /A021 / TYPE CHAR ONTO SCREEN /A021 / /A021 T1YPE, XX /A021 JMP T1YPE2 /A021 T1YPE1, CIFSYS /REPEAT /A021 JWAIT /A021 T1YPE2, CIFSYS /TRY TO PUT CHAR ON SCREEN & IN BUFFER /A021 TTYOU / output character to terminal. /A174 JMP T1YPE1 /UNTIL BUFFER NOT FULL /A021 JMP I T1YPE /A021 CHAR, 0 /HOLDS CURRENT CHARACTER /A021 PRVATR, 0 /PREVIOUS ATTRIBUTE /A021 /***********************************************************************/ / / / PRTRID-- / / THIS ROUTINE SERVES AS A SUBROUTINE ENTRY POINT WHICH / / CAN BE CALLED FROM OTHER FIELDS / / IT IS CALLED BOTH FROM WITHIN THE PRINTER CODE / / AND FROM LIST PROCESSING (WPCUT) AND CX (WPCX) / / / / AC0002 INDICATES A CALL TO CHECK DOC DEST / / CDFMYF AND SET QUALITY MODE IF LA50/LA100 / / CIFPRT / / JMS PRTRID / / DOC DESTINATION OK RETURN / / WRONG DD RETURN / /-----------------------------------------------------------------------/ / AC0001 INDICATES A CALL TO IDENTIFY THE PRINTER/ / CDFMYF AND RETURN TO THE CALLER ON ERROR / / CIFPRT / / JMS PRTRID / / OK RETURN / / ERROR RETURN / /-----------------------------------------------------------------------/ / AC0000 INDICATES A CALL TO IDENTIFY THE PRINTER/ / CDFMYF AND GO TO STOP OVERLAY ON ERROR / / CIFPRT (GENERALLY ONLY USED BY PRINTER CODE / / JMS PRTRID / / OK RETURN / / ON ERROR CALLS STOP PRINTER OVERLAY / / WITH NON-EXISTENT PRINTER MESSAGE / / OR PAUSED MESSAGE / / PRTRID, XX DCA IDCAL /SAVE AC ON ENTRY RDF /READ CALLER'S DATA FIELD /A055 TAD CIDF0 /BUILT CDI INSTRUCTION /A055 CDFMYF /CHANGE DATA FIELD TO MINE /A055 DCA IDRTN /A055 DCA PRPUMM / clear PUM mode flag for all callers /a232 AC7777 /SEE WHAT ROUTINE IS DESIRED /A140 TAD IDCAL /DETERMINED BY AC UPON CALL /A140 SNA SPA CLA /SKIP IF IDCAL 2 OR GREATER /A140 JMP PRTRI1 /ID PRINTER /A140 /***********************************************************************/A206 / /A206 / NOTE: OBDDCK AND OBPID MAY NOT BE THE SAME TYPE AS OBWAIT /A206 / SINCE PRTRID MAY BE CALLED BY THE USER JOB (LIST PROCESSING) /A206 / /A206 /***********************************************************************/A206 TAD (OVDDCK)/CHECK DOCUMENT DESTINATION /A140 JMS PROV /A140 OBDDCK /A140 PRTRI1, TAD (OVPID) /ID PRINTER /A140 JMS PROV /A140 OBPID /A140 IDRTN, XX /A055 JMP I PRTRID /A036 IDCAL, 0 /USED BY PRINTER ID ROUTINE /0 FOR REGULAR ERROR PROCESSING, NON 0 WHEN /SKIP RETURN ON ERROR REQUESTED SKNHST, XX /SKIP IF NOT DD CHST /A207 TAD PRQPNT /GET DOCUMENT DESTINATION TAD (-DHOST2) /SEE IF MATCHES CODE FOR CHST SZA CLA / ISZ SKNHST /BUMP IF NOT DD CHST JMP I SKNHST /RETURN ESMVV2, /FORWARD VERTICAL MOTION IS DONE BY DOING AS MANY /FULL LINE FEEDS AS POSSIBLE, AND THEN ANY HALF LINE FEED /LINE FEEDS ARE ASSUMED TO BE 1/6 INCH /REMEMBER ESCAPE SEQUENCES ARE NOT SENT TO THE HOST /SO WE MUST USE LINE FEEDS /EXCEPT IN THE CASE OF DD CHST WHEN WE USE CARRIAGE RETURNS ISZ ESCT1 /NEXT 1/2 LINE SKP JMP ESCSTG /ONE MORE HALF LINE NEEDED /C222 JMS SKNHST /SKIP IF NOT HOST TAD (CR-LF) /IF HOST PUT OUT CARRIAGE RETURN /A207 TAD (LF) /ELSE PUT OUT LINE FEED /A207 JMS PRCHAR /CALL PRCHAR DIRECTLY /A207 ISZ ESCT1 /SEE IF WE ARE DONE LINE FEEDS JMP ESMVV2 /NO JMP PRESXT /YES /----------------- PAGE / THIS CODE CONTAINS THE RESIDENT JEXIT FROM THE PRINTER JOB /A180 / THIS IS DONE WHEN ANOTHER JOB NEEDS THE PRINTER FIELD /A180 / SEE FULL EXPLANATION NEAR OVPRJX IN WPRTOV /A180 /***********************************************************************/ / / / THIS CODE CONTAINS NO ASSEMBLER GENERATED LINKS / / THIS IS BECAUSE THE END OF THIS PAGE IS PART OF LPOBUF / / / WAITJX, CIFSYS /A180 JEXIT /A180 /WE MUST RELOAD THE CRITICAL VALUES ON PAGE ZERO BEFORE WE LEAVE /A180 /RESIDENT CODE SINCE WE MAY DO A JWAIT OR AN LPTIN WHEN WE GO /A180 /TO LOAD AN OVERLAY! /A180 TAD WAITK1 / INITIALIZE 10020-10076 DCA T1 / UP TO BUT NOT INCLUDING T1! TAD WAITK2 / ELSE THIS LITTLE SECTION BLOWS AWAY! DCA X0 TAD WAITK2 DCA X1 WAKEU1, CDFSYS TAD I X0 CDFMYF DCA I X1 ISZ T1 JMP WAKEU1 / FLUSH IN THE INPUT BUFFER INCASE THERE IS GARBAGE CIFSYS LPTIN SKP / NO MORE CHRS, CONTINUE JMP .-3 / GO BACK FOR MORE / CLA AC4000 /LOAD A CODE TO MAKE SURE /A180 DCA I WAITP1 /WE LOAD THIS OVERLAY AFRESH /A180 TAD WAITP2 /GO WAKE UP AT OVWKUP /C183 JMS I WAITP3 /JMS PROV /C183 OBWKUP /A180 WAITK1, 20-T1 /A183 WAITK2, 20-1 /A183 WAITP1, OBWKUP&7400+PROVA /A183 WAITP2, OVWKUP /A183 WAITP3, PROV /A183 / THIS PAGE CONTAINS TEXT STRINGS SENT BY FLABUZ ROUTINE BLANKM, TEXT '^A ' / BLANK OUT STOPPED OR BUSY MESSAGE /M141 *.-1 / SAVE LOCS BY COMBINING BLANKM & CSTRNG/C193 CSTRNG, TEXT '^A' / THIS SAYS TO IOA "NEXT WORD IS ADDRESS OF / STRING TO OUTPUT TO SCREEN" BELTXT, BELL; 0 / ASCII STRING TO RING TERMINAL BELL /A098 PRTEXT, IFDEF ENGLSH < TEXT '^A!&PRINTER ^A^S^A' / DISPLAY "PRINTER" & STOPPED OR BUSY /M141 > IFDEF ITALIAN < TEXT '^A!&STAMPANTE ^A^S^A' > IFDEF V30NOR < TEXT '^A!&SKRIVER ^A^S^A' /A238 > IFDEF V30SWE < TEXT '^A!&SKRIVAREN \DR^A^S^A'> /A238 IFDEF DUTCH < TEXT '^A!&PRINTER ^A^S^A' / DISPLAY "PRINTER" & STOPPED OR BUSY /M141 > IFDEF SPANISH < TEXT '^A!&IMPRESORA ^A^S^A' / DISPLAY "PRINTER" & STOPPED OR BUSY /M141 > STPTXT, IFDEF ENGLSH < TEXT '!&STOPPED' / TEXT FOR PRINTER "STOPPED" MESSAGE /M141 > IFDEF ITALIAN < TEXT '!&BLOCCATA' > IFDEF V30NOR < TEXT '!&STOPPAD'> /A238 IFDEF V30SWE < TEXT '!&STOPPET'> /A238 IFDEF DUTCH < TEXT '!&GESTOPT'> IFDEF SPANISH < TEXT '!&DETENIDA'> BSYTXT, IFDEF ENGLSH < TEXT '!&BUSY ' / TEXT FOR PRINTER "BUSY" MESSAGE /M141 > IFDEF ITALIAN < TEXT '!&OCCUPATA' > IFDEF V30NOR < TEXT '!&AKTIV' > IFDEF V30SWE < TEXT '!&UPPTAGEN'> IFDEF DUTCH < TEXT '!&BEZIG '> IFDEF SPANISH < TEXT '!&OCUPADA '> / TOPMID SAVES CURSOR POSITION AND ATTRIBUTES AND SELECTS ABSOLUTE MODE /M138 / OF ADDRESSING AND POSITIONS CURSOR TO TOP MIDDLE OF SCREEN (col.33) /M138 TOPMID, ESC; "7&177 / SAVE CURSOR POSITION AND ATTRIBUTES /A138 ESC; "[&177; "?&177; "6&177; "l&177 / SELECT ABSOLUTE CURSOR ADDRESSING /A138 ESC; "[&177; "1&177; ";&177; "3&177; "3&177; "H&177 / POSITION CURSOR TO COLUMN 33 /M138 0 / ASCII STRING TERMINATOR /A120 BLKREV, ESC; "[&177; "5&177; ";&177; "7&177; "m&177 / SET BLINK AND REVERSE ATTRIBUTES /M138 0 / ASCII STRING TERMINATOR /A120 LED4ON, /A138 ESC; "[&177; "m&177; " &177/ RESET CURSOR ATTRIBUTES & PRINT BLANK /M138 LEDOFF, /A138 ESC; "8&177 / RESTORE CURSOR POSITION AND ATTRIBUTE /A138 0 / ASCII STRING TERMINATOR /A120 PRLBUF, XX /THE BEGINNING OF THE LINE BUFFER. / THERE MUST BE NO LINKS HERE! /---------------------------------------------- PAGE / 4400 / XX /----------------------- PAGE / 4600 /THE PART OF THE PRECEEDING PAGE AFTER THE LABEL PRLBUF, AND THIS ENTIRE /PAGE COMPRISES THE LINE BUFFER FOR THE PRINTER. HOWEVER, SOME BOOT TIME /INTIIALIZATION CODE RESIDES IN THE BUFFER TEMPORARILY. /AFTER THE SYSTEM IS LOADED, CONTROL TRANSFERS HERE. SOME INITIALIZATION /AND COPYING TAKES PLACE, THE ONE (OR TWO) USER JOBS ARE STARTED UP, AND /THE PRINTER CONTINES WITH ITS OWN INITIALIZATION. /ALSO FIELD 7 FOR WPFILS FLD3R, / INITIALIZE PRINTER PAGE ZERO SINCE IT IS NOT WRITTEN OUT /A166 CDFMYF /A166 FLD2R1, DCA I FLD3T1 /RESET A LOCATION IN LOC 0-17 /A166 ISZ FLD3T1 /BUMP ADDRESS /A166 ISZ FLD3T3 /BUMP COUNTER /A166 JMP FLD2R1 /NOT DONE /A166 /THIS LOOP COPIES SIXTY WORDS BEGINNING AT LOCATION 20 IN FIELD 0 INTO /FIELD 1, FIELD 2 AND FIELD 7 FLD3L1, CDF 0 /CHANGE TO FIELD 0 TAD I FLD3T1 /GET A WORD CDF 10 /CHANGE TO FIELD 1 DCA I FLD3T1 /SAVE THE WORD TAD I FLD3T1 /RECOVER THE WORD CDF 20 /CHANGE TO FIELD 2 DCA I FLD3T1 /SAVE THE WORD TAD I FLD3T1 /COPY FIELD 0 GLOBALS INTO FIELD 7 CDF 70 DCA I FLD3T1 ISZ FLD3T1 /INCREMENT THE POINTER ISZ FLD3T2 /ARE WE THROUGH? JMP FLD3L1 /NO--KEEP COPYING CDFPRT /CHANGE BACK TO THIS FIELD FLD2R2, DCA I FLD3T1 /RESET A LOCATION IN LOC 100-177 /A166 ISZ FLD3T1 /BUMP ADDRESS /A166 ISZ FLD3T4 /BUMP COUNTER /A166 JMP FLD2R2 /NOT DONE /A166 TAD (PRTRID /INITIALIZE THE LINK ON PAGE ZERO /A166 DCA PRTID /FOR THE WORLD /A166 TAD (U1JOB) /NOW START THE FIRST USER CIF 0 JSTRT CLA /C143 / NOW WE MUST INITIALIZE THE WORD AT THE BEGINNING OF EACH PRINTER / OVERLAY SO THAT WE WILL BE SURE AND LOAD EACH AREA THE FIRST TIME TAD (7400 /A150 DCA PROVA /A150 TAD (7400 /A150 DCA PROVA+400 /A150 TAD (7400 /A150 DCA PROVA+1000 /A150 /It is boot up time so read in system value block from system floppy /and get auxiliary baud rate from system diskette and set baud to that /value TAD (DLSVAL) /Set to read system value block /A027 JMS PRQRX /Go read in block /A027 RXERD+4000 / /A183 0 /SYSTEM DRIVE /A183 RDBUF /BUFFER ADDRESS /A183 JMP PRQSDE /ERROR READING DLSVAL DURING BOOT /A183 TAD I (RDBUF+MNPRTB-MNABRV) /Get auxiliary baud rate /A027 /M030 AND (17) /A030 TSB2 /Set baud rate /A027 6321;NOP / CLEAR PENDING FLAG. /A056 6326;NOP / READ PENDING CHARACTER. /A056 CLA / Load the 8 bit fallback code on top of the startup section in DSKHND /a228 / The startup code is saved in panel mem so that it can be called back /a228 / in if there is a problem reading/writing drive 0 /a228 / But first modify the the V25STB startblock so that V25ST will run on /a228 / any warm start /a228 CDF 0 / PUT all this stuff in the DSKHND field/a228 TAD (V25STB-1) / get the table address /a228 DCA X3 / put in an auto index register /a228 TAD (DLCMPS) / load the start block /a228 DCA I X3 / put it in the table /a228 TAD (CDFSYS) / CDF buffer FLD /a228 DCA I X3 / put it in the table /a228 TAD (V25ST) / get the buffer start address /a228 DCA I X3 / put it in the table /a228 TAD (-DSCMPS) / negative block count /a228 DCA I X3 / put it in the table /a228 CDFMYF / put the data feild back /a228 JMS BHOOK / call the BLASTR that has already been /a228 / loaded /a228 FALBKE / fallback entry code /a228 CLA / clear the AC just in case BHOOK dusne /a228 / load the PLNRCS with the standard character width for use by cx & print / screen /a233 TAD (12) / get the standard character width /a233 DCA PLNRCS / save it for use by all /a233 / THE INITIALIZATION CODE IS DONE. GO TO THE DONE OVERLAY TAD (OVDON1 JMS PROV OBDON1 TSB2=6333 /SET THE BAUD RATE ON SLU3 OR THE VT278 PRINTER PORT FLD3T1, 0 /THE ADDRESS TO INITIALIZE FLD3T2, -60 /THE AMOUNT TO COPY FROM FIELD 0 (LOCS 20-77) FLD3T3, -20 /COUNTER TO INITIALIZE LOCS 0-17 ON PAGE ZERO FLD3T4, -100 /COUNTER TO INITIALIZE LOCS 100-177 ON PAGE ZERO /----------------- PAGE MAXLIN=.-PRLBUF /THE SIZE OF THE LINE BUFFER DECIMAL IFNZRO MAXLIN-288&2048 /A215 OCTAL /PRESCS - SENDS [ESCAPE] [VALUE] [CHARACTER] TO LQP /AC=VALUE /JMS PRESCS / CHARACTER /RETURN POINT, AC=VALUE PRESCS, XX DCA PREST1 /SAVE THE VALUE / IF DD=HOST, DON'T SEND ANY ESCAPE SEQUENCES /A158 / IF WE ARE PRINTING TO AN LQPSE, USE ESC01 ROUTINE / FOR DRAFT PRINTERS AND LQP02 USE ESC02 ROUTINE TAD LPONLN /A113 SNA CLA /A158 /C165 JMP PRESC4 / GO RETURN WITHOUT SENDING /A165 JMS SKIPIF / SKIP IF LQPSE /A165 LQPSE / /A165 JMP ESC02 / MAKE ESC02 PART OF THIS ROUTINE /C165 / IS AN LQPSE /A182 TAD I PRESCS / PICK UP THE CODE /A182 JMP ESC01 / PROCESS LQPSE ELSEWHERE PRESC3, / RETURN HERE TO FINISH LPQSE SECTION TAD I PRESCS / GET THE CHARACTER JMS PRCHAR / OUPUT IT PRESC4, TAD PREST1 / GET THE VALUE ISZ PRESCS / ADJUST THE RETURN ADDRESS JMP I PRESCS / AND RETURN / ESCAPE SEQUENCE FORMATTING & OUTPUT ROUTINE FOR LQPSE / IF THE BIT FLAG NLQPSE IS SET THEN NOTHING IS OUTPUT /A165 / AS THIS SEQUENCE IS NOT INTENDED FOR THE LQPSE AND IT DOESN'T /A165 / KNOW HOW TO THROW IT AWAY /A165 /THE VALUE TAKES THE FORM OF UP TO THREE ENCODED DIGITS. THESE DIGITS /OCCUPY FOUR-BIT SEGMENTS OF THE VALUE (0-3, 4-7, 8-11). THE DIGITS ARE /TRANSMITTED BEGINNING WITH THE HIGHEST ORDER NON-ZERO DIGIT. IF ALL THE /DIGITS ARE ZERO, NO VALUE IS TRANSMITTED. /THE DIGITS ARE OUTPUT ENCODED AS ASCII CHARACTERS--DIGIT 0 BECOMES 40 /(SPACE), DIGIT 1 BECOMES 41, AND SO ON. /AFTER THE VALUE IS TRANSMITTED, THE CHARACTER IS SENT. /MODIFIED TO OUTPUT LEADING ZEROS /A165 ESC01, /AC CONTAINS THE ARGUMENT AFTER THE CALL AND (NLQPSE) /SEE IF THE NO TRANSMIT BIT IS SET /A165 SZA CLA /A165 JMP PRESC4 /YES, JUST GO EXIT /A165 TAD PREST1 /GET THE VALUE DCA PROVT1 /SAVE IT IN A TEMPORARY AC7775 /THERE CAN BE A MAXIMUM OF THREE DIGITS ENCODED DCA PROVT2 /SAVE INTO A COUNT TEMPORARY TAD (ESC) JMS PRCHAR /SEND THE ESCAPE /THIS LOOP SEARCHES FOR THE FIRST NON-ZERO DIGIT. ESC01A, TAD PROVT1 /GET VALUE AND (7400) /LOOK AT THE HIGH ORDER DIGIT SZA JMP ESC01B /THERE IS A DIGIT--BEGIN THE OUTPUT SEQUENCE /THE DIGIT IS NOT NON-ZERO. WE MUST LOOK IN THE NEXT POSITION. TAD PROVT1 /RECOVER THE VALUE CLL RTL RTL /MOVE THE NEXT DIGIT CANDIDATE TO THE HIGH POSITION DCA PROVT1 /SAVE THE VALUE ISZ PROVT2 /BUMP THE COUNT--LEAVE THE LOOP IF WE'VE LOOKED AT /ALL THREE POSITIONS JMP ESC01A /CONTINUE THE LOOP JMP PRESC3 /OUTPUT NO VALUE--THE VALUE WAS ZERO /A DIGIT HAS BEEN FOUND IN THE HIGH FOUR BITS. OUTPUT THIS DIGIT AND ALL /THAT FOLLOW UNTIL THE COUNT OF 3 EXPIRES. ESC01B, CLL BSW RTR /MOVE THE DIGIT INTO THE LOW FOUR BITS TAD (40) /ADD THE SPACE VALUE JMS PRCHAR /OUTPUT THE DIGIT TAD PROVT1 /GET THE VALUE BACK CLL RTL RTL /GET THE NEXT DIGIT INTO THE HIGH FOUR BITS DCA PROVT1 /SAVE THE ROTATED VALUE TAD PROVT1 /RECOVER THE VALUE AND (7400) /ISOLATE THE DIGIT ISZ PROVT2 /BUMP THE COUNT--SKIP IF WE'VE EXCEEDED IT JMP ESC01B /CONTINUE THE OUTPUT SEQUENCE /A VALUE HAS BEEN TRANSMITTED IF NECESSARY. CLA JMP PRESC3 /NOW GO SEND THE FINAL TERMINATING CHARACTER /CHANGED RETURN LOCATIONS TO INCLUDE A TECH CHARACTER RETURN /A206 /CHANGED RETURN LOCATIONS TO INCLUDE A multinational CHARACTER RETURN /a227 /When this routine is called, the buffer variables point to the last processed /character. The routine determines which of five possibilities hold: /1. This is the last character in the line / Make a normal return /2. The next character is a multinational character precedence character / Point to it and make a skip return /3. The next character is a technical character precedence character / Point to it and make a skip return /4. There is another character in the current position / Move the buffer pointers to indicate it and make a triple skip return /5. The next character is in the next position / Move the buffer pointers to indicate it and make a quad skip return PLCHBS, XX JMS PLNXT /Is there another character? JMP I PLCHBS /No--make a normal return /THERE IS ANOTHER CHARACTER. IF IT IS A DEAD KEY PRECEDENCE CODE /A202 /WE WILL MAKE A SKIP RETURN /C206 /IF IT IS A MULTINATIONAL /a271 ISZ PLCHBS /PREPARE AT LEAST A SKIP RETURN /A206 TAD I PLPTR /GET THE CHARACTER AND P177 / /A202 TAD (-23) /IS IT ANY OF THE DEAD KEY PRECEDENCE CHRS? /A202 SNA / test for tech precedence char /a227 JMP PWSTEC / ok was a tech char /a227 IAC / multinational precedence? /a227 SNA / ? /A227 JMP PWSMNC / ok was a M.N.C /a227 IAC / could it have been a line drawing precedence /a227 SZA / was it -- then return /a227 PLCHXX / no try the rest then /a227 JMP PLCHXX / no then keep looking /a227 PWSTEC, ISZ PLCHBS / prepar a double skip return /a227 PWSMNC, JMP I PLCHBS /YES, MAKE A SKIP RETURN /C206 /THERE IS ANOTHER CHARACTER AND IT IS NOT A TECHNICAL PRECEDENCE CHR /A202 /IF IT IS BACKSPACE PLNXT IS GUARANTEED TO SKIP /A202 PLCHXX, ISZ PLCHBS /PREPARE AT LEAST A SKIP ROUTINE /c227 /M202 ISZ PLCHBS /PREPARE AT LEAST A SKIP RETURN /A227 TAD (21-BS) /IS IT BACKSPACE /C202 SNA CLA /Skip if not a backspace JMS PLNXT /Point to the next character if a backspace /Although PLNXT makes a normal return if there are no more characters, /we can assume that it won't since a character always follows a backspace. /Instead, it will make a skip return. ISZ PLCHBS /Prepare a double skip return to indicate no backspace JMP I PLCHBS /And return /***********************************************************************/ / / / THIS BUFFER IS STORAGE FOR THE 4 PARAMETERS IN THE SEQUENCE / / ESC[*;*;*;*!s / THIS SEQUENCES IS USED IN JUSTIFICATION / JSTIFY, ZBLOCK 13 / 11 DIGITS ASSUMES /C196 / 4 DIGIT FIRST PARAMETER / 1 DIGIT 2ND PARAMETER / 4 DIGIT 3RD PARAMETER / 2 DIGIT 4TH PARAMETER /******************************************************************** / BHOOK Hook to panel page blaster /******************************************************************** /a227 BHOOK, 0 / hook return address /a227 DCA BLACSV / save accumulator /a227 RDF / read the data field /a227 TAD CDF0 / make a cdf instruction /a227 DCA BHKEXI / save for return /a227 CDFMYF / set to hooks field /a227 TAD I BHOOK / get the table entry /a227 MQL / push into MQ /a227 TAD BLACSV / get the ac /a227 ISZ BHOOK / increment the return address /a227 CIFMNU / blaster is in the menu field /a227 IOF / turn the interrupts off before.. /a227 JMS I BLASTH / Calling blaster /a227 ISZ BHOOK / skip return exit /a227 BHKEXI, 0 / CDF instruction position important /a227 JMP I BHOOK / return /a227 BLASTH, BLASTR / blastr address (get from WPF1) /a227 BLACSV, 0 / ac save /a227 X=.-1 /---------------- PAGE / DRAFT PRINTER, BOLD INTERPRETATION SUBROUTINE /A152 / THIS SUBROUTINE PUTS OUT ESCAPE SEQUENCES TO SELECT / / EITHER A FONT OR CHARACTER SET / / IF PRBIF=1 A CHRSET IS SELECTED / / IF PRBIF=2 A FONT IS SELECTED / / IF THE LAST SELECTION WAS THE SAME AS THE CURRENT SELECTION / / THEN NO ESCAPE SEQUENCE IS SENT / / HOWEVER, IF PRBICS IS NEGATIVE WE EXECUTE THE ROUTINE /A177 / UNCONDITIONALLY. PRBICS IS SET 7777 AT BEGIN OF DOCUMENT /A177 LPBI, XX / MQA / SAVE THE MQ AS PRESCS CLOBBERS IT! /A154 DCA LPBIT1 / /A154 TAD PRBICS / GET SAVED VALUE OF BIC / SMA / SKIP IF AC=7777 TO FORCE EXECUTION /A177 TAD PRBIC / ADD TO CURRENT VALUE / AND (2000) / SEE IF SAME / SNA CLA / IF SO JUST EXIT / JMP I LPBI / SAME BOLD INTERPRETATION AS LAST CHR / TAD PRBIC / SAVE NEW INTERPRETATION / DCA PRBICS / FOR NEXT TIME / / SEE WHETHER WE ARE DOING FONTS OR CHRSETS AC7776 / TAD PRBIF / SNA CLA / JMP LPBIF / FONTS / / WE ARE DOING CHRSET INTERPRETATION / TAD PRBIC / GET BOLD INTERPRETATION / SNA CLA / SEE IF BOLD OR NONBOLD / AC0001 / SELECT SI FOR G0 / TAD (SO) / ELSE SELECT SO FOR G1 / JMS PRCHAR / SEND IT OUT / JMP I LPBI / RETURN / /WE ARE DOING FONT BOLD INTERPRETATION / LPBIF, / TAD PRBIC / SEE IF THIS CHR IS BOLD / SNA CLA / / JMP LPBIF1 / NO / TAD PRBIFB / YES, GET BOLD FINAL / LPBI1, JMS PRESCS / DO ESCAPE SEQUENCE / PCSTFN / FOR FONT SELECTION / CLA / CLEAR RETURNED CODE / TAD LPBIT1 / GET PREVIOUS MQ /A154 MQL / AND PUT IT BACK IN MQ /A154 JMP I LPBI / RETURN / LPBIF1, TAD PRBIFN / GET NORMAL FINAL / JMP LPBI1 / AND GO OUTPUT SEQUENCE / PRBIC, 0 / PRBICS, 0 / LPBIT1, 0 / A TEMP TO HOLD MQ /A154 /***********************************************************************/ / / / LPIND--ROUTINE TO INDENT. USED ONLY ON DRAFT PRINTERS THAT / / CANNOT RECOGNIZE THE HORIZONTAL MARGIN ESCAPE SEQUENCE / / ESC [ Pn s / CURRENTLY THE LA50 / / ALSO THE HOST PORT /A159 / ...(WE DON'T SEND ESCAPE SEQS TO HOST / /D174 DELETED DPMSK TEST WHICH CAUSED THIS ROUTINE TO WORK / /D174 ALSO ON THE LA120, WHICH DOES RECOGNIZE MARGIN COMMND / / / /***********************************************************************/ LPIND, XX /A143 DCA LPINDT /SAVE AMOUNT TO INDENT /A188 TAD LPONLN /GET TYPE OF PRINTER SZA /DD=HOST /A159 TAD (-LA50) /SEE IF LA50 SZA CLA /YES, DO THIS ROUTINE JMP I LPIND /NO, JUST RETURN AC0006 /INITIALIZE THE JUSTIFY COUNTER TO HALF A SPACE DCA LPJCNT /NOW INDENT THE LINE ACCORDING TO THE VALUE PASSED. /C188 TAD (SPC) /GET A SPACE MQL /SET THINGS UP FOR LPMOVE TAD LPINDT /GET THE VALUE /C188 JMS LPMOVE /INDENT THE MARGIN JMP I LPIND /RETURN LPINDT, 0 /STORAGE FOR AMOUNT TO INDENT /A188 /THIS ROUTINE DOES HORIZONTAL MOTION FOR THE LINE PRINTER. IT EXPECTS THE /AMOUNT TO MOVE IN PRINT UNITS IN THE AC UPON CALL. IT ADDS THE REQUEST /TO THE LEFTOVER UNITS FROM THE LAST CALL. THIS ROUTINE CANNOT ALWAYS /MOVE THE FULL AMOUNT REQUESTED, SINCE IT CAN ONLY MOVE IN UNITS OF ONE /CHARACTER. THE ROUTINE FILLS THE SPACE IT MOVES ACROSS WITH THE /CHARACTER IN THE MQ. /MQ=CHARACTER TO FILL WITH /AC=DISTANCE TO MOVE IN UNITS /JMS LPMOVE /AC=0 LPMOVE, XX TAD LPJCNT /ADD THE UNCOMPLETED SPACING FROM LAST TIME DCA LPJCNT /SAVE AS THE AMOUNT TO SPACE /THIS LOOP OUTPUTS AS MANY UNITS OF SPACES AS IT CAN OF THE UNCOMPLETED SPACING. LPMOV1, TAD PLNRCS /GET THE SIZE OF A SPACE /A143 CIA /A143 TAD LPJCNT /GET THE AMOUNT OF UNCOMPLETED SPACING SPA JMP LPMOV2 /NO WHOLE SPACES REMAIN--LEAVE THE LOOP DCA LPJCNT /SAVE THE NEW UNCOMPLETED SPACING MQA /GET THE THING TO PRINT AND P177 /MASK ANY MODE BITS JMS PRCHAR /PRINT IT JMP LPMOV1 /CONTINUE THE LOOP LPMOV2, CLA JMP I LPMOVE /RETURN LPJCNT, 0 /CONTAINS ANY UNCOMPLETED UNITS OF SPACING /THIS ROUTINE MULTIPLIES THE NUMBER ADDRESSED AFTER THE SUBROUTINE CALL BY /THE NUMBER IN THE AC UPON CALL. BOTH SHOULD BE NON-NEGATIVE INTEGERS. /THE RESULT IS RETURNED IN THE AC. THIS ROUTINE OPERATES MOST EFFICIENTLY /IF THE FACTOR IN THE AC IS THE SMALLER. /AC=SMALLER FACTOR /JMS PRMULT / ADDRESS OF LARGER FACTOR /AC=PRODUCT OF TWO FACTORS PRCHAT, /HARRY PREBLE WILL DO ANYTHING TO SAVE A LOCATION. HERE WE /USE A LOCATION FROM A ROUTINE THAT DOES NOT CALL PRCHAR /AND IS RELATIVELY PURE AND SIMPLE AND IS NEARBY PRCHAR... PRMULT, XX CMA DCA T1 /SAVE THE NEGATIVE LESS ONE OF THE MULTIPLIER TAD I PRMULT /GET ADDRESS OF MULTIPLICAND ISZ PRMULT DCA T2 /SAVE TO INDIRECT THROUGH /THE MULTIPLIER IS NOW NEGATED (LESS ONE) AND STORED IN T1, WHILE THE /MULTIPLICAND ISS ADDRESSED THROUGH T2. THIS LOOP REPEATEDLY ADDS THE /MULTIPLICAND INTO THE AC. PRMLT1, ISZ T1 /TEST THE MULTIPLIER SKP /KEEP MULTIPLYING JMP I PRMULT /RETURN TAD I T2 /ADD THE MULTIPLICAND JMP PRMLT1 /CONTINUE THE LOOP / This code allows use to call PRCHAR from a routine in SYS that is /a231 / dealing with eight bit chars See WPRTHL /a231 XFPRCH, JMS PRCHAR / call PRCHAR /a231 CDIFIO / return to sys FIELD /m0234 /a231 JMP P85C / at this address /m0234 /a231 /THIS ROUTINE OUTPUTS A CHARACTER TO THE PRINTER. THE LOCATION PRCHR3, /WHICH IS A JMS TO THE PRINTER HANDLER, IS PATCHED ELSEWHERE IN THE /SPOOLER TO EITHER LPTOU OR HS2OU, DEPENDING ON WHETHER A PRINTER HANDLER /OR A HOST HANDLER IS TO BE USED. /AC=CHARACTER /JMS PRCHAR /AC=0 PRCHAR, XX AND P377 /STRIP THE MODE BITS /allow 8 bits /m227 DCA PRCHAT /SAVE THE CHARACTER IFDEF DEVEL1 PRCHR4, TAD PRYES /IS PRINTING DISABLED? SZA CLA /M010 JMP I PRCHAR /YES--JUST RETURN WITHOUT PRINTING JMP PRCHR2 /ENTER THE PRINT LOOP PRCHR1, DCA PRCHAT /SAVE THE CHARACTER JMS SQPINP /SEE IF ANY CHARACTERS COMING IN /A113 TAD PABORT /HAS PRINTING BEEN ABORTED? /D016 SZA CLA / JMP I PRCHAR / YES- RETURN WITHOUT PRINTING CIFSYS / WAIT FOR HANDLER TO ACCEPT CHARACTERS JWAIT PRCHR2, TAD PRCHAT /RECOVER THE CHARACTER CIF 0 /GIVE CHARACTER TO HANDLER PRCHR3, LPTOU /THIS LOCATION IS PATCHED WITH EITHER LPTOU OR HS2OU. /THIS IS A JMS TO THE APPROPRIATE HANDLER. THE /HANDLER WILL MAKE A NORMAL RETURN WITH AC=CHARACTER /IF THERE IS NO ROOM IN ITS BUFFER FOR THE CHARACTER. /OTHERWISE, THE HANDLER WILL MAKE A SKIP RETURN WITH /AC=0. /THE LOCATION IS PATCHED WITH LPTOU INITIALLY BECAUSE /THE INITIALLY LOADED HANDLER IS THE SERIAL HANDLER. JMP PRCHR1 /NO ROOM--CONTINUE THE WAIT LOOP IFDEF DEVEL < /A213 / THE FOLLOWING CODE INSERTED TEMPORARILY. IT IS SO THE HOST PORT / CAN BE USED TO BE A MONITOR. THE HOST IS USED TO RECORD AN IMAGE OF / THE PRINTER OUTPUT. TAD PRCHAT /GET CHR CIFSYS HS2OU SKP CLA > JMP I PRCHAR /RETURN--WE ARE DONE IFDEF DEVEL < JMS SQPINP CIFSYS JWAIT JMP .-10 > /PRCHAT NOW SHARED WITH PRMULT, NEARBY ON THE SAME PAGE /PRCHAT, 0 /A temporary to hold the character being printed /This routine does division. The dividend is in PRJDEF at the time of /call, and must be negative. The divisor is in the AC. The quotient is /the number of times the divisor can be added to the dividend before the /dividend becomes a non-zero positive number. The remainder is the positive /number which remains when the dividend becomes positive, negated, minus one, /added to the divisor. /This routine is used in justifying the line. We are dividing the amount by /which the line is too short (PRJDEF) among the number of positions or spaces /indicated in the AC upon invocation. The quotient is the constant amount to /add to each position or space; the remainder is an ISZ counter used in /making positions or spaces for additional justification. /The remainder is returned in PRJDEF; the quotient is returned in the AC. PRDVID, XX DCA T2 /Save the divisor DCA T3 /Clear the quotient TAD PRJDEF /Get the dividend /We now enter a loop where we successively add the divisor to the dividend /until the AC goes positive. PRDVI1, TAD T2 /Add in the divisor--is it too much? SMA SZA JMP PRDVI2 /Yes--leave the loop ISZ T3 /No--increment the quotient JMP PRDVI1 /And continue the division loop /The quotient is in T3, and the AC contains the amount too large the /dividend is with one extra addition of the divisor. We want to derive the /remainder--so we negate the AC and subtract one. PRDVI2, DCA PRJDEF /Save the remainder TAD T2 /Recover the divisor CMA /Negate and subtract one TAD PRJDEF /From the remainder DCA PRJDEF /Save the result TAD T3 /Recover the quotient JMP I PRDVID /And return /--------------- PAGE /***********************************************************************/ / / / SQPINP--PARSING ROUTINE CALLED AS NEEDED FROM WITHIN / / THE PRINTER CODE. IT HANDLES POLLED PRODUCT IDENTIFICATION / / RESPONSES AND ASYCHRONOUS ERROR REPORTS (IF ANY) / / RECEIVED FROM THE PRINTER / / / / IF THE DOCUMENT DESTINATION IS CHST THEN LPTIN IS REPLACED / / BY HS2IN AND WE THROW AWAY ALL CHARACTER SENT BACK BY THE HOST / / / /***********************************************************************/ / / THIS PARSER HANDLES THE LQPSE AND TWO GENERAL TYPES OF STRINGS: / / PRODUCT IDENTIFICATION SEQUENCES / / STATUS REPORTS / / PRODUCT IDENTIFICATION SEQUENCES MAY BE OF THE FORM: / / ESC [ ? Pa ; Pb c / THE ; Pb MAY BE MISSING ON SOME PRODUCTS / SEE TABLE AT VWHOTB FOR MORE DETAILS / / THE BRIEF STATUS REPORT / / ESC [ 0 n INDICATING NO ERRORS / EXTENDED STATUS REPORTS OF THE FORM / / ESC [ ? Pa ; Pb ; ... ; n / THEY MAY CONTAIN UP TO 16 Px NUMERICAL ARGUMENTS / IF Pa = 0 then there are no errors / IF Pa < 20 then Pa should =3 and there are errors / SEE TABLE AT VERRTB FOR MORE DETAILS / / / THE FOLLOWING SEQUENCES ARE PARSED / / FOR THE LQPSE: ESC [ ? 9 c FOR THE "WHO ARE YOU REPORT" / ESC N3 N2 N1 0 FOR A STATUS REPORT / CAN=30 / FATAL ERROR EOT=04 / NON FATAL ERROR CSI=233 / 8 BIT CODE REPLACES ESC [ SQPINP, XX / JMS PRSTUP / SEE IF MUST ROLLUP STATUS / SQPNXT, CIFSYS / SEE IF THERE IS A CHARACTER / LPTIN / IN THE BUFFER FROM THE PRINTER / JMP I SQPINP / ...NOTHING, JUST RETURN / AND P177 / STRIP TO SEVEN BITS /A119 / THE LA120 ALWAYS TRANSMITS THE 200 BIT/A119 / SO DOES THE LA34 /A120 SNA JMP SQPNXT / IGNORE NULLS DCA INPUT / SAVE THE INCOMING CHR / / IF WE ARE PRINTING TO CHST THEN DISCARD ALL CHARACTERS. BEFORE THIS /A218 / CODE WAS ADDED THE ECHOS FROM THE HOST COULD LOOK LIKE VERY LONG /A218 / LQPSE STATUS REPORTS, CAUSING HALTS AND FROWNS... /A218 JMS SKNHST / SKIP IF NOT CHST /A218 JMP SQPNXT / YES, JUST FLUSH BUFFER /A218 / THE DOCUMENT DESTINATION IS NOT CHST... /A218 TAD INPUT / CHECK FOR EOT AND CANCEL /A126 TAD (-EOT / IF INPUT = 'EOT' /C118 SNA / /d236 JMP SQEOT / THEN PROCESS 'EOT' / JMP SQPNXT / ignore LQPSE errors /a236 TAD (EOT-CAN / IF INPUT = 'CAN' SNA CLA /d236 JMP SQCAN / THEN PROCESS 'CAN' JMP SQSTRT / ignore LQPSE Errors /a236 / ELSE DISPATCH TAD STATX / GET THE PARSE STATE / JMS VSTAT / CASE STATEMENT ON VSTAT / VSTAT0 / VSTAT1 / VSTAT2 / VSTAT3 / VSTAT4 VSTAT, 0 / TAD VSTAT / VECTOR ADR = BASE ADR + VSTAT / DCA VSTAT / TAD I VSTAT / GET ADDRESS OF STATE HANDLER CODE / DCA VSTAT / SAVE THE VECTOR / TAD INPUT / RETRIEVE THE CHAR INPUT / JMP I VSTAT / JMP TO STATE HANDLER CODE / / VSTAT1, TAD (-133 / IS IT A BRACKET ? / SNA CLA / /C221 JMP VSET2 / YES, GO STATE2 / /d236 JMS SKIPIF / ONLY IF LQPSE DO MORE /A221 /d236 LQPSE / ELSE DCS WILL FOUL US ALL UP! /A221 JMP SQESCS / NOT LQPSE, DON'T STORE! /A221 /d236 TAD INPUT / GET CHR AGAIN /A221 /d236 TAD (-60 / ZERO ENDING STATUS REPORT (LQP01) / /d236 SNA CLA / /d236 JMP REP01 / IF SO, DO REP0T / /d236 TAD INPUT / ELSE SAVE LQPSE STATUS DATA / /d236 DCA I VPTR / ON THE STACK / /d236 ISZ VPTR /d236 JMP SQESCS / GO CHECK FOR ESC OR CSI VSTAT2, TAD (-77 / IS IT QUESTION MARK ? SNA JMP VSET3 / YES, GO TO STATE 3 TAD (77-60 / IS IT A ZERO DIGIT ? SZA CLA JMP SQSTRT / NO, IGNORE AND START OVER DCA I VPTR / PUT ZERO ON NUMBER STACK JMP VSET4 / GO TO STATE 4 SQSTRT, CLA DCA STATX / BACK TO STATE 0 JMP SQESCS / GO CHECK FOR ESC OR CSI VSTAT3, JMS DIGCHK / INPUT A DIGIT? JMP VSTA3A / NO DCA INPUT / SAVE DIGIT VALUE TAD I VPTR / GET PRESENT VALUE CLL RTL TAD I VPTR RAL / MULTIPLY BY TEN TAD INPUT / AND ADD IN DIGIT VALUE VSTA3D, DCA I VPTR / SAVE IT JMP SQPNXT / GO PROCESS NEXT DIGIT VSTA3A, TAD (-73 / SEE IF A SEPARATOR ';' SZA / SKIP IF ";" /C191 JMP VSTA3C / NOT ";" /A191 ISZ VPTR / ";", BUMP POINTER JMP VSTA3D / GO CLEAR THIS LOCATION & CONTINUE /C191 VSTA3C, TAD (73-143) / SEE IF A PRODUCT ID TERMINATOR 'c' SNA JMP VSTWHO / YES, GO PROCESS TAD (143-156) / SEE IF A STATUS REPORT TERMINATOR VSTA3B, SNA JMP VSTERR / YES, GO PROCESS JMP SQESCS / ELSE WE DON'T KNOW WHAT THIS IS VSTAT4, TAD (-156) / FINISH BRIEF NO ERROR REPORT JMP VSTA3B SQESCS, CLA TAD INPUT / RECOVER INPUT VSTAT0, TAD (-CSI / IF INPUT = 'CSI SNA / JMP VSET2A / THEN STATE=2 TAD (CSI-ESC / ELSE IF INPUT = 'ESC' / SNA CLA / JMP VSET1A / THEN STATE 1 JMP SQPNXT VSET4, IAC VSET3, IAC VSET2, IAC IAC DCA STATX JMP SQPNXT VSET2A, IAC /A118 VSET1A, IAC /A118 DCA STATX /A118 TAD (VSTACK DCA VPTR JMP VSTA3D / GO CLEAR FIRST STACK LOCATION /C191 STATX, 0 INPUT, 0 /-------------------- PAGE VSTWHO, / THIS SECTION REWRITTEN REV169 SO THAT ONLY THE PRIMARY PRODUCT ID CODE / IS USED IN MOST CASES. IN ONLY THOSE CASES WHERE IT MAKES A DIFFERENCE / TO DECMATE DO WE USE ANY SECONDARY PRODUCT ID ATTRIBUTES /A169 ISZ VPTR / CLEAR THE NEXT DCA I VPTR / LOCATION IN THE STACK TAD (VSTACK) / GET POINTER TO PARAMETERS DCA VPTR / AND STUFF IT TAD (VWHOTB / SEARCH PRIMARY TABLE / PREPARE TO SEARCH THE PRODUCT IDENTIFICATION (WHO) TABLE / IF THE TABLE ENTRY IS MINUS ONE WE ARE DONE / IF THE TABLE ENTRY HAS THE MOST SIGNIFICANT BITY SET IT / INDICATES THAT THE VALUE WITHOUT THAT BIT IS THE VALUE FOR COMPARISON, / BUT THAT THERE ARE SECONDARY ATTRIBUTES THAT MUST BE CHECKED OUT VSTWH0, TAD (-1) / BECAUSE WE USE AUTOINDEXING DCA X3 VSTWH1, TAD I X3 / READ AN ENTRY DCA VSTTMP / SAVE IN A TEMP TAD VSTTMP / RECOVER TEMP IAC / BUMP TO TEST FOR MINUS ONE AND P177 / STRIP SECONDARY ATTRIBUTE FLAG SNA / SKIP IF NOT END OF TABLE JMP VSTIDF / ENTRY NOT FOUND IN TABLE TAD (-1) / COMPENSATE FOR -1 TEST CIA / NEGATE TAD I VPTR / SEE IF MATCHES SZA ISZ X3 / NO, BUMP OVER 2ND HALF OF TABLE PAIR SZA CLA JMP VSTWH1 / NO, AND TRY NEXT ENTRY TAD VSTTMP / GET VALUE THAT MATCHED SMA CLA / SEE IF SECONDARY ATTRIBUTES SPECIFIED JMP VSTWH2 / NO, WE HAVE THE ANSWER! ISZ VPTR / YES, USE NEXT PARAMTER TAD I X3 / GET ADDRESS OF THIS NEW TABLE JMP VSTWH0 / AND START USING IT VSTWH2, TAD I X3 / YES, READ VALUE DCA LPONLN / SAVE IT FOR POSTERITY TAD I (VSTACK) / Get the first parameter value /a226 TAD (-30) / Is it an LQP03? /a226 SNA / ?, has multinational capability?/m236 /a226 JMP VSTWHZ / YES has /m236 TAD (-7) / Is it an LQP25? /m236 SZA CLA / YES, has multinational capability?/m236/a226 JMP VSNOMC / No, just set flags /a226 VSTWHZ, TAD (MNMSK) / Get multinational mask /a226 TAD LPONLN / Add it to rest of printer type /a226 DCA LPONLN / And re-save it /a226 VSNOMC, AC7777 / ANSWERED FLAG=7777 /C201 DCA IDANSW / ANSWERED FLAG=7777 /C201 JMP SQSTRT / GO RESET PARSE STATE VSTIDF, / ID FAILURE /A131 IFDEF DEVEL / IF DEVELOPMENT SWITCH, HALT /A131 JMP SQSTRT / GO RESET PARSE STATE /A131 VWHOTB, / TABLE OF PRODUCT IDENTIFICATION CODES VWHOSP=2 / SPARE ALLOCATION DECIMAL /d232 02; LA120 / LA120 /C188 /d232 03; LA34 / LA34 /d232 09; LQPSE / LQPSE 2048+10; LA1002 / LA100 WITH SECONDARY ATTR /m226 2048+13; LQP022 / LQP02 WITH SECONDARY ATTR /d232 15; LA12 / LA12 17; LA50 / LA50 2048+24; LQP022 / LQP03 WITH SECONDARY ATTR 26; LN03 / LN03 /C214 31; LQP022 / LQP25 with secondary attribute /a236 ZBLOCK VWHOSP^2 -1 /STOPPER LQP022, / LQP02 SECONDARY ATTRIBUTES 0; LQP02 1; LQP02 2; LQP02+ASF01 / WAS +ASF02 /C172 3; LQP02+ASF01 / WAS +ASF02 /C172 4; LQP02+ASF02 5; LQP02+ASF01 -1 / STOPPER LA1002, /LA100 secondary attributes /a226 0; LA100 /a226 2; LA100+MNMSK / LA100-PC /a226 3; LA100+MNMSK / LA210 or LN03 in LA100 mode /a232 -1 / stopper /a226 OCTAL VERRTB, / ERROR CODE CONVERSION TABLE / BASED AT NUMBER 20 SINCE ERRORS ARE BASED AT 20 DECIMAL / ENTRIES > 3777 OCTAL ARE DESTINATION ADDRESSES VSTER2 / 20 -- IGNORE VMALF / 21 PRINTER HARDWARE MALFUNCTION VCOMME / 22 COMMUNICATION I/O ERROR /C126 VMALF / 23 INPUT BUFFER OVERFLOW VPAUSE / 24 PAUSE ACTIVE /C132 VSTER2 / 25 TEXT RECOVERY ACTIVE -- IGNORE 20 / 26 COVER OPEN 21 / 27 PAPER OUT 16 / 28 RIBBON OUT VMALF / 29 PRINTWHEEL TABLE LOAD ERROR VSTER2 / 30 NO SHEET FEEDER ERROR -- IGNORE 17 / 31 SHEET FEEDER HARDWARE ERROR 17 / 32 SHEET FEEDER MISFEED 16 / 33 TONER LOW /A213 VMALF / 34 LN03 FATAL HARDWARE ERROR--CALL FIELD SERVICE /A213 VSTER2 / 35 PERFORM USER MAINTENANCE -- IGNORE /A213 VERRTE, / LABEL TO INDICATE VERR TABLE END /A213 21 / 36 LN03 PAPER OUT /A213 / THE FOLLOWING ZBLOCK IS STORAGE FOR THE PARAMETERS WHICH ARE CONTAINED / IN THE ANSI SEQUENCES SENT BY THE PRINTERS. DEC HAS A HOUSE RULE THAT / SAYS THAT A MAXIMUM OF SIXTEEN PARAMETERS WILL BE CONTAINED IN ANY / ANSI SEQUENCE VSTACK, ZBLOCK 20 VSTTMP, 0 /------------------ PAGE XLIST /********************************************************************* /a229 / CFPRES Cross field call to PRESCS /a229 / Modify WPF1 if you move this code /a228 /********************************************************************** /a229 CFPRES, XX / return address /a229 DCA CFPP1 / save the acc /a229 RDF /a229 TAD CIDF0 / get th return field an make a CDF CIF /a229 DCA CFPP2 / PUT IT IN PLACE FOR RESTORE /A229 CDFMYF / change to this field /a229 ACL / get the content of MQ which is PS val /a229 JMS PRESCS / output the escape sequence /a229 CFPP1, 0 / keep the parameter here /a229 CFPP2, 0 / CDIF instruction put here /a229 CLA / clear ac /a229 JMP I CFPRES / return /a229 /***********************************************************************/ / / / DIGCHK--DIGIT CHECK. CALLING FORMAT: / / TAD ASCII / LOAD AN ASCII VALUE / / JMS DIGCHK / CALL THIS ROUTINE / / JMP NOTDIG / RETURN HERE WITH AC UNCHANGED / / / IF NOT A DIGIT / / XECUTE / ELSE HERE WITH AC=DIGIT VALUE / / / /***********************************************************************/ DIGCHK, XX TAD (-72) / SMA / SKIP IF 71 OR SMALLER JMP DIGRTN / TOO BIG TAD (12) / SPA / SKIP IF 60 OR LARGER JMP DIGRTN / ISZ DIGCHK / AC IS ALL SET, BUMP RETURN JMP I DIGCHK / AND RETURN DIGRTN, TAD (72) / RESTORE AC JMP I DIGCHK / RETURN / PROCESS EXTENDED ERROR REPORTS VSTERR, ISZ VPTR DCA I VPTR / SET STOPPER DCA VPAUSF / RESET PAUSE FLAG /A132 DCA STSTTS / AND ANY OTHER ERROR FLAG /C179 TAD (VSTACK) DCA VPTR / INITIALIZE INDEX REGISTER TAD I VPTR / READ FIRST NUMBER SNA / SEE IF ESC [ ? 0 n JMS PRESET / YES, THERE ARE NO ERRORS / WE RANGE CHECK THE ERROR CODES, IGNORING ANY ERROR CODES LESS THAN 20 / OR BEYOND THE END OF OUR TABLE. WE PROCESS THEM ALL, SETTING THE STATUS / TO THE LAST ONE REPORTED EXCEPT IF PAUSE IS REPORTED WITH ANOTHER / ERROR, THE OTHER ERROR WILL RECEIVE PRIORITY. / RANGE CHECKING IS NECESSARY BECAUSE SOME OF THE TABLE ENTRIES CAN / BE DESTINATION ADDRESSES AND WE DON'T WANT TO JUMP TO OBLIVION! DECIMAL VSTER1, TAD (-20) / SUBTRACT ERROR BASE SPA JMP VSTER2 / IGNORE CODES LESS THAN 20 /C213 TAD (VERRTB-VERRTE / SEE IF IN RANGE OF TABLE /C214 OCTAL /A135 SMA SZA / SKIP IF MINUS OR ZERO /A213 JMP VSTER2 / IGNORE CODES NOT IN THE TABLE /A213 TAD (VERRTE / ADD ERROR CODE TABLE BASE /C214 DCA VSTERT / AS GOOD A TEMP AS ANY TAD I VSTERT SPA CLA / SEE IF A DESTINATION ADDRESS JMP VSTDIS / YES, GO TO IT TAD I VSTERT / NO, GET ERROR CODE JMS STSTTS / AND REPORT IT /C179 VSTER2, CLA / CLEAR ANY IGNORED CODES /A213 ISZ VPTR TAD I VPTR / GET NEXT NUMBER (NOT 1ST NUMBER) SZA / SEE IF END OF NUMBERS JMP VSTER1 / NO, PROCESS ANOTHER ERROR / IF THE PAUSE WAS THE ONLY ERROR DETECTED WE WILL REPORT IT /A132 / OTHERWISE, WE WILL NOT. THIS WILL HAVE THE EFFECT OF GIVING /A132 / MORE INFORMATION TO THE USER IF THE PRINTER REPORTS ERRORS IN /A132 / ASCENDING ORDER, AS THEY SEEM TO /A132 / FOR INSTANCE, THE LA50 WHEN IT RUNS OF OUT PAPER WOULD OTHERWISE /A132 / REPORT PAUSE ACTIVE /A132 TAD VPAUSF / SEE IF WE HAD A PAUSE ERROR /A132 SNA CLA / /A132 JMP SQSTRT / NO, WE ARE DONE /A132 TAD STSTTS / SEE IF IT WAS THE ONLY ERROR /C179 SZA CLA / /A132 JMP SQSTRT / NO, WE ARE DONE /A132 TAD (15) / PAUSE WAS ONLY ERROR, LOAD CODE /A132 JMS STSTTS / REPORT IT /C179 JMP SQSTRT / GO RESET STATE MACHINE /D135 OCTAL VSTDIS, TAD I VSTERT / DISPATCH TO DESTINATION ADDRESS DCA VSTERT / SAVE D.A. JMP I VSTERT / GO TO D.A. VSTERT, 0 / A TEMPORARY VPAUSF, 0 / PAUSE ERROR FLAG /A132 /**********************************************************************/ / / / VCOMME--COMMUNICATIONS ERROR. WE MAY HAVE PRINTED A CHR / / INCORRECTLY. THEREFORE WE MUST STOP PRINTING. / / WHEN THE USER RESPONDS WE WILL OFFER HIM B,T OR S / / / VCOMME, / COMMUNICATIONS ERROR /A127 AC0001 / SET THE STOP FLAG /A225 DCA PRSTOP / /A225 TAD (26) /A127 JMP VMALF1 / JMP BELOW /A225 / HERE WE USED TO GO TO THE STOP OVERLAY DIRECTLY BUT THAT CAUSED A /A225 / CRITICAL BUG SINCE IF THE COMM ERROR OCCURRED DURING AN OVERLAY LOAD /A225 / WE WOULD CALL PROV AGAIN BEFORE IT WAS DONE. SQPINP MAY NOT CALL PROV/A225 VMALF, / REPORT MALFUNCTION CDFSYS / THIS WAS MISSING !!!! **** UGH !!!! /A185 AC0001 DCA I (LPDNFG CDFMYF / GOES WITH ABOVE CDFSYS /A185 AC7777 DCA PRSTOP / SET STOP FLAG /A125 TAD (14) / LOAD MALFUNCTION ERROR CODE VMALF1, JMS STSTTS / GO REPORT IT /C179 TAD PRSTOP / AND ABORT FLAG /A125 DCA PABORT / /C125 JMP SQSTRT / AND START OVER VPAUSE, ISZ VPAUSF / SET THE PAUSE FLAG /A132 JMP VSTER2 / GO PROCESS ANOTHER ERROR /A132 /***********************************************************************/ / / / THIS STUFF IS UNIQUE TO THE LQPSE / / / /***********************************************************************/ / / REP01 IS ENTERED FROM VSTAT1 TO PROCESS A REPORT FROM / AN LQP01. THE NUMERIC DATA IS IN THE VSTACK. /d236REP01, AC0001 /d236 AND VSTACK+2 / GET SHEET FEEDER PRESENCE BIT /C118 /d236/d236 /d236 SNA CLA / / /d236 JMP REP01A / NO FEEDER / / IF THERE IS A SHEET FEEDER WE FIRST TURN OFF THAT BIT, AS IT MAY / ALREADY BE ON. THEN WE PUT THE BIT BACK. WE MUST DO THIS THIS WAY / SINCE THE LQPSE REPORTS SHEET FEEDER PRESENCE AS PART OF ITS STATUS / AND NOT AS PART OF ITS TERMINAL ID LIKE THE LQP02 /d236/d236 TAD (ASF01 / IT MUST BE AN ASF01 /d236 CMA / MAKE A NEGATIVE MASK /A168 /d236 AND LPONLN / LPONLN SANS ASF01 BIT /A168 /d236 TAD (ASF01 / TURN THE BIT BACK ON /A168 /d236 DCA LPONLN / SET NEW LPONLN VALUE WITH ASF INFO /d236REP01A, / /d236 TAD VSTACK+1 / GET FIRST INFO CHR /C118 /d236 JMP PNFERR / GO DETERMINE ERROR /***********************************************************************/ / / / COME HERE IF LQP01 GETS AN 'EOT' / / / /d236SQEOT, /D236 JMS SKIPIF / SKIP IF LQPSE /A126 /D236 LQPSE /A165 /d236 JMP SQPNXT / NOT LQPSE, IGNORE /A126 /D236 CIFSYS / /D236 JMS I (SQREST) / DO A STATUS REQUEST / /D236 JMP SQPNXT / GO CHECK FOR MORE CHRS / /***********************************************************************/ / / / THIS IS THE LQPSE FATAL ERROR PROCESSOR / / / /d236SQCAN, /D236 JMS SKIPIF / SKIP IF LQPSE /A126 /D236 LQPSE /A165 /d236 JMP SQSTRT / NOT LQPSE, START OVER /A126 / /D236 TAD (25) / THIS ERROR RATES A CODE OF ITS OWN / /D236 JMS STSTTS / REPORT IT /C179 /D236 JMP SQSTRT / AND START OVER / / / /***********************************************************************/ /*********************************************************************/ / / / SKIPIF--SKIPS IF THE ATTACHED PRINTER IS OF THE TYPE SPECIFIEC / / IN THE LOCATION FOLLOWING THE CALL / / / / CALLING SEQUENCE: JMS SKIPIF / / LQPSE / / ...RETURNS HERE IF NOT LQPSE / / ...RETURNS HERE IF LQPSE / / / / OF COURSE, ANY PRINTER TYPE MAY BE / / SPECIFIED. / / / SKIPIF, XX /A126 /C165 CLA / MAKE SUR AC CLEAR TAD I SKIPIF / GET PRINTER TYPE /A165 AND LPONLN / MASK WITH LPONLN /C165 CIA /A126 TAD I SKIPIF / SEE IF MATCHES SPECIFIED TYPE /C165 ISZ SKIPIF / BUMP UP PAST ARGUMENT /A165 SNA CLA / SKIP IF NOT SPECIFIED TYPE /C165 ISZ SKIPIF / IS, TAKE SKIP RETURN /C165 JMP I SKIPIF / RETURN /A126 /***********************************************************************/a237 / part of MNGETC in the next field /a237 /***********************************************************************/a237 MNGTC6, DCA MNSVCH / save it /a237 TAD PLPTR / SAVE POINTER /A237 DCA MNPTR / ............ /A237 TAD PLCNT / SAVE COUNT /A237 DCA MNCNT / .......... /A237 JMS PLNXT / get the next char /a237 NOP / it doesn't matter if there isn't one /a237 JMS MNGETA / HAVE WE GOT ONE? /A237 JMP MNGTC2 / yes get the saved char /a237 TAD MNPTR / restore pointer /a237 DCA PLPTR / ............... /a237 TAD MNCNT / restore count /a237 DCA PLCNT / ............. /a237 JMP MNGTC4 / jump back /a237 MNPTR, 0 / PLPTR saved /a237 MNCNT, 0 / PLCNT saved /a237 /------------------------ PAGE /***********************************************************************/ / / / PRRSST--RESET PRINTER STATUS / / THIS ROUTINE DECIDES WHETHER OR NOT THE ATTACHED / / PRINTER WILL VOLUNTARILY REPORT WHEN CERTAIN / / OF THE ERROR CONDTIONS ARE FIXED. IF THE CURRENT / / STOP CODE IS FOR ONE OF THOSE CONDITIONS, AND / / THEN THAT ERROR CODE IS NOT RESET. / / THE ASSUMPTION IS THAT WHEN THE ERROR IS FIXED / / THE NO ERROR CONDITION WILL BE DECODED AND PRSTTS / / RESET. IN THIS MANNER THE OPERATOR MAY BE ALLOWED / / TO LEAVE CERTAIN ERROR CONDITIONS IN FORCE AND TRY / / TO RESUME, PRINT TO END OF PAGE, B OR T, BUT ALL / / TO NO AVAIL! / / / /***********************************************************************/ PRRSST, XX TAD PRSTTS / GET STOP REASON /A147 JMS PRRSRD / READ THE TABLE /A122 SZA CLA / SKIP IF CODE MUST RESET /A147 JMP I PRRSST / EXIT IF TABLE SAYS SO /A155 CDFQUE /A122 TAD I (PQFRST / SEE IF ANYTHING IN QUEUE /A122 CDFMYF / /A122 SZA CLA / IF SO RESET TO BUSY, ELSE CLEAR /A122 AC0001 / ELSE WE ASSUME THE OPERATOR HAS FIXED /A147 DCA PRSTTS / THE ERROR JMP I PRRSST / EXIT /A147 PRRSRD, XX / READ THE TABLE /A122 CLL RAR / DIVIDE BY 2, PUT LSB IN LINK /A122 TAD (PRRSTB / ADD RESET STATUS TABLE BASE /A122 DCA T2 / SAVE IN A TEMP /A122 TAD I T2 / READ THE TABLE /A122 SZL / SKIP IF EVEN ERROR CODE /A122 BSW / SWAP IF ODD ERROR CODE /A122 AND P77 / MASK /A122 JMP I PRRSRD / RETURN /A122 PRRSTB, / TABLE OF PRSTTS CODES WHICH EMENATE FROM / PRINTERS WHICH CAN REPORT ERRORS /A147 0 / 01, 00 0 / 03, 02 0 / 05, 04 0 / 07, 06 100 / 11, 10 0 / 13, 12 101 / 15, 14 101 / 17, 16 101 / 21, 20 0 / 23, 22 0 / 25, 24 000 / 27, 26 /A126 /***********************************************************************/ / / / PRESET--ROUTINE CALLED WHEN A PRINTER REPORTS THAT THERE ARE / / CURRENTLY NO ERRORS. WE USE PRRSTB TO DETERMINE IF WE / / SHOULD CLEAR PRSTTS, PRSTT2, OR BOTH / / / /***********************************************************************/ PRESET, XX / RESET TO NO ERROR STATUS / TAD PRSTTS / JMS PRSTCK / RESET ERROR STATUS IF A ONE IN PRRSTB / DCA PRSTTS / (THIS RETURN ONLY IF PRT ERR STTS / TAD PRSTT2 / NOW CHECK THE OTHER ERROR STATUS. / JMS PRSTCK / RESET ERROR STATUS IF A ONE IN PRRSTB / DCA PRSTT2 / (THIS RETURN ONLY IF PRT ERR STT2. / JMS PRSTUP / ROLLUP STATUS IF NEED BE /A167 JMP I PRESET PRSTCK, XX / CHECK STATUS /C122 JMS PRRSRD / READ THE TABLE /C122 SNA CLA / SKIP IF MUST RESET /C122 JMP PRSTC1 / SPOOLER ERROR /C122 CDFQUE /A122 TAD I (PQFRST / SEE IF ANYTHING IN QUEUE /A122 CDFMYF / /A122 SZA CLA / IF SO RESET TO BUSY, ELSE CLEAR /A122 AC0001 / /A122 JMP I PRSTCK / RETURN /A122 PRSTC1, ISZ PRSTCK / SPOOLER ERROR, SKIP RESET /C122 JMP I PRSTCK / RETURN /C122 /***********************************************************************/ / / / STSTTS--SETS PRSTT2 TO STOP STATUS. IF PRSTT2 IS THE SAME / / AS PRSTTS THEN PRSTT2 IS CLEARED (DUPLICATE ERROR). / / PRSTT2 IS COPIED UP TO PRSTTS BY PRSTUP / / / /***********************************************************************/ STSTTS, XX /ENTRY POINT. /A069 DCA PRSTT2 / SET STOP STATUS CODE. /A069 TAD PRSTT2 / SEE IF THE SAME IS CURRENT STATUS /A167 CIA / /A167 TAD PRSTTS / /A167 SNA CLA / IF NOT, SKIP /A167 DCA PRSTTS / ELSE DON'T REPORT DUPLICATE ERRORS /A167 JMS PRSTUP / SEE IF CAN COPY UP /A122 JMP I STSTTS / RETURN /A122 PRSTUP, XX / COPY STATUS UP /A122 TAD PRSTT2 / GET STATUS /A122 TAD (-1) / SEE IF WE ARE IN TROUBLE /A122 SPA SNA CLA /A122 JMP I PRSTUP / NO, JUST RETURN /A122 TAD PRSTTS / SEE IF WE ARE ALREADY IN TROUBLE /A122 TAD (-1) /A122 SMA SZA CLA /A122 JMP I PRSTUP / YES, JUST RETURN /A122 TAD PRSTT2 / NO /A122 DCA PRSTTS / COPY UP STATUS /A122 DCA PRSTT2 / AND CLEAR THE STACKED STATUS /A122 JMP I PRSTUP / AND RETURN /A122 /***********************************************************************/a227 / MNGETC, get a character from the buffer and check for multinational / precedence char. If there is one the get the next char / and make it 8 bits by adding 200 / here because of space problems in proportional spacing olay /***********************************************************************/a227 MNGETC, XX / return address /a237 DCA TCCHAR / clear tech char /a237 TAD PLDIR / get direction /a237 SMA CLA / skip if negative /a237 JMP MNGTC1 / normal direction /a237 TAD I PLPTR / get the char /a237 JMP MNGTC6 / reverse direction /a237 / on previous page /a237 MNGTC4, TAD I PLPTR / get this char /a237 JMP MNGTC3 / skip next instrucyion /a237 MNGTC2, TAD MNSVCH / get saved char /a237 MNGTC3, /a237 ISZ TCCHAR / tech char detected /a237 JMP MNGTC5 / no cont /a237 CLA / clear ac /a237 SKP / skip the increment /a237 MNGTC5, ISZ MNGETC / do a skip return /a237 JMP I MNGETC / return /a237 MNGTC1, JMS MNGETA / test the char /a237 JMS PLNXT / if yes then get the next char /a237 NOP / WILL NEVER BE THE LAST ONE /A237 JMP MNGTC4 / join code to test for tech char /a237 MNSVCH, 0 / save character /a237 TCCHAR, 0 / tech char flag /a236 MNGETA, XX / return address /a227 TAD I PLPTR / get the character /a227 AND P177 / strip off the mode bits /a227 TAD (-23) / test for tech precedence /a227 SNA / skip if it is'nt /a227 JMP MNGET2 / go to pick up the char /a227 IAC / test for multinational /a236 SNA / skp if it isnt /a236 JMP MNGET3 / jump if it is /a236 IAC / test for line drawing /a236 SZA CLA / skip if it is /a236 JMP MNGET5 / must be a normal char /a236 MNGET2, AC7777 / SET THE TECH CHAR FLAG /a237 DCA TCCHAR / save it /a237 JMP MNGET3 / jmp to jion the multinational code /a236 MNGET5, ISZ MNGETA / do a skip return /a236 JMP I MNGETA / return /a227 MNGET3, AC7777 / set the multinational flag /a227 DCA PLWMUL / /a227 JMP I MNGETA / go pick up the char /a236 /d236/***********************************************************************/ / / / PNFERR--PROCESS NON FATAL ERROR FROM LQPSE / / THIS ROUTINE HAS BEEN REWORKED /A132 / / TO GIVE HIGHER PRIORITY TO ERRORS /A132 / / OTHER THAN PAUSE /A132 / / / /***********************************************************************/ /d236PNFERR, / PROCESS NON FATAL ERROR / /d236 TAD (-40 /d236 SNA / IF ANY ERROR /d236 JMP PNF0 /D132 /d236 RTR / IF RIBBON /C132 /d236 SZL /d236 JMP PRS28 / THEN PROCESS /d236 RTR /d236 SZL / ELSE IF 'CUT SHEET FEEDER ERROR' / /d236/d236 JMP PRS32 / THEN PROCESS /d236 RTL / IF PAUSE /A132 /d236 RAL /A132 /d236 SZL CLA /d236 JMP PRS24 / THEN PROCESS / IF WE FALL THROUGH, UNDEFINED ERROR, RESET ERROR CONDITIONS / /d236PNF0, JMS PRESET / REPORT NO ERROR CONDITION /d236 JMP SQSTRT / AND START OVER / / CAREFUL--THE AC MAY NOT BE NOT CLEAR WHEN ENTER AT THESE LABELS / /d236PRS32, CLA / /C130 /C134 /d236 TAD (24) / CODE FOR LQPSE ASF ERROR /A134 /d236 JMP VMALF1 / GO SET STATUS, PRSTOP, & PABORT /C225 /d236 / PAPER AFTER USER RESPONDS /C134 /d236PRS28, AC0001 / LQPSE RIBBON = 16 / /d236PRS24, TAD (15) / LQPSE PAUSE = 15 / /d236 JMS STSTTS / SET ERROR STATUS /C114 /d236 JMP SQSTRT / GO RESET PARSER & START OVER /C225 /d236 /--------------------- PAGE / R2FILP - RDFIL FOR PRINTER. / / 183 HLP 17-APR-84 Combine R2FILP with WPRINT / 014 HLP 17-APR-84 Fixup problems of combining QBLKs / 013 HLP 12-APR-84 MOVE PRVALB FROM RESIDENT / 12-APR-84 MOVE PCTBUF TO OVERLAY / Use only PRQB--delete RDFQB / 012 HLP 09-FEB-84 Document read error caused program HLT / 011 HLP 14-NOV-83 Move READCH here from WPRINT / 010 HLP 19-OCT-83 Add PCTBUF for parsing printer controls / 009 HLP 03-OCT-83 Add label RDFIO4 as part of bugfix when / user places a diff. docdsk. after queing / and print spoller finds nonexist doc / 008 WCE 17-AUG-83 Remove changes made under #004 changing / RXE?? definitions from those in WPF1 / 007 HLP 10-MAY-83 Add JMS SQPINP near JWAIT / 006 HLP 25-APR-83 Add code to detect if WPRINT is too big / 005 HLP 07-MAR-83 RDFIO handles all document disk read errors / 004 HLP 04-MAR-83 Making compatible with RXE?? / definitions which have 4000 bit / 003 GDH 03-MAR-82 Changed temp location of RDGTHS. / Fix for long docs. / 002 GDH 10-FEB-82 Modified error handling. (since we / weren't properly handling (disk) errors / error handling was disabled. Also there / is a critical room shortage. / 001 GJP 21-JAN-82 Added 2 more possible header extensions / TT 07-JUL-81 Removed superfluous conditionals / X3.5 JLZ 20-MAY-80 REARRANGED TO SUPPORT SAVING POSITIONS FOR / ENHANCED HEADERS/FOOTERS / 2.7A-1 LDB 1/29/78 CHANGE FOR WT78 7-BIT / 2.J KEE ADD 4-FLOPPY SUPPORT 8/26/77 / SCHCNT= 774 / BYTES PER BLOCK BOFSET= 2 SCBKOF= 52 / OFFSET TO FIRST BLOCK PTR IN HEADER 1 / /THE VARIABLES IN THE BLOCK WHICH FOLLOWS ARE READ FROM THE HEADER BLOCK /OF THE DOCUMENT TO BE PRINTED. SOME OF THE VALUES ARE CHANGED AT START-UP /TIME. THE MEANINGS OF THE VLAUES ARE DETAILED BELOW: PRVALB, PRQCPY, 0 /THE NUMBER OF COPIES TO BE MADE. THE VALUE IS /DECREMENTED AS COPIES ARE PRINTED. PRQIND, 0 /THE NUMBER OF BLANK COLUMNS IN THE LEFT MARGIN. PRQLSZ, 0 /THE NUMBER OF EXTRA HALF LINES TO BE ADDED. PRQTMG, 0 /THE NUMBER OF LINES IN THE TOP MARGIN. CHANGED TO /THE NUMBER OF LINE UNITS IN THE TOP MARGIN. PRQBMG, 0 /THE NUMBER OF LINES IN THE BOTTOM MARGIN. CHANGED TO /THE NUMBER OF LINE UNITS IN THE BOTTOM MARGIN. PRQPSZ, 1020 /THE NUMBER OF LINES ON THE PAGE. CHANGED TO THE SIZE /OF THE PAGE IN LINE UNITS. PRQPIT, 0 /THE PITCH WITH WHICH THE DOCUMENT SHOULD BE PRINTED. PRQBOT, 0 /THE PAGE NUMBER OF THE FIRST PAGE TO BE PRINTED. PRQTOP, 0 /THE PAGE NUMBER OF THE LAST PAGE TO BE PRINTED. IS /ZERO IF THERE IS NO UPPER LIMIT. PRQPGO, 0 /THE FIRST PAGE NUMBER TO BE USED. PRQSP, 0 /BIT 11 OF THIS WORD IS USED TO FLAG SHADOW PRINTING /A058 /IF BIT 11 IS SET WE ARE SHADOW PRINTING, ELSE NOT /A058 PRQAPG, 0 /AUTOMATIC PAGINATION FLAG. PRQAPG=0 IF NO AUTOMATIC /PAGINATION IS TO BE DONE, NON-ZERO OTHERWISE. PRQINU, 0 /INDENT IN PRINT UNITS; AN UNUSED HEADER SPOT /C209 PRQTMP, 0 /THIS IS AN UNUSED HEADER VALUE, SO IT IS USED AS A /M089 /TEMP DURING DOCUMENT STARTUP TO HOLD THE PAGE SIZE OF /M089 /THE LAST DOCUMENTED PRINTED. /M089 PRQSSM, 0 / INITAL SE MENU SETTING PRQSSS, 0 / CURRENT SE SETTING PRQOVP, 0 /=1 IF EXTRA DARK PRINTING IS DESIRED. PRQ2W, 0 /IS NON-ZERO IF TWO PASSES ARE REQUIRED. IS MODIFIED /BY SPOOLER TO KEEP TRACK OF PASSES. PRQPNT, 0 /THE TYPE OF PHYSICAL PRINTER ATTACHED. VALUES ARE: /DHOST = HOST (HOST) /DHOST1 = HOST BUT UNDERLINES AND MULTIPLE PASSES /A189 / STRIPPED, EOL LINE FEED STRIPPED /A189 /DDP2 = SERIAL DRAFT PRINTER (DP2) /DSQ1 = SERIAL LQP, ONE HEAD (SQ1) PRQCM, 0 /THE NUMBER OF EXTRA SPACES TO PUT BETWEEN COLUMNS. PRQSB1, 0 /THE FIRST SUBSTITUTION CHARACTER. PRQSB2, 0 /THE SECOND SUBSTITUTION CHARACTER. / / THIS ROUTINE OPENS A FILE FOR READING. IT IS CALLED WITH THE FILENAME / AS AN ARGUMENT. / RDINIT, XX / DCA T1 / SAVE THE FILE NAME TAD T1 / RECOVER IT AND P377 / GET THE FILE NUMBER DCA PRQB+RXQFNO / WRITE THE FILE NUMBER / TAD T1 / RECOVER THE FILE NAME BSW RTR AND (17) / GET THE DRIVE NUMBER DCA RDFDRV / SAVE THE DRIVE NUMBER /C183 JMS RDFIO / ESTABLISH THE DENSITY /A001 RXEDN+4000 / GO DO A SET DENSITY /M008 JMS RDFIO / GET HEADER BLK # INTO PRQB+RXQBLK RXEGF+4000 TAD PRQB+RXQBLK / GET THE HEADER BLOCK NUMBER / IF THE HEADER COULD NOT BE FOUND / THEN PRQB+RXQBLK CONTAINS ZERO DCA RDHDRB / SET HEADER BLOCK NUMBER AC7777 DCA RDCHNO / INITIALIZE THE COUNT OF NUMBER OF CHARACTERS / LEFT IN THE BUFFER AC7777 DCA RDPTNO / INITIALIZE THE COUNT OF NUMBER OF BLOCK NUMBERS / LEFT IN THE TABLE TAD (SCBKOF) / INITIALIZE THE OFFSET OF THE FIRST BLOCK NUMBER / IN THE HEADER BLOCK DCA RDPTRS DCA RDMOD / CLEAR THE MODE VALUES (USED IN SIX BIT TRANSLATION) DCA RDMOD+1 DCA RDHDBN / SHOW BUFFER EMPTY OF HEADER BLOCK JMS RDGETR / GET THE FIRST HEADER EXTENSION DCA RDHDRB+1 / SAVE ITS BLOCK NUMBER AC0001 JMS RDGETR / GET THE SECOND HEADER EXTENSION DCA RDHDRB+2 / SAVE ITS BLOCK NUMBER TAD (1354) / GET THE PTR TO WHERE THE EXTENSIONS /A001 / ARE IN THE 2ND HEADER EXTENSION JMS RDGTHS / GO GET REMAINING HEADERS INTO MEMORY /A001 JMP I RDINIT / AND RETURN / / THIS ROUTINE RETURNS THE NEXT CHARACTER FROM THE FILE IN 6-BIT / RDNXC, XX / JMS RDNXCB / GET THE NEXT BYTE FROM THE FILE / TAD (-77) / IS IT AN ESCAPE? SNA JMP RDNXCX / JUMP IF SO / TAD P77 / ELSE RESTORE THE CHARACTER JMP I RDNXC / AND RETURN IT / RDNXCX, JMS RDNXCB / GET ANOTHER BYTE SMA SZA TAD P7700 / SHOW IT IS AN ESCAPE CHARACTER JMP I RDNXC / AND RETURN IT / / THIS ROUTINE RETURNS THE NEXT BYTE FROM THE FILE / RDNXCB, XX / RDNXC1, CLA ISZ RDCHNO / INCREMENT THE NEGATIVE CHARACATER COUNT JMP RDNXC3 / JUMP IF THERE ARE ANY CHARACTERS LEFT IN THE BUFFER / TAD RDPTRS / INCREMENT THE OFFSET. /A002 JMS CK3HDR / (AND CHECK FOR SKIP). /A002 DCA RDPTRS / AND SAVE. /A002 ISZ RDPTNO / ANY BLOCK NUMBERS LEFT? SKP / SKIP IF SOME ARE LEFT / / THERE ARE NO BLOCK NUMBERS LEFT IN THE TABLE. FILL THE TABLE BACK UP. / JMS RDFTAB / THIS RTNE FILLS THE TABLE WITH BLK NBRS/M002 / / THERE ARE NO CHARACATERS. READ THE NEXT BLOCK INTO THE BUFFER. / TAD (-SCHCNT) / RESET THE CHARACTER COUNT DCA RDCHNO JMS RDFBUF / FILL THE BUFFER /M002 JMP I RDNXCB / ERROR OR EOF RETURN / / NOW, READ THE NEXT BYTE FROM THE BUFFER / RDNXC3, TAD RDCHNO / GET THE CHARACTER COUNT TAD (SCHCNT) / SUBTRACT FROM THE END OF THE BUFFER JMS RDGTBY / GET THE NEXT BYTE FROM THE BUFFER RDBUF+BOFSET / SNA / IS THE VALUE A NULL? JMP RDNXC1 / JUMP TO GET A NEW ONE IF SO JMP I RDNXCB / ELSE, RETURN THE VALUE / / / THIS ROUTINE READS THE NEXT BLOCK INTO THE TABLE / RDFBUF, XX ISZ RDLPTR / INCREMENT THE POINTER INTO TABLE TAD RDLPTR / NOW LOCATED OFF PAGE /A198 DCA RDBUT1 / SAVE TEMPORARILY /A198 TAD I RDBUT1 / RECOVER THE NEXT BLOCK NUMBER /A198 SNA / IS THERE ANOTHER BLOCK NUMBER? JMP RDFBL1 / JUMP IF THERE ARE NO MORE JMS RDFIO / READ THE NEXT BLOCK RXERD+4000 /M008 ISZ RDFBUF JMP I RDFBUF / AND RETURN RDFBL1, / WE HAVE REACHED THE END OF THE FILE DCA RDCHNO / CLEAR THE CHARACTER COUNT TO SIGNAL EOF JMP I RDFBUF / AND RETURN RDBUT1, 0 / TEMP TO INDIRECT THROUGH /A198 /--------------------- PAGE /THIS ROUTINE IS THE MERGING POINT OF THE THREE ELEMENTARY FILE ACCESS /ROUTINES. THIS ROUTINE JUMPS TO WHICHEVER ELEMENTARY ROUTINE IS ADDRESSED /THROUGH THE LINK RDCHAR, AND RETURNS THE CHARACTER WHICH THE ELEMENTARY /ROUTINE RETURNS. /IF AN END PRINT CONTROL OR AN END OF FILE IS RECEIVED, THE ROUTINE /RETURNS ZERO. ALSO, THE LOCATION RDCHAR IS CLEARED SO THAT SUBSEQUENT /ATTEMPTS TO READ FROM THE CURRENT ELEMENTARY ROUTINE WILL RESULT IN /CONTINUING RETURNS OF ZERO UNTIL THE LINK IS RESET. /AC=0 /JMS READCH /AC=CHARACTER OR ZERO (FOR END OF FILE OR END PRINT CONTROL) READCH, XX TAD RDCHAR /HAS RDCHAR BEEN CLEARED? SZA CLA JMP I RDCHAR /USE THE ELEMENTARY ROUTINE CURRENTLY SELECTED /THE ELEMENTARY ROUTINES RETURN HERE WHEN READING IS COMPLETE. READRT, DCA T1 /SAVE THE RETURNED VALUE /IF THE RETURNED CHARACTER INDICATES END OF FILE (ZERO OR NEGATIVE) OR /END OF PRINT CONTROL (1414), RETURN ZERO. OTHERWISE, RETURN THE VALUE /FROM THE ELEMENTARY ROUTINE. TAD T1 /RESTORE THE VALUE--IS IT AN END OF FILE? TAD (-EPC) /IS IT AN END OF PRINT CONTROL? SNA JMP READC1 /YES--RETURN ZERO TAD (EPC) /IS IT AN END OF FILE? SMA SZA CLA JMP READC2 /NO--RETURN THE VALUE /WE WANT TO RETURN ZERO. READC1, DCA RDCHAR /CLEAR THE READ LINK TO PERPETUATE EOF JMP I READCH /AND RETURN /THE VALUE WHICH SHOULD BE RETURNED IS NOW IN T1. READC2, TAD T1 /GET THE RETURN VALUE JMP I READCH /RETURN /THIS SECTION READS CHARACTERS FOR THE PRINTER FROM THE FILE SYSTEM. RDFILE, JMS RDNXCH /READ THE NEXT CHARACTER JMP READRT /RETURN THE CHARACTER /THIS SECTION READS CHARACTERS FROM THE EDITOR. RDEDIT, XX /A CIF TO THE EDITOR'S INSTRUCTION FIELD IS /PATCHED HERE JMS I PRIRAD /GET A CHARACTER FROM THE EDITOR JMP READRT /RETURN THE CHARACTER /THIS ROUTINE READS CHARACTERS FROM THE DISK HEADER/FOOTER BUFFER. RDBUFF, ISZ RDBPTR /POINT TO THE NEXT POSITION IN THE BUFFER ISZ RDCCNT /ANY CHARACTERS LEFT? JMP RDBUF1 /YES--READ THE NEXT ONE TAD (OVRDBL) /NO--READ THE NEXT BLOCK FIRST JMS PROV OBRDBL RDBUF1, XX /THIS LOCATION IS PATCHED WITH A CDF TO THE /FIELD OF THE BUFFER TAD I RDBPTR /GET THE CHARACTER CDFMYF JMP READRT /RETURN THE CHARACTER RDCCNT, 0 /CHARACTERS REMAINING IN BLOCK TO BE READ RDBPTR, 0 /POINTER INTO BUFFER OF BLOCK BEING READ RDBLCK, 0 /THE BLOCK CURRENTLY BEING READ / / THIS ROUTINE FILLS THE BLOCK NUMBER TABLE WHEN IT IS EMPTY. / RDFTAB, XX TAD (-RDNPTR) DCA RDPTNO / INITIALIZE COUNT OF NUMBERS IN TABLE TAD (RDPTRB-1) DCA RDLPTR / INITIALIZE POINTER INTO TABLE AC7777 / UN-DECREMENT THE POINTER. /A002 TAD RDPTRS / SAVE THE OFFSET TO USE BELOW DCA RDTEMP / / NOW FILL THE TABLE WITH BLOCK NUMBERS. / RDFTL1, ISZ RDLPTR / INCREMENT POINTER INTO THE TABLE TAD RDTEMP / GET OFFSET & INCREMENT IT. /A002 JMS CK3HDR / GO CHECK TO SEE IF THE 3RD HEADER EXT BLCKS /A001 DCA RDTEMP / SAVE NEW OFFSET. /A002 / TAD RDTEMP / GET THE NEXT OFFSET JMS RDGETR / GET NEXT BLOCK NUMBER SNA / SKIP IF THERE IS AN OFFSET. /A002 JMP RDFTL2 / JMP IF AT END OF FILE. /A002 DCA I RDLPTR / STORE THE BLOCK NUMBER IN THE TABLE ISZ RDPTNO / IS THERE STILL ROOM IN THE TABLE? JMP RDFTL1 / CONTINUE LOOP IF THERE IS / SKP / DON'T SET STOPPER. /A002 RDFTL2, DCA I RDLPTR / SET STOPPER. /A002 TAD (-RDNPTR) / RESET TABLE COUNT DCA RDPTNO / DCA RDHDBN / SHOW THE BUFFER CONTAINS NO HEADER BLOCK / TAD (RDPTRB-1) / GET ONE BEFORE THE BEGINNING OF THE TABLE DCA RDLPTR / INITIALIZE THE POINTER INTO THE BLOCK NUMBER TABLE / JMP I RDFTAB / AND RETURN / RDTEMP, 0 / A TEMP FOR RDFTAB. /A002 RDLPTR, 0 / POINTER INTO THE BLOCK NUMBER TABLE RDPTNO, 0 / COUNT OF TABLE ENTRIES / / THE FOUR VARIABLE LOCATIONS WHICH FOLLOW MUST REMAIN IN THIS ORIENTATION / SINCE THEY ARE SAVED AND RESTORED BY THE PRINTER TO IMPLEMENT ENHANCED / HEADERS AND FOOTERS. / / ********************************************************************* / FSSAV, RDPTRS, 0 / OFFSET INTO THE HEADER BLOCK OF NEXT BLOCK NUMBER RDMOD, 0 / MODES FOR DECODING 6-BIT 0 RDCHNO, 0 / BUFFER CHARACTER COUNT /THE BUFFER AREA FOR MULTI COLUMN PRMCAC=24 /SIZE OF THE COLUMN AREA 20 COLUMNS /C198 PRMCAY, 1 ZBLOCK PRMCAC /THE BUFFER AREA FOR SAVE/RESTORE OPERATONS PRSAV, ZBLOCK 30 /M056 /--------------------- PAGE / / THIS ROUTINE READS THE NEXT CHARACTER FROM THE FILE AND RETURNS IT IN / SEVEN BIT ASCII. / RDNXCH, XX / / IF THE CHARACTER COUNT IS CLEARED, THE EOF HAS BEEN REACHED. / TAD RDCHNO / IS THE COUNT CLEAR? SMA CLA JMP I RDNXCH / YES--RETURN IMMEDIATELY / RDNXH1, JMS RDNXC / ++++ SNA / ++++ JMP I RDNXCH / RETURN IF NONE JMS XLTASC JMS GETMOD / ++++ RDMOD SNA / ++++ JMP RDNXH1 / DON'T RETURN NULLS JMP I RDNXCH / RDGTBY, XX CLL RAR TAD I RDGTBY DCA GETBY1 ISZ RDGTBY TAD I GETBY1 SNL / ++++ BSW AND P77 JMP I RDGTBY GETBY1=T1 / RDFIO, XX DCA RDFIOT / SAVE BLOCK NUMBER TEMPORARILY /C183 TAD I RDFIO / ++++ DCA RDFIOQ+2 / AND FUNCTION CODE /C183 ISZ RDFIO RDFIOQ, TAD RDFIOT / GET BLOCK NUMBER BACK /A183 JMS PRQRX / CALL DISK IO ROUTINE /A183 0 / FUNCTION CODE (LOADED ABOVE) /A183 RDFDRV, 0 / STORAGE FOR FILE DRIVE NUMBER /A183 RDBUF / BUFFER /A183 JMP PRQDDE / IF ERROR GO REPORT IT /A183 JMP I RDFIO / RETURN RDFIOT, 0 / TEMP STORAGE FOR BLK /A183 / / RDFIL HEADER CONTROL BLOCK / RDBFCB, RDBUF / BUFFER ADDRESS RDHDBN, 0 / POINTER TO CURRENT HEADER BLOCK NUMBER RDHDRB, 0 / ++++ 0 0 0 / ++++ 0 / ++++ 0 / HEADER BLOCK NUMBERS ENDED BY ZERO / / THIS ROUTINE RETURNS THE BLOCK NUMBER ADDRESSED BY THE OFFSET WHICH IS / IN THE AC UPON CALL. / RDGETR, XX / DCA .+2 / SAVE THE OFFSET IN THE CALL BELOW / RDGETA, JMS SCOFST / THIS ROUTINE RETURNS THE ADDRESS IN THE BUFFER OF / THE DESIRED OFFSET IN A SKIP RETURN. IF THE / RIGHT HEADER BLOCK IS NOT IN THE BUFFER, IT MAKES / ANORMAL RETURN, BUT HAS SET RDHDBN TO THE ADDRESS / OF THE PROPER HEADER BLOCK NUMBER. 0 / THE DESIRED OFFSET RDBFCB / THE HEADER CONTROL BLOCK / JMP RDGTXR / NORMAL RETURN MADE--JUMP TO HANDLE IT / DCA T1 / SAVE THE BLOCK NUMBER ADDRESS TO INDIRECT THROUGH TAD I T1 / GET THE BLOCK NUMBER JMP I RDGETR / RETURN IT / / WE MUST LOAD THE HEADER BLOCK INTO THE BUFFER AND TRY AGAIN / RDGTXR, TAD I RDHDBN / GET THE BLOCK NUMBER OF THE HEADER BLOCK SNA JMP RDGTXZ / JUMP IF NO HEADER BLOCK WAS SPECIFIED / JMS RDFIO / READ THE HEADER BLOCK RXERD+4000 /M008 / JMP RDGETA / GO BACK AND GET THE BLOCK NUMBER / RDGTXZ, DCA RDHDBN / CLEAR TO INDICATE NO HEADER BLOCK IS IN THE BUFFER JMP I RDGETR / AND RETURN / SCOFST, XX DCA SCOFS1 / INIT REL BLK # TAD I SCOFST TAD (-376) / COMPUTE REL BLK # ISZ SCOFS1 SMA / ++++ JMP .-3 DCA SCOFS2 / SAVE OFFSET-400 ISZ SCOFST TAD I SCOFST / BUFCB PTR DCA SCOFS3 AC0001 / ++++ TAD SCOFS3 / CUR BLK PTR PTR DCA SCOFS4 ISZ SCOFST TAD I SCOFS4 SNA / ++++ JMP SCOFSA / READ IF CURR BLK 0 CIA / ELSE COMPARE WITH NEEDED PTR TAD SCOFS1 / ++++ TAD SCOFS4 SNA CLA / ++++ JMP SCOFSB / JUMP IF SAME SCOFSA, TAD SCOFS1 / ++++ TAD SCOFS4 / SET NEW BLK PTR DCA I SCOFS4 JMP I SCOFST / RETURN FOR READ SCOFSB, TAD SCOFS2 / ++++ TAD (400) / WORD OFFSET TAD I SCOFS3 / +BUFFER PTR ISZ SCOFST / BUMP FOR NORMAL RETURN JMP I SCOFST / RETURN WORD PTR / SCOFS1, .-. SCOFS2, .-. SCOFS3, .-. SCOFS4=T1 /A005 /THIS ROUTINE IS CALLED TO UNDERLINE THE DISTANCE IN PLASPC. UPON COMPLETION, /THE HEAD SHOULD HAVE MOVED ONLY THE DISTANCE PLASPC, PLASPC MUST BE CLEAR, /PLOLNC MUST NOT HAVE CHANGED, AND PLPOS MUST NOT HAVE CHANGED EITHER. PRUNDL, XX /WE PROCEED TO PRINT UNDERLINES AND UPDATE PRCCH AND THE AMOUNT WHICH /REMAINS TO BE PRINTED. WHEN THE HEAD POSITION EXCEEDS THE LIMIT, WE QUIT. PRUND0, TAD PLNRCS /GET THE SIZE OF AN UNDERLINE JMS I PRLSCX /SET SPACE SIZE AND UPDATE HEAD POSITION TAD U137 /GET AN UNDERLINE JMS I PRCHAX /PRINT THE UNDERLINE TAD PLNRCS /GET AMOUNT JUST PRINTED CIA TAD PLASPC /SUBTRACT FROM SPACING TO DO DCA PLASPC /SAVE AS SPACING WHICH REMAINS TAD PLASPC /SEE IF THE HEAD IS FAR ENOUGH LONG NOW SZA SMA CLA JMP PRUND0 /NO--CONTINUE UNDERLINING /WE ARE ALMOST THROUGH PRINTING THE UNDERLINE. WE MOVE BACK TO THE END OF /THE UNDERLINE AND PUT A LAST ONE THERE. JMS I PLHMOX /DO THE MOVE JMS I PRLSCX /SET THE SPACING TO ZERO TAD U137 /GET AN UNDERLINE JMS I PRCHAX /PRINT IT JMP I PRUNDL /AND RETURN /LINKS FOR THIS ROUTINE. PRLSCX, PRLSCS U137, 137 PRCHAX, PRCHAR PLHMOX, PLHMOV /-------------------- PAGE / NOTE: THIS CONSTANT (1355) IS USED ONCE DURING OPEN, THEN OVERLAID XLTASC, / XLAT 6-BIT TO ASCII XX / 1-73: NORMAL / 74: SHIFT / 76: UNSHIFT / 7702-7777: ESCAPE / / OUTPUT: / / -(1-6): MODE CHANGE (L=1 IF ON) / 0-200: ASCII CHAR (L=1 IF ALPHA) / SPA SNA / ++++ JMP XLTAS1 / ESCAPE TAD (-74) / ++++ SMA / ++++ JMP XLTAS2 / SHIFT-UNSHIFT TAD (74-41) XLTAS4, CLL CML / SET LINK FOR ALPHA TAD (41+37) / CLEAR LINK IF NOT ALPHA JMP I XLTASC XLTAS1, TAD (100-MAXESC) / ++++ SMA / ++++ CLA / CHECK FOR OK TAD (MAXESC+ESCTAB) / ++++ DCA T1 TAD I T1 / ++++ SPA / ++++ JMP XLTAS3 TAD (-100) / ADJUST FOR ALPHA TEST JMP XLTAS4 / XLTAS2, SNA CLA / ++++ IAC CMA XLTAS3, CLL CML RAR JMP I XLTASC / ESCTAB, 0 / ++++ 0 -3 / ++++ -4 / ++++ -5 / ++++ -6 / ++++ 11 / ++++ 10 / ++++ 15 -13 / ++++ -14 / ++++ 12 / ++++ 14 / ++++ -7 / ++++ -10 -11 / ++++ -12 / ++++ 0 133 / ++++ 134 / ++++ 135 / ++++ 136 / ++++ 137 0 / NORMALLY 7 FOR NEED-WRAP CODE 16 / ++++ 17 MAXESC=.-ESCTAB -16 / ERROR / NOTE: THIS CONSATNT (RDHDRB+2) IS USED ONCE, THEN OVERLAID GETMOD, / XLAT ESCAPES, ADD MODES TO ASCII XX MQL TAD I GETMOD / ++++ DCA T1 / ++++ ISZ GETMOD MQA SMA SZA / ++++ JMP GETMD1 / NORMAL ASCII SNA / ++++ JMP I GETMOD IAC SNA / ++++ ISZ T1 / ADJUST T1 IF SHIFT-UNSHIFT CHANGE TAD (MODTAB) / ++++ DCA T2 / GET PTR TAD I T2 SPA / ++++ JMP I GETMOD / RETURN QUICK IF ERROR CMA AND I T1 SNL / ++++ TAD I T2 DCA I T1 / SET NEW MODE JMP I GETMOD GETMD1, TAD I T1 / ADD MODE FLAGS ISZ T1 SZL / ++++ TAD I T1 / AND UNSHIFT JMP I GETMOD / -1 / ERROR 2000 1400 1000 400 200 MODTAB=. 40 / RDNPTR=10 RDPTRB, ZBLOCK RDNPTR /*********************************************************************** / /A001 / THIS ROUTINE WILL COPY IN TO MEMORY THE TWO ADDITIONAL /A001 / HEADER BLOCK NUMBERS FOR DOUBLE DENSITY DISKETTES. /A001 / /A001 /***********************************************************************/A001 RDGTHS, / GETS HEADER EXTENSIONS 3 AND 4 INTO MEMORY /A001 XX /A001 DCA RDTMP1 / GET POINTER TO WHERE THE BLOCK NBRS ARE/M003 TAD (RDHDRB+2) / GET THE TARGET AREA ADDRESS /A001 DCA X1 / STORE IT FOR AUTOINDEXING /A001 TAD RDTMP1 / GET POINTER TO HEADER EXTENSIONS /M003 JMS RDGETR / GO GET THE EXTENSION /A001 DCA I X1 / PUT IT INTO BLOCK LIST /A001 ISZ RDTMP1 / BUMP UP THE POINTER TO NEXT EXTENSION /M003 TAD RDTMP1 / GET IT /M003 JMS RDGETR / GO GET 4TH EXTENSION /A001 DCA I X1 / PUT IT INTO RDFIL BLOCK CONTROL AREA /A001 JMP I RDGTHS / RETURN /A001 /******************************************************************** /A001 / /A001 / THIS ROUTINE WILL CHECK TO SEE IF THE POINTER IS POINTING TO /A001 / THE AREA ON THE 2ND HEADER EXTENSION WHERE THE ADDITIONAL /A001 / HEADER BLOCK EXTENSION BLOCK NUMBERS ARE. IF THE POINTER IS /A001 / POINTING THERE, IT WILL BUMP UP THE POINTER SO THAT IT WILL BE /A001 / POINTING TO THE NEXT DOCUMENT TEXT BLOCK NUMBER, SO THAT WE /A001 / WON'T BE TRYING TO PRINT HEADER EXTENSION BLOCK NUMBERS AS /A001 / TEXT BLOCKS. /A001 / /A001 /***********************************************************************/A001 RDTMP1, /A003 CK3HDR, / CHECK FOR THIRD HEADER, AND BUMP PAST HDR EXTENSIONS /A001 XX /A001 /D002; TAD RDPTRS / GET HEADER WORD POINTER /A001 TAD (-1353) / GET NEG OF POINTER WHERE EXT ARE /M003 SNA / ARE THEY EQUAL? /A001 TAD (16) / BUMP PAST THE HEADER EXT BLOCK NBRS /A001 TAD (1354) / ADD BACK 1354, WHERE HEADERS ARE /A001 JMP I CK3HDR / RETURN /A001 / PAGE / /**************************************************************************** / / This area blasted by print screen routine. This buffer will /a226 / not be in use then, as print screen hook tests for printer /a226 / busy before blasting, and aborts if it is. Therefore it is /a226 / perfectly safe to blast it in here (er-hem! cough! cough!) /a226 / /**************************************************************************** RDBUF, ZBLOCK 400 / READ BUFFER IFZERO .-1&4000 /A006   /WPRTOV DECMATE-II V2.0 PRINTER OVERLAYS /XLIST /THIS IS SUPPOSED TO BE HERE /276 EMcD 24-Sep-85 Dutch and Spanish Xlations /275 EMcD 16-Sep-85 Nordic translations /274 Mart 28-june85 fix reqired space for tech chars /273 Mart 28-may-85 set flag to repeat char for shadow / and sort bugs in theme printing /272 MART 03-MAY-85 flag PUM mode /271 Mart 02-APR-85 Allow 8 bit multinational chars /270 RCME 22-MAR-85 Set up G1 as line drawing character set / /---------------------- All below refer to V2.0 and earlier --------------- / /269 HLP 10-JAN-85 Fixup EOD wait for double XON on 02/03/WD /268 HLP 28-DEC-84 Don't strip trailing spaces if soft retn / Delete SP-BS ruse to trigger underline / Fix no-letterspacing bug (unreported) / Only reset LQP02 at EOD / Fix missing jump--going to oblivion on EOD timeout / Set DECPSP flag for LN03 proportional fonts /267 HLP 13-DEC-84 UNDO 266 and B include printer ID and / reset printer after printer ID /266 HLP 06-DEC-84 Add 1 sec delay after RIS in PRTRID /265 HLP 03-DEC-84 Changes for bug 334: B to include printer ID / Reset printer after printer ID using / new PCTMRS technique / R NOT to ask for status if nonexistent printer / Fix dead key tab posn bug /264 HLP 27-NOV-84 Fix \s.\p hang BUG384, BUG373 /263 HLP 26-NOV-84 Reset PRIRFD when wakeup !!! WPSV2-380 /262 HLP 21-NOV-84 Fix LQP02 bold broken in edit 258 /261 HLP 12-NOV-84 19Z Fix bug in XMT; too many uses of T2 /260 HLP 12-NOV-84 Changes for extra FF if EO and RESET causes / consecutive odd or even pages /259 HLP 07-NOV-84 Rename LPLIN symbols to DPLIN so will CREF /258 HLP 06-NOV-84 Fix old TW justify bug WPSV2-361 /257 HLP 26-OCT-84 Change DCS escape chr from \ to / / Reenable error reports at EOD after RIS /256 HLP 23-OCT-84 Fix V2-336 TW alignment problem /255 HLP 19-OCT-84 For DEVEL, add \v for a fixed string /254 HLP 16-OCT-84 19X Fix Attributed CHRSET, FONT, PITCH bug (unreported) / Fix Attributed tab justification bug (unreported) /253 HLP 10-OCT-84 Fix Footer Problem Again broken on edit 214 / Increase EOD wait before declare malfunction / (wpsv2-313) etc. /252 ECH 09-OCT-84 Fix for incorrect margins on pitch changes /251 HLP 08-OCT-84 Fix WPSV2-307, Justify with para return / Fix WPSV2-314, LQPSE centering justify /250 HLP 04-OCT-84 For DEVEL, \d includes time /249 HLP 02-OCT-84 19W Fix Page Number Centering bug 298 /248 HLP 27-SEP-84 Fix Wide Track Printer Justification /247 HLP 21-SEP-84 Install Form Feed at BOTP if DD CHST / Add 2 overlays for LN03 justification /246 ECH 18-SEP-84 Fix incorrect font for underlines /245 HLP 18-SEP-84 19V Put LPQSE justification back to v1.5 / 10-SEP-84 Minor changes for LN03 / Fix LQPSE Dead key problem /244 HLP 07-SEP-84 19T Rework LQP02 Centering logic to fix bug, / add C in ruler centering ability / 30-AUG-84 19S Fix tabbed underline in OV3L10 / Fix shadowbolding when shouldn't in OV3l10 /243 HLP 28-AUG-84 Initial Changes for proportional centering LQP02 / ...added a new overlay for LQP02 centering / Fix 1 space indent bug--reset P2PSN to 0001 / Fix tab after underline bug / Fix Multicolumn not centering / Fix Tabs in multicolumn blobbing /242 HLP 17-AUG-84 Fix LQP02 ppnl TW printing Bug#99 /241 HLP 10-AUG-84 Fix LP headers not printing and clobr boot blk /240 HLP 09-AUG-84 Changes for odd/even paging /239 HLP 07-AUG-84 Fix ppnl tabs in LQP02 /238 ECH 01-AUG-84 MINOR BUG IN TECH CHAR TO PRBIF /237 HLP 31-JUL-84 Add delay after LQP02 XON /236 HLP 26-JUL-84 Changes for sixel graphic controls /235 ECH 30-JUL-84 Technical Characters to Host. /234 HLP 24-JUL-84 Fix DD CHST blank line problem /233 HLP 20-JUL-84 Account for new return from PLCHBS on tech chr /232 HLP 17-JUL-84 Change PRTRID so PRSTTS is not set when / a non existent printer in CX or LP / Do not execute CHFNRS if LQPSE (WPSV2-114) /231 HLP 15-JUL-84 Move OVDDCK to a type A overlay / ...Fix missing CLA after set quality mode /230 LJJ 13-JUL-84 Fixes for \d\p\s expansion/contraction bug /229 ECH 12-JUL-84 Comments and removal of the start of a block / absorbed an extra disk block /228 ECH 10-JUL-84 Integrate fixes for draft/tech printing: / justification of indented rulers / justification with tech char / bolding of tech char when bold interp on /227 HLP 09-JUL-84 Move PLSCPX and PLREST from resident to overlay /226 HLP 02-JUL-84 End of document fix / Create CHFNRS for use by PRTRID & OVNDOC /225 GDH 29-JUN-84 Empty control block bugfix /224 ECH 22-JUN-84 Technical Characters in LPLIN /223 HLP 18-JUN-84 Integrate LJJ changes for British lb. sign / Initialize G2 and G3 for tech chars. /222 ECH 15-JUN-84 Complete supers/subs in LPLIN /221 LJJ 13-Jun-84 Remove edit 205, fix \d processing /220 HLP 11-JUN-84 Rework ASCOUT and justification sequence /219 HLP 10-JUN-84 Save a little space in OVJUSD and OVJUSL /218 HLP 06-JUN-84 Fix Proportional Justified Printing / with replacement characters / Fix Required Space with LQPSE /217 HLP 31-MAY-84 Move PRJL5A here from resident / Make PIDW use ESC02 for terminal ID seq / Use correct table for proportional printing /216 HLP 30-MAY-84 Changes for Coding of Required Space / Conditionalize code for multiple pass dead keys / Use PRESCS to set quality mode /215 ECH 29-MAY-84 Initial Changes for supers/subs on draft printers /214 HLP 24-MAY-84 More changes for DD HOST1 /213 HLP 14-MAY-84 Initial Changes for adding DD HOST1 /212 HLP 11-MAY-84 Change XXSTGN names to match G0 and G1 properly / Change LPLIN to require argument MC on LA50 / Reset page size at end of document / (re-establishes top of form) / F and N rulers, EX changes for draft printers /211 HLP 30-APR-84 Restructure justificationn overlays / Eliminate thrashing when DD HOST / Rebias LQPSE PSTBL from 2 to 1 /210 HLP 25-APR-84 Change end of document scheme to / detect LQP02 done with D2XONF / delete SNDCHR add PCTMID /209 HLP 24-APR-84 Flush Host Input Buffer if DD HOST /208 HLP 23-APR-84 Select G0 at beginning of document / Fix CHRSET NORMAL bug not resetting G1 /207 HLP 20-APR-84 Changes for RDFIO to use PRQRX /206 HLP 18-APR-84 Fixup drive no passing for QBLK change /205 ECH 16-APR-84 Fix for the date change for U.S./British /204 HLP 13-APR-84 Move PCTBUF to overlay from R2FILP / Change RDFQBK to PRQB /203 HLP 10-APR-84 Add JEXIT code so print field can be used by other jobs /202 HLP 14-MAR-84 Move justification variable to page zero /------------------------SDC Submission DECmate-II V1.5--------------------- /201 HLP 19-MAR-84 Reset function code to READ after MISCTL in WBLK /200 HLP 16-MAR-84 Fix Footer positioning method so works with / draft printer which cannot move backwards / ALSO fix false mismatch CTL if footer size is / less than amount stripped AP NO /199 HLP 13-MAR-84 WAIT routine not to reset status (move WAIT2,) /198 HLP 05-MAR-84 Add duplicate routine IDCKT2 to test TIMEOUT /197 HLP 03-MAR-84 Don't issue PRINTER PITCH command to LQPs /196 HLP 15-FEB-84 Re-issue margin command after setting pitch / LA100,LA120,LA34-WA firmware bug pitch reset margins /195 HLP 06-FEB-84 Select either table 1 or table 2 in NDOC /194 HLP 05-FEB-84 Fix theme justification bug. Although old, / this bug never hit V2.1 or V1.1 Yea! /193 HLP 01-FEB-84 Fix problem of OVRULR (formerly an OLA) / being called by other OLAs if a ruler in / certain control blocks. Fixed by making type C / Changed OVFONT from type C to B /193 HLP 19-JAN-84 Don't ask for status on LPQSE ASF error / Fix CHRSET initialization bug /192 HLP 16-JAN-84 Reworking character routines, etc. / Make PRSTRP test if already at EOC / Restore JMP PRSTRP near PRMCL4 /191 HLP 11-JAN-84 More work on mismatched controls, etc. / Inhibit enabling of status reports on LA34 /190 HLP 06-JAN-84 Rewrite LP Header/Footer processing for mismatch / control processing, use diff buffer to save space /189 HLP 05-JAN-84 LQPSE to feed envs from front tray (DECII-156) /188 HLP 29-DEC-83 Fix multicolumn matching control problems /187 HLP 27-DEC-83 Add time delay to loop which times out / at end of document if there is an error condx /186 HLP 16-DEC-83 Reset character size if LQPSE in Stop Menu / otherwise print screen gives blobs (bug 130) /185 HLP 16-DEC-83 Refine EOF within Control block processing /184 HLP 08-DEC-83 Detect EOF within Control block indicating / missing end print control /183 HLP 07-DEC-83 Change end of document delay from 8 to 12 secs / (for DECII-140 LA120 bug) /182 HLP 07-DEC-83 Change Stop Overlays to Type C / (fixes missing end control bugs) / Call PTSTST where needed near JMS PRRULE /181 HLP 01-DEC-83 Fix a bunch of SE/SELECT bugs /180 HLP 30-NOV-83 Fix insert rear message on PRINTER SELECT / LETTERHEAD with SE YES / SE NO to select trays if ASF attached /179 HLP 22-NOV-83 Allow String Finals for CHRSET /178 HLP 17-NOV-83 Move all overlays in WPRINT to here / Clear LPONLN if DD=HOST /177 HLP 11-NOV-83 Changes for SE ENVELOPE multipass strategy /176 HLP 07-NOV-83 Fix Problem if do user stop while / LQP02 timing out / Request a status report after response / to Stop Printer Menu /175 HLP 02-NOV-83 Don't set T3 at OVSTN unless ASF attached /174 HLP 29-OCT-83 Bugfixes / PRINTER STOPPED at end of doc LQPSE / No sheet fed, LQPSE/ASF / LQP02 doesn't print: ovly loading probs /173 HLP 23-OCT-83 Add CHRSET and FONT functions /172 HLP 13-OCT-83 Add SE LETTERHEAD to PRINTER SELECT cntrol /171 HLP 03-OCT-83 Bugfix: Detect if header blk #=0 and declare / it to be a doc rd error. (Happens if user / switches disks after que'ng and new dsk / doesn't have a document with same number) /170 HLP 30-SEP-83 Changed places PRRSST is called / so not clobbered by reset buffer /169 HLP 11-AUG-83 Changed order of processing so SE stop / processing takes place before reading anything /168 HLP 23-AUG-83 Restructure overlays so there can be / up to 16 overlay areas and / up to 256 overlays which can load into given area / Implement menu pitch for draft printers / Don't load printer handlers anymore / Add PRINTER control blocks for sending escape / sequences and controlling ASF01/02 tray selection /167 WCE 17-AUG-83 Remove changes made in edit #146 that caused a / redefinition of "RXE??" handler commands /166 HLP 10-AUG-83 Make check document destination code / part of PRTRID. Call wwith AC=0002 / This so list processing can set quality / mode on LA50/LA100. /165 HLP 02-AUG-83 Reset all character enhancement attributes / at end of document ESC [ m (was ESC [ 1 m) /164 HLP 25-JUL-83 Lengthen end of document delay for LA50 / Make LA50 & LA100 not observe rest of EOD delay / once answerback occurs /161 HLP 09-JUN-83 Rework footer processing to leave footer in / a fixed psn if text invades BM in AP NO /160 HLP 07-JUN-83 Add IDANSW flag /159 HLP 06-JUN-83 Delete extra blank pages when BM=0 /158 HLP 02-JUN-83 Come out of PRWAIT on PRACTN not PRSTOP /157 HLP 01-JUN-83 Reset LPFLAG near DONE1. Fix V2.1 bug 159 /156 HLP 24-MAY-83 Change comments near PRST6A / Move OVTOPP from a B to an A overlay / to speed up to/from / Use 13 bit arithmetic on PRPGNM range checks / Delete count backwards after 2048 (\p\s) / Lock maximum page number at 4095 / If PRSTOP occurs during PRTRID treat as / nonexistent printer /155 HLP 16-MAY-83 Add stuff for communications error code 26 /154 HLP 13-MAY-83 Change PRTRID timer from 3 to 4 seconds / Do not re-do printer stop. WPCUT handles this /153 HLP 10-MAY-83 Reinstate code at GETDC to set busy /152 HLP 27-APR-83 Make PRRSST resident, add calls in WAITPR / and PRST8A / Reorganize setting and clearing of PRSTTS, PRSTT2 /151 HLP 22-APR-83 Make CLQP01 execute only once / Increase delays at end of document / to prevent timeouts while printer finishes / Make PRRSST request status if LQPSE attached /150 HLP 08-APR-83 Fix extra CLA d'l't'd rev 094 which resulted / in R also doing an N new page /149 HLP 07-APR-83 Rewrite SETSTN / Revert to old page rollup on B,T (see REV140) / Make S call PRRSTS /148 HLP 01-APR-83 Delete JEXIT so printer errors can be parsed / at all times / Fix multicolumn (change SNA to SZA at PRMLTC+2) /147 HLP 23-MAR-83 Don't reset status for those errors which / the printer will report when corrected /146 HLP 04-MAR-83 Rewrite to handle disk errors /145 HLP 01-MAR-83 No ESC-[-c after print if DD=HOST / No JMS PRTRID after B,T / Use JMS DIGCHK near PRMCG1 to save space / Skip JMS PRTRID on N if DD=HOST /144 HLP 28-FEB-83 Rewrote PRTID to use XRPMSK /143 HLP 21-FEB-83 New useage of LPONLN (IDFLAG & PRQLQP deleted) / also PRASF deleted /142 HLP 15-FEB-83 Rework for parser in PRINT field /141 HLP 27-JAN-83 Fix mask for LPONLN in IDTMMX--was giving / wrong delays for draft printers when dequeue / this was culprit in LA34 beeping bug /140 HLP 25-JAN-83 Insure that B always resumes pass 1 if 2wheel / Rearranged order of processing at NCPYL3 and 4 / Deleted JMS PRSTNP on B or T near OVSTP9 / and added JMP .+1 to relieve interrupts / and added JMS PRSTNP on S-S only / Make T N be redo n copies if TW YES /139 HLP 20-JAN-83 Reset LQP02 hit count to 1 if abort. Ref /114 /138 HLP 19-JAN-83 Introduce delays for DPs and LQP02 B4 dequeue /137 2. Reset PRSTTS to 1 if it was 6 or less /-------------19-JAN-83-------SDC SUBMISSION DECmate-II V1.0.0 /137 HLP 18-JAN-83 V136 Printer Bug THREE fix: / 1. NOP the JMS PRTRID after a B or T / 2. Reset PRSTTS to 1 if it was 2 (user stop) / 3. Don't reset PRSTTS if talking to LQP02 /136 HLP 13-JAN-83 Eliminate extra sheet between sheets on SE YES / continuous form paper to LQPSE or LQPSE /135 HLP 11-JAN-83 Fix "wandering footer" with AP yes when a / blank line occurs at natural page break /134 HLP 10-JAN-83 Set PRINTER BUSY at GETDC /133 HLP 07-JAN-83 If PRSTTS goes from error to busy / while printer code is in stop ovly, / set it to 2 (user stop) /132 HLP 31-DEC-82 Patch to set status back to busy /131 HLP 30-DEC-82 Added dispatch table for resume / Make non-existent printer resumable /130 HLP 29-DEC-82 Add who-are-you at DONE2. LQPSE won't / respond until it is done with the document / PRID to reset LQPSE if times out /129 HLP 22-DEC-82 Fix B and T for LQPSE /128 HLP 20-DEC-82 Missing ( on a link near OVSTB /127 HLP 16-DEC-82 Make sure that CLQP01 is called if enter stop / menu with nothing in queue (as from CX) so that / LQPSE is properly reset and will feed paper next / time CX is entered (BUG #273--phase II) /126 HLP 12-DEC-82 FIX BUG #291: wide line in CX hangs system / change error code for LQP01 CANCEL to 25 / reset LQP01 when this error code occurs /125 HLP 09-DEC-82 FIX BUG #285: portion of LQP02 status msg / lost if comes in while loading handler /124 HLP 08-DEC-82 Replaced setting of TIMOUT at DONE0B / with tabularized setting when enter PRTID /123 HLP 07-DEC-82 PRTID not to wait after draft printer ID / Changed delay after ID from 3 to 1 second / so WAITPR routine in WPCUT would not timeout /122 HLP 06-DEC-82 Fix SE & AP yes bug #270 /121 HLP 02-DEC-82 Changes for selective stop printer menu / Change LQPSE ASF error code from 17 to 24 /120 HLP 03-DEC-82 Use a real delay when wait for status in PRTID / Change PRTID timer routines to allow other jobs / to be using TIMOUT at the same time / WPSYS now lets TIMOUT count up continually /119 HLP 29-NOV-82 Delete extra sheet (continuous form) / at end of document /118 HLP 23-NOV-82 Handle abort from PRWAIT (CX errors, etc.) /117 HLP 19-NOV-82 Reset PRASF in PRTRID /116 HLP 19-NOV-82 Dont copy PRLOCK to PRSTTS in SETSTN /115 HLP 18-NOV-82 Reset LQPSE after printing so CX and print / screen will always feed paper /114 HLP 16-NOV-82 Set back to one hammer strike if dequeue / so CX will be guaranteed to print /113 HLP 16-NOV-82 Reset PRSTTS if abort, create PRSTT3 /112 HLP 03-NOV-82 PRTID not to set PRSTTS to 1 (busy) / PRSTTS to 1 when find a doc in queue / PRSTTS to 0 when find no doc in queue /111 HLP 29-OCT-82 Fix Bug #161 STOPPED not removed on / B or T with LPQSE or any DP /110 HLP 27-OCT-82 Make malfunction a fatal error /109 HLP 26-OCT-82 Change N command to eject if ASF attached /108 HLP 22-OCT-82 Fix BUG 121 for LQP02 (P after unfixed ASF err) /107 HLP 15-OCT-82 Make PRTID give an error if LQP01 does not answer restore / Make PRTID reload handler if paused / Change PRTID paused error code from 15 to 11 /106 HLP 15-OCT-82 Clear the Handler's print buffer on S-S /105 HLP 14-OCT-82 Reset PRSTTS and PRSTT2 on S-S /104 HLP 12-OCT-82 Changed JMS STSTTS to DCA PRSTTS at PSXIT (Bug #125) /103 HLP 08-OCT-82 Reworked destination table in stop ovly / Moved stuff to make more room / moved reset of FLASH and BUZZ after action / Moved reset of LQP01/ASF error to PRSTL9 again / Make P and R responses to LQP01/ASF error illegal / Moved PRACTS to page zero /102 HLP 07-OCT-82 Changed SNA to SNA CLA in stop overlay /101 HLP 05-OCT-82 Change wrong doc dest error code to 10 from 24 / (code 24 gets clobbered by LQP02 no error report) /100 HLP 04-OCT-82 Move reset LQPSE on ASF error code / (P was hanging system) /099 HLP 01-OCT-82 Stop-Stop to return to dequeue / (so can cancel if LQP02 paused at boot) /098 HLP 30-SEP-82 Restore Stop-stop code to join PRSTL7 / (LQPSE ASF error S did not reset LQP01) /097 HLP 28-SEP-82 Fix PRTRID routine--proper exit on / LQP02 paused at PRTRID call /096 HLP 27-SEP-82 Fix bug SE alternate (again!) /095 HLP 21-SEP-82 Add code to change document destination /094 HLP 15-SEP-82 Eliminate blank sheets between docs /093 HLP 14-SEP-82 Fix bug #XX-Extra sheets fed by S commands /092 HLP 12-SEP-82 Fix bug #37-SE Alternate /091 HLP 31-AUG-82 Fix bug--no sheet fed on N from PS menu /090 HLP 30-AUG-82 Add recovery when connected to wrong printer /089 HLP 28-AUG-82 Fix hang problem when boot with LSP02 paused / (Bug number 33) /088 HLP 18-AUG-82 Changes to allow B and T after ASF error / Done ovly waits for LPDNFG while checking PRSTOP / Code added at PRSTL9 to reset LQP01 / Code deltd at PRSTL2 to allow ASF errors /PREVIOUS EDIT HISTORIES (NON HLP) DELETED 09-JAN-83 HLP /THE FIRST LOCATION IN AN OVERLAY MUST BE THE NEGATIVE OF THE OVERLAY NUMBER /FOR A FULLER EXPLANATION OF THE OVERLAY SCHEMES, SEE THE COMMENTS WITH /THE SECTION PROV, IN WPRINT /OVERLAYS NO LONGER NEED TO BE WRITTEN OUT /C150 /SEE INITIALIZATION CODE NEAR FLD3L1 /A150 OVADR=0000-400 /BEGINNING ADDRESS FOR OVERLAYS OVNUM=-1 /BEGINNING OVERLAY NUMBER OLA=0000 OLB=0400 OLC=1000 OLD=1400 XLIST OVTYPE=OLA OVNUM=OVNUM+1 OVADR=OVADR+400 OVRLCA=PROVA+OVTYPE DL=DLOPRO+OVNUM /DISK BLOCK OF THIS OVERLAY FIELD OVNUM%20+3 RELOC *OVADR RELOC OVRLCA -OVNUM / THIS OVERLAY IS USED ONLY FOR LQPS /C211 OVJUSL=.-OVRLCA OBJUSL=OVTYPE+OVNUM /PLPTR currently addresses the return word in the buffer. Bit 1 of this word /is clear for a hard return and is set otherwise. We save the type of the /return for later use. TAD I PLPTR /GET THE LINE ENDING CODE AND (3400) /MASK BIT WHICH SAY TYPE OF RETURN /C251 DCA PRJRET /SAVE THE TYPE OF RETURN: / 0012 --> 0000 HARD RETURN / 1012 --> 1000 PARA MARKER / 1412 --> 1400 CENTERED RETURN / 2012 --> 2000 SOFT RETURN TAD PRQPIT /COPY THE PITCH FLAG /A219 DCA PLPFLG /COPY OF PITCH FLAG /A219 /Call routine to set LQP02 into proportional print mode if thats what we/A080 / are printing to and thats what we are printing. /A080 /A080 DCA PLBOLD /Reset SP PROPORTIONAL LQP02 flag. /A086 JMS PROV / FIRST MAKE SURE PLINIT IS LOADED /A211 OBPLIN / /A211 JMS PLINIT /If proportional print to LQP02 then set printer/A080 /We now set up some variables in order to process the line. We want the /following conditions to hold: /PLPTR - Points to the return character (this already holds) /PLCNT - Is the negative of the number of characters, including the return, / in the line. /PLDIR - Is minus one so that processing can proceed from right to left. PRJL0A, /A211 TAD PLPTR /Subtract the address of the return, and one more CMA TAD (PRLBUF) /From the address of the first character DCA PLCNT /And save as the buffer count AC7777 DCA PLDIR /Set the direction of printing /If the line ends with a soft return, we now strip all trailing spaces, tabs, /and backspaces from the line. If the line ends with a hard return, we do /not strip these characters. We strip in case of soft return because the /trailing spaces interfere with justification, and should not appear in case /the line is underlined. In either case, when the loop is over, the following /conditions will hold: /1. PLPTR will point to the rightmost character of the line which should / be printed (which will be a text character in case of a soft return / and the one before the return for a hard return). /2. PLCNT will be the negative of the number of characters from the beginning / of the buffer to the character pointed to by PLPTR. PRJL0, JMS PLNXT /Look at the next character JMP PRGSL1 /No more characters so the line was all blank--no /need to bother printing the line AC2000 /WAS THE RETURN A SOFT RETURN? /C268 AND PRJRET /C268 SNA CLA JMP PRJL1 /NO--DON'T STRIP TRAILING SPACES! TAD I PLPTR /Get the character AND P177 /Strip the mode bits TAD (-SPC) /Is it a space/tab/backspace? SPA SNA CLA JMP PRJL0 /Yes--continue stripping the line /The line was not blank and must be printed. We now initialize some variables /used to gather information about the line for printing and justification. PRJL1, TAD PLCNT DCA PRLBCT /Save the size of the line DCA PLPS /Clear position justification spacing DCA PLSS /Clear space justification spacing AC7777 DCA PRJPOS /Initialize number of inter-position spaces DCA PRJSPC /Clear number of spaces DCA PRRCH /Clear right end of line position DCA PRPASS /Clear the pass counter DCA PRJDEF /Clear deficiency (no justification required yet)/A080 /This loop gathers information about the spacing and composition of the /line by processing the characters from left to right. When the loop /completes, we will know: /PRRCH -The length of the justifiable part of the line in print units / ** NOTE ** This is a different definition than that used in OVJUSD ** /PRJPOS - The number of inter-position spaces in the justifiable portion / of the line. /PRJSPC - The number of spaces in the justifiable portion of the line. /The loop also marks each character in the justifiable portion of the line /by setting bit 0 of the character. The justifiable portion of the line is /that part which follows the rightmost tab space. AC4000 /We first set the count enable flag. This flag is DCA PRJENB /to mark justifiable characters and is examined when /deciding whether to count them. It is ultimately /cleared when the first tab is encountered. /At the beginning of each iteration, PLPTR points to the first character in a /position. Each iteration treats the entire position with all of its dead /keys, if any. PRJL2, TAD I PLPTR /Get the character AND P177 /Strip the mode bits TAD (-SPC) /Is it a space? SZA CLA JMP PRJL3 /No, a text--jump to treat it /The character is a space. If it is part of a tab, the enable flag must be /cleared. If the enable flag has not been cleared by this time, we increment /the number of justifiable spaces and fall through to the text counter. TAD I PLPTR /Retrieve the space character CMA RAL /AC0=0 if the space is part of a tab, 1 otherwise AND PRJENB /AC=4000 if counting should still be enabled SZA /Do not count the space if we are disabled ISZ PRJSPC /Count a space in justifiable part of line DCA PRJENB /And save the new enable flag /This section handles characters. If the enable flag is set, we count the /position. PRJL3, TAD PRJENB /Get the enable flag SZA CLA /IF THE FLAG IS CLEAR WE HAVE ENCOUNTERED /A243 /THE RIGHTMOST TAB SPACE. IF IT IS A CENTERING /A243 /RETURN STOP COUNTING. OTHERWISE USE PLNRCS /A243 JMP PRJL3A /MEASURING IS STILL ENABLED /A243 / WE HAVE MEASURED THE JUSTIFIABLE PORTION OF THE LINE / WE NOW EXAMINE THE TYPE OF RETURN / IF IT IS A CENTERING RETURN WE WILL GOTO THE CENTERING JUSTIFICATION / LOGIC DIRECTLY. IF IT IS A SOFT RETURN AND WE ARE JUSTIFYING / MORE TESTS ARE NECESSARY... / LQPSE not supported in this version and I needed the space /d271 /d271 JMS SKIPIF /DO THE LQPSE JUSTIFICATION THE WAY WE /A245 /d271 LQP02 /WE ALWAYS DID -- DON'T ALIGN TABS /A245 /d271 JMP PRJL3B /OR FIX CENTERING /A245 / LQPSE not supported in this version and I needed the space /d271 TAD PRJRET /GET TYPE OF RETURN /A243 TAD (-1400) /SEE IF CENTERED RETURN /C251 SZA CLA / /C251 JMP PRJL4B /NOT CENTERING, GO ADD PLNCRS /C251 / CENTERING, LQP02 ... TAD (OVCTR2 /GO TO LQP02 CENTERING OVERLAY /A243 JMS PROV / /A243 OBCTR2 / /A243 PRJL3A, ISZ PRJPOS /Increment the number of inter-position spaces NOP /In case it skips (since it is initialized to -1) /We now find the width of the position and add it to the measure of the right /end of the line. PRJL3B, JMS PLSPCX /Get position width--the width is returned in the AC PRJL4, /M239 TAD PRRCH /Update the right end measure DCA PRRCH PRJL4F, /a274 /We now enter a sub-loop which moves the buffer pointer to the first /character of the next position. It also marks each non-backspace character /as justifiable or not with the enable flag. When we reach the next position, /we continue the main loop. If we just treated the last position, we leave /the main loop and continue with processing. PRJL4C, /A245 TAD I PLPTR /Get the character TAD PRJENB /Mark it with the enable flag DCA I PLPTR /Save the character back into the buffer JMS PLCHBS /ARE THERE MORE CHARACTERS? JMP PRJL5 /NO, LEAVE THE LOOP / these chars should be filtered out / earlier /a274 JMP PRJL4C /M274 / yes , a multinational char /a271 JMP PRJL4C /M274 /...YES, A TECHNICAL PRECEDENCE /A233 JMP PRJL4C /...YES, IN THIS POSITION /C245 JMP PRJL2 /YES, IN A NEW POSITION / IF WE SEE A TECHNICAL PRECEDENCE CHARACTER WE SUBTRACT THE /A239 / WIDTH OF THE TECHNICAL EQUIVALENT, ALREADY READ FROM THE TABLE /A239 / AND ADDED IN, SINCE WE ARE PROCESSING THE LINE BACKWARDS, AND /A239 / ADD IN THE FIXED AMOUNT OF SPACE ACCORDING TO THE PITCH /A239 PRJL4A, TAD PLWIDT / get width of tech char /a239 CIA /subtract it off /a239 / and fall thru to ADD IN WIDTH /a239 PRJL4D, JMP PRJL3B /GO ADD IT IN /M274 /A239 PRJL4B, TAD PLNRCS / GET CHAR WIDTH (VAI) /A239 JMP PRJL4 / GO ADD IT IN /A239 PRJL5, /We now determine whether or not justification is necessary. We do not /justify the line if one of the following conditions holds: /1. The line is not terminated with a soft return / and the line is naturally shorter than the right margin /2. There are no justifiable positions (PRJPOS=0). /3. The ruler does not require justification (PRRM=0). /If the line is not to be justified, we simply continue with printing /the line. AC2000 / LOAD MASK FOR SOFT RETURN /A251 AND PRJRET / IS THE RETURN A SOFT RETURN? SZA CLA / SKIP IF NOT SOFT RETURN JMP PRJL5A / IF SOFT RETURN GO CHECK FURTHER TAD PRRM / GET RULER RIGHT MARGIN (OR 0) / USE 13 BIT ARITHMETIC FOR WIDE TRACK /A248 CMA CLL / COMPUTE WHETHER LINE IS OUTSIDE OF /C248 TAD PRRCH / RULER SNL CLA / IF OUTSIDE RULER CONTINUE CHECKING /C248 JMP PRJL9A / OTHERWISE JUST PRINT LINE / -- NO JUSTIFICATION NEEDED PRJL5A, / CONTINUE WITH JUSTIFICATION CHECKS /C217 TAD PRJPOS /Are there any justifiable positions? SPA SNA CLA JMP PRJL9A /No--proceed with printing the line TAD PRRM /Does the ruler specify justification? SNA JMP PRJL9A /No--proceed with printing the line /We now determine how justification is to be done. Justification is done by /increasing or decreasing inter-position and space sizes. The options, in /their order of consideration, are: /1. The line is longer than its desired length. / Position spacing is decreased in decrements of one until the resulting / line length is less than or equal to the justified length. We then / consider the other options. /2. The line is equal to its justified length. / We need do no more and continue with printing the line. /If we reach this point in the option list, the line is shorter than its /desired length. /3. There are no justifiable spaces. / Justification is effected solely by increasing the size of / inter-position spacing. /4. Each justifiable space can be doubled in size. / Justification is effected solely by increasing the size of spaces. / This is done because the line is grossly out of justification. /5. Each position width can be increased by one unit. / This is done. if the line is too short we continue / with option 6 /6. Justification remains to be done / justification is effected soley by increasing the size of spaces / The ammount by which each inter position space is to be increased is /indicated in PLPS; the ammount by which each space is to be increased is /indicated in PLSS. Note that the numbers do not always come /out even, and some spaces must be increased by one unit more than others. /The positions or spaces suceptible to this increase are indicated by /setting bit one of the corresponding character /PRRM, which is in the ac is the desired right margin. CIA / subtract the desired line length TAD PRRCH / from the current line length /This loop shrinks the line by decreasing inter-position spacing until either /the line is too short or just right. It then jumps to treat the right case. /As each iteration begins, the AC contains the negative of the deficiency of /the line. The AC is positive if the line is too long, negative if it is too /short, and zero if it is just right. PRJL6, DCA PRJDEF /Save the negative of the deficiency TAD PRRM /Use the desired right margin DCA PRRCH /To set the current right margin TAD PRJDEF /Restore the deficiency--what is its sign? SNA JMP PRJL9A /The deficiency is zero--print the line SPA CLA JMP PRJL7 /The line must be lengthed--leave the loop /The line is too long. We decrease inter-position size by one unit and try /again. AC7777 /Decrease inter-position spacing by one unit TAD PLPS DCA PLPS TAD PRJPOS /Subtract one unit for each inter-position space CIA TAD PRJDEF /From the deficiency JMP PRJL6 /And keep shrinking the line /-------------- PAGE PRJL7, /The line must be lengthed, and the amount by which is must be stretched is /stored in PRJDEF. We now determine which of the remaining options must be /used. TAD PLNRCS /Get the character size into the AC JMS PRMULT /Determine units occupied by justifiable spaces PRJSPC SZA /Are there indeed any justifiable spaces? JMP PRJL8 /Yes--jump to choose between options 4, 5, and 6 /Option 3 holds--there are no justifiable spaces. We divide the deficiency /between the positions. TAD PRJPOS /Get the number of justifiable inter-position spaces JMS PRDVID /Divide the deficiency between them TAD PLPS /Update the amount of increased position spacing DCA PLPS / /C268 JMP PRJL9A /Continue with marking the line /Now the amount of increased position spacing is set, and the number of left /over units is recorded in PRJDEF. We continue by marking those positions /which must be sized one unit larger. /There are justifiable spaces. The AC now contains the number of units /occupied by these spaces. We first check whether option 4 holds. PRJL8, TAD PRJDEF /Add in the negative of the deficiency. If the AC /is still negative or zero, we know that the line is /grossly out of justification and justify it by /increasing space sizes. SPA SNA CLA JMP PRJL9 /Option 4 holds--jump to implement it /We now determine if option 5 or 6 holds. We see what would happen if we /increased each inter-position space by one unit. TAD PRJPOS /Get the number of positions TAD PRJDEF /Add to the negative of the deficiency SMA SZA JMP PRJL9 /Since the AC is now positive, it would be too much to /increase each inter-position space by one unit. /Hence, option 6 holds and we jump to implement it. /By elimination, option 5 holds. The AC now contains the negative of the /deficiency which the line will have when inter-position size is increased by /one unit. DCA PRJDEF /Save the new deficiency ISZ PLPS /Increase inter-position spacing. Although this /instruction could skip, it would only skip the "CLA," /which is unnecessary for this branch. /Any remaining justification must be done by increasing space sizing. PRJL9, CLA TAD PRJSPC /Get the number of spaces JMS PRDVID /Divide the deficiency among the spaces DCA PLSS /Record space sizing PRJL9A, /DECIDE WHICH TYPE B LQP02 OVERLAY TO CALL / If all filler parameters (PRJDEF, PLPS, PLSS) are all zero then that / means that no extra filler will be added so we call the JL20 overlay. / If the intercharacter spacing is negative (meaning to squish the / characters together) or the enable flag is cleared (meaning that / justification is no longer enabled at the begining of the line, / (this flag gets cleared when a "soft space" is seen, among other / things) then we take the skip return for "squish-line" JL30 / processing. If both the intercharacter spacing (PLPS) is positive / (greater than or equal to 0) and the justification flag is still set / (PRJENB = 4000) then take the 1st return for "expand-line" JL20 / justification. TAD PRJDEF / Check the filler parameters. SNA;TAD PLPS / if all of them are 0 then it is safe SNA;TAD PLSS / to call the JL20 overlay (null expand SNA CLA / skip if not certain yet. JMP PRJL9B / Return to take the JL20 overlay. JMS SKIPIF / if an LQP02 then /a273 LQP03 /skip if LQP03 /a273 JMP PRJL9B+1 / return to take the JL30 overlay /a273 TAD PLPS / Get intercharacter spacing. CMA / complement the 4000 bit. AND PRJENB / and AND it with the justification bi SPA CLA / /C227 JMP PRJL9B / SPACE WARS /A243 JMP PRJL9B+1 / SPACE WARS+1 /A243 /When this routine is called, the buffer variables point to a position. The /routine returns the spacing needed after the position is prined. If this is /the last position in the line, that width is zero. Otherwise, the width /is half the width of this position plus half the width of the next position, /plus any extra spacing needed for justificatin. /The width of the position is returned in PLPOS. The buffer variables, /although they change during execution, are restored before return. PLSPC, XX /PLCNT and PLPTR are changed in the subroutine PLWIDE. They are saved here /and restored before return. TAD PLCNT /Save the character count DCA PLCNT1 TAD PLPTR /And the buffer pointer DCA PLPTR1 /PLWIDE returns the width of the current position (PLWIDT), and bumps the /buffer pointer to point to the next position. It makes a normal return if /the current position is the last position; otherwise, it makes a skip return. JMS PLWIDE /Get the width of the current position JMP PLSPC1 /This is the last position--return zero TAD PLWIDT /Get the width DCA PLPOS /And save it /Before getting the width of the next position, we record the pointer to it /so that we can examine some pertinent bits there later. TAD PLPTR /Save the buffer pointer DCA PLPTR2 JMS PLWIDE /Get the width of the next position NOP /We don't care whether this is the last position TAD PLWIDT /Get the width TAD PLPOS /Add the widths of the two positions CLL RAR /Average them DCA PLPOS /And save the width /We now consider extra spacing requirements. If we are shadow-printing /A086 /proportional print (PLBOLD=200) then we add an extra print unit to the /A086 /position size if this char is bolded. /A086 /We also consider extra spacing due to justification. The high bit of a /character is set if it is justifiable, the next bit is set if an extra unit /is needed. We do not justify unless the current and the next positions are /both justifiable. TAD I PLPTR1 /Get the current position AND PLBOLD /See if SP bolding. /A086 SZA CLA /skip if no. /A086 ISZ PLPOS /1 more print unit for shadowed theme characters/A086 TAD I PLPTR1 /Get the current position /A086 AND I PLPTR2 /And the next one SMA CLA /Are we at a justifiable position? JMP PLSPC2 /No--perform no justification /If we are printing to the right, we add an extra unit of justification if /the current position is marked to that effect. If we are printing to the /left, we add an extra unit of justification if the next position is marked /to that effect. The important bit is bit 1. All of this is done so that /lines will print the same regardless of direction; in this way, superscripts, /underlines, normal text, and subscripts will all line up. TAD PLDIR /Which direction are we printing in? SMA CLA TAD I PLPTR1 /To the right--check the current position SNA TAD I PLPTR2 /To the left--check the next position RAL /Get the extra unit bit into AC0 SPA /Do we need extra justification? ISZ PLPOS /Yes--add it in /If the character is a space, we use extra space sizing. In any case, we use /extra position sizing. Again, we are interested in examining the current /position if we are printing to the right; the next position if we are /printing to the left. RAR /Restore the character AND P177 /Strip the mode bits TAD (-SPC) /Is it a space? SNA CLA TAD PLSS /Yes--add extra space sizing TAD PLPS /Add extra position sizing TAD PLPOS /Add to the previously calculated position size /The width of the current position is now in PLPOS. Restore the buffer /variables and return. PLSPC1, DCA PLPOS /Save the position size PLSPC2, TAD PLCNT1 /Restore the character count DCA PLCNT TAD PLPTR1 /And the buffer pointer DCA PLPTR JMP I PLSPC /And return PLCNT1, 0 /Used to store the character count upon call PLPTR1, 0 /The buffer pointer to the current position /THE FOLLOWING TEMP IS SHARED WITH THE PLREST SUBROUTINE RETURN ADDRESS /FOR SPACE SAVINGS PURPOSES. THIS SHOULD BE OK AS PLREST IS AN INITIALIZATION /ROUTINE AND SHOULD NOT BE IN USE THE SAME TIME THAT PLSPC IS IN USE...BUT /LET THE READER BEWARE OF THIS POTENTIAL TIME BOMB...HLP/A268 PLPTR2, /The buffer pointer to the next position PLREST, XX DCA PLDIR /Save the direction of printing TAD PRLBCT /Get the saved buffer count DCA PLCNT /And restore it /(PRLBUF) is the address of the first location in the buffer; PLCNT is the /negative of the number of characters in it. Therefore, if we negate PLCNT, /subtract one from the result, and add to (PRLBUF), we have the address of /the last location of the buffer. PLPTR is supposed to point to the first /buffer address to be printed, which is the first or last depending on the /direction of printing. TAD PLDIR /Get the direction of printing SMA CLA /Are we printing right-to-left? JMP PLRES1 /No--jump for this condition TAD PLCNT /Yes--get the negative of the number of /characters in the buffer CMA /At this point, the AC=0 if we are printing left-to-right, and is equal to /the offset from the first character of the last character otherwise. By /adding this value to the first buffer address, we derive the desired /value for PLPTR. PLRES1, TAD (PRLBUF) /Add the first buffer address DCA PLPTR /Save as the pointer into the buffer JMP I PLREST /And return PLSPCX, XX / RETURN ADDRESS /A080 TAD PLPTR / Save the character pointers. /A080 DCA PLSPX1 / for when we return. /A080 TAD PLCNT / Save also the character count. /A080 DCA PLSPX2 / ... /A080 JMS PLWIDE / Get width of current posn. /A080 NOP / Dont care if this is the last posn. /A080 TAD PLSPX2 / Restore the character count. /A080 DCA PLCNT / ... /A080 TAD PLSPX1 / Also restore the character pointer. /A080 DCA PLPTR / ... /A080 / /A086 /If this posn is bolded (@PLPTR 200 bit is set) and we are printing /A086 /shadowed theme (PLBOLD=200) then add an extra print unit to posn width /A086 / /A086 TAD I PLPTR / get current character. /A086 AND PLBOLD / see if supposed to add an xtra p.u. /A086 SZA CLA / Skip if not supposed to up the size. /A086 AC0001 / 1 more for the proportional shadow. /A086 TAD PLWIDT / Return the posn width in the AC. /A080 JMP I PLSPCX / Return to caller. /A080 /A080 PLSPX1, 0 / Temps for save across the call to /A080 PLSPX2, 0 / PLWIDE since it destroys them. /A080 /--------------- PAGE OVTYPE=OLB OVNUM=OVNUM+1 OVADR=OVADR+400 OVRLCA=PROVA+OVTYPE DL=DLOPRO+OVNUM /DISK BLOCK OF THIS OVERLAY FIELD OVNUM%20+3 RELOC *OVADR RELOC OVRLCA -OVNUM /At this point, all of the branches for the various options converge if /justification was indeed necessary. PLSS and PLPS have been properly set, /and PRJDEF now contains the negative of the number of inter-positions or /spaces which must be increased by one more unit. We now mark such characters /by setting their bit 1. OVJL10=.-OVRLCA /LQP01 JUSTIFICATION LOGIC. /A080 OBJL10=OVTYPE+OVNUM /Now adjust the right margin to the start of the last character posn. /A080 /It is currently set to the end of the last char posn. and we will /A080 / move the print head the width of all posns plus all added xtra 'cept /A080 / half the 1st char width and half the last char width. so now we /A080 / adjust the right margin by half the width of the 1st and last posns. /A080 / We also adjust the left margin by half the width of the 1st character /A080 / to cause proportional characters to have a smooth left margin. /A080 AC0001 / Compute the width of the 1st character posn. /A080 JMS PLRRCH / ... /A080 DCA PLRTSZ / Save size of half of right margin character. /A080 AC7777 / and half the width of the last character /A080 JMS PLRRCH / position /A080 CIA / Decrement it from the right margin (for when /A080 TAD PRRCH / we are printing right to left). /A080 DCA PRRCH / update. /A080 TAD PRJDEF / Do we need to justify (more)? /A080 SNA CLA / Skip if yes. /A080 JMP P1LINE / Go print the line. /A080 AC7777 JMS PLREST /Restore the buffer variables (PLPTR and PLCNT) /We do not want to mark the last position in the line as extra justifiable, /since the information in that line is ignored. Hence, we enter the following /loop in the right place to ignore the first position. /We have decided that the current position must not be marked. Find the next /position. PRJL11, JMS PLCHBS /Is there another character? JMP P1LINE /No--print the line JMP PRJL11 /A Multinational char /a271 JMP PRJL11 /A TECHNICAL PRECEDENCE CHR /A233 JMP PRJL11 /Yes, in this position--find the next position /Fall through if yes in a new position... /Now, we decide if the current position should be marked. If there are no /justifiable spaces, then we mark all positions; otherwise, we mark only /spaces. PRJL12, TAD PRJSPC /Are there any justifiable spaces? SZA CLA /Skip if there are not TAD I PLPTR /Get the current character AND P177 /And strip the mode bits /At this point, the AC=0 if all positions are to be marked, and contains the /current character is only spaces are to be marked. When we subtract the /space value, the AC will be zero or negative only if the current position /should be marked. TAD (-SPC) /Subtract the space value SMA SZA CLA /Skip if the position should be marked JMP PRJL11 /Don't mark this position--find the next one /Now, we mark the position unless we have run out of positions which should /be marked. ISZ PRJDEF /Are any more positions to be marked? JMP PRJL13 /Yes--mark them JMP P1LINE /No--jump to print the line /We have decided to mark all the characters in the current position. PRJL13, AC2000 /Set the marking bit TAD I PLPTR /And mark the position DCA I PLPTR PRJL14, JMS PLCHBS /Any more characters? JMP P1LINE /No--continue by printing the line JMP PRJL14 /YES, A Multinational PRECEDENCE CHR /a271 JMP PRJL14 /YES, A TECHNICAL PRECEDENCE CHR /A233 JMP PRJL13 /Yes, in this position--continue marking them JMP PRJL12 /Yes, in a new position--jump to treat them /All necessary justification calculations have been performed and printing /may commence. This loop is iterated once for each pass through the line. /There are four passes in all. PRLIN0, /At this point, the link is set if a half-line of spacing must be done. SZL /Skip if spacing is not needed TAD (PRNHL) /Get a half-line of spacing JMS PRMOVE /Transmit the move ISZ PRPASS /Increment the pass and continue with the next /iteration P1LINE, /We now decide which direction to print in. PRCCH contains the position /of the print head, and we want to start at the end of the line it is /closest to. We assume that the left end of the line is zero. Although this /may not always be true (due to leading spaces or tabs) the approximation is /a small price to pay for the space savings it yields. TAD PRRCH /Get the location of the right end of the line CLL RAR /Divide by two to find the middle CIA /Negate in order to TAD PRCCH /compare with the current head position SMA CLA /We skip if we are closer to the right margin and wish to print to the /right. AC7776 / Fall thru to set AC to -1. IAC / Set AC to +1 or -1 depending upon print direction. /At this point, the AC=+1 if we are printing to the right; AC=-1 if we /are printing to the left. JMS PLREST / Set buffer variables. /Now set the print margin to PRRCH if printing right to left or to /A080 / PLRTSZ if printing left to right. /A080 / /A080 TAD PLDIR / Get print direction. /A080 SPA CLA / Skip if printing left to right. /A080 TAD PRRCH / Get right print margin. /A080 SNA / Skip if print margin already computed. /A080 TAD PLRTSZ / Get left print margin. /A080 JMS PRESCS /Transmit the move PCMRT DCA PRCCH /And save as the new head position /This loop handles printing the line. One iteration is performed for each /position. The loop as a whole is entered once for each pass. PRLIN1, /Determine the spacing which will follow printing this position. The result, /which includes spacing due to justification, is stored in PLPOS. JMS PLSPC /Get the spacing /We now enter an inner loop which prints all of the characters in the /position. PRLIN2, /First, we process the mode bits. If the character is not to be printed /during this pass, the regular return is made; otherwise, the skip return. TAD I PLPTR /Get the character AND (1600) /Isolate the mode bits JMS PRLMOD /Process the mode bits JMP PRLIN5 /Wrong pass for this character--don't print it /Now, we set the spacing which will occur after this character is printed. /This is performed within the inner loop, instead of once for the entire /position, because there is no need to set spacing for characters which are /not even printed. Also, the routine which sets up the size updates the /head position as if the motion had already occurred, which it shortly will. TAD PLPOS /Get character size and update head position JMS PRLSCS /Set spacing and update the head position /We now check if the current character is one for which substitution must be /made. The values in PRQSB1 and PRQSB2 have been preprocessed so that this /testing works. JMS PRTST /Call code in overflow area. /M080 /We have dealt with the character by either printing it or ignoring it because /it is currently the wrong pass. We now look for the next character of this /position. There are three possibilities: /1. There are no more characters in the line--leave the main loop and begin / another pass if necessary /2. There are no more characters in the position--leave this inner loop / and iterate the main loop for another position /3. There is another character in this position--set things so a backspace / will be performed during the next mode bit processing and continue / in the inner loop. PRLIN5, JMS PLCHBS /Are there more characters? JMP PRLIN6 /No--wrap up this pass JMP PRLMN5 /YES, a MULTINATIONAL precedence char /a271 JMP PRLIN5 /YES, A TECHNICAL PRECEDENCE CHR /A233 JMP PRLIN7 /Yes, in this position. Jump out of line to deal /with the backspace. The code jumps back in line /to PRLIN2. JMP PRLIN1 /Yes, in a new position--deal with the next position /We have completed the pass. Finish up the loose ends and determine /whether another pass is needed. PRLIN6, AC7777 /Force the mode routine to reset and complete JMS PRLMOD /any pending underlining DCA PLASPC /Clear accumulated, unperformed spacing. It is not /necessary to clear immediate saved spacing because /it was cleared as a side effect of mode restoration. TAD (CR) /Transmit a carriage return JMS PRCHAR /We now must decide whether to do inter-line spacing and whether to do /another pass. TAD PRPASS /Get the current pass number CLL RAR /Encode it CML /At this point, the passes are encoded as: /1. Superscript AC=0, LINK=1 Spacing needed /2. Underline AC=0, LINK=0 No spacing needed /3. Normal AC=1, LINK=1 Spacing needed /4. Subscript AC=1, LINK=0 No spacing needed SNA SZL CLA /This skips if we were on the last pass JMP PRLIN0 /Do another pass--processing finished at top of loop JMP PRGSPC /The line is completed--continue with spacing routine /This code is out of line from the line printing routine on a previous /page. When it is invoked, a backspace has just been discovered. The current /character size is subtracted from the most recently saved character spacing. /This has the effect of cancelling out the head motion associated with the /last character printed. PRLIN7, TAD PLPOS /Get the current character size CIA TAD PLOLNC /Subtract from the most recent character spacing DCA PLOLNC /And save it JMP PRLIN2 /Continue in-line with the inner loop /This routine expects the size of the next position to be printed in the AC /upon invocation. This size is always positive. After putting the proper /sign on the spacing, it transmits the size if it has changed since the last /invocation of PRLSCS. It also updates the current head position. PRLSCS, XX JMS PRMULT /Multiply by the sign of the pass PLDIR DCA T1 /And save the spacing TAD T1 /Recover the position size TAD PRCCH /Add to the head position DCA PRCCH TAD T1 /Recover the position size CIA TAD PRLST1 /Compare with the last transmitted size SNA CLA JMP I PRLSCS /No change--return TAD T1 /Recover the position size /Both text and space sizes must be set since we don't know whether we're /dealing with a text or a space. JMS PRESCS /Set text size PCCSIZ JMS PRESCS /Set space size PCWSIZ DCA PRLST1 /Save as the last transmitted size JMP I PRLSCS /And return /we have found a mulktinational precedence char character in the buffer / just remind PRTST to deal with it when we find the real char PRLMN5, AC7777 / set flag to -1 /a271 DCA MNCFLG / flag kept in page zero /a271 JMP PRLIN5 / jump back to get the multinat char /a271 PRLST1, -1 / LAST TRANSMITTED SPACE SIZE PLRTSZ, 0 / Save for 1/2 size of 1st character posn. /A080 /--------------- PAGE /PRLMOD processes the mode bits which are passed to it in the AC upon /invocation. It makes a normal return if the mode bits indicate that the /character should not print during this pass, and makes a skip return /otherwise. The mode bits considered by this routine are in AC2,3,4 at the /time of call: /AC 2 3 / 0 0 print normally / 0 1 print with underscore / 1 0 print superscripted / 1 1 print subscripted /AC 4 / 0 not boldface / 1 boldface PRLMOD, XX /It is not necessary to give the mode bits the full treatment each time--we /need only do that every time they change. The location PRLSWT is patched /with a jump to the section of the routine appropriate for the mode bits /should they not change. First, we determine whether the mode bits have /indeed changed. We take the patched jump if they haven't; otherwise, we /give them the full treatment. /Notice that if we are called with AC=7777, this will be treated as a new /set of bits which don't belong to any pass. The net effect is to complete /any pending underlining and reset some variables. This trick is used when /finishing a pass and wishing to reset for the next one. CIA /Negate the mode bits TAD PRLMDB /Compare with the old ones SNA PRLSWT, XX /The mode bits haven't changed since last time, so /we can take this jump which was patched with a jump /to the section appropriate to this type of bits. /The mode bits have changed. We recover the new bits, save them, and proceed /to deal with them. CIA /Recover the new bits TAD PRLMDB DCA PRLMDB /And save them /If the underline flag is set, we invoke PRUNDL to perform accumulated /underlining. Notice that the net effect is that underlining is performed /in spurts when the mode changes. TAD PRUFLG /Check the underlining flag SZA CLA JMS PRUNDL /Do underlining if necessary DCA PRUFLG /Clear the flag /Now, we determine whether or not the current character belongs to this pass. /We branch accordingly. TAD PRLMDB /Get the mode bits CLL BSW /And move them into the lower two bits of the AC RTR TAD (-2) /After these manipulations... SMA SZA AC7775 /...the AC has the following values... /AC=0 superscript /AC=-1 underline /AC=-2 normal /AC=-3 subscript /...while PRPASS, which identifies the current pass, has these values... /PRPASS=0 superscript /PRPASS=1 underline /PRPASS=2 normal /PRPASS=3 subscript /...so we need only compare the two values. TAD PRPASS /Are we in the right pass? SZA CLA JMP PRLMO4 /No--jump to handle it /We are in the right pass. The first we must do is set the hit count. We /begin by putting the bold bit into the link. TAD PRLMDB /Get the mode bits BSW /And put the bold bit into the link RTR CLA /We must concern ourselves with three values: /1. The bold bit (now in the link) /2. The two wheel flag (PRQ2W) /3. The darkness value (PRQOVP) /If two-wheel printing is specified, the bold bit takes on a different /significance. TAD PRQ2W /Get the two wheel flag SNA /If AC=0, no two-wheel JMP PRLMO1 /Jump to handle regular printing /This section deals with two-wheel printing. /If PRQ2W is negative, this is the first pass. Only non-bold text is printed, / with a hit count equal to the darkness value. /If PRQ2W is positive, this is the second pass. Only bold text is printed, / with a hit count equal to the darkness value. /If text is not to be printed, the hit count is set negative. SMA CLA /If this is the first pass, the skip occurs. In this pass, we want to print /only the non-bold text; i.e., print only if the link is clear. If this is /the second pass, the skip does not occur. In thispass, we want to print /only the bold text; i.e., print only if the link is set. /Now, if this is the second pass and we complement the link, we will want to /print then only if the link is clear and the two cases become identical. CML /Second pass--complement the link and the two cases /become identical. /Now we print only if the link is clear. SZL /Skip if we need to print during this two-wheel pass AC7777 /Otherwise, get a -1 into the AC CLL /At this point, we rejoin the code for the non-wheel case. The possibilities /are as follows: /1. Not two wheel, not bold: AC=0, LINK=0 /2. Not two-wheel, bold: AC=0, LINK=1 /3. Two-wheel, printing AC=0, LINK=0 /4. Two-wheel, not printing: AC=-1,LINK=0 /So, after performing an RAL, we have the following corresponding cases: /1. Not two-wheel, not bold: AC=0 /2. Not two-wheel, bold: AC=1 /3. Two-wheel, printing: AC=0 /4. Two-wheel, not printing: AC=-2 /Upon adding the darkness, we will have the proper hit count for each case. PRLMO1, RAL /Get the hit count /M019 TAD PRQOVP /Add in the darkness value JMS PRESCS /And send it PCBOLD CLA /This is the point to which the routine branches if the mode bits haven't /changed and the last mode bits indicated the character belonged to the /current pass. The first thing which is always done for the proper pass /is to perform any spacing which has accumulated while characters which were /not in this pass were printing. There are several things to note about /the variables which record this motion: /PLOLNC is the amount that accumulated on the last character only. It is / kept separate because these accumualted spacing variables are used / in underlining also, and when underlining we do not want to underline / the most recent character. /PLASPC is the amount that has accumulated on all previous characters. /When a backspace is encountered, the current position size PLPOS is / subtracted from PLOLNC. If we were in the wrong pass, it is as if / no spacing had ever been included in PLOLNC; if we are in the wrong / pass, a backspace is performed the next time this section is reached. /This branch is not used for characters which belong to the underlining pass; / rather, the spacing is allowed to accumulate and it is performed all / at once when an underline is produced. PRLMO2, TAD PLOLNC /We want to move this distance in addition to the /distance in PLASPC which PLHMOV will perform /automatically JMS PLHMOV /Do the spacing DCA PLOLNC /PLHMOV clears PLASPC automatically; we also want /to clear this value to indicate the motion has /been performed /As noted above, if we are printing the underline pass, we make believe we /are not printing and merely accumulate space. When the mode changes again, /the underlining will be performed as above. AC7777 TAD PRPASS /Are we printing the underline pass? SNA CLA JMP PRLMO3 /Yes--jump to treat it /We must print a character during this pass. A skip return is called for. ISZ PRLMOD /Prepare a skip return TAD (S1-S2) /Set the switch so that until the mode changes, /characters will be treated as they deserve to /be printed JMP PRLMO6 /Jump to set the switch and return /This point is reached if the mode bits just changed and underlining was /enabled. We set the flag to indicate underline is in progress. The next /time the mode changes, the underlining routine will underline the space /which has accumulated since this time. PRLMO3, AC7777 DCA PRUFLG /Set the flag to indicate underlining in progress /This is the section to which characters of the wrong mode and underlined /characters (during the underline pass) are directed. PRLMO4, /If the underline flag is set, this is the underline pass and the current /character is in underline mode. We therefore clear the mode bits of /the character so it will be print in the next (regular) pass as well. TAD PRUFLG /Get the underline flag SNA CLA JMP PRLMO5 /Not underlining--don't fool with the mode bits TAD I PLPTR /Get the character AND (6377) /Clear the pass-significant mode bits DCA I PLPTR /And replace it in the buffer /The spacing occupied by this character is updated. Finally, we set the /switch for succeeding characters of the same mode and make a regular return. PRLMO5, TAD PLOLNC /Add the spacing of the last character TAD PLASPC /To the accumulated, unperformed spacing DCA PLASPC /And save it away TAD PLPOS /Save the current position spacing DCA PLOLNC /As the spacing of the last character PRLMO6, TAD (S2) /Set the switching value DCA PRLSWT JMP I PRLMOD /And return PRLMDB, -1 /The mode bits of the last character are recorded here. /After each pass they are set to -1 to force reconsideration /at the beginning of each new pass. /mode for printing during the current pass. PRUFLG, 0 /The underline flag--it is non-zero if underlining is /in progress; zero otherwise. S1=JMP PRLMO2 /The switch value to direct unchanged-mode characters which /are in the correct pass S2=JMP PRLMO4 /The switch value to direct unchanged-mode characters which /are in the wrong pass /This routine performs horizontal motion. It adds the amount of motion /in the AC to the amount in PLASPC (accumulated, unperformed horizontal /motion), places the correct sign on them, performs the move, updates PRCCH /(the head position) and clears PLASPC. PLHMOV, XX TAD PLASPC /Add accumulated space to the amount in the AC MQL /And save it TAD PLDIR /Get the direction of printing RAL /Save the sign of the motion in the LINK ACL /Recover the amount of motion SZL CIA /Negate if motion to the left SZA /Transmit motion only if non-zero JMS PRESCS PCMRT /If the skip is taken, this instruction will only /be a harmless AND TAD PRCCH /Update head position DCA PRCCH DCA PLASPC /Clear accumulated motion JMP I PLHMOV /And return ACL=7701 /An instruction to load the MQ into the AC. The assembler /doesn't know about it for some reason. /The following routine returns half the position size of the 1st or /A080 / last posn in the line. it is called with AC=1 for 1st and /A080 / AC=7777 for last. /A080 PLRRCH, XX / Entry point. /A080 JMS PLREST / Set buffer pointers. /A080 JMS PLWIDE / Get character width. /A080 NOP / dont care if no more in the line. /A080 TAD PLWIDT / Get character width. /A080 CLL RAR / divide by 2. /A080 JMP I PLRRCH / return to caller. /A080 /--------------- PAGE OVTYPE=OLB OVNUM=OVNUM+1 OVADR=OVADR+400 OVRLCA=PROVA+OVTYPE DL=DLOPRO+OVNUM /DISK BLOCK OF THIS OVERLAY FIELD OVNUM%20+3 RELOC *OVADR RELOC OVRLCA -OVNUM /***********************************************************************/ / / / OV2L10--LQP02/03 NORMAL JUSTIFICATION OVERLAY / / USED WHEN THERE IS NO JUSTIFICATION NEEDED / / OR WHEN JUSTIFICATION CAN BE ACCOMPLISHED USING / / THE JUSTIFICATION COMMAND DECFIL, WHICH ONLY / / ALLOWS FOR EXPANDING THE LINE. IF THE LINE NEEDS TO / / BE SQUISHED, WE WILL USE OV3L10. / / / /***********************************************************************/ OV2L10=.-OVRLCA / LQP02 "EXPAND-LINE" JUSTIFICATION LOGIC/A080 OB2L10=OVTYPE+OVNUM IFNZRO OV2L10-OVJL10