FTN4,L SUBROUTINE DGLB1,91711-18108 REV.2001 791120 C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C SOURCE NAME &DGLB1 C THIS IS A DUMMY PROGRAM TO PROVIDE THIS SOURCE WITH A NAME C THE RELOCATABLE FROM THIS SOURCE IS MERGED INTO C THE LIBRARY %DGLB PART NO. 91711-12002 C THIS ADDITION MADE 791120 C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC/ C RETURN END C SUBROUTINE DID01 (ILU,IADR,IPAS,IBF),91711-1X108 REV.2001 790922 C C RUN THE SELF TEST AND STORE RESULT IN IPAS. C DIMENSION IBF(20) IT=440B+IADR CALL ODPAR(IT) IBF(1)=IT IBF(2)=577B IBF(3)=0 IBF(4)=1004B IBF(5)=100677B C C SELF TEST C CALL EXEC(1,ILU+2200B,IBF,9,1,0) C C C PARRALLEL POLL C 70 CALL EXEC(1,ILU+2200B,IPP,1,6,0) ITEP=7-IADR ITP=2**ITEP ITP1=IAND(ITP,IPP) IF(ITP1.EQ.0) GO TO 70 C C READ SELF TEST RESULT C ID=500B+IADR CALL ODPAR(ID) IBF(1)=ID IBF(2)=100577B LEN=-2 CALL EXEC(1,ILU+2200B,IBF,LEN,2,0) IST=IAND(170B,IBF(17)) IPAS=IST/8 C C C IF IPAS#0 SEND AN "END" COMMAND TO THE DRIVE. C C IF(IPAS.EQ.0)GO TO 99 C C CALL XEND(ILU,IADR) C C 99 CONTINUE RETURN END C C C C C C SUBROUTINE DID05(ILU,IDVID,IPAS,IC,IH,IS,ISTAT) +,91711-1X108 REV.2001 791017 C C THIS SUBROUTINE CHECK REQUEST ADDRESS C DIMENSION ISTAT(2),ID(5) C CALL XLGAD(ILU,IDVID,ICYL,IHED,ISCT,IER) C C IF(IER.NE.0)GO TO 45 IT=IHED+ISCT IHS=IH+IS IPAS=0 IF((ICYL.NE.IC).OR.(IT.NE.IHS))GO TO 25 GO TO 35 25 IPAS=1 C GO TO 35 45 IPAS=2 CALL DSTAT(ILU,IDVID,ISTAT,ID,IER) C 35 CONTINUE RETURN END C C C C C SUBROUTINE DID07 (ILU,IDVID,IPAS,IADR,IC,IH,IS,ISTAT) +,91711-1X108 REV.2001 791017 C C THIS CHECK THE REQUEST SECTOR ADDRESS COMMAND. SEEK TO AN ADDRESS, C REQUEST SECTOR ADDRESS AND CHECK TO SEE IF IT IS THE CORRECT SECTOR. C DIMENSION ISTAT(2),ID(5) C C CALL XSEEK(ILU,IDVID,IC,IH,IS,ISTAT(1),ISTAT(2),IER) IF(IER.NE.0)GO TO 25 CALL XSECA(ILU,IDVID,ISCT,IER) IF(IER.NE.0)GO TO 25 IPAS=0 GO TO 35 25 IPAS=1 CALL DSTAT(ILU,IDVID,ISTAT,ID,IER) 35 CONTINUE RETURN END C C C C C SUBROUTINE DID08(ILU,IADR,IPAS,IUN,IBF) +,91711-1X108 REV.2001 791017 C C THIS SUBROUTINE CHECK CLEAR BY SEEING IF, AFTER COMPLETION,THE DSJ=2. C DIMENSION IBF(20) C IDVID=IADR+(256*IUN) C C C C C IT=440B+IADR CALL ODPAR(IT) IBF(1)=IT IBF(2)=550B IBF(3)=12B IBF(4)=1000B+IUN IBF(5)=100677B C C CLEAR COMMAND C CALL EXEC(2,ILU+2200B,IBF,16,1,0) C C PARALLEL POL C 80 CALL EXEC(1,ILU+2200B,IPP,1,6,0) ITEP=7-IADR ITP=2**ITEP ITP1=IAND(ITP,IPP) IF(ITP1.EQ.0)GO TO 80 C C C C DSJ C CALL XDSJ(ILU,IDVID,IDSJ,IER) IPAS=0 IF(IDSJ.NE.2)IPAS=1 RETURN END C C C C C SUBROUTINE DID09 (ILU,IDVID,IPAS,IBF1,ICYL,IHED,ISCT,ISTAT) +,91711-1X108 REV.2001 791017 C C CHECKS READ FULL SECTOR AND INDUCING AN ERROR AS PREPARATION TO C THE NEXTS TESTS. C DIMENSION IBF1(160),ISTAT(2),ID(5) C C C SEEK C CALL XSEEK(ILU,IDVID,ICYL,IHED,ISCT,ISTAT(1),ISTAT(2),IER) IF(IER.NE.0)GO TO 25 CALL DECST(ISTAT,ID) IF(ID(2).NE.37B)GO TO 25 C C C C READ FULL SECTOR C LEN=138 CALL XRDFS(ILU,IDVID,IBF1,LEN,ISTAT(1),ISTAT(2),IER) C IF(IER.NE.0)GO TO 25 CALL DECST(ISTAT,ID) IF(ID(2).NE.0)GO TO 25 C C CHECK CYLINDER, HEAD AND SECTOR COMPETABILITY. C IF(IBF1(18).NE.ICYL)GO TO 45 ITEM=IAND(17777B,IBF1(19)) IF(ITEM.NE.(IHED*256+ISCT))GO TO 45 IPAS=0 GO TO 35 25 IPAS=1 C GO TO 35 45 IPAS=2 C 35 IBF1(40)=IBF1(40)+5 RETURN END C C C C C SUBROUTINE DID10 (ILU,IDVID,IPAS,IBF1,ICYL,IHED,ISCT,ISTAT) +,91711-1X108 REV.2001 791017 C C THIS SUBROUTINE WILL WRITE THE FULL SECTOR WAS READ IN "DID09" C WITH THE ERROR.THIS WILL BE USED IN "DID11" TO VERIFY THE EXISTING ERROR. C DIMENSION ISTAT(2),ID(5),IBF1(160) C C C SEEK C C C C C CALL XSEEK(ILU,IDVID,ICYL,IHED,ISCT,ISTAT(1),ISTAT(2),IER) IF(IER.NE.0)GO TO 25 CALL DECST(ISTAT,ID) C IF(ID(2).NE.37B)GO TO 25 C C WRITE FULL SECTOR C LEN=138 C C C C CALL XWRFS(ILU,IDVID,IBF1,LEN,ISTAT(1),ISTAT(2),IER) IF(IER.NE.0)GO TO 25 C C CALL STATUS C CALL DECST(ISTAT,ID) IF(ID(2).NE.0)GO TO 25 IPAS=0 GO TO 35 25 IPAS=1 35 CONTINUE RETURN END C C C C C SUBROUTINE DID11 (ILU,IDVID,IPAS,ICYL,IHED,ISCT,ISTAT) +,91711-1X108 REV.2001 791017 C C THIS SUBROUTINE CHECK VERIFY BY VERIFING THE SECTOR WITH THE INDUCED C DATA ERROR AND SEEING IF THE DATA ERROR WAS DETECTED. C DIMENSION ISTAT(2),ID(5) C C C SEEK C CALL XSEEK(ILU,IDVID,ICYL,IHED,ISCT,ISTAT(1),ISTAT(2),IER) IF(IER.NE.0)GO TO 25 C CALL DECST(ISTAT,ID) IF(ID(2).NE.37B)GO TO 25 C C CALL VERIFY C CALL XVRFY(ILU,IDVID,1,ISTAT(1),ISTAT(2),IER) IF(IER.EQ.0)GO TO 45 CALL DECST(ISTAT,ID) C C IF(ID(2).NE.10B)GO TO 45 IPAS=0 GO TO 35 25 IPAS=1 GO TO 35 45 IPAS=2 35 CONTINUE RETURN END C C C C C SUBROUTINE DID12 (ILU,IDVID,IPAS,ICYL,IHED,ISCT,IBF1,IBF2,ISTAT) +,91711-1X108 REV.2001 791017 C C THIS SUBROUTINE CHECK READ BY READING THE SAME SECTOR THAT WAS WRITTEN C IN "DID10", SEEING IF THE DATA ERROR WAS DETECTED, AND CHECKING THE C THE READ DATA AGAINST THE WRITTEN DATA. C C THE SUBROUTINE WILL BE USED IN TEST 12,13,14. C C IF IPAS=2, READ WITHOUT OFFSET AND WITH VERIFY. C IF IPAS=3, READ WITH OFFSET AND WITH VERIFY. C IF IPAS=4, READ WITHOUT OFFSET AND WITHOUT VERIFY. C C DIMENSION IBF1(160),IBF2(150),ISTAT(2),ID(5) C C C SEEK C CALL XSEEK(ILU,IDVID,ICYL,IHED,ISCT,ISTAT(1),ISTAT(2),IER) IF(IER.NE.0)GO TO 45 C C CALL DECST(ISTAT,ID) IF(ID(2).NE.37B)GO TO 45 C C LEN=128 C C IF(IPAS.EQ.3)GO TO 55 IF(IPAS.EQ.4)GO TO 65 C C READ WITHOUT OFFSET WITH VERIFY C CALL XDRED(ILU,IDVID,IBF2,LEN,ISTAT(1),ISTAT(2),IER) GO TO 75 C C READ WITH OFFSET C 55 IOFS=45 CALL XRDOF(ILU,IDVID,IBF2,LEN,IOFS,ISTAT(1),ISTAT(2),IER) GO TO 75 C C READ WITHOUT VERIFY C 65 CALL XRDNV(ILU,IDVID,IBF2,LEN,ISTAT(1),ISTAT(2),IER) C C CALL DSJ AND STATUS C 75 IF(IER.EQ.0)GO TO 25 CALL DECST(ISTAT,ID) IF(ID(2).NE.10B)GO TO 25 C C COMPAR DATA C K=0 DO 1 I=17,144 J=I+3 IF(IBF2(I)-IBF1(J))67,1,67 67 K=1 1 CONTINUE IF(K.NE.0)GO TO 25 IPAS=0 GO TO 35 25 IPAS=1 GO TO 35 45 IPAS=2 35 CONTINUE RETURN END C C C C C SUBROUTINE INIT (ILU,IDVID,IPAS,IC1,IH1,IS1,IC2,IH2,IS2,ISPD,ID, CIBF1,NSCT,ISTAT),91711-1X108 REV.2001 790922 C C C C THIS SUBROUTINE WILL SEEK TO THE SPECIFIED IC1 IH1 IS1, DOES AN C ADDRESS RECORD WITH THE INPUT CYLINDER, INITIALIZE THE TRACK WITH THE C INPUT SPD BITS AND CHECK TO SEE THAT THE TRACK WAS INITIALIZED C PROPERLY. C C DIMENSION IBF1(160),ISTAT(2),ID(5) C C LEN=128 C C C IF IPAS=2 PERFORM ONLY READ AND CHRCK STATUS. C C IF(IPAS.EQ.2)GO TO 55 C C C C FILL UP THE BUFFER C DO 1 I=17,150 IBF1(I)=ISPD 1 CONTINUE C C C C C INITIALIZE NSCT SECTORS (ALL TRACK) C DO 2 I=1,NSCT CALL XSEEK(ILU,IDVID,IC1,IH1,IS1,ISTAT(1),ISTAT(2),IER) C C DSJ C IF(IER.NE.0)GO TO 25 CALL XADRC(ILU,IDVID,IC2,IH2,IS2,IER) C C DSJ C IF(IER.NE.0)GO TO 25 C C CALL XINIT(ILU,IDVID,IBF1,LEN,ISPD,ISTAT(1),ISTAT(2),IER) C C C C DSJ C IF(IER.NE.0)GO TO 25 C C GO TO NEXT SECTOR C IS1=IS1+1 IS2=IS2+1 2 CONTINUE C C C IS1=0 55 CALL XSEEK(ILU,IDVID,IC1,IH1,IS1,ISTAT(1),ISTAT(2),IER) C C DSJ C IF(IER.NE.0)GO TO 25 C C CALL XDRED(ILU,IDVID,IBF1,LEN,ISTAT(1),ISTAT(2),IER) C C STATUS C CALL DECST(ISTAT,ID) C IF(IPAS.EQ.2)GO TO 65 C C IF(ID(1).NE.ISPD)GO TO 45 C C 65 IPAS=0 GO TO 35 25 IPAS=1 GO TO 35 45 IPAS=2 35 CONTINUE RETURN END C C C C C SUBROUTINE FLMSK (ILU,IDVID,IPAS,IC,IH,IS,IBF1,ID,IMSK,LEN,IER +,IADR,ISTAT),91711-1X108 REV.2001 790922 C C C C C DIMENSION IBF1(160),ISTAT(2),ID(5) C C C C THIS SUBROUTINE WILL SET THE RIGHT FILE MASK AND PERFORM READ SECTOR. C IPAS AND STATUS WILL RETURN TO THE MAIN PROGRAM. C C SET FILE MASK C CALL XFMSK(ILU,IDVID,IMSK,IER) C C CALL DSTAT(ILU,IDVID,ISTAT,ID,IER) IF(IER.NE.0)GO TO 25 C C IF IPAS=2 SKIP THIS SECTION C IF(IPAS.EQ.2)GO TO 85 C SEEK C CALL XSEEK(ILU,IDVID,IC,IH,IS,ISTAT(1),ISTAT(2),IER) C C DSJ C IF(IER.NE.0)GO TO 25 C C READ LEN WORDS C C IF IPAS=4 DO A READ FULL SECTOR. C IF(IPAS.NE.4)GO TO 33 CALL XRDFS(ILU,IDVID,IBF1,140,ISTAT(1),ISTAT(2),IER) GO TO 44 C C IF IPAS#4 DO READ SECTOR C 33 CALL XDRED(ILU,IDVID,IBF1,LEN,ISTAT(1),ISTAT(2),IER) C C CHECK STATUS C 44 CALL DECST(ISTAT,ID) C C 85 IPAS=0 GO TO 35 25 IPAS=1 35 CONTINUE RETURN END C C C C C SUBROUTINE DSTAT(ILU,IDVID,ISTAT,ID,IER) +,91711-1X108 REV.2001 791017 C C THIS SUBROUTINE WILL CHECK HPIB DISC STATUS AND BREAK IT TO FIVE WORDS C AS EXPLAIN IN SUBROUTINE DECST. C DIMENSION ISTAT(2),ID(5) CALL XSTAT(ILU,IDVID,ISTAT(1),ISTAT(2),IER) CALL DECST(ISTAT,ID) RETURN END C C C C C C C C C C C SUBROUTINE MEST(ID,ILST,IPS1,ISTAT,IW37,IW38,IW45,IW44,IW39, +IW91,IW92,IW46,IW65,IW66,IW93,IW94,IW95,IW47,IW48,IW59) +,91711-1X108 REV.2001 791017 C C THIS SUBROUTINE WILL IDENNTIFY THE RIGHT ID(2) AND ID(5) OF THE C STATUS WORDS AND SEND THE RIGHT MESSAGE OUT TO THE TERMINAL. C C C DIMENSION IW37(17),IW38(12),IW45(19),IW44(14),IW39(19),IW91(22) DIMENSION IW92(20),IW46(15),IW65(14),IW66(14),IW93(17),IW94(19) DIMENSION IW95(19),IW47(16),IW48(18),IW59(24) DIMENSION ID(5),ISTAT(2) C C C DEFINE SPACE LINE. C C IW90=2H C C C CALL DECST(ISTAT,ID) C C IF(ID(2).EQ.0)GO TO 290 IF(ID(2).EQ.1)GO TO 300 IF(ID(2).EQ.3)GO TO 101 IF(ID(2).EQ.7)GO TO 103 IF(ID(2).EQ.10B)GO TO 104 IF(ID(2).EQ.11B)GO TO 105 IF(ID(2).EQ.12B)GO TO 106 IF(ID(2).EQ.13B)GO TO 107 IF(ID(2).EQ.14B)GO TO 108 IF(ID(2).EQ.16B)GO TO 109 IF(ID(2).EQ.20B)GO TO 310 IF(ID(2).EQ.21B)GO TO 111 IF(ID(2).EQ.22B)GO TO 112 IF(ID(2).EQ.23B)GO TO 113 IF(ID(2).EQ.26B)GO TO 114 IPS1=0 GO TO 999 C C C 290 CALL EXEC(2,200B+ILST,IW37,17) CALL EXEC(2,200B+ILST,IW38,12) CALL EXEC(2,200B+ILST,IW45,17) CALL EXEC(2,200B+ILST,IW44,14) CALL EXEC(2,200B+ILST,IW39,19) CALL EXEC(2,200B+ILST,IW90,1) IPS1=1 GO TO 999 C C 300 CALL EXEC(2,200B+ILST,IW37,17) CALL EXEC(2,200B+ILST,IW44,14) CALL EXEC(2,200B+ILST,IW91,22) CALL EXEC(2,200B+ILST,IW90,1) IPS1=1 GO TO 999 C C 101 CALL EXEC(2,200B+ILST,IW37,17) CALL EXEC(2,200B+ILST,IW44,14) CALL EXEC(2,200B+ILST,IW90,1) IPS1=1 GO TO 999 C C 103 CALL EXEC(2,200B+ILST,IW38,12) CALL EXEC(2,200B+ILST,IW39,19) CALL EXEC(2,200B+ILST,IW37,17) CALL EXEC(2,200B+ILST,IW44,14) CALL EXEC(2,200B+ILST,IW45,17) CALL EXEC(2,200B+ILST,IW92,20) CALL EXEC(2,200B+ILST,IW90,1) IPS1=1 GO TO 999 C C 104 CALL EXEC(2,200B+ILST,IW92,20) CALL EXEC(2,200B+ILST,IW44,14) CALL EXEC(2,200B+ILST,IW45,17) CALL EXEC(2,200B+ILST,IW46,15) CALL EXEC(2,200B+ILST,IW39,19) CALL EXEC(2,200B+ILST,IW38,12) CALL EXEC(2,200B+ILST,IW37,17) CALL EXEC(2,200B+ILST,IW65,14) CALL EXEC(2,200B+ILST,IW90,1) IPS1=1 GO TO 999 C C 105 CALL EXEC(2,200B+ILST,IW37,17) CALL EXEC(2,200B+ILST,IW45,17) CALL EXEC(2,200B+ILST,IW46,15) CALL EXEC(2,200B+ILST,IW39,19) CALL EXEC(2,200B+ILST,IW44,14) CALL EXEC(2,200B+ILST,IW38,12) CALL EXEC(2,200B+ILST,IW92,20) CALL EXEC(2,200B+ILST,IW90,1) IPS1=1 GO TO 999 C C 106 CALL EXEC(2,200B+ILST,IW44,14) CALL EXEC(2,200B+ILST,IW37,17) CALL EXEC(2,200B+ILST,IW91,22) CALL EXEC(2,200B+ILST,IW90,1) IPS1=1 GO TO 999 C C 107 CALL EXEC(2,200B+ILST,IW44,14) CALL EXEC(2,200B+ILST,IW45,17) CALL EXEC(2,200B+ILST,IW46,15) CALL EXEC(2,200B+ILST,IW37,17) CALL EXEC(2,200B+ILST,IW39,19) CALL EXEC(2,200B+ILST,IW38,12) CALL EXEC(2,200B+ILST,IW65,14) CALL EXEC(2,200B+ILST,IW66,14) CALL EXEC(2,200B+ILST,IW90,1) IPS1=1 GO TO 999 C C 108 CALL EXEC(2,200B+ILST,IW37,17) CALL EXEC(2,200B+ILST,IW44,14) CALL EXEC(2,200B+ILST,IW90,1) IPS1=1 GO TO 999 C C 109 CALL EXEC(2,200B+ILST,IW44,14) CALL EXEC(2,200B+ILST,IW91,22) CALL EXEC(2,200B+ILST,IW37,17) CALL EXEC(2,200B+ILST,IW90,1) IPS1=1 GO TO 999 C C 310 CALL EXEC(2,200B+ILST,IW93,17) CALL EXEC(2,200B+ILST,IW37,17) CALL EXEC(2,200B+ILST,IW44,14) CALL EXEC(2,200B+ILST,IW90,1) IPS1=1 GO TO 999 C C 111 CALL EXEC(2,200B+ILST,IW94,19) CALL EXEC(2,200B+ILST,IW37,17) CALL EXEC(2,200B+ILST,IW44,14) CALL EXEC(2,200B+ILST,IW90,1) IPS1=1 GO TO 999 C C 112 CALL EXEC(2,200B+ILST,IW39,19) CALL EXEC(2,200B+ILST,IW92,20) CALL EXEC(2,200B+ILST,IW39,19) CALL EXEC(2,200B+ILST,IW38,12) CALL EXEC(2,200B+ILST,IW45,17) CALL EXEC(2,200B+ILST,IW37,17) CALL EXEC(2,200B+ILST,IW44,14) CALL EXEC(2,200B+ILST,IW65,14) CALL EXEC(2,200B+ILST,IW90,1) IPS1=1 GO TO 999 C C 114 CALL EXEC(2,200B+ILST,IW95,19) CALL EXEC(2,200B+ILST,IW37,17) CALL EXEC(2,200B+ILST,IW44,14) CALL EXEC(2,200B+ILST,IW90,1) IPS1=1 GO TO 999 C C 113 IF(ID(5).EQ.1)GO TO 151 IF(ID(5).EQ.2)GO TO 151 IF(ID(5).EQ.3)GO TO 152 IF(ID(5).EQ.5)GO TO 153 IF(ID(5).EQ.6)GO TO 154 IF(ID(5).EQ.7)GO TO 155 IPS1=2 GO TO 999 C C 151 CALL EXEC(2,200B+ILST,IW37,17) CALL EXEC(2,200B+ILST,IW45,17) CALL EXEC(2,200B+ILST,IW38,12) CALL EXEC(2,200B+ILST,IW44,14) CALL EXEC(2,200B+ILST,IW39,19) CALL EXEC(2,200B+ILST,IW90,1) IPS1=1 GO TO 999 152 CALL EXEC(2,200B+ILST,IW37,17) CALL EXEC(2,200B+ILST,IW38,12) CALL EXEC(2,200B+ILST,IW39,19) CALL EXEC(2,200B+ILST,IW44,14) CALL EXEC(2,200B+ILST,IW45,17) CALL EXEC(2,200B+ILST,IW90,1) IPS1=1 GO TO 999 C C 153 CALL EXEC(2,200B+ILST,IW59,24) CALL EXEC(2,200B+ILST,IW90,1) IPS1=1 GO TO 999 C C 154 CALL EXEC(2,200B+ILST,IW47,16) CALL EXEC(2,200B+ILST,IW37,17) CALL EXEC(2,200B+ILST,IW44,14) CALL EXEC(2,200B+ILST,IW90,1) IPS1=1 GO TO 999 C C 155 CALL EXEC(2,200B+ILST,IW48,18) CALL EXEC(2,200B+ILST,IW37,17) CALL EXEC(2,200B+ILST,IW44,14) CALL EXEC(2,200B+ILST,IW90,1) IPS1=1 C C 999 CONTINUE RETURN END C C C C C SUBROUTINE LOPBK(ILU,IPAS,IADR,IBF),91711-1X108 REV.2001 790922 C C C THIS SUB WILL PERFORM LOOP BACK TEST. C IPAS=0 IF SUCCED. C DIMENSION IBF(35) C IT=440B+IADR CALL ODPAR(IT) IBF(1)=IT IBF(2)=100776B C C FILL UP THE BUFFER C J=1 DO 8 I=17,26 IBF(I)=2**J J=J+1 8 CONTINUE C C WRITE PART OF THE TEST C CALL EXEC(1,ILU+2200B,IBF,10,4,0) C C CHANGE THE BUFFER CONTENANT C DO 9 I=17,30 IBF(I)=50 9 CONTINUE C C READ PART OF TEST C IT=500B+IADR CALL ODPAR(IT) IBF(1)=IT CALL EXEC(1,ILU+2200B,IBF,8,3,0) C C CHECK READING DATA C J=1 DO 3 I=17,24 IB=2**J IF(IBF(I).NE.IB)GO TO 25 J=J+1 3 CONTINUE C IPAS=0 GO TO 35 25 IPAS=1 35 CONTINUE RETURN END C C C C C SUBROUTINE DID35(ILU,IDVID,IPAS,IC,IH,IS,ISTAT,IBF2) +,91711-1X108 REV.2001 791017 C C THIS SUBROUTINE WILL RESET FILE MASK TO CYL MODE NO AUTO SEEKS C AND DO A SECTOR WRITE . C C DIMENSION IBF2(150),ISTAT(2),ID(5) CALL XFMSK(ILU,IDVID,2,IER) CALL DSTAT(ILU,IDVID,ISTAT,ID,IER) IF(IER.NE.0)GO TO 25 DO 2 I=1,150 IBF2(I)=I 2 CONTINUE C CALL XSEEK(ILU,IDVID,IC,IH,IS,ISTAT(1),ISTAT(2),IER) IF(IER.NE.0)GO TO 25 C C CALL XDWRT(ILU,IDVID,IBF2,128,ISTAT(1),ISTAT(2),IER) IF(IER.NE.0)GO TO 25 C C IPAS=0 GO TO 35 25 IPAS=1 35 CONTINUE RETURN END C C C C C SUBROUTINE DID36 (ILU,IDVID,IPAS,IC,IH,IS,ISTAT,IBF2) +,91711-1X108 REV.2001 791017 C C THIS SUBROUTINE WILL READ THE SECTOR WAS WRITTEN IN "DID35" AND CHECK C FOR ERROR. C DIMENSION IBF2(150),ISTAT(2) C CALL XSEEK(ILU,IDVID,IC,IH,IS,ISTAT1,ISTAT2,IER) IF(IER.NE.0)GO TO 25 C C CALL XDRED(ILU,IDVID,IBF2,128,ISTAT1,ISTAT2,IER) IF(IER.NE.0)GO TO 25 C DO 4 J=17,144 IF(IBF2(J).NE.J)GO TO 45 4 CONTINUE C IPAS=0 GO TO 35 25 IPAS=1 GO TO 35 45 IPAS=2 35 CONTINUE RETURN END C C C C C SUBROUTINE DID40 (ILU,IDVID,IPAS,NCYL,ISTAT) +,91711-1X108 REV.2001 791017 C C THIS SUB WILL CHECK SEEK FOR INCREAMENTAL POWER OF 2. THIS CHECKS FOR C BAD BITS IN REGISTERS. C C DIMENSION ISTAT(2),ID(5) J=0 DO 15 I=1,11 CALL XSEEK(ILU,IDVID,J,0,0,ISTAT(1),ISTAT(2),IER) IF(IER.NE.0)GO TO 25 C C CALL XLGAD(ILU,IDVID,IC,IH,IS,IER) CALL DSTAT(ILU,IDVID,ISTAT,ID,IER) IF(IER.NE.0)GO TO 25 IF(IC.NE.J)GO TO 35 J=J*2 IF(J.EQ.0)J=1 IF(J.GT.NCYL)J=NCYL-1 15 CONTINUE IPAS=0 GO TO 45 25 IPAS=1 GO TO 45 35 IPAS=2 45 CONTINUE RETURN END C C C C C SUBROUTINE DID45 (ILU,IDVID,IPAS,IC,IH,IS,NSCT,ISTAT,IBF2) +,91711-1X108 REV.2001 791017 C C THIS SUB CHECK VERIFY FOR INCREASING POWER OF TWO NUMBER OF SECTORS. C C DIMENSION IBF2(150),ISTAT(2),ID(5) C C IF THIS IS A BAD TRACK, SKIP THIS TEST. C CALL XSEEK(ILU,IDVID,IC,IH,IS,ISTAT(1),ISTAT(2),IER) IF(IER.NE.0)GO TO 25 CALL XDRED(ILU,IDVID,IBF2,128,ISTAT(1),ISTAT(2),IER) CALL DECST(ISTAT,ID) IF(IAND(ID(1),1).NE.0)GO TO 35 C C J=1 DO 5 I=1,7 CALL XSEEK(ILU,IDVID,IC,IH,IS,ISTAT(1),ISTAT(2),IER) IF(IER.NE.0)GO TO 25 CALL XVRFY(ILU,IDVID,J,ISTAT(1),ISTAT(2),IER) IF(IER.NE.0)GO TO 25 J=J*2 IF(J.GT.NSCT)J=NSCT-1 5 CONTINUE 35 IPAS=0 GO TO 65 25 IPAS=1 65 CONTINUE RETURN END C C C C C SUBROUTINE DID50 (ILU,IDVID,IPAS,IADR,IBF) +,91711-1X108 REV.2001 791017 C C TEST FOR ILLEGAL OPCODE C DIMENSION IBF(20),ISTAT(2),ID(5) C C IT=440B+IADR CALL ODPAR(IT) IBF(1)=IT IBF(2)=550B C C IBF(3) IS THE ILLEGAL OPCODE C IBF(3)=21B IBF(4)=1000B IBF(5)=100677B C C CALL EXEC(2,ILU+2200B,IBF,16,1,0) C C CALL STATUS C CALL XSTAT(ILU,IDVID,ISTAT(1),ISTAT(2),IER) C IF(IER.NE.0)GO TO 25 CALL DECST(ISTAT,ID) IF(ID(2).NE.1)GO TO 25 IPAS=0 GO TO 35 25 IPAS=1 35 CONTINUE RETURN END C C C C C SUBROUTINE FMSCP(ILU,IDVID,IPAS,IC1,IH1,IS1,IC2,IH2,IS2,NSCT +,ISTAT,IBF1),91711-1X108 REV.2001 790922 C C THIS SUBROUTINE WILL SEEK TO IC1,IH1 AND IS1=0 C READ FULL SECTOR FOR ONE SECTOR. WRITE FULL SECTOR AT IC2,IH2,IS1=0 C SEEK TO SAME LOCATION BUT IS2=1,AND READ A SECTOR.CHECK FOR CYL C MISCOMPARE STATUS. REINITIALIZE IC2. C IF IPAS=10B INDUCE AN ERROR AND CHECK FOR STATUS. C C DIMENSION IBF1(160),ISTAT(2),ID(5) C C CALL XSEEK(ILU,IDVID,IC1,IH1,IS1,ISTAT(1),ISTAT(2),IER) IF(IER.NE.0)GO TO 25 CALL XRDFS(ILU,IDVID,IBF1,138,ISTAT(1),ISTAT(2),IER) IF(IER.NE.0)GO TO 25 IF(IPAS.NE.10B)GO TO 40 IBF1(20)=IBF1(20)+5 40 CALL XSEEK(ILU,IDVID,IC2,IH2,IS2,ISTAT(1),ISTAT(2),IER) IF(IER.NE.0)GO TO 25 CALL XWRFS(ILU,IDVID,IBF1,138,ISTAT(1),ISTAT(2),IER) IF(IER.NE.0)GO TO 25 IF(IPAS.EQ.10B)GO TO 30 IS2=IS2+1 30 CALL XSEEK(ILU,IDVID,IC2,IH2,IS2,ISTAT(1),ISTAT(2),IER) IF(IER.NE.0)GO TO 25 CALL XDRED(ILU,IDVID,IBF1,128,ISTAT(1),ISTAT(2),IER) CALL DECST(ISTAT,ID) IF(ID(2).NE.IPAS)GO TO 45 IPAS1=0 GO TO 35 25 IPAS1=1 GO TO 35 45 IPAS=2 35 CONTINUE IS2=0 ISPD=0 CALL INIT(ILU,IDVID,IPAS,IC2,IH2,IS2,IC2,IH2,IS2,ISPD,ID,IBF1, +NSCT) C IPAS=IPAS1 C RETURN END C C C C C SUBROUTINE DID56(ILU,IDVID,IPAS,IADR,IBF) +,91711-1X108 REV.2001 791017 C C THIS SUB WILL SEND A LISTEN COMMAND WITH AN ILLEGAL SECONDARY. CHECK C FOR I/O PROGRAM ERROR STATUS. C C DIMENSION IBF(20),ISTAT(2),ID(5) C C IT=440B+IADR CALL ODPAR(IT) IBF(1)=IT IBF(2)=550B C C IBF(3) AND IBF(4) IS ILLEGAL SECONDARIES C IBF(3)=22B IBF(4)=1002B IBF(5)=100677B C C SEND IT OUT. C CALL EXEC(2,ILU+2200B,IBF,5,1,0) C C CALL STATUS C CALL XSTAT(ILU,IDVID,ISTAT(1),ISTAT(2),IER) IF(IER.NE.0)GO TO 25 CALL DECST(ISTAT,ID) IF(ID(2).NE.12B)GO TO 25 IPAS=0 GO TO 35 25 IPAS=1 35 CONTINUE RETURN END C C C C C C SUBROUTINE DID57 (ILU,IDVID,IPAS,IADR,IBF) +,91711-1X108 REV.2001 791017 C C SEND GET COMMAND WITH AN ILLEGAL SECONDARY. CHECK FOR I/O C PROGRAM ERROR STATUS. C DIMENSION IBF(20),ISTAT(2),ID(5) C C IT=440B+IADR CALL ODPAR(IT) IBF(1)=IT IBF(2)=500B C C IBF(3) IS ILLEGAL SECONDARY. C IBF(3)=100740B C C SEND BUFFER OUT. C CALL EXEC(1,ILU+2200B,IBF,3,1,0) C C CALL STATUS C CALL XSTAT(ILU,IDVID,ISTAT(1),ISTAT(2),IER) IF(IER.NE.0)GO TO 25 CALL DECST(ISTAT,ID) IF(ID(2).NE.12B)GO TO 25 IPAS=0 GO TO 35 25 IPAS=1 35 CONTINUE RETURN END C C C C C SUBROUTINE SKER(ILU,IDVID,IPAS,IC,IH,IS) +,91711-1X108 REV.2001 791017 C C THIS SUB CHECK IF BIT OF STATUS WORD 2 IS SET AND IF IDC STATUS IS C STAT-2 ERROR. C C DIMENSION ISTAT(2),ID(5) C CALL XSEEK(ILU,IDVID,IC,IH,IS,ISTAT(1),ISTAT(2),IER) CALL DECST(ISTAT,ID) IF(ID(2).NE.23B)GO TO 25 ID5=IAND(ID(5),4) IF(ID5.EQ.0)GO TO 25 IPAS=0 GO TO 35 25 IPAS=1 35 CALL XSEEK(ILU,IDVID,5,1,20,ISTAT1,ISTAT2,IER) RETURN END C C C C C C SUBROUTINE RESTH(ILU,IDVID,IPAS,IC,IH,IS,ID,ISTAT,IBF1) +,91711-1X108 REV.2001 790922 C C THIS SUBROUTINE WILL SEEK TO IC,IH,IS . IF IPAS=2 IT C WILL READ A SECTOR AND WRITE THE SECTOR BACK TO THE SAME C LOCATION. C IF IPAS=3 IT WILL DO THE SAME BUT WITH FULL SECTOR. C C IF IPAS=4 IT WILL DO INTIALIZATION. C C C C DIMENSION ISTAT(2),ID(5),IBF1(160) C C CALEAN UP THE BUFFER C DO 5 I=1,160 IBF1(I)=0 5 CONTINUE C C C CALL XSEEK(ILU,IDVID,IC,IH,IS,ISTAT(1),ISTAT(2),IER) C C IF(IER.NE.0)GO TO 25 C CALL DECST(ISTAT,ID) C C IF(IPAS.EQ.2)GO TO 45 IF(IPAS.EQ.3)GO TO 55 IF(IPAS.EQ.4)GO TO 75 GO TO 35 C C 45 CALL XDRED(ILU,IDVID,IBF1,128,ISTAT(1),ISTAT(2),IER) IF(IER.NE.0)GO TO 25 C CALL XSEEK(ILU,IDVID,IC,IH,IS,ISTAT(1),ISTAT(2),IER) IF(IER.NE.0)GO TO 25 CALL XDWRT(ILU,IDVID,IBF1,128,ISTAT(1),ISTAT(2),IER) CALL DECST(ISTAT,ID) GO TO 35 C C 55 CALL XRDFS(ILU,IDVID,IBF1,138,ISTAT(1),ISTAT(2),IER) IF(IER.NE.0)GO TO 25 CALL XSEEK(ILU,IDVID,IC,IH,IS,ISTAT(1),ISTAT(2),IER) IF(IER.NE.0)GO TO 25 CALL XWRFS(ILU,IDVID,IBF1,138,ISTAT(1),ISTAT(2),IER) CALL DECST(ISTAT,ID) GO TO 35 C C 75 ISPD=0 CALL XINIT(ILU,IDVID,IBF1,128,ISPD,ISTAT(1),ISTAT(2),IER) CALL DECST(ISTAT,ID) 35 IPAS=0 GO TO 65 25 IPAS=1 65 CONTINUE RETURN END C C C C C C SUBROUTINE INBA(IR),91711-1X108 REV.2001 790922 C C C THIS SUB WILL INPUT TWO ASCII CHARACTER AND CONVERT THEM TO C BINARRY. THE BINARRY VALUE WILL BE IN IR. C C CALL EXEC(1,401B,IK,-2) CALL ABREG(IA,IB) IK1=IAND(7B,IK) IK2=IK/32 IK2=IAND(70B,IK2) IR=IK1+IK2 IF(IB.EQ.1)IR=IK2/8 RETURN END C C C C C C SUBROUTINE INDC(IK,IR),91711-1X108 REV.2001 791105 C C CHANGE MADE 791105 TO CORRECT THE PART NUMBER ONLY C C THIS SUB WILL INPUT UP-TO FOUR ASCII CHARACTERS AND CONVERT C THEM TO BINARRY. THE BINARRY VALUE WILL BE IN IK. C C DIMENSION IR(2) C C CALL EXEC(1,401B,IR,-4) CALL ABREG(IA,IB) C C IR1=IAND(77B,IR(2)) IR1=IR1-60B C IR2=IR(2)/256 IR2=IAND(77B,IR2) IR2=(IR2-60B)*10 C IR3=IAND(77B,IR(1)) IR3=(IR3-60B)*100 C IR4=IR(1)/256 IR4=IAND(77B,IR4) IR4=(IR4-60B)*1000 C IK=IR1+IR2+IR3+IR4 C IF(IB.EQ.3)IK=(IR2+IR3+IR4)/10 IF(IB.EQ.2)IK=(IR3+IR4)/100 IF(IB.EQ.1)IK=IR4/1000 C RETURN END END$