FTN4,L C********************************************************************* C C DISC LIBRARY C C********************************************************************* C NAME: DKLIB C SOURCE: 92070-18089 C RELOC: 92070-16089 C PGMR: WWL C 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 C SUBROUTINE XDSJ (LU,DVID,DSJ), 92070-16089 REV.1941 790920 IMPLICIT INTEGER (A-Z) INTEGER IARY(5) DATA DSJ2/160B/ CALL EXEC (1,120100B+LU,DSJ,-1,DSJ2,0) RETURN END C SUBROUTINE XFMSK (LU,DVID,MSK,IER) IMPLICIT INTEGER (A-Z) INTEGER IARY(5) DATA SGC/150B/,FMOP/7400B/ CMD=IOR(FMOP,MSK) CALL EXEC (2,120100B+LU,CMD,-2,SGC,0) CALL RMPAR (IARY) IER=0 IF (IAND(IARY(1),77B) .NE. 0) IER=1 IF (IAND(IARY(1),77B) .EQ. 3) IER=4 RETURN END C SUBROUTINE XSTAT (LU,DVID,S1,S2,IER) IMPLICIT INTEGER (A-Z) INTEGER IARY(5),BUF(2) DATA STOP/1400B/,STAT2/150B/ BUF(1)=IOR(STOP,IAND(DVID,177400B)/256) CALL EXEC (2,120100B+LU,BUF,-2,STAT2,0) CALL EXEC (1,120100B+LU,BUF,-4,STAT2,0) CALL RMPAR (IARY) IER=0 ERCODE=IAND(IARY(1),77B) IF (ERCODE .EQ. 3) IER=4 S1=BUF(1) S2=BUF(2) RETURN END C SUBROUTINE XSEEK (LU,DVID,CYL,HEAD,SECTR,S1,S2,IER) IMPLICIT INTEGER (A-Z) INTEGER BUF(3),IARY(5) DATA SEKOP/1000B/,SGC/150B/,DSJ2/160B/ BUF(1)=IOR(SEKOP,IAND(DVID,177400B)/256) BUF(2)=CYL BUF(3)=IOR(HEAD*256,SECTR) CALL EXEC (2,120100B+LU,BUF,-6,SGC,0) CALL EXEC (1,120100B+LU,DSJ,-1,DSJ2,0) CALL RMPAR (IARY) ERCODE=IAND(IARY(1),77B) IER=4 IF (ERCODE .EQ. 3) RETURN IF (DSJ .NE. 0) GO TO 20 S1=0 S2=0 GO TO 50 20 CALL XSTAT (LU,DVID,S1,S2,IR) 50 IER=IAND(DSJ,177400B)/256 RETURN END C SUBROUTINE XDRED (LU,DVID,BUF,LEN,S1,S2,IER) IMPLICIT INTEGER (A-Z) INTEGER IARY(5),BUF(144) DATA SGC/150B/,SRD/140B/,DSJ2/160B/,RDOP/2400B/ CMD=IOR(RDOP,IAND(DVID,177400B)/256) CALL EXEC (2,120100B+LU,CMD,-2,SGC,0) CALL EXEC (1,120100B+LU,BUF(17),LEN,SRD,0) CNT=10 10 CALL EXEC (1,120100B+LU,DSJ,-1,DSJ2,0) CALL RMPAR (IARY) ERCODE=IAND(IARY(1),77B) IF (ERCODE .NE. 3) GO TO 50 CNT=CNT-1 IF (CNT .GT. 0) GO TO 10 IER=4 S1=0 S2=0 RETURN 50 CALL XSTAT (LU,DVID,S1,S2,IR) IER=IAND(DSJ,177400B)/256 RETURN END C SUBROUTINE XRDFS (LU,DVID,BUF,LEN,S1,S2,IER) IMPLICIT INTEGER (A-Z) INTEGER BUF(154),IARY(5) DATA SGC/150B/,SRD/140B/,RFSOP/3000B/,DSJ2/160B/ CMD=IOR(RFSOP,IAND(DVID,177400B)/256) CALL EXEC (2,120100B+LU,CMD,-2,SGC,0) CALL EXEC (1,120100B+LU,BUF(17),LEN,SRD,0) CNT=10 10 CALL EXEC (1,120100B+LU,DSJ,-1,DSJ2,0) CALL RMPAR (IARY) ERCODE=IAND(IARY(1),77B) IF (ERCODE .NE. 3) GO TO 50 CNT=CNT-1 IF (CNT .GT. 0) GO TO 10 IER=4 S1=0 S2=0 RETURN 50 CALL XSTAT (LU,DVID,S1,S2,IR) IER=IAND(DSJ,177400B)/256 RETURN END C SUBROUTINE XRDOF (LU,DVID,BUF,LEN,OFSET,S1,S2,IER) IMPLICIT INTEGER (A-Z) INTEGER CMD(2),IARY(5),BUF(144) DATA SGC/150B/,SRD/140B/,RDOP/7000B/,DSJ2/160B/ CMD(1)=RDOP CMD(2)=OFSET CALL EXEC (2,120100B+LU,CMD,-4,SGC,0) CALL EXEC (1,120100B+LU,BUF(17),LEN,SRD,0) CNT=10 10 CALL EXEC (1,120100B+LU,DSJ,-1,DSJ2,0) CALL RMPAR (IARY) ERCODE=IAND(IARY(1),77B) IF (ERCODE .NE. 3) GO TO 50 CNT=CNT-1 IF (CNT .GT. 0) GO TO 10 IER=4 S1=0 S2=0 RETURN 50 CALL XSTAT (LU,DVID,S1,S2,IR) IER=IAND(DSJ,177400B)/256 RETURN END C SUBROUTINE XRDNV (LU,DVID,BUF,LEN,S1,S2,IER) IMPLICIT INTEGER (A-Z) INTEGER IARY(5),BUF(128) DATA SGC/150B/,SRD/140B/,DSJ2/160B/,RNVOP/11000B/ CMD=IOR(RNVOP,IAND(DVID,177400B)/256) CALL EXEC (2,120100B+LU,CMD,-2,SGC,0) CALL EXEC (1,120100B+LU,BUF(17),LEN,SRD,0) CNT=10 10 CALL EXEC (1,120100B+LU,DSJ,-1,DSJ2,0) CALL RMPAR (IARY) ERCODE=IAND(IARY(1),77B) IF (ERCODE .NE. 3) GO TO 50 CNT=CNT-1 IF (CNT .GT. 0) GO TO 10 IER=4 S1=0 S2=0 RETURN 50 CALL XSTAT (LU,DVID,S1,S2,IR) IER=IAND(DSJ,177400B)/256 RETURN END C SUBROUTINE XVRFY (LU,DVID,SCNT,S1,S2,IER) IMPLICIT INTEGER (A-Z) INTEGER BUF(2),IARY(5) DATA VFYOP/3400B/,SGC/150B/,DSJ2/160B/ BUF(1)=IOR(VFYOP,IAND(DVID,177400B)/256) BUF(2)=SCNT CALL EXEC (2,120100B+LU,BUF,-4,SGC,0) CALL EXEC (1,120100B+LU,DSJ,-1,DSJ2,0) CALL RMPAR (IARY) ERCODE=IAND(IARY(1),77B) IF (ERCODE .NE. 3) GO TO 50 IER=4 S1=0 S2=0 RETURN 50 CALL XSTAT (LU,DVID,S1,S2,IR) IER=IAND(DSJ,177400B)/256 RETURN END C SUBROUTINE XRCAL (LU,DVID,IER) IMPLICIT INTEGER (A-Z) INTEGER IARY(5) DATA SGC/150B/,RCLOP/400B/ CALL EXEC (2,120100B+LU,RCLOP,-2,SGC,0) CALL RMPAR (IARY) IER=0 IF (IAND(IARY(1),77B) .NE. 0) IER=1 IF (IAND(IARY(1),77B) .EQ. 3) IER=4 RETURN END C SUBROUTINE XDWRT (LU,DVID,BUF,LEN,S1,S2,IER) IMPLICIT INTEGER (A-Z) INTEGER IARY(5),BUF(144) DATA SGC/150B/,SWD/140B/,WROP/4000B/,DSJ2/160B/ CMD=IOR(WROP,IAND(DVID,177400B)/256) CALL EXEC (2,120100B+LU,CMD,-2,SGC,0) CALL EXEC (2,120100B+LU,BUF(17),LEN,SWD,0) CNT=10 10 CALL EXEC (1,120100B+LU,DSJ,-1,DSJ2,0) CALL RMPAR (IARY) ERCODE=IAND(IARY(1),77B) IF (ERCODE .NE. 3) GO TO 50 CNT=CNT-1 IF (CNT .GT. 0) GO TO 10 IER=4 S1=0 S2=0 RETURN 50 CALL XSTAT (LU,DVID,S1,S2,IR) IER=IAND(DSJ,177400B)/256 RETURN END C SUBROUTINE XFRMT (LU,DVID,PATRN,TYPE,STAGR,IER) IMPLICIT INTEGER (A-Z) INTEGER IARY(5),BUF(3) DATA FMTOP/14000B/,FMT2/154B/,DSJ2/160B/ BUF(1)=IOR(FMTOP,IAND(DVID,177400B)/256) BUF(2)=(TYPE*256)+STAGR BUF(3)=PATRN CALL EXEC (2,120100B+LU,BUF,-5,FMT2,0) CALL EXEC (1,120100B+LU,DSJ,-1,DSJ2,0) CALL RMPAR (IARY) IF (IAND(IARY(1),77B) .NE. 3) GO TO 50 IER=4 RETURN 50 IER=IAND(DSJ,177400B)/256 RETURN END C SUBROUTINE XINIT (LU,DVID,BUF,LEN,SPD,S1,S2,IER) IMPLICIT INTEGER (A-Z) INTEGER IARY(5),BUF(144) DATA INTOP/5400B/,SGC/150B/,SWD/140B/,DSJ2/160B/ DMY=IOR(INTOP,IAND(DVID,177400B)/256) DMY=IOR(SPD*8192,DMY) CALL EXEC (2,120100B+LU,DMY,-2,SGC,0) CALL EXEC (2,120100B+LU,BUF(17),LEN,SWD,0) CALL EXEC (1,120100B+LU,DSJ,-1,DSJ2,0) CALL RMPAR (IARY) ERCODE=IAND(IARY(1),77B) IF (ERCODE .NE. 3) GO TO 50 IER=4 S1=0 S2=0 RETURN 50 CALL XSTAT (LU,DVID,S1,S2,IR) IER=IAND(DSJ,177400B)/256 RETURN END C SUBROUTINE XWRFS (LU,DVID,BUF,LEN,S1,S2,IER) IMPLICIT INTEGER (A-Z) INTEGER BUF(154),IARY(5) DATA SGC/150B/,SWD/140B/,WFSOP/4400B/,DSJ2/160B/ CMD=IOR(WFSOP,IAND(DVID,177400B)/256) CALL EXEC (2,120100B+LU,CMD,-2,SGC,0) CALL EXEC (2,120100B+LU,BUF(17),LEN,SWD,0) CNT=10 10 CALL EXEC (1,120100B+LU,DSJ,-1,DSJ2,0) CALL RMPAR (IARY) ERCODE=IAND(IARY(1),77B) IF (ERCODE .NE. 3) GO TO 50 CNT=CNT-1 IF (CNT .GT. 0) GO TO 10 IER=4 S1=0 S2=0 RETURN 50 CALL XSTAT (LU,DVID,S1,S2,IR) IER=IAND(DSJ,177400B)/256 RETURN END C SUBROUTINE XPHAD (LU,DVID,CYL,HEAD,SECTR,IER) IMPLICIT INTEGER (A-Z) INTEGER BUF(2),IARY(5) DATA PADOP/12000B/,CMD2/150B/,RD2/150B/ BUF(1)=PADOP BUF(2)=0 CALL EXEC (2,120100B+LU,BUF,-2,CMD2,0) CALL EXEC (1,120100B+LU,BUF,-4,RD2,0) CALL RMPAR (IARY) ERCODE=IAND(IARY(1),77B) IER=4 IF (ERCODE .EQ. 3) RETURN CYL=BUF(1) HEAD=BUF(2)/256 SECTR=IAND(BUF(2),377B) IER=0 RETURN END C SUBROUTINE XADRC (LU,DVID,CYL,HEAD,SECTR,IER) IMPLICIT INTEGER (A-Z) INTEGER IARY(5),BUF(3) DATA ADRC2/150B/,ADROP/6000B/ BUF(1)=ADROP BUF(2)=CYL BUF(3)=IOR(HEAD*256,SECTR) CALL EXEC (2,120100B+LU,BUF,-6,ADRC2,0) CALL RMPAR (IARY) ERCODE=IAND(IARY(1),77B) IER=0 IF (ERCODE .EQ. 3) IER=4 RETURN END C SUBROUTINE XLGAD (LU,DVID,CYL,HEAD,SECTR,IER) IMPLICIT INTEGER (A-Z) INTEGER IARY(5),BUF(3) DATA GTAD2/150B/,LADOP/12000B/ BUF(1)=LADOP CALL EXEC (2,120100B+LU,BUF,-2,GTAD2,0) CALL EXEC (1,120100B+LU,BUF,-4,GTAD2,0) CALL RMPAR (IARY) IF (IAND(IARY(1),77B) .EQ. 3) GO TO 10 IER=0 CYL=BUF(1) HEAD=IAND(BUF(2),17400B)/256 SECTR=IAND(BUF(2),377B) RETURN 10 IER=4 RETURN END C SUBROUTINE XIDEN (LU,DVID,ID) IMPLICIT INTEGER (A-Z) RETURN END C SUBROUTINE XEND (LU,DVID) IMPLICIT INTEGER (A-Z) DATA SGC/150B/,ENDOP/12400B/ CALL EXEC (2,120100B+LU,ENDOP,-2,SGC,0) RETURN END C SUBROUTINE XSPAR (LU,STRAK,IER) IMPLICIT INTEGER (A-Z) INTEGER DP(8),BUF(17) CALL EXEC (13,10000B+LU,P1,P2,DP,8) NSPARS=DP(5) IF (NSPARS .EQ. 0) GO TO 50 CNT=0 STRAK=DP(6) 10 CALL XGTAD (LU,DVID,STRAK,SECT,CYL,HEAD,SECT) CALL XSEEK (LU,DVID,CYL,HEAD,SECT,S1,S2,IER) IF (IER .EQ. 4) RETURN CALL XDRED (LU,DVID,BUF(1),1,S1,S2,IER) IF (IER .EQ. 4) RETURN IDCST=IAND(S1,17400B)/256 IF (IDCST .EQ. 20B) GO TO 30 IDCST=IAND(S1,120000B) IF (IDCST .EQ. 0) RETURN 30 CNT=CNT+1 STRAK=STRAK+1 IF (CNT .LT. NSPARS) GO TO 10 50 IER=1 RETURN END C SUBROUTINE XGTAD (LU,DVID,TRACK,SECT1,CYL,HEAD,SECT2) IMPLICIT INTEGER (A-Z) INTEGER DP(8) EQUIVALENCE (DVAD,DP(1)),(UNIT,DP(2)),(SHED,DP(3)),(SCYL,DP(4)) EQUIVALENCE (NHEDS,DP(8)) CALL XTTBL (LU,DP) HEAD=SHED+MOD(TRACK,NHEDS) CYL=(TRACK/NHEDS)+SCYL DVID=(UNIT*256)+DVAD SECT2=SECT1/2 RETURN END C SUBROUTINE XTTBL (LU,DP) IMPLICIT INTEGER (A-Z) INTEGER DP(8) C C THIS SUBROUTINE RETURNS DISC DRIVER PARAMETERS AS FOLLOWS: C C DP(1) = HP-IB ADDRESS C DP(2) = UNIT NUMBER C DP(3) = STARTING HEAD C DP(4) = STARTING CYLINDER C DP(5) = NUMBER OF SPARES THIS LU C DP(6) = NUMBER OF TRACKS THIS LU C DP(7) = NUMBER OF SECTORS/TRACK C DP(8) = NUMBER OF SURFACES (OR HEADS) C CALL EXEC (13,10000B+LU,P1,P2,DP,8) RETURN END END$