/4 OS/78 SPOOLER SYMBIONT / COPYRIGHT 1978, DIGITAL EQUIPMENT CORPORATION VERSION=1 DHRT=7647 /DEVICE HANDLER RESIDENCY TABLE DCWT=7760 /DEVICE CONTROL WORD TABLE TASK=SPOOLR INIWT=0 CUR=30 SPLVER="1 SPLPAT="A /PATCH LEVEL / NORMALLY, QUEUE AND SPOOLER HAVE SAME VERSION NUMBER AND PATCH LEVEL / SEE TAG 'QVER' FOR QUEUE VERSION NUMBER FIELD 3 *3 JMP I .+1 CANCL SVER, SPLVER SPAT, SPLPAT /PATCH LEVEL *1400 START, CLA IAC DCA EFLAG CAL WAITE EFLAG SPLOOP, TAD GETPTR CIA TAD I (PUTPTR SNA CLA JMP START TAD I GETPTR SNA CLA HLT /INTERNAL ERROR STA DCA I GETPTR /MARK SLOT AS PRINTING NOW ISZ GETPTR TAD GETPTR DCA I (FILPTR TAD GETPTR TAD (4 DCA GETPTR /ADVANCE OVER FILE NAME CLA IAC AND I GETPTR DCA RUNI TAD RUNI TAD (RX8A^10 DCA UNIT TAD I GETPTR DCA OPT /BIT 0 IS OPTION ISZ GETPTR TAD I GETPTR /GET COUNT DCA QCNT ISZ GETPTR ISZ GETPTR TAD GETPTR TAD (-SPLEND SZA CLA JMP .+3 TAD (SPLTAB DCA GETPTR TAD I (FILPTR DCA TEMP TAD I TEMP SNA CLA JMP SPLOOP /IT WAS DELETED LUP, JMS I (BLOK TAD I (FILPTR DCA FILP CAL SENDW OS8F LKMSG TAD STAT SZA CLA JMP FNF TAD BLOKK DCA FBLOK TAD LEN CIA DCA KN LU, CAL SENDW RX8A RMES TAD RSTA SZA CLA JMP ERR DCA I (CTRLZ JMS I (UNPACK TAD I (CTRLZ SZA CLA JMP END ISZ FBLOK ISZ KN JMP LU END, CAL SENDW LPT FFMSG ISZ QCNT JMP LUP STA TAD FILP DCA TEMP DCA I TEMP /FREE UP SLOT JMP SPLOOP RMES, ZBLOCK 3 RUNI, 0 230 /READ 2 PAGES FILBUF+200 FBLOK, 0 RSTA, 0 KN, 0 ERR, FNF, CAL SENDW LPT FNFMSG STA DCA QCNT /PRINT MESSAGE BUT ONCE JMP END QCNT, 0 TEMP, 0 OPT, 0 EFLAG, 0 GETPTR, SPLTAB LKMSG, ZBLOCK 3 UNIT, RX8A^10 FILP, 0 STAT, 0 BLOKK, 0 LEN, 0 PAGE / FORMAT OF Q TABLE /8-WORD ENTRIES /0 0 IF UNUSED, 1 IF TO BE PRINTED, -1 IF PRINTING NOW /1 NAME1 (0 IF DELETED ENTRY) /2 NAME2 /3 NAME3 (SIXBIT) /4 EXTENSION /5 UNIT IN BIT 11, BIT 0=1 IF WANT BLOCK LETTER HEADER / BIT 1=1 IF WANT 2ND COPY OF BLOCK LETTERS /6 NEGATIVE OF NUMBER OF COPIES DESIRED /7 UNUSED Q, 0 TAD (7605 DCA INPTR TAD (-5 DCA KNT LP, CDF 10 TAD I INPTR CDF CUR SNA JMP RET TAD (DHRT-1 DCA TEM CDF 10 TAD I TEM TAD (-7607 CDF CUR SNA JMP OKU TAD (7607-FAKRX1 SZA CLA HLT /NOT RX DRIVE 0 OR 1 CLA IAC OKU, DCA UNI ISZ INPTR IOF /DELICATE STUFF TAD I PUTPTR SZA CLA JMP .-2 /QUEUE IS FULL /*** SHOULD REALLY DO A CTRL/C CHECK HERE CLA IAC DCA I PUTPTR /WORD 0 ON ISZ PUTPTR TAD (-4 /4 WORDS IN NAME DCA KON DCA WLDFLG JMS STO ISZ KON JMP .-2 CDF 10 TAD I (7643 CMA AND (20 CDF CUR CLL RTR RTR RTR TAD UNI DCA I PUTPTR /UNIT INTO WORD 5 CDF 10 TAD I (7645 CDF CUR AND (200 CLL RTL RAL TAD I PUTPTR DCA I PUTPTR ISZ PUTPTR CDF 10 TAD I (7646 SNA IAC CIA CDF CUR DCA I PUTPTR /# OF COPIES INTO WORD 6 ISZ PUTPTR DCA I PUTPTR /0 INTO WORD 7 ISZ PUTPTR TAD PUTPTR TAD (-SPLEND SZA CLA JMP .+3 TAD (SPLTAB DCA PUTPTR ION CIF 0 JMS I (WLDCHK ISZ KNT JMP LP RET, TAD (EFLAG CAL POST CDF CUR CIF CDF 0 JMP I Q WLDFLG, 0 /NON-0 MEANS SAW A WILD CARD KON, 0 STO, 0 CDF 10 TAD I INPTR /STORE NAME1 CDF CUR DCA I PUTPTR /INTO WORD 1 TAD I PUTPTR CIF CDF 0 JMS I (WILD ISZ WLDFLG ISZ INPTR ISZ PUTPTR JMP I STO KNT, 0 INPTR, 0 TEM, 0 UNI, 0 PUTPTR, SPLTAB PAGE SPLTAB, ZBLOCK 400 SPLEND=. /ENTER WITH AC EQUAL TO THE NEGATIVE OF THE NUMBER OF /CHARACTERS TO BE IN A GROUP (SIDE OF BASIC BLOCK) IN LETTER /THIS SHOULD BE IN THE RANGE 1-3 INCLUSIVE BLKLET, 0 DCA I PGROUP /STORE NEGATIVE TAD FILPTR DCA I PBLKPTR /PRINT CHARS BEGINNING AT NAME1 JMS I POUTBLK /PRINT 6 CHARS (3 WORDS) -3 JMS I POUTBLK /NOW PRINT EXTENSION -1 /2 CHARS (1 WORD) JMP I BLKLET /RETURN PGROUP, GROUP PBLKPTR,BLKPTR POUTBLK,OUTBLK FILPTR, 0 *.&7600+24 BITLST, ZBLOCK 4 1621;2137;2121;2100 /A 3621;2136;2121;3600 /B 1621;2020;2021;1600 /C 3422;2121;2122;3400 /D 3720;2036;2020;3700 /E 3720;2036;2020;2000 /F 1621;2023;2121;1700 /G 2121;2137;2121;2100 /H 1604;0404;0404;1600 /I 0702;0202;0222;1400 /J 2122;2430;2422;2100 /K 2020;2020;2020;3700 /L 2133;2525;2121;2100 /M 2131;3125;2323;2100 /N 1621;2121;2121;1600 /O 3621;2136;2020;2000 /P 1621;2121;2522;1500 /Q 3621;2136;2422;2100 /R 1720;2016;0101;3600 /S 3704;0404;0404;0400 /T 2121;2121;2121;1600 /U 2121;2112;1204;0400 /V 2121;2125;2533;2100 /W 2121;1204;1221;2100 /X 2121;2116;0404;0400 /Y 3701;0204;1020;3700 /Z PAGE GROUP, 0 /NEG OF # OF CHARS PER GROUP BLKPTR, 0 WCOUNT, 0 /NEG OF # OF WORDS TO PRINT LCOUNT, 0 /NEG OF # OF LINES PER LETTER IN BASIC BLOCK RNUM, 0 /NUMBER OF ROWS OF BASIC BLOCKS PER BIG LETTER SAVPT, 0 LETR, 0 /LETTER TO PRINT BITPTR, 0 /POINTS INTO BIT LIST BBITS, 0 BCOUNT, 0 LETT, 0 OUTBLK, 0 /PRINT BLOCK LETTERS / CDF 10 / TAD I BLKPTR / CDF 0 / SNA CLA / JMP OUTLV /HACK TAD BLKPTR DCA SAVPT DCA RNUM BLK3, TAD GROUP DCA LCOUNT BLK1, TAD I OUTBLK /GET NEG NUMBER OF WORDS DCA WCOUNT TAD SAVPT DCA BLKPTR BLK2, TAD I BLKPTR /GET LETTER RTR RTR RTR JMS LSTBLK TAD I BLKPTR JMS LSTBLK /RIGHT HALF ISZ BLKPTR /GO TO NEXT WORD ISZ WCOUNT /DONE WITH ROW? JMP BLK2 /NO JMS I QQCRLF /YES ISZ LCOUNT /DONE WITH GROUP? JMP BLK1 /NO ISZ RNUM /YES, GO TO NEXT ROW TAD RNUM AND (10 SNA CLA /DONE? JMP BLK3 /NO OUTLV, JMS I QQFIN /AN EXTRA CR FOR GOOD LUCK ISZ OUTBLK JMP I OUTBLK QQCRLF, CRLF QQ77, 77 QQFIN, FIN LSTBLK, 0 AND QQ77 /GET 6-BIT LETTER DCA LETR TAD LETR CLL RTL /TIMES 4 (4 WORDS PER LETTER) TAD (BITLST /ADD IN BASE OF BIT LIST DCA BITPTR TAD RNUM CLL RAR /DIVIDE RNUM BY 2 TAD BITPTR /UNITS DIGIT TO LINK DCA BITPTR /GET REAL BIT POINTER TAD I BITPTR /LINK OFF: LEFT HALF, ON: RIGHT HALF SZL JMS I QRTL DCA BBITS TAD (-6 DCA BCOUNT LB2, TAD BBITS /ROTATE LEFT RAL /IMPORTANT BIT TO LINK DCA BBITS SZL TAD LETR /BIT ON: PRINT LETTER, OFF: PRINT SPACE SZL TAD QQ40 AND QQ77 TAD QQ40 DCA LETT TAD GROUP DCA GCOUNT LB3, TAD LETT JMS I QQLISTER ISZ GCOUNT JMP LB3 ISZ BCOUNT JMP LB2 JMP I LSTBLK QRTL, RRTL QQ40, 40 QQLISTER,LISTER DIGS, 1621;2325;3121;1600 /0 0414;2404;0404;3700 /1 1621;0102;1420;3700 /2 3601;0204;0201;3700 /3 0206;1222;3702;0200 /4 3720;3601;0121;1600 /5 0710;2036;2121;1600 /6 3701;0204;1010;1000 /7 1621;2116;2121;1600 /8 1621;2117;0102;3400 /9 IFNZRO DIGS-BITLST-300 <_ERROR_> GCOUNT, 0 PAGE FILBUF, ZBLOCK 600 0 LINBUF, ZBLOCK 210 CRLF, 0 DCA I LINPTR CAL SENDW LPT LPMSG TAD (LINBUF DCA LINPTR JMP I CRLF LINPTR, LINBUF LISTER, 0 DCA I LINPTR ISZ LINPTR JMP I LISTER RRTL, 0 RTL RTL RTL JMP I RRTL LPMSG, ZBLOCK 3 NOPACK+IND 0 LINBUF FIN, 0 JMS CRLF JMP I FIN FFMSG, ZBLOCK 3 NOPACK+NOCRLF 0 14;0 UNPACK, 0 TAD (-200 DCA C TAD (FILBUF+200 DCA P1 TAD P1 IAC DCA P2 TAD (FILBUF DCA P3 LOOOP, TAD I P1 JMS STOR TAD I P1 AND (7400 DCA TM TAD I P2 JMS STOR TAD I P2 AND (7400 CLL RTR RTR TAD TM RTR RTR JMS STOR ISZ P1 ISZ P1 ISZ P2 ISZ P2 ISZ C JMP LOOOP FINY, CAL SENDW LPT FILMSG JMP I UNPACK P1, 0 P2, 0 P3, 0 C, 0 TM, 0 STOR, 0 AND (177 TAD (-32 SNA JMS CTRLZ TAD (32 DCA I P3 ISZ P3 JMP I STOR CTRLZ, 0 DCA I P3 JMP FINY FILMSG, ZBLOCK 3 NOPACK+NOCRLF+IND 0 FILBUF FNFMSG, ZBLOCK 3 0 0 TEXT /FILE NOT FOUND/ PAGE FAKERX, RELOC 7607 FAK, 0 CLA DCA UNITY TAD I FAK DCA T1 ISZ FAK TAD I FAK DCA T2 ISZ FAK TAD I FAK DCA T3 ISZ FAK /POINT TO ERROR RETURN RDF TAD KCIDF DCA FAKRET TAD PARG DCA PTR CIF CDF 30 TAD T1 DCA I PTR ISZ PTR TAD T2 DCA I PTR ISZ PTR TAD T3 DCA I PTR TAD UNITY DCA I PRXU JMS I PSYS SNL ISZ FAK RAR FAKRET, HLT JMP I FAK PRXU, RXUN PARG, ARG PTR, 0 KCIDF, CIF CDF PSYS, SYS T1, 0 T2, 0 T3, 0 UNITY, 0 FAKRX1, 0 TAD FAKRX1 DCA FAK CLA IAC JMP FAK+2 RELOC MOVE, 0 TAD (-134 DCA COUNT TAD I MOVE DCA FROCDF ISZ MOVE TAD I MOVE DCA FROPTR ISZ MOVE TAD I MOVE DCA TOCDF ISZ MOVE TAD I MOVE DCA TOPTR ISZ MOVE FROCDF, HLT TAD I FROPTR ISZ FROPTR TOCDF, HLT DCA I TOPTR ISZ TOPTR ISZ COUNT JMP FROCDF CDF 30 JMP I MOVE FROPTR, 0 TOPTR, 0 COUNT, 0 SYS, 0 CAL SENDW RX8A SYSMSG CLL TAD SYSTAT SZA CLA STL CIF CDF 0 JMP I SYS SYSMSG, ZBLOCK 3 RXUN, 0 ARG, ZBLOCK 3 /3 ARGUMENTS SYSTAT, 0 BLOK, 0 TAD I (OPT SMA CLA JMP I BLOK / /H MEANS NO HEADER TAD (-3 JMS I (BLKLET CAL SENDW LPT FFMSG TAD I (OPT RAL SMA CLA JMP I BLOK TAD (-3 JMS I (BLKLET CAL SENDW LPT FFMSG JMP I BLOK PAGE *6000 ZBLOCK 134 *7640 CANCL, IOF CAF CDF 30 JMS I (MOVE CDF 30 6000 CDF 0 7607 TAD (-17 DCA K TAD (DHRT DCA H LL, CDF 10 TAD I H SZA TAD (-7607 SZA CLA DCA I H ISZ H ISZ K JMP LL CIF CDF 0 JMP I (7605 *7700 CLA /ENTRY POINT TO SPOOLR CLA /CAN RUN OR CHAIN TO SPOOLR CDF 30 JMS I (MOVE CDF 0 7607 CDF 30 6000 /SAVE AWAY ORIGINAL SYSTEM HEAD JMS I (MOVE CDF 30 FAKERX CDF 0 7607 /STORE IN FAKE RX SYSTEM HANDLER TAD (-17 DCA K TAD (DHRT DCA H TAD (DCWT DCA CC CDF 10 L, TAD I CC AND (770 TAD (-250 /CHECK FOR RX SZA CLA JMP NOTFL /NOT A FLOPPY TAD I H TAD (-7607 SNA CLA JMP NOTFL /NOT UNIT 1 TAD (FAKRX1 DCA I H NOTFL, ISZ CC ISZ H ISZ K JMP L CDF CUR JMP I (200 /START UP RTS/8 K, 0 H, 0 CC, 0 FIELD 0 *2000 QUEUE, SKP JMP NOCD JMS CHECK /CHECK THAT SPOOLER IS RUNNING QUEUE2, CIF 10 JMS I (200 5 /CD 5200 /SPECIAL MODE NOCD, JMS CHECK /VERIFY THAT SPOOLER IS RUNNING CIF CDF 30 JMS I (Q CLA IAC AND LOPTION SZA CLA JMS I (LISTY /DO A /L CDF 10 TAD I (7642 CDF 0 SMA CLA /RETURN TO KBM? JMP I (7605 /YES JMP QUEUE2 /NO, GET SOME MORE INPUT CHECK, 0 CDF 10 CLA IAC AND I (7643 CDF 0 SZA CLA JMS VERS CDF 10 TAD I (7643 DCA LOPTION /SAVE INFO ABOUT /L CLL STA RAL /7776 AND I (7643 DCA I (7643 /GET RID OF /L BIT TAD I (7726 CDF 0 AND (4 SZA CLA JMP RUNING /SOME SYMBIONT IS RUNNING - HOPE IT'S SPOOLER JMS I (PRINT NR JMP I (7605 RUNING, CLA IAC AND LOPTION SNA CLA JMP I CHECK JMS I (PRINT SV CDF 30 TAD I (SVER CDF 0 JMS I (TYPE CDF 30 TAD I (SPAT CDF 0 JMS I (TYPE JMS I (CRLFF JMS I (CRLFF JMP I CHECK VERS, 0 JMS I (PRINT VR JMP I VERS LOPTION,0 PAGE PRINT, 0 TAD I PRINT /GET PTR TO STRING TO BE PRINTED DCA SPTR ISZ PRINT PRLUP, TAD I SPTR SNA JMP I PRINT JMS TYPE ISZ SPTR JMP PRLUP SPTR, 0 TYPE, 0 TLS TSF JMP .-1 CLA KSF JMP I TYPE CTRLS, TAD (200 KRS TAD (-203 SNA JMP CTRLC TAD (203-223 SZA CLA JMP I TYPE JMP CTRLS CTRLC, JMP I (7605 WILD, 0 DCA WTEM TAD WTEM JMS WCHK TAD WTEM RTR RTR RTR JMS WCHK ISZ WILD WLDRET, CIF CDF 30 JMP I WILD WTEM, 0 WCHK, 0 AND (77 TAD (-77 SNA JMP WLDRET /FILENAME CONTAINS A ? TAD (77-52 SNA CLA JMP WLDRET /FILENAME CONTAINS A * JMP I WCHK WLDCHK, 0 CDF 30 TAD I (WLDFLG CDF 0 SZA CLA JMS WLDERR CIF CDF 30 JMP I WLDCHK WLDERR, 0 JMS I (PRINT WE JMP I WLDERR WE, 215;212 "?;" ;"-;" ;"I;"l;"l;"e;"g;"a;"l;" ;"*;" ;"o;"r;" ;"? 215;212;0 CRLFF, 0 TAD (215 JMS TYPE TAD (212 JMS TYPE JMP I CRLFF PAGE PNAME, 0 /PRINT NAME /POINTER IN AC POINTS TO FIELD 3 DCA PNPTR /PRINT NULLS AS SPACES TO MMAKE THINGS LINE UP JMS PR6 JMS PR6 JMS PR6 CDF CUR TAD I PNPTR CDF 0 SZA CLA TAD (".-40 TAD (40 JMS I (TYPE JMS PR6 JMP I PNAME PR6, 0 CDF CUR TAD I PNPTR RTR RTR RTR JMS PBYTE CDF CUR TAD I PNPTR JMS PBYTE ISZ PNPTR JMP I PR6 PBYTE, 0 CDF 0 AND (77 SNA TAD (40 TAD (40 AND (77 TAD (40 JMS I (TYPE JMP I PBYTE PNPTR, 0 PAGE SV, ",;40;40;40;40 "S;"P;"O;"O;"L;"E;"R;" ;"V;"e;"r;"s;"i;"o;"n;40 0 NR, 215;212 "?;" ;"-;" ;"S;"p;"o;"o;"l;"e;"r;" ;"n;"o;"t;" ;"r;"u;"n;"n;"i;"n;"g 215;212 0 VR, 215;212 QVER, "O;"S;"/;"7;"8;" ;"Q;"U;"E;"U;"E;" ;"V;"e;"r;"s;"i;"o;"n;" ;"1;"A 0 PAGE LISTY, 0 /PERFORM A STATUS REPORT DCA QQCNT CDF CUR TAD I (GETPTR DCA GPTR TAD (-40 DCA GCNT GLUP, CDF CUR TAD I GPTR /GET ENTRY 0 CDF 0 SNA JMP GINCY IAC SNA CLA TAD ("*-40 TAD (40 DCA RXM /PRINT * IF PRINTING NOW ISZ QQCNT ISZ GPTR TAD GPTR TAD (4 DCA GOPTR /POINT TO OPTION WORD CLA IAC CDF CUR AND I GOPTR /GET UNIT TAD ("0 DCA GUNIT CDF 0 JMS I (PRINT RXM TAD GPTR JMS I (PNAME /PRINT NAME TAD GOPTR DCA GPTR CDF CUR TAD I GPTR CDF 0 SMA CLA JMS PHDR CDF CUR TAD I GPTR CDF 0 RAL SPA CLA JMS PP2 ISZ GPTR CDF CUR CLA IAC TAD I GPTR /GET NUMBER OF COPIES CDF 0 SZA JMS PCOP ISZ GPTR /POINT TO UNUSED WORD ISZ GPTR /POINT TO NEXT ENTRY JMS I (CRLFF GINCM, TAD GPTR TAD (-SPLEND SZA CLA JMP .+3 TAD (SPLTAB DCA GPTR GINC, ISZ GCNT JMP GLUP TAD QQCNT SZA CLA JMP I LISTY JMS I (PRINT EMPTY JMP I LISTY GCNT, 0 GPTR, 0 GOPTR, 0 RXM, 40;40;"R;"X;"A GUNIT, "0;":;0 GINCY, TAD GPTR TAD (10 DCA GPTR JMP GINCM PCOP, 0 TAD (-1 /GET NUMBER OF COPIES CIA DCA PTEM JMS I (PRINT SCOP TAD PTEM JMS I (PNUM /PRINT NUMBER JMP I PCOP PTEM, 0 SCOP, "/;"C;"O;"P;"I;"E;"S;":;0 PHDR, 0 JMS I (PRINT PH JMP I PHDR PP2, 0 JMS I (PRINT P2H JMP I PP2 QQCNT, 0 PAGE PH, "/;"N;"O;"H;"D;"R;0 P2H, "/;"2;0 EMPTY, 215;212 "Q;"u;"e;"u;"e;" ;"i;"s;" ;"e;"m;"p;"t;"y 0 PNUM, 0 DCA PTEM2 DCA HIKNT TAD PTEM2 CLL TAD (-144 SZL CLA JMP MANY TAD PTEM2 AB, CLL TAD (-12 /DIVIDE BY 10. SNL JMP BC ISZ HIKNT JMP AB BC, TAD (12+"0 DCA PTEM2 TAD HIKNT SNA JMP .+3 TAD ("0 JMS I (TYPE TAD PTEM2 JMS I (TYPE JMP I PNUM PTEM2, 0 HIKNT, 0 MANY, JMS I (PRINT MNY JMP I PNUM MNY, "M;"a;"n;"y;0 PAGE