SUBROUTINE BLOCKS(MUIC,MBLKS,DEV,INDEXF) C.. BOHDEN K. CMAYLO, GETS BLOCKS FOR UIC COMMON/XBLOCK/NBIT,IFHIBK,IFEFBK DIMENSION MUIC(2),MBLKS(2,3) BYTE DEV(5) C.. BYTE INUIC(9),NAME(20),NAME2(7),INPUT(512) DIMENSION IERR(2),INPUTW(256),INPUTB(256) EQUIVALENCE (INPUT,INPUTW),(NAME(14),NAME2) C.. C.. OPEN SUCC, INPUTW(1)=0 C.. INPUTW C.. 1...0 C.. 1...EOF BLOCKS = MBLKS(*,2) C.. 2...ALLOCATED BLOCKS = MBLKS(*,3) C.. ...NUMBER OF FILES = MBLKS(*,1) C.. 4...FDB OFFSET (BYTES) C.. 5...HI BLOCK OFFSET (BYTES) C.. 6...EOF BLOCK OFFSET (BYTES) C.. C.. INDEXF C.. 0 = REGULAR OPEN/ENTRY, CLOSE/EXIT C.. 1 = OPEN/ENTRY, DO NOT CLOSE, INDEXF SET TO 2 C.. 2 = PREVIOUSLY OPENED, DO NOT OPEN C.. 3 = PREVIOUSLY OPENED, CLOSE/ENTRY, OPEN NEW, INDEXF SET TO 2 C.. CALL DOWORD(MBLKS(1,1),MBLKS(2,3),0) ENCODE(12,14,NAME)MUIC(1),MUIC(2) 14 FORMAT(2O3,'.DIR;1') ENCODE(9,9,INUIC)MUIC(1),MUIC(2) 9 FORMAT('[',O3,',',O3,']') DO 15 I=1,9 IF(I.LE.6.AND.NAME(I).EQ.' ') NAME(I)='0' IF(INUIC(I).EQ.' ') INUIC(I)='0' 15 CONTINUE C.. C.. OPEN INDEXF.SYS FILE FOR GENERAL READING C.. IF(INDEXF.EQ.3) GO TO 333 IF(INDEXF.EQ.2) GO TO 337 335 CALL OPENR2(INPUTB,DEV,5,'[000,000]',9,'INDEXF.SYS',10) C.. CHECK IF TO KEEP OPEN IF(INDEXF.EQ.1) INDEXF=2 C.. INPUTB(4)=H.UFAT (FDB OFFSET) C.. INPUTB(5)=F.HIBK (HIGH BLOCK COUNT OFFSET) C.. INPUTB(6)=F.EFBK (EOF BLOCK OFFSET) IFHIBK=INPUTB(4)+INPUTB(5) IFEFBK=INPUTB(4)+INPUTB(6) IFHIBK=IFHIBK/2+1 IFEFBK=IFEFBK/2+1 CALL WORDDO(IERR,IERR(2),INPUTB) IF(IERR(1).NE.0) GO TO 199 C.. C.. READ IN INDEXF BITMAP NUMBER OF BLOCKS C.. CALL READ2(IERR,2) IF(IERR(1).NE.0) GO TO 199 NBIT=INPUTB(1)+2 C.. C.. OPEN USER FILE FOR INFO C.. 337 CALL OPENR1(INPUT,DEV,5,'[000,000]',9,NAME,12) MBLOCK=INPUTW(2) DO 1 IBLOCK=1,MBLOCK JBLOCK=IBLOCK CALL READ1(IERR,JBLOCK) IF(IERR(1).NE.0) GO TO 99 C.. C.. READ IN BLOCK INFO FROM A USER FILE C.. DO 16 I=1,256,8 INW=INPUTW(I) IF(INW.LE.1) GO TO 161 C..GET VIRT BLOCK OF FILE HEADER INBL=NBIT+INW C..READ USER HEADER BLOCK CALL READ2(IERR,INBL) C.. GET BLOCK COUNTS INCLUDING HI BLOCK (2**16=32768) MBLKS(1,3)=MBLKS(1,3)+INPUTB(IFHIBK)*32 MAXA=INPUTB(IFHIBK)*768+INPUTB(IFHIBK+1) MBLKS(1,2)=MBLKS(1,2)+INPUTB(IFEFBK)*32 MAXE=INPUTB(IFEFBK)*768+INPUTB(IFEFBK+1) C.. C.. COUNT UP USER FILE C.. 162 MBLKS(2,1)=MBLKS(2,1)+1 IF(MAXE.GT.MAXA) MAXE=MAXE-1 IF(MAXE.LT.0) MAXE=0 CALL DEV000(MBLKS(1,3),MBLKS(2,3),MAXA) CALL DEV000(MBLKS(1,2),MBLKS(2,2),MAXE) GO TO 16 C.. NOTHING OR INDEXF.SYS PROCESSING 161 IF(INW.EQ.0) GO TO 16 C.. INDEXF.SYS FILE, WORD 53, VIRT BLOCK NBIT+2 = SIZE C..***NOTE*** DO NOT KNOW OFFSETS *** INBL=NBIT+2 CALL READ2(IERR,INBL) MAXA=INPUTB(53) MAXE=INPUTB(53) GO TO 162 16 CONTINUE 1 CONTINUE 99 CALL CLOSR1(IERR) C.. CLOSE INDEXF FILE IF(INDEXF.EQ.0) CALL CLOSR2(IERR) RETURN C.. CHANGE INDEXF TO OPEN NEW INDEXF FILE 333 INDEXF=1 CALL CLOSR2(IERR) GO TO 335 199 TYPE 299,IERR 299 FORMAT(' IERR=',2O7) GO TO 99 END