C PROGRAM LPTSPL.FT C ----------------- C C C C "LPTSPL" - A LINEPRINTER SPOOLER FOR THE OS/8 "PRINT" CUSP C ---------------------------------------------------------- C C C C PETER LEMKIN, GERSON GROSFELD C NATIONAL CANCER INSTITUTE, DCBD, IPU C NATIONAL INSTITUTES OF HEALTH C BETHESDA, MD 20014 C C MARCH 16, 1978 C OCTOBER 13, 1975 C REWRITTEN NOVEMBER 5, 1975 G. GROSFELD C REVISED NOVEMBER 6, 1975 G. GROSFELD C REVISED NOVEMBER 7, 1975 G. GROSFELD C REVISED NOVEMBER 11, 1975 G. GROSFELD C REVISED NOVEMBER 17, 1975 G. GROSFELD C REVISED NOVEMBER 18, 1975 G. GROSFELD C REVISED NOVEMBER 20, 1975 G. GROSFELD C REVISED NOVEMBER 21, 1975 G. GROSFELD C REVISED NOVEMBER 24, 1975 G. GROSFELD C C INTRODUCTION C --------------- C "LPTSPL" LISTS UP TO 5 INPUT FILES SPECIFIED TO THE COMMAND C DECODER ON THE LINEPRINTER OR IF AN OUTPUT DEVICE/FILE C IS SPECIFIED ON THAT DEVICE/FILE. LINE NUMBERS AND PAGE C HEADERS WHICH INCLUDE (FILENAME, DATE, PAGE NUMBER) MAY BE C PRINTED AS WELL AS THE INPUT FILE TEXT. TABS ARE CONVERTED C TO SPACES (WITH 8 SPACES=TAB). THE OS/8 DATE WORD IS USED. C C INPUT FILES MAY HAVE ANY NAME AND EXTENSION BUT C OUTPUT FILES MUST HAVE A .DA EXTENSION AS THEY ARE WRITTEN C BY THE FORTRAN I/O SYSTEM WHICH ONLY HANDLES .DA EXTENSIONS. C C TWO TEXT SWITCHES ARE AVAILABLE TO TURN THE LISTING ON C AND OFF. C *LSOF - TURN OFF THE PRINTING BUT COMPUTE LINE/PAGE C NUMBERS FOR THE NON-PRINTING LINES. C *LSON - TURN ON THE LISTING AND REPAGINATE. C C THE LINE NUMBER CURRENTLY BEING PROCESSED APPEARS IN THE MQ C REGISTER IF THE MQ EXISTS EXISTS. C C C INPUT SWITCH SUMMARY (AS IN "*ZORCH.FT/N") C --------------------- C /C,# - PRINT "#" COPIES OF NAMED FILES (UP TO 4 FILES C ON SAME LINE). C /F - IGNORE FORM FEEDS AND VERTICAL TABS IN TEXT. C /I - IGNORE *LSON, *LSOF TEXT SWITCHES C /N - NO LINE NUMBERS BUT KEEP THE PAGE HEADERS. C /P,#,# - ONLY PRINT PAGES SPECIFIED, WHERE "#,#" ARE THE C FIRST AND LAST PAGES TO BE PRINTED. C /S - SIMULATE FORM FEEDS WITH CRLF'S. C HHMM/W - WAIT HH HOURS AND MM MINUTES BEFORE C CONTINUING. C C C C HARDWARE REQUIRED C ----------------- C PDP8E WITH 8K CORE RUNNING OS/8. OUTPUT IS DIRECTED TO C OS/8 DEVICE HANDLERS. C C C C LOAD AS: C ------- C .R LOADER C *LPTSPL/O/H C *LRPSUB C *LIB8/L$ C .SAVE SYS:LPTSPL.SV C C C C S OPDEF BSW 7002 S OPDEF MQL 7421 S OPDEF MQA 7501 S OPDEF JMSI 4400 S OPDEF TADI 1400 S OPDEF DCAI 3400 C ****************************************************** C * D E C L A R A T I O N S COMMON AND DIMENSIONED VAR* C ****************************************************** C COMMON INHAND,ISTBLK,IBLOCK,IBEGIN,IEND,IBUF,ISW,PNAME DIMENSION IBUF(256),ISW(36),PNAME(2) C C C DIMENSION IDEV(256),FILENAME(2),III(6) DIMENSION PFILE(2),JJJ(6) EQUIVALENCE (FILENAME(1),III(1)),(PFILE(1),JJJ(1)) C DIMENSION ICNUM(5),KOUTFILE(4),KINFILE(20),MCD(33) DIMENSION KDEVIN(5) C DIMENSION IDNAME(32) C C C [0] INITIAL GLOBAL CONSTANTS S START, CLA IWAIT=0 KOPIES=1 IBEGIN=1 IEND=2047 C C C C [1] CALL UP THE COMMAND DECODER C*DEBUG C@700 FORMAT('BACK') C@ WRITE(1,701) C@701 FORMAT(//,'[1] CALL CD') C*** CALL CDSPEC C*DEBUG C@ WRITE(1,700) C@C*** C C C SEE IF VERSION NUMBER REQUESTED ISWV=ISW(22) S TAD \ISWV S SNA CLA S JMP \200 WRITE(1,100) 100 FORMAT(/,'LPTSPL VERSION 5/18/76',/) CALL EXIT C C C C C C [2] LOOK FOR "/W" CD SWITCH TO SEE IF WAIT S \200, TAD \ISWW S SZA CLA S JMS WAIT C C C [3] OPEN UP THE OUTPUT DEVICE AND FILE C*DEBUG C@ WRITE(1,704)KDEVOUT C@704 FORMAT(//,'[3] KDEVOUT= ',I2) C@C*** IF(KDEVOUT)301,302,301 302 DEVICE='LPT' C*DEBUG C@ WRITE(1,705) C@705 FORMAT('DEFAULT (LPT) SET') C@C*** GOTO 310 301 JDEVNUM=KDEVOUT C*DEBUG C@ WRITE(1,706) C@706 FORMAT('CALLING GETDEVICE') C@C*** S JMS GETDEVICE /USE THE NUMBER TO LOOKUP THE DEVICE C NOTE: OUTPUT FILES HAVE .DA EXTENSIONS. C*DEBUG C@ WRITE(1,700) C@ WRITE(1,707)DEVICE,KOUTFILE C@707 FORMAT('DEVICE,KOUTFILE= ',A6,',',3A2,'.',A2) C*** 310 CONTINUE C*DEBUG C@ WRITE(1,708)DEVICE,KOUTFILE C@708 FORMAT(/,'CALLING OOPEN WITH ',A6,',',3A2,'(',A2,')') C@C*** CALL OOPEN(DEVICE,KOUTFILE) C C C [4] SET UP THE PAGE SIZES C *** DELETED *** C C C [5] SCAN THE INPUT FILE LIST AND PRINT ALL INPUT FILES C*DEBUG C@ WRITE(1,709) C@709 FORMAT(//,'[5] SCAN PRINT FILES') C@C*** DO 2002 ITERATIONS=1,KOPIES DO 2000 IFCNT=1,5 C COPY THE NEXT FILE NAME IOD=KDEVIN(IFCNT) C*DEBUG C@ WRITE(1,716)IFCNT C@716 FORMAT('([5]) FILE #',I1) C@C*** S TAD \IOD S SNA CLA /IF ZERO THEN DONE. S JMP \2000 /NEXT C C GET THE FILENAME INTO FILENAME[1:2] DO 2001 I=1,4 J=(IFCNT-1)*4+I 2001 III(I)=KINFILE(J) C C RESET COUNTERS IFFWAIT=100 C ***END OF CONSTANTS*** C C C [6] CONVERT THE FILENAME TO A PRINT NAME. C CHANGE @ FOR SPACES AND COPY IT INTO PFILE/JJJ ARRAY FOR C FORTRAN I/O C*DEBUG C@ WRITE(1,710) C@710 FORMAT(//,'[6] CONVERT TO PRINT NAME') C@C*** DO 220 I=1,4 L=III(I) S TAD \L S AND (0077 S SNA S TAD (0040 /SPACE S DCA 5 /SAVE IT S TAD \L S AND (7700 S SNA S TAD (4000 /SPACE S TAD 5 /GET THE OTHER HALF S DCA \L 220 JJJ(I)=L C C C PUT PRINT FILE IN COMMON DO 223 I=1,2 223 PNAME(I)=PFILE(I) C C C C*DEBUG C@ WRITE(1,713)PFILE C@713 FORMAT('PFILE=',A6,'.',A6) C@C*** C C C C [7] SET EOF FLAG TO 0000, I.E. NO ^Z C *** DELETED *** C C C [8] OPEN UP THE SPECIFIED FILE ON THE SPECIFIED DEVICE. C*DEBUG C@ WRITE(1,712) C@712 FORMAT(//,'[8] CALL SETDEV') C@C*** S JMS SETDEV /FETCH DEV HANDLER AND OPEN FILE C*DEBUG C@ WRITE(1,700) C@C*** C C [9] SET UP THE DATE AND WRITE IT OUT C *** DELETED *** C C C [10] LINE READ AND PROCESS (WILL BE SUBROUTINE CALL) C C*DEBUG C@ WRITE(1,715) C@715 FORMAT(/,'CALLING LRPSUB',/) C@C*** C CALL LRPSUB C*DEBUG C@ WRITE(1,700) C@C*** C C C [10.8] FINISHED FILE. 2000 CONTINUE 2002 CONTINUE C DONE, PROCESSED ALL 5 FILES C*DEBUG C@ WRITE(1,717) C@717 FORMAT(///,'DONE',/) C@C*** 718 CALL OCLOSE CALL EXIT C C C C ************************************************ C *SUBROUTINE CDSPEC.FT * C ************************************************ C C C C **SUBROUTINE C D S P E C * C PURPOSE C ------- C DECODE THE COMMAND DECODER LINE REQUESTED IN "SPECIAL MODE" C SUCH THAT IF THE FILE IS A NUMBER THEN A CORRESPONDING VALUE C IS STORED INTO ICNUM[1:5] FOR THE FIVE INPUT FILES. THE OUTPUT C FILE IS STORED IN KOUTFILE[1:4] AND THE FIRST INPUT C FILE IN KINFILE[1:4]. THE INPUT AND OUTPUT DEVICES ASSOCIATED C WITH THE FILE NAMES ARE STORED IN KDEVOUT AND KDEVIN RESPECTIVELY. C THE SWITCHES ARE STORED IN VARIABLES ISW[1:36]. C C **NOTE: THE "PRINT" COMMAND CALLS THE COMMAND DECODER IN 'SPECIAL C MODE', SO ALL THAT IS NECESSARY FOR CDSPEC TO DO IS TO C STORE THE DEVICE AND FILE NAMES IN THE ARRAY VARIABLES C IF LPTSPL.SV WAS CHAINED TO FROM ".PRINT". C (G. GROSFELD 11/11//75) C C C VARIABLES C --------- C ICNUM[1:5] - CONVERTED NUMBERS FROM EQU. FILE NAMES (DEC. NAMES) C KOUTFILE[1:4] - OUTPUT FILE C KDEVOUT - OUTPUT DEVICE C KINFILE[1:20] - INPUT FILE C KDEVIN[5] - INPUT FILE DEVICES C ISW[1:36] - SWITCH ARRAY A,B,C...Z,0,1,2,3,4,5,6,7,8,9. C MCD[1:33] - IS A COPY OF THE CD AREA AFTER SPEC. CD IS CALLED C MCD[1] = OUTPUT DEVICE C MCD[2:5] = OUTPUT FILE NAME AND EXTENSION C MCD[6] = INPUT SPEC #1 DEVICE C MCD[7:10] = INPUT SPEC #1 FILE NAME AND EXTENSION C MCD[11] = INPUT SPEC #2 DEVICE C MCD[12:15] = INPUT SPEC #2 FILE NAME AND EXTENSION C MCD[16] = INPUT SPEC #3 DEVICE C MCD[17:20] = INPUT SPEC #3 FILE NAME AND EXTENSION C MCD[21] = INPUT SPEC #4 DEVICE C MCD[22:25] = INPUT SPEC #4 FILE NAME AND EXTENSION C MCD[26] = INPUT SPEC #5 DEVICE C MCD[27:30] = INPUT SPEC #5 FILE NAME AND EXTENSION C MCD[31:33] = SWITCHES /A/B/C.../9 S ENTRY CDSPE S CPAGE 2 S CDSPE,BLOCK 2 C C [CD.1] CALL THE COMMAND DECODER, UNLESS CHAINED FROM ".PRINT" S 6211 /CDF 10 (FIELD 1) S TADI (7605 /FIRST INPUT FILE NAME S TADI (7644 /SECOND SWITCH LINE (FOR /V) S 6201 /CDF 0 (FIELD 0 RETURN) S SZA CLA /IF BOTH=0, THEN CALL CD (.PRINT NOT USED) S JMP STORE C S CPAGE 6 S 6212 /CIF 10 S JMS I (7700 /USR S 0005 /DECODE S 5200 /"*"==>SPECIAL MODE S 0000 /PRESERVE TENTATIVE FILES C C C C [CD.1.1] RESET THE TTY: OUTPUT FLAG FOR LATER FORTRAN C I/O SO THAT WE DO NOT HANG THERE... S TLS /OUTPUT A NULL... S FIXUP, TSF S JMP FIXUP C C C [CD.2] COPY THE CD AREA TO MCD[1:30] S STORE,TAD (7577 /1ST LOCATION-1 FOR CD DATA S DCA 13 /PUT IN AUTO-INCREMENT REGISTER DO 1700 I=1,30 S CPAGE 5 S 6211 /CDF 10 S TADI 13 S 6201 /CDF 0 (RETURN TO FIELD 0) S DCA \ICD 1700 MCD(I)=ICD C C C [CD.2.1] COPY THE SWITCHES TO MCD[31:33] S TAD (7642 /LOC.-1 S DCA 13 /AUTO-INCR. DO 1701 I=31,33 S CPAGE 5 S 6211 /CDF 10 S TADI 13 S 6201 /CDF 0 S DCA \ICD 1701 MCD(I)=ICD C C C C [CD.3] SET OUTPUT FILE NAME DO 1703 I=1,4 1703 KOUTFILE(I)=MCD(I+1) KDEVOUT=MCD(1) S TAD \KDEVOUT S AND (0017 S DCA \KDEVOUT C C C C C C C C [CD.4] SCAN THE 5 INPUT FILES FOR DIGIT NAMES AND PUT C INTO ARRAY ICNUM[1:5]. C ZERO THE INPUT FILE NAMES DO 1807 I=1,20 1807 KINFILE(I)=0 C ZERO THE ICNUM ARRAY DO 1705 N=1,5 ICNUM(N)=0 C ALSO ZERO THE INPUT FILE DEVICES KDEVIN(N)=0 C TEST IF FILE NAME IS DIGITS AND THEN CONVERT. C COMPUTE THE INDEX OF MCD INPUT FILE FOR N'TH INPUT FILE. J=(N-1)*5+7 IF(MCD(J)) 1706,1805,1805 C C C [CD.4.1] IT IS AN ASCII NAME, PUT IT INTO KINFILE ARRAY 1805 DO 1806 I=1,4 L=(N-1)*4+I C ALSO COPY THE DEVICE NUMBER INTO KDEVIN ARRAY J1=MCD(J-1) S TAD \J1 S AND (0017 S DCA \J1 KON=J+I-1 KDEVIN(N)=J1 1806 KINFILE(L)=MCD(J+I-1) GOTO 1705 C C C [CD.5.2] IT IS DIGITS, CONVERT AND PACKK INT ICNUM ARRAY 1706 DO 1707 I=1,2 K=MCD(J+I-1) DO 1707 K2=1,2 S TAD \K S BSW S DCA \K S TAD \K S AND (0077 S SNA /TEST IF DONE S JMP \1708 S TAD (-0060 S DCA \KK 1707 ICNUM(N)=ICNUM(N)*10+KK 1708 CONTINUE 1705 CONTINUE C C C [CD.5] CONVERT THE SWITCHES I=0 DO 1709 N=31,33 K=MCD(N) DO 1709 J=1,12 S TAD \K S RAL S DCA \K S RAL S DCA \KSW /SAVE 0000 OR 0001 EQV OF SWITCH I=I+1 1709 ISW(I)=KSW C C C C [CD.6] SORT OUT ANY NUMERIC SWITCH OPTIONS ISWC=ISW(3) ISWP=ISW(16) ISWW=ISW(23) C DO 1801 I=1,5 NMPT=ICNUM(I) S TAD \NMPT S SZA CLA /IF ZERO, CONTINUE S JMP SORT /FIRST NON-ZERO ENTRY 1801 CONTINUE C S JMP FINI /FALL-THRU MEANS NO NUMERICS, RETURN C C S SORT, TAD \I /GET LOOP INDEX S DCA \NMPT /SET UP CURRENT NUMBER POINTER S TAD \ISWW /FIRST CHECK FOR /W S SNA CLA /SKIP IF SET S JMP CSW /NO /W, CHECK FOR /C IWAIT=ICNUM(NMPT) S INC \NMPT S CSW, TAD \ISWC /CHECK FOR /C SWITCH S SNA CLA /SKIP IF SET S JMP PSW /NOT SET, CHECK FOR /P KOPIES=ICNUM(NMPT) S INC \NMPT /BUMP POINTER S PSW, TAD \ISWP /HOW ABOUT /P? S SNA CLA /SKIP IF SET S JMP FINI /IF NOT, FINISHED IBEGIN=ICNUM(NMPT) IEND=ICNUM(NMPT+1) S TAD \IEND /CHECK LAST PAGE NUMBER S SNA /SKIP IF SET S TAD (3777 /NOT SET, SO SET TO 2047 S DCA \IEND /STORE LAST PAGE NUMBER C C C C C C*DEBUG C@ WRITE(1,1234)MCD C@1234 FORMAT(6(I2,1X,3A2,'.',A2,2X),3X,3A2) C@C*** C S FINI, RETRN CDSPE C C ************************** C *****SUBROUTINE SETDEV *** C ************************** C FETCHES THE DEVICE HANDLER INTO ARRAY IDEV(128) C WITH THE DEVICE NUMBER IN IOD. IT THEN C LOOKS UP THE FILE NAME CONTAINED IN ARRAY FILNAME(2) C AND INITIALIZES THE BUFFER. C S CPAGE 3 S RSETDEV, JMP I SETDEV S SETDEV, 0 /ENTRY C C S.1 LOAD THE "DSK" HANDLER INTO CORE. IBLOCK=1 S TAD PIDEV S AND (7600 S IAC /ENABLE FOR 2 PAGE HANDLERS S DCA ARG3 C C*DEBUG C@S TAD ARG3 C@S DCA \NM C@ WRITE(1,720)IOD,NM C@720 FORMAT('1ST TIME, IOD=',I2,' ARG3= ',I5,' DECIMAL') C*** S TAD \IOD S CPAGE 12 S 6212 /CIF 10 S JMS I (7700 /USR S 1 /FETCH SARG3, 0 GOTO 11 GOTO 133 C C C S.2 FETCH ERROR - FATAL ERROR 11 WRITE(1,12)PFILE(1),PFILE(2) 12 FORMAT('FETCH ERROR FILE:',A6,'.',A2) CALL EXIT C C C S.3 LOOKUP THE FILE ON DEVICE DSK:. S\133, CLA S TAD PFILENAME /SET UP FILENAME POINTER S DCA BARG2 C C*DEBUG C@ WRITE(1,721)IOD C@721 FORMAT('2ND TIME, IOD=',I2) C@C*** S TAD \IOD /GET DEVICE # AGAIN S CPAGE 12 S 6212 /CIF 10 S JMS 7700 /USR S 2 /LOOKUP SBARG2, 0 /POINTER TO FILE NAME, WILL BE ST. BLK #. SBARG3, 0 /WILL BE -FILE LENGTH GOTO 141 GOTO 42 C C C S.3.1 LOOKUP ERROR - SKIP THIS FILE AND RETURN. 141 WRITE(1,142)PFILE(1),PFILE(2) 142 FORMAT('LOOKUP FAILED FILE: ',A6,'.',A2) GOTO 2000 C C C S.3.2 STORE THE HANDLER ENTRY IN COMMON AND RETURN S \42, TAD ARG3 /GET HANDLER ENTRY S DCA \INHAND /PUT IN COMMON S TAD BARG2 /GET FILE STARTING BLOCK S DCA \ISTBLK /PUT IN COMMON S JMP RSETDEV C C C ************************ C ****SUBROUTINE WAIT***** C ************************ C WAITS HOURS AND MINUTES SPECIFIED IN THE INPUT C FILENAME IF THE /W SWITCH WAS USED I.E. C *0130/W WAITS 1 HR AND 30 MINUTES C BEFORE RETURNING WITH A NULL 0000 FILE IN FILENAME S CPAGE 3 S RWAIT, JMP I WAIT S WAIT, 0 /ENTRY C C C [W.1] GET WAIT INTERVAL IHOURS=IWAIT/100 MIN=IWAIT-100*IHOURS C C C C [W.2] PRINT WAIT MESSAGE WRITE(1,777)IHOURS,MIN 777 FORMAT('WAITING ',I2,' HOURS, ',I2,' MINUTES') C C [W.3] CONVERT HOURS+MINUTES TO MINUTES, THEN WAIT MIN=MIN + IHOURS*60 DO 666 I=1,MIN S JMS SECOND 666 CONTINUE C C C S JMP RWAIT C *********************** C ***SUBROUTINE SECOND*** C *********************** C WAIT 1 SECOND S CPAGE 3 S RSECOND, JMP I SECOND S SECOND, 0 /ENTRY DO 999 ISEC=1,60 C CHECK FOR CONTROL/C S KSF S JMP NOCTRLC S KRB S TAD (-203 S SZA CLA S JMP NOCTRLC CALL EXIT C S NOCTRLC,TAD \ISEC S MQL /PUT TIME IN MQ DO 999 MS=1,1000 S TAD (-372 /= -250 DECIMAL S DCA 5 S RM, ISZ 5 /DOWN COUNT 1 MS. S JMP RM 999 CONTINUE S JMP RSECOND C C C C ******************************* C *SUBROUTINE GETDEVICE * C ******************************* C MAP THE DEVICE NUMBER JDEVNUM INTO THE 4 CHARACTE C 6-BIT (2A2) DEVICE NAME. FIRST SET UP THE C ASSOCIATIVE NAME SPACE BY INQUIRING THE NAMES OF ALL C POSSIBLE DEVICES AND THEN ASSOCIATING THEM WITH THE C CORRESPONDING NUMBER. THEN DEVICES WHICH DON'T EXIST C HAVE VALUE 0 ELSE THE REAL DEVICE NUMBER. THEN SEARCH C THE ASSOC TABLE FOR JDEVNUM AND REPORT BACK THE ASCII C STRING IN DEVICE. S CPAGE 3 S \1853, JMP I GETDEVICE S GETDEVICE, 0 /ENTRY C C [GD.1] LOCK THE USR IN CORE SINCE DO LOTS OF INQUIRES S CPAGE 4 S 6212 S JMS 7700 /USR S 10 /USRIN C C C [GD.2] SETUP THE DNAME TABLE POINTER OF DEVICE NAMES S CLA CMA S TAD PDNTAB S DCA 11 C C C C [GD.3] DO INQUIRE ON EACH OF THE 32 DEVICE NAMES C IF NOT FOUND THEN IDNAME(I)<==0 ELSE DEV #; DO 1850 I=1,32 DN=0.0 IDN=0 S TAD I 11 /GET THE 1ST 2 CHARS S DCA IQ1 S TAD I 11 /GET THE 2ND 2 CHARACTERS S DCA IQ2 C S CPAGE 11 S 6212 /CIF 10 S JMS 200 /USR IN CORE S 12 /INQUIRE S IQ1, 0 S IQ2, 0 /WILL CONTAIN THE DEVICE NUMBER IF EXISTS S 0 S JMP \1850 /WILL BE ZERO C S TAD IQ2 /DEVICE NUMBER S DCA \IDN 1850 IDNAME(I)=IDN C C C [GD.4] RELEASE THE USR S CPAGE 4 S 6212 S JMS 200 S 11 /USROUT C C C [GD.5] NOW MATCH JDEVNUM WITH IDNAME[1:32]. S CLA CMA /RESET THE POINTER S TAD PDNTAB S DCA 11 C DO 1852 I=1,32 C C COPY THE DEV NAME IN CASE MATCH IN PTR S TAD I 11 S DCA \DEVICE S TAD I 11 S DCA \DEVICE# C IF(IDNAME(I)-JDEVNUM)1852,1853,1852 1852 CONTINUE C WRITE(1,1854)JDEVNUM 1854 FORMAT('ILLEGAL DEV#',I5) CALL EXIT C ****POINTERS**** S PIBUF, \IBUF /POINTER S PIDEV, \IDEV /POINTER S PDN, \DN /POINTER S PFILENAME, \FILENAME /POINTER S WAITER, 0 S TLPT, TEXT /LPT/ SPDNTAB, DNTAB /POINTER C C S LAP S PAGE S DNTAB, BLOCK 0 /DEVICE NAME TABLE C S 0424 /DEVICE DTA1 S 0161 S 0424 /DEVICE DTA2 S 0162 S 0424 /DEVICE DTA3 S 0163 S 0424 /DEVICE DTA4 S 0164 S 0424 /DEVICE DTA5 S 0165 S 0424 /DEVICE DTA6 S 0166 S 0424 /DEVICE DTA7 S 0167 S 0424 /DEVICE DTA0 S 0160 S 2331 /DEVICE SYS S 2300 S 0423 /DEVICE DSK S 1300 S 2424 /DEVICE TTY S 3100 S 2024 /DEVICE PTP S 2000 S 1524 /DEVICE MTA0 S 0160 S 1524 /DEVICE MTA1 S 0161 S 1420 /DEVICE LPT S 2400 S 0423 /DEVICE DSKA S 1301 S 0423 /DEVICE DSKB S 1302 S 0423 /DEVICE DSKC S 1303 S 0423 /DEVICE DSKD S 1304 S 0423 /DEVICE DSKE S 1305 S 0423 /DEVICE DSKF S 1306 S 0423 /DEVICE DSKG S 1307 S 0423 /DEVICE DSKH S 1310 S 1023 /DEVICE HSP S 2000 S 2213 /DEVICE RKA0 S 0160 S 2213 /DEVICE RKB0 S 0260 S 2213 /DEVICE RKA1 S 0161 S 2213 /DEVICE RKB1 S 0261 S 2213 /DEVICE RKA2 S 0162 S 2213 /DEVICE RKB2 S 0262 S 2213 /DEVICE RKA3 S 0163 S 2213 /DEVICE RKB3 S 0263 C C END