CONSTSTRING (13) VSN="23 FEB 79   3"
EXTERNALINTEGERFNSPEC  DFINFO(STRING (6) USER, STRING (15) FILE, C 
   INTEGER  FSYS,ADR)
EXTERNALSTRINGFNSPEC  DERRS(INTEGER  N)
EXTERNALINTEGERFNSPEC  DPERMISSION(STRING (6) OWNER,USER,  C 
   STRING (8) DATE,STRING (15) FILE, INTEGER  FSYS,TYPE,ADRPRM)
EXTERNALINTEGERFNSPEC  DCONNECT(STRING (6) USER,  C 
   STRING (15) FILE,INTEGER  FSYS,MODE,APF,INTEGERNAME  SEG,GAP)
EXTERNALINTEGERFNSPEC  DDISCONNECT(STRING (6) USER, C 
   STRING (15) FILE,INTEGER  FSYS,DSTRY)
EXTERNALROUTINESPEC  RDINT(INTEGERNAME  I)
EXTERNALINTEGERFNSPEC  DGETDA(STRING (6) USER,STRING (15) FILE, C 
   INTEGER  FSYS,ADR)
EXTERNALINTEGERFNSPEC  DFILENAMES(STRING (6) USER,RECORDARRAYNAME  C 
   INF,INTEGERNAME  FILENO,MAXREC,NFILES,INTEGER  FSYS,TYPE)
EXTERNALROUTINESPEC  GET AV FSYS(INTEGERNAME  N,INTEGERARRAYNAME  A)
EXTERNALINTEGERFNSPEC  GET USNAMES(INTEGERNAME  N, C 
      INTEGER  ADR,FSYS)
EXTERNALROUTINESPEC  PROMPT(STRING (15) S)
EXTERNALROUTINESPEC  RSTRG(STRINGNAME  S)
RECORDFORMAT  OINFF(STRING (11) NAME,INTEGER  SP12,NKB,  C 
   BYTEINTEGER  ARCH,CODES,  C 
   CCT,OWNP,EEP,USE,CODES2,SSBYTE,FLAGS,SP29,SP30,SP31)
ROUTINE  UDERRS(INTEGER  N)
      PRINTSTRING("FLAG =")
      PRINTSTRING(DERRS(N))
      NEWLINE
      END ; ! UDERRS
EXTERNALROUTINE  WHAT FILE(STRING (255) S)
INTEGER  FROMREC,NGIVEN
INTEGER  FSYS,J,I,N,UX,SX,DA,PGNO,LEN,NFILES,FX,USERS
STRING (31) FILE,USER
INTEGERARRAY  A(0:99)
STRING (6)ARRAY  U(0:399)
RECORDARRAY  FLIS(0:255)(OINFF)
!
RECORDFORMAT  DAF(INTEGER  SECTSI,NSECTS,LASTSECT,SP, C 
   INTEGERARRAY  DA(0:255))
RECORD  DAAREA(DAF)
!
      PROMPT("FSYS (OR -1): ")
      RDINT(FSYS)
      PROMPT("PGNO: ")
      RDINT(PGNO)
      GET AV FSYS(N,A)
      IF  FSYS>=0 START 
         CYCLE  J=0,1,N-1
            IF  A(J)=FSYS START 
               A(0)=FSYS
               N=1
               -> OK
               FINISH 
            REPEAT 
         PRINTSTRING("FSYS N/A
")
         RETURN 
      FINISH 
OK:
      CYCLE  J=0,1,N-1
         FSYS=A(J)
         PRINTSTRING("FSYS")
         WRITE(FSYS,1)
         NEWLINE
         PGNO=PGNO<<8>>8 ! FSYS<<24
         I=GET USNAMES(USERS,ADDR(U(0)),FSYS)
         MONITOR  IF  I#0
         UX=0
         WHILE  UX<USERS CYCLE 
            USER=U(UX)
            FROMREC=0; NGIVEN=256; ! SET TO MAX PREPARED TO RECIEVE
            I=DFILENAMES(USER,FLIS,FROMREC,NGIVEN,NFILES,FSYS,0)
            MONITOR  IF  I#0
            FX=0
            WHILE  FX<NFILES CYCLE 
               FILE=FLIS(FX)_NAME
               I=DGETDA(USER,FILE,FSYS,ADDR(DA AREA))
               MONITOR  IF  I#0
               SX=0
               WHILE  SX<DA AREA_NSECTS CYCLE 
                  DA=DA AREA_DA(SX)
                  SX=SX+1
                  LEN=DA AREA_SECTSI
                  IF  SX=DA AREA_NSECTS THEN  LEN=DA AREA_LASTSECT
                  IF  DA<=PGNO<DA + LEN START 
                     SPACES(4)
                     PRINTSTRING(USER.".".FILE)
                     NEWLINE
                     FINISH 
                  REPEAT ; ! UP THE SECTIONS OF THE FILE
               FX=FX + 1
               REPEAT ; ! UP THE FILES OF THE USER
            UX=UX + 1
            REPEAT ; ! UP THE USERS OF THE FSYS
         REPEAT ; ! UP THE FSYS'S
      END ; ! WHAT FILE
CONSTINTEGER  ZERO=0
INTEGERFN  PHYSICAL SIZE KB(STRING (11) USER,FILE,INTEGER  FSYS)
INTEGER  J
RECORDFORMAT  DFINFRECF(INTEGER  NKB,RUP,EEP,APF,USE,ARCH,FSYS, C 
   CONSEG,CCT,CODES,CODES2,SSBYTE, STRING (6) OFFER)
RECORD  X(DFINFRECF)
      J=DFINFO(USER,FILE,FSYS,ADDR(X))
      IF  J#0 START 
         PRINTSTRING("DFINFO ")
         UDERRS(J)
         RESULT =0
         FINISH 
      RESULT =X_NKB
      END ; ! PHYSICAL SIZE KB
INTEGERFN  PAGE(INTEGER  AD)
! RESULT IS ZERO IF PAGE IS ZERO
INTEGER  I
      CYCLE  I=AD,4,AD+4092
         IF  INTEGER(I)#0 THEN  RESULT =1
         REPEAT 
      RESULT =ZERO
      END ; ! PAGE
EXTERNALROUTINE  DO ALL FILES(STRING (255) S)
INTEGER  FSX,SEG,GAP,DATA LEN,AD,NGIVEN,FROMREC
INTEGER  FSYS,J,I,N,UX,SX,DA,LEN,NFILES,FX,USERS
STRING (31) FILE,USER,REST
INTEGERARRAY  A(0:99)
STRING (6)ARRAY  U(0:399)
RECORDARRAY  FLIS(0:255)(OINFF)
!
RECORDFORMAT  DAF(INTEGER  SECTSI,NSECTS,LASTSECT,SP, C 
   INTEGERARRAY  DA(0:255))
RECORD  DAAREA(DAF)
!
      PROMPT("FSYS (OR -1): ")
      RDINT(FSYS)
      GET AV FSYS(N,A)
      IF  FSYS>=0 START 
         CYCLE  J=0,1,N-1
            IF  A(J)=FSYS START 
               A(0)=FSYS
               N=1
               -> OK
               FINISH 
            REPEAT 
         PRINTSTRING("FSYS N/A
")
         RETURN 
      FINISH 
OK:
      CYCLE  FSX=0,1,N-1
         FSYS=A(FSX)
         PRINTSTRING("FSYS")
         WRITE(FSYS,1)
         NEWLINE
         I=GET USNAMES(USERS,ADDR(U(0)),FSYS)
         MONITOR  IF  I#0
         UX=0
         WHILE  UX<USERS CYCLE 
            USER=U(UX)
            PRINTSTRING(USER); NEWLINE
         !********:
            J=DPERMISSION(USER,"ERCCXX","","",FSYS,6,1)
            IF  J#0 THEN  PRINTSTRING("DPRM1 ") AND  UDERRS(J)
            !***********:
            FROMREC=0; NGIVEN=256; ! SET TO MAX PREPARED TO RECIEVE
            I=DFILENAMES(USER,FLIS,FROMREC,NGIVEN,NFILES,FSYS,0)
            MONITOR  IF  I#0
            FX=0
            WHILE  FX<NFILES CYCLE 
               FILE=FLIS(FX)_NAME
            SEG=0; GAP=0
            J=DCONNECT(USER,FILE,FSYS,1,0,SEG,GAP)
            IF  J#0 AND  J#33 AND  J#34 THEN  PRINTSTRING("DCONN ")  C 
               AND  UDERRS(J)
            IF  FILE->("#DGLA").REST OR   C 
               FILE->("#LC").REST   C 
            START ; FINISH  ELSE  START 
            IF  J=0 START 
               AD=SEG<<18
               DATA LEN=PHYSICAL SIZE KB(USER,FILE,FSYS)<<10
               I=AD
               WHILE  I<AD + DATA LEN CYCLE 
                  IF  PAGE(I)=ZERO START 
                     PRINTSTRING(USER.".".FILE." HAS ZEROES")
                     NEWLINE
                     FINISH 
                  I=I+X'10000'; ! SECTION SIZE
                  REPEAT 
               J=DDISCONNECT(USER,FILE,FSYS,0)
               IF  J#0 THEN  PRINTSTRING("DDISCO ") AND  UDERRS(J)
               FINISH ; ! SUCCESSFUL CONNECT
               FINISH ; ! NOT DGLA
            !***********************************************************:
               FX=FX + 1
               REPEAT ; ! UP THE FILES OF THE USER
         J=DPERMISSION(USER,"ERCCXX","","",FSYS,7,0)
         IF  J#0 THEN  PRINTSTRING("DPRM2 ") AND  UDERRS(J)
            UX=UX + 1
            REPEAT ; ! UP THE USERS OF THE FSYS
         REPEAT ; ! UP THE FSYS'S
      END ; ! DO ALL FILES
ENDOFFILE