FTN4,L,C C PROGRAM WRITT (3,50),92067-16333 REV.2026 800416 C C NAME: WRITT C SOURCE: 92067-18333 C RELOC: 92067-16333 C PGMR: R.D. C C *************************************************************** C * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. ALL RIGHTS * C * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * C * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* C * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * C *************************************************************** C C -LU MAG C RU,WRITT, OR ,TAPE, IH (INHIBIT REWIND), DC (DON'T PERFORM THE C +CRN LU OVERLAY CHECK) C C RU,WRITT WILL DEFAULT TO THE FIRST PRIVATE OR GROUP C CARTRIDGE THAT'S MOUNTED TO THE SESSION C EXECUTING THE PROGRAM. C C IMPLICIT INTEGER (A-Z) LOGICAL NAMR,IN EXTERNAL MT1OK,FESSN,NMCHK DIMENSION ILBUF(80),INAM1(10),INAM2(10),INAM3(10),INAM4(10) DIMENSION MESSD(7),JTM(27),MSAVE(12),IDENT(2) DIMENSION LUARY(2),ISTAT(256) DIMENSION MRR1(13),MRR2(25),MRR3(11),MRR4(16),MRR5(12) DIMENSION MRR6(13),MRR7(12),MRR8(12),MRR9(27),MRR10(13) DIMENSION MRR14(27),MRR15(29),LU(5),IREG(2) DIMENSION IBUF(8193),JBUF(8192) DIMENSION MES10(12),MES11(20),MES16(30) DIMENSION MES12(26),MES14(9) INTEGER FIRST,LAST,FLAG,LASTTR C DIMENSION MSBUF(3) DIMENSION MESS9(8),MRR11(14),MRR12(25) DIMENSION ITM(30) DIMENSION NAMBF(4),NAMDR(4) COMPLEX ITMI(3) C EQUIVALENCE (MESSD(5),MLU) EQUIVALENCE (IBUF,ITRAK),(JBUF,IBUF(2)) EQUIVALENCE (ITME,ITM(13)),(NAMBF,ITM(6)) EQUIVALENCE (NAMDR,JBUF(1)),(ITMI,ITM) EQUIVALENCE (LUARY,MTLU),(MTYPE,ITM(29)) EQUIVALENCE (IDISC,INAM1) C DATA MSBUF/2H ,2H ,2H / DATA ITAPE/1/ DATA MBLNK/2H / DATA LASTTR/0/ DATA MID1/2HPR/ DATA MID2/2HGR/ DATA LUARY(2)/2HWR/ DATA JYES/2HYE/ DATA MRR1/6412B,2HWR,2HIT,2H 0,2H01,2H ,2HMA,2HG ,2HTA,2HPE, & 2H D,2HOW,2HN / DATA MRR2/6412B,2HWR,2HIT,2H 0,2H02,2H O,2HNL,2HY ,2HTH,2HE , & 2HSY,2HS ,2HMN,2HGR,2H M,2HAY,2H S,2HAV,2HE , & 2HSY,2HST,2HEM,2H D,2HIS,2HCS/ DATA MRR3/6412B,2HWR,2HIT,2H 0,2H03,2H ,2HLU,2H L,2HOC,2HKE, & 2HD / DATA MRR4/6412B,2HWR,2HIT,2H 0,2H04,2H ,2HIL,2HLE,2HGA,2HL , & 2HMA,2HG ,2HTA,2HPE,2H L,2HU / DATA MRR5/6412B,2HWR,2HIT,2H 0,2H05,2H ,2HMT,2H O,2HFF,2H L, & 2HIN,2HE / DATA MRR6/6412B,2HWR,2HIT,2H 0,2H06,2H ,2HNO,2H W,2HRI,2HTE, & 2H R,2HIN,2HG / DATA MRR7/6412B,2HWR,2HIT,2H 0,2H07,2H P,2HAR,2HIT,2HY ,2HER, & 2HRO,2HR / DATA MRR8/6412B,2HWR,2HIT,2H 0,2H08,2H ,2HEN,2HD ,2HOF,2H T, & 2HAP,2HE / DATA MRR9/6412B,2HWR,2HIT,2H 0,2H09,2H F,2HIL,2HE ,2HOP,2HEN, & 2H O,2HR ,2HWR,2HIT,2HT',2HS ,2HDI,2HSC,2H L,2HU , & 2HLO,2HCK,2H R,2HEJ,2HEC,2HTE,2HD / DATA MRR10/6412B,2HWR,2HIT,2H 0,2H10,2H ,2HDI,2HSC,2H N,2HOT, & 2H F,2HOU,2HND/ DATA MRR11/6412B,2HWR,2HIT,2H 0,2H11,2H ,2HIL,2HLE,2HGA,2HL , & 2HDI,2HSC,2H L,2HU / DATA MRR12/6412B,2HWR,2HIT,2H 0,2H12,2H O,2HNL,2HY ,2HTH, & 2HE ,2HSY,2HS ,2HMN,2HGR,2H M,2HAY, & 2H S,2HAV,2HE ,2HLU,2H 2,2H O,2HR , & 2HLU,2H 3/ DATA MRR14/6412B,2HWR,2HIT,2H 0,2H13,2H B,2HAD,2H T,2HRA,2HNS, & 2HMI,2HSS,2HIO,2HN-,2H-D,2HIS,2HC ,2HTO,2H M,2HEM,2HOR, & 2HY ,2HTR,2HK ,2H ,2H ,2H / DATA MRR15/6412B,2HWR,2HIT,2H 0,2H14,2H B,2HAD,2H T,2HRA,2HNS, & 2HMI,2HSS,2HIO,2HN-,2H-M,2HEM,2HOR,2HY ,2HTO,2H M,2HAG, & 2H T,2HAP,2HE ,2HRE,2HC ,2H ,2H ,2H / DATA JLNTH/8192/ C DATA MESS9/6412B,2H/W,2HRI,2HTT,2H: ,2H S,2HTO,2HP / DATA ITMI/8HCR ,8H CRNAME,8H SAVED / DATA MESSD/2HFR,2HOM,2H L,2HU ,2HXX,2HXX,2HXX/ C C DATA MES10/6412B,2H ,2H ,2H ,2H ,2H ,2H ,2H ,2HWA, & 2HRN,2HIN,2HG / DATA MES11/2HWR,2HIT,2HT',2HS ,2HDI,2HSC,2H L,2HU ,2HLO,2HCK, & 2H W,2HAS,2H N,2HOT,2H S,2HUC,2HCE,2HSS,2HFU,2HL,/ DATA MES16/2HHO,2HWE,2HVE,2HR,,2H W,2HRI,2HTT,2H W,2HIL,2HL , & 2HPE,2HRF,2HOR,2HM ,2HTH,2HE ,2HSA,2HVE,2H. ,2HIT, & 2H'S,2H S,2HUG,2HGE,2HST,2HTE,2HD ,2HTH,2HAT,2H / DATA MES12/2HMO,2HDI,2HFI,2HCA,2HTI,2HON,2HS ,2HTO,2H D,2HIS, & 2HC ,2HLU,2H ,2H ,2H ,2HBE,2H P,2HOS,2HTP,2HON, & 2HED,2H U,2HNT,2HIL,2H T,2HHE/ DATA MES14/2HSA,2HVE,2H I,2HS ,2HCO,2HMP,2HLE,2HTE,2HD./ C C PICK UP PARAMETERS +CRN OR -LU (DISC) AND + OR - MAG TAPE LU C CALL EXEC(14,1,ILBUF,-80) CALL ABREG(IA,IB) IS=1 ILU=LOGLU(ISES)+400B C C PARSE "RU,WRITT" C IF(NAMR(INAM1,ILBUF,IB,IS))1,1 1 IF(NAMR(INAM1,ILBUF,IB,IS))2,2 C C PARSE LU OR CRN, MTLU, IH (INHIBIT REWIND), DC (DON'T CHECK) C C 2 IF(NAMR(INAM1,ILBUF,IB,IS))3,3 3 IF(NAMR(INAM2,ILBUF,IB,IS))4,4 4 IF(NAMR(INAM3,ILBUF,IB,IS))5,5 5 IF(NAMR(INAM4,ILBUF,IB,IS))6,6 6 MTLU=IABS(INAM2) IF(MTLU.EQ.0)MTLU=8 C MAG TAPE LU C SET FLAG TO KNOW WHETHER TO INHIBIT REWIND INHBT<0 DO NOT REWIND C INHBT>= REWIND C IF(INAM3.EQ.2HIH)INHBT=-1 C C SET FLAG TO NOT PERFORM THE OVERLAY FEATURE. C IF(INAM4.EQ.2HDC)IDONC=-1 IAUX=IXGET(1760B) C C SET ISYSV=-1 IF SAVING LU 2 OR 3. C IF(IABS(IDISC).EQ.2)ISYSV=-1 IF((IAUX.NE.0).AND.(IABS(IDISC).EQ.3))ISYSV=-1 C C C USE IGET TO GET CURRENT EXECUTING PROGRAM C IXEQT=IXGET(1717B) C C CHECK VALIDITY OF MAG TAPE LU C IF(LUARY.GT.64)GO TO 106 C CALL EXEC(13+100000B,MTLU,ISTAT,ISTA1,ISTA2) GO TO 106 C C MUST BE DRIVERS 23 0R 24 C C C CHECK TO SEE IF DEVICE IS BUFFERED. C IF IT IS THEN A AND B REGS. ARE MEANINGLESS AFTER EXEC CALLS. C 2555 BUFRD=0 IF(IAND(ISTA1,040000B).EQ.040000B) BUFRD=-1 IF(IAND(ISTAT,37400B)*2.EQ.23000B)GO TO 113 IF(IAND(ISTAT,37400B)*2.EQ.24000B)GO TO 113 GO TO 106 C C CHECK TO SEE IF MAG TAPE AND EQT ARE UP C 113 IF(IAND(ISTAT,040000B).EQ.040000B)GO TO 100 IF(IAND(ISTA2,100000B).EQ.100000B)GO TO 100 C C LOCK MAG TAPE UNIT C CALL LURQ(140001B,MTLU,1) GO TO 106 2333 CALL ABREG(IA,IB) IF(IA.EQ.1)GO TO 104 C C PERFORM STATUS CHECK ON MAG TAPE UNIT C CALL EXEC(13+100000B,MTLU,ISTAT) GO TO 106 2666 ITYPE=IAND(ISTAT,37400B)/256 C C CHECK FOR CORRECT DRIVER TYPE C IF((ITYPE.EQ.23B).OR.(ITYPE.EQ.24B))GO TO 18 GO TO 106 C C CHECK STATUS OF MAG TAPE C 18 CALL MT1OK(LUARY,FLAG) IF(FLAG.EQ.0)GO TO 15 IF(FLAG.EQ.1)GO TO 200 IF(FLAG.EQ.2)GO TO 202 IF(FLAG.EQ.4)GO TO 206 C C CHECK TO SEE IF CRN (POSITIVE) OR LU (NEGATIVE) C WAS SPECIFIED. C C 15 IF(IDISC.GE.0)GO TO 20 IDISC=-IDISC C C MUST BE A LEGAL LU C IF(IDISC.LE.1)GO TO 115 IF(IDISC.GT.63)GO TO 115 C C CHECK DRIVER TYPE OF SPECIFIED LU C CALL EXEC(13+100000B,IDISC,ISTAT) GO TO 115 2444 ITYPE=IAND(ISTAT,37400B)/256 C C NOT A DISK IF DVR NOT 30,31,32, OR 33 C IF((ITYPE.GT.27B).AND.(ITYPE.LT.34B))GO TO 117 C C ILLEGAL DISC LU C 115 CALL REIO(2,ILU,MRR11,14) CALL PTERR(MRR11(2),FLAG) GO TO 90 C 117 IDISC=-IDISC C C C CHECK WHETHER IN SESSION OR NOT C RETURN ADSCB =ADDRESS OF SCB C SMID=$SMID, OFFSET TO USER ID WORD IN SCB C INSES=DESCRIBES WHETHER OR NOT IN SESSION C C 20 IF(INHBT)2442,2440,2440 C 2440 REWIND MTLU C C 2442 CALL FESSN(ADSCB,INSES,SMID) C C MOVE USER AND GROUP ID'S INTO IDENT C CALL ISMVE(ADSCB,SMID,IDENT,2) IOP=0 C C IF SYSTEM MANAGER (7777B) HE HAS ACCESS TO ALL DISCS C IF(IDENT.EQ.7777B)IOP=1 C C CALL FSTAT TO GET ALL CARTRIDGES CURRENTLY MOUNTED C CALL FSTAT(ISTAT,256,1,IOP) C C ONLY SYSTEM MANAGER CAN SAVE LU 2 AND LU 3 C CHECK FOR NONQUALIFIED REQUESTS C IF((IABS(IDISC).EQ.2).AND.(IDENT.NE.7777B))GO TO 212 IF(IAUX.EQ.0)GO TO 2280 IF((IABS(IDISC).EQ.3).AND.(IDENT.NE.7777B))GO TO 212 C C IS CRN OR LU SPECIFED C 2280 IF(IDISC.GT.0)GO TO 23 IF(IDISC.LT.0)GO TO 36 C C NEITHER WAS SPECIFIED DEFAULT TO FIRST PRIVATE OR C GROUP CATRIDGE MOUNTED TO HIS SESSION C K=3 C C HE CAN'T DEFAULT TO SYS DISCS THOUGH C 228 IF(IDENT.EQ.7777B)GO TO 2283 IF(ISTAT(K-2).EQ.2)GO TO 212 IF((IAUX.NE.0).AND.(ISTAT(K-2).EQ.3))GO TO 212 2282 IF((ISTAT(K+1).EQ.7777B).AND.(IDENT.NE.7777B))GO TO 205 C C OTHERWISE GET DISC LU C 2283 IDISC=IAND(ISTAT(K-2),00377B) IF(IDENT.EQ.ISTAT(K+1).OR.IDENT(2).EQ.ISTAT(K+1))GO TO 230 C C IF NO MORE CARTRIDGES THEN "DISC NOT FOUND" C IF(ISTAT(K+1).EQ.0)GO TO 210 K=K+4 GO TO 228 C C A CARTRIDGE HAS BEEN FOUND C CHECK FOR PRIVATE OR GROUP TYPE C 230 TYPE=0 IF(ISTAT(K+1).EQ.IDENT(2))TYPE=1 C C SAVE LAST FMP TRACK (IT'S THE FIRST DIRECTORY TRACK) C ITRAK=ISTAT(K-1) GO TO 30 C C CHECK TO SEE IF THE DISC IS REALLY THERE C 23 I=3 24 IF(IDISC.EQ.ISTAT(I))GO TO 33 IF(ISTAT(I+2).EQ.0)GO TO 210 25 I=I+4 GO TO 24 C C GET THE LU OF THE DISC AND MAKE SURE IT WASN'T THE SYSTEM DISC C 33 IDISC=IAND(ISTAT(I-2),00377B) CALL ISMVE(ADSCB,SMID,IDENT,2) IF((ISTAT(I+1).EQ.7777B).AND.(IDENT.NE.7777B))GO TO 205 C C IS IT PRIVATE OF GROUP? C TYPE=0 IF(ISTAT(I+1).EQ.IDENT(2))TYPE=1 C C SAVE THE LAST FMP TRACK (IT'S THE FIRST DIRECTORY TRACK) C ITRAK=ISTAT(I-1) GO TO 30 36 J=1 IDISC=-IDISC C C GET THE DISC LU AND MAKE SURE IT'S REALLY THERE C 37 IF(IDISC.EQ.IAND(ISTAT(J),00377B))GO TO 38 IF(ISTAT(J+4).EQ.0)GO TO 210 39 J=J+4 GO TO 37 C C MAKE SURE IT'S NOT THE SYSTEM DISC C 38 CALL ISMVE(ADSCB,SMID,IDENT,2) IF((ISTAT(J+3).EQ.7777B).AND.(IDENT.NE.7777B))GO TO 205 C C PRIVATE OR GROUP DISC? C TYPE=0 IF(ISTAT(J+3).EQ.IDENT(2))TYPE=1 C C SAVE THAT LAST FMP TRACK (IT'S THE FIRST DIRECTORY TRACK) C ITRAK=ISTAT(J+1) C C LOCK DISC LU THROUGH D.RTR C 30 CALL EXEC(23,6HD.RTR ,IXEQT,3,-IDISC,0,0,0,0) C C IF THE FIRST WORD IS NEGATIVE THEN LOCK REQUEST IS REJECTED C CALL RMPAR(LU) C IF(LU.LT.0)GO TO 208 C C IF(LASTTR.NE.0)ITRAK=LASTTR C C GET SEC/TRK OF DISC BY DOING AN IMPOSSIBLE READ. C DON'T DO IT IF IDISC EQUALS LU 2 OR LU 3 C IF(ISYSV)2774,2775,2775 C 2774 IF(IABS(IDISC).EQ.2)IDUM=IXGET(1757B) IF(IABS(IDISC).EQ.3)IDUM=IXGET(1760B) GO TO 2777 C 2775 CALL EXEC(1+100000B,IDISC,IDUM,1,-1,0) GO TO 115 2777 CALL ABREG(IA,IB) C C CALCULATE THE WORD/TRK VALUE OF THE DISC C JLNTH=IDUM*64 C C READ FIRST DIRECTORY TRACK FROM THE DISC C CALL EXEC(1,IDISC,JBUF,JLNTH,ITRAK,0) C C MAKE SURE THE READ WAS O.K. C CALL ABREG(IA,IB) IF((IB.EQ.JLNTH).AND.(IAND(IA,1).NE.1)) GO TO 299 C C BAD LENGTH OR BIT ZERO OF EQT STATUS WORD 5 WAS SET C CALL CNUMD(ITRAK,MRR14(25)) CALL EXEC(2,ILU,MRR14,27) CALL PTERR(MRR14(2),FLAG) 299 CALL FTIME(ITME) MSBUF=JBUF(4) ITM(4)=JBUF(4) C C CHECK FOR ILLEGAL FILENAME C CALL NMCHK(MSBUF) CALL ABREG(IA,IB) IF(IA.EQ.0)GO TO 300 CALL CNUMD(MSBUF,ITM(2)) 300 NAMBF=NAMDR NAMBF(2)=NAMDR(2) NAMBF(3)=NAMDR(3) ITM(28)=MBLNK MTYPE=MID1 IF(TYPE.EQ.1)MTYPE=MID2 C C REMEMBER IF TAPE IS AT LOAD POINT C CALL EXEC(13,MTLU,ISTA1) C C CHECK FOR POSSIBLE HEADER CONFLICT C C IF IDONC < 0 THEN DON'T CHECK TAPE HEADER. C IF(IDONC)190,170,170 C 170 CALL EXEC(1+100000B,MTLU,JTM,27) GO TO 214 1701 CALL ABREG(IA,IB) C C IF BLANK TAPE I.E. TRANSMISSION LOG =0 THEN SKIP CHECK C IF(IB.EQ.0)GO TO 19 C C CHECK TO SEE IF THIS CARTRIDGE PREVIOUSLY RESIDES ON THE MAG TAPE C DO 17 JJ=1,12 IF(ITM(JJ).NE.JTM(JJ))GO TO 21 17 CONTINUE GO TO 19 C C SAVING A DIFFERENT CARTRIDGE TO THIS TAPE. BETTER MAKE SURE USER C IS AWARE OF THIS. C 21 CALL EXEC(2,ILU,2H ,1) CALL EXEC(2,ILU,24H****** CAUTION *********,12) CALL EXEC(2,ILU,14HDO YOU WANT TO,7) CALL EXEC(2,ILU,10H OVERLAY ,5) IF(JTM(1).NE.2HCR) CALL EXEC(2,ILU,16H A NONWRITT TAPE ,8) CALL EXEC(2,ILU,JTM,27) CALL EXEC(2,ILU,10H WITH ,5) CALL EXEC(2,ILU,ITM,30) CALL EXEC(2,ILU,14H(YES OR NO)? ,7) CALL EXEC(1,ILU,JTM,27) CALL EXEC(2,ILU,2H ,1) IF(JTM.EQ.JYES)GO TO 19 CALL EXEC(2,ILU,22H*** DISC NOT SAVED ***,11) CALL EXEC(2,ILU,2H ,1) C C IF INHIBIT REWIND WAS SPECIFIED ONLY BACKUP ONE RECORD. C IF(INHBT.NE.-1)GO TO 90 C CALL EXEC(3,MTLU+200B) GO TO 92 C C REWIND MAG TAPE AND WRITE NEW HEADER TO IT AND TO USER C 19 IF(IAND(ISTA1,100B).EQ.1)GO TO 185 C C IF TAPE WASN'T AT LOAD POINT THEN BACKUP ONE RECORD C CALL EXEC(3,MTLU+200B) GO TO 190 185 REWIND MTLU 190 CALL EXEC(2,MTLU,ITM,30) CALL EXEC(2,ILU,ITM,30) C C SAVE FIRST FMP TRACK (FIRST DATA TRACK) AND LAST FMP TRACK (LAST C DATA TRACK). ALSO SAVE THE LOWEST DIRECTORY TRACK. C FIRST=JBUF(5) LAST=JBUF(10) IF(LAST.EQ.LASTTR)LAST=LAST-1 IF((IAND(JBUF(6),7777B)).EQ.0)LAST=LAST-1 LOWDIR=JBUF(8) C C CHECK THE SEC/TRK VALUE FOUND IN THE CARTRIDGE SPECIFICATION ENTRY. C (FIRST 16 WORDS OF THE FIRST DIRECTORY FILE). IF IT'S DIFFERENT C THAN WHAT'S BEEN FOUND BEFORE, RESET IT AND RECALCULATE THE C WORD/TRK VALUE OF THE DISC. C IF(JBUF(7).EQ.IDUM) GO TO 42 IDUM=JBUF(7) JLNTH=IDUM*64 C C TELL USER WHICH LU IS BEING SAVED C 42 CALL CNUMD(IDISC,MLU) CALL EXEC(2,ILU,MESSD,7) GO TO 411 C C COPY TRACKS, DIRECTORY TRACK(S) FIRST, FOLLOWED BY DATA TRACK(S) C UNUSED TRACKS WILL NOT BE COPIED. C 40 CALL EXEC(1,IDISC,JBUF,JLNTH,ITRAK,0) C C MAKE SURE READ WAS O.K. C CALL ABREG(IA,IB) IF((IB.EQ.JLNTH).AND.(IAND(IA,1).NE.1)) GO TO 411 C C C BAD LENGTH OR ERROR EXISTS BIT OF EQT STATUS WORD 5 WAS SET. C CALL CNUMD(ITRAK,MRR14(25)) CALL EXEC(2,ILU,MRR14,27) CALL PTERR(MRR14(2),FLAG) C C CHECK FOR END OF TAPE C 411 CALL EXEC(3,MTLU+600B) CALL ABREG(IA,IB) IF((IAND(IA,00040B).NE.40B))GO TO 403 CALL EXEC(3,MTLU+500B) CALL EXEC(2,ILU,MRR8,12) CALL PTERR(MRR8(2),FLAG) CALL EXEC(2,ILU,28HPLEASE MOUNT ANOTHER TAPE ,-28) 405 CALL EXEC(2,ILU,25HAFTER MOUNTING ENTER "GO",-25) CALL REIO(1,ILU,INBF,1) IF(INBF.NE.2HGO)GO TO 407 ITAPE=ITAPE+1 CALL EXEC(2,MTLU,ITAPE,1) GO TO 41 407 IF(INBF.EQ.2HAB)GO TO 90 GO TO 405 403 IF(IFBRK(IDMY))90,41 C C NOW WRITE THAT TRACK TO MAG TAPE C 41 CALL EXEC(2,MTLU,IBUF,JLNTH+1) C C MAKE SURE WRITE WAS O.K. C IF(BUFRD.NE.0)GO TO 406 CALL ABREG(IA,IB) C C PARITY ERROR? C IF(IAND(IA,2).EQ.2) GO TO 204 C C TRANSMISSION LENGTH O.K.? C IF(IB.EQ.JLNTH+1) GO TO 406 CALL CNUMD(ITRAK,MRR15(27)) CALL EXEC(2,ILU,MRR15,29) CALL PTERR(MRR15(2),FLAG) C C GO COPY DATA TRKS IF DONE WITH DIRECTORY TRACKS. C 406 IF(ITRAK.EQ.LOWDIR) GO TO 45 C C ELSE - DECREMENT TRK # TO NEXT DIRECTORY TRK. C ITRAK=ITRAK-1 GO TO 40 C C MAG TAPE DOWN C 100 CALL EXEC(2,ILU,MRR1,13) CALL PTERR(MRR1(2),FLAG) GO TO 92 C C LU LOCKED C 104 CALL EXEC(2,ILU,MRR3,11) CALL PTERR(MRR3(2),FLAG) GO TO 92 C C ILLEGAL LU C 106 CALL EXEC(2,ILU,MRR4,16) CALL PTERR(MRR4(2),FLAG) GO TO 92 C C MAG TAPE OFF LINE C 200 CALL EXEC(2,ILU,MRR5,12) CALL PTERR(MRR5(2),FLAG) GO TO 92 C C NO WRITE RING C 202 CALL EXEC(2,ILU,MRR6,13) CALL PTERR(MRR6(2),FLAG) GO TO 92 C C PARITY ERROR C 204 CALL EXEC(2,ILU,MRR7,12) CALL PTERR(MRR7(2),FLAG) GO TO 92 C C END OF TAPE C 206 CALL EXEC(2,ILU,MRR8,13) CALL EXEC(2,ILU,28HMOUNT ANOTHER TAPE, AFTER ,-28) CALL EXEC(2,ILU,28HMOUNTING "RU,WRITT,... AGAIN,-28) CALL PTERR(MRR8(2),FLAG) GO TO 92 C C DISC LU LOCKED C 208 CALL EXEC(2,ILU,MRR9,27) CALL PTERR(MRR9(2),FLAG) GO TO 90 C C C DISC NOT FOUND C 210 CALL EXEC(2,ILU,MRR10,13) CALL PTERR(MRR10(2),FLAG) GO TO 90 C C CAN`T SAVE SYSTEM DISCS C 205 CALL EXEC(2,ILU,MRR2,25) CALL PTERR(MRR2(2),FLAG) GO TO 90 C C CAN'T SAVE LU 2 0R 3 C 212 CALL EXEC(2,ILU,MRR12,25) CALL PTERR(MRR12(2),FLAG) GO TO 90 C C BAD TRANSMISSION OF DATA C 214 CALL EXEC(2,ILU,MRR14,14) CALL PTERR(MRR14(2),FLAG) GO TO 1701 C C NOW SAVE DATA TRACKS C 45 DO 49 ITRAK=FIRST,LAST C C READ DATA TRACK FROM DISC C 46 CALL EXEC(1,IDISC,JBUF,JLNTH,ITRAK,0) C C MAKE SURE READ WAS O.K. C CALL ABREG(IA,IB) IF((IB.EQ.JLNTH).AND.(IAND(IA,1).NE.1)) GO TO 474 C C BAD LENGTH OR ERROR EXISTS BIT IN EQT STATUS WORD 5 WAS SET. C CALL CNUMD(ITRAK,MRR14(25)) CALL EXEC(2,ILU,MRR14,27) CALL PTERR(MRR14(2),ITRAK) C C CHECK FOR END OF TAPE C 474 CALL EXEC(3,MTLU+600B) CALL ABREG(IA,IB) IF((IAND(IA,00040B).NE.40B))GO TO 443 CALL EXEC(3,MTLU+500B) CALL EXEC(2,ILU,MRR8,12) CALL PTERR(MRR8(2),FLAG) 475 CALL EXEC(2,ILU,28HPLEASE MOUNT ANOTHER TAPE ,-28) CALL EXEC(2,ILU,25HAFTER MOUNTING ENTER "GO",-25) CALL REIO(1,ILU,INBF,1) IF(INBF.NE.2HGO)GO TO 477 ITAPE=ITAPE+1 CALL EXEC(2,MTLU,ITAPE,1) GO TO 47 477 IF(INBF.EQ.2HAB)GO TO 90 GO TO 475 443 IF(IFBRK(IDMY))90,47 47 CALL EXEC(2,MTLU,IBUF,JLNTH+1) C C MAKE SURE WRITE WAS O.K. IF(BUFRD.NE.0)GO TO 49 CALL ABREG(IA,IB) C C PARITY ERROR? C IF(IAND(IA,2).EQ.2) GO TO 204 C C TRANSMISSION LENGTH O.K.? C IF(IB.EQ.JLNTH+1) GO TO 49 CALL CNUMD(ITRAK,MRR15(27)) CALL EXEC(2,ILU,MRR15,29) CALL PTERR(MRR15(2),FLAG) 49 CONTINUE C C PUT 2 EOF AT THE END. C BACK OVER ONE END OF FILE C C ENDFILE MTLU ENDFILE MTLU C C CALL EXEC(3,MTLU+1400B) C C END: REWIND TAPE C C CHECK WHETHER TO REWIND OR NOT INHBT< 0 DON'T REWIND C IF(INHBT)92,90,90 C 90 CALL EXEC(3,MTLU+500B) 92 CALL EXEC(23,6HD.RTR ,IXEQT,5,-IDISC,0,0,0,0) CALL LURQ(40000B,MTLU,1) GO TO 94 93 CONTINUE C C REPORT: /WRITT: STOP C 94 CALL REIO(2,ILU,MESS9,8) C END END$