!***********************************************************************
!*
!*    Utility program to remove OFFER status from all on-line files
!*
!*               R.D. Eager   University of Kent   MCMLXXX
!*
!***********************************************************************
!
!
!***********************************************************************
!*
!*          Constants
!*
!***********************************************************************
!
CONSTSTRING (1) SNL = "
"
!
!
!***********************************************************************
!*
!*          Record formats
!*
!***********************************************************************
!
RECORDFORMAT  INFF(INTEGER  NKB,RUP,EEP,APF,USE,ARCH,FSYS,CONSEG,C 
                   CCT,CODES,CODES2,SSBYTE,STRING (6) OFFER)
RECORDFORMAT  OINFF(STRING (11) NAME,INTEGER  SP12,NKB,C 
                    BYTEINTEGER  ARCH,CODES,CCT,OWNP,EEP,USE,CODES2,C 
                    SSBYTE,FLAGS,SP29,SP30,SP31)
!
!
!***********************************************************************
!*
!*          Subsystem references
!*
!***********************************************************************
!
SYSTEMSTRINGFNSPEC  ITOS(INTEGER  N)
EXTERNALINTEGERFNSPEC  OUTPOS
EXTERNALROUTINESPEC  PROMPT(STRING (255) S)
EXTERNALSTRINGFNSPEC  UINFS(INTEGER  ENTRY)
!
!
!***********************************************************************
!*
!*          Director references
!*
!***********************************************************************
!
EXTERNALSTRINGFNSPEC  DERRS(INTEGER  N)
EXTERNALINTEGERFNSPEC  DFILENAMES(STRING (6) USER,C 
                                  RECORDARRAYNAME  INF,C 
                                  INTEGERNAME  FILENO,MAXREC,NFILES,C 
                                  INTEGER  FSYS,TYPE)
EXTERNALINTEGERFNSPEC  DFINFO(STRING (6) USER,STRING (11) FILE,C 
                              INTEGER  FSYS,ADR)
EXTERNALINTEGERFNSPEC  DOFFER(STRING (6) USER,OFFERTO,C 
                              STRING (11) FILE,INTEGER  FSYS)
EXTERNALROUTINESPEC  GETAVFSYS(INTEGERNAME  N,INTEGERARRAYNAME  A)
EXTERNALINTEGERFNSPEC  GETUSNAMES(INTEGERNAME  N,INTEGER  ADR,FSYS)
!
!
!***********************************************************************
!*
!*          U N O F F E R
!*
!***********************************************************************
!
EXTERNALROUTINE  UNOFFER(STRING (255) PARMS)
INTEGER  FSX,NGIVEN,FROMREC,AD,FLAG
INTEGER  FSYS,J,N,UX,NFILES,FX,USERS
STRING (31) FILE,USER,SELF
RECORD  INF(INFF)
INTEGERARRAY  A(0:99)
STRING (6)ARRAY  U(0:511)
RECORDARRAY  FLIS(0:255)(OINFF)
!
PROMPT("Fsys (or -1): ")
READ(FSYS)
GET AV FSYS(N,A)
IF  FSYS >=0 THEN  START 
   CYCLE  J = 0,1,N-1
      IF  A(J) = FSYS THEN  START 
         A(0) = FSYS
         N = 1
         -> OK
      FINISH 
   REPEAT 
   PRINTSTRING("File system not online".SNL)
   RETURN 
FINISH 
!
OK:
SELF = UINFS(1)
AD = ADDR(INF)
CYCLE  FSX = 0,1,N-1
   FSYS = A(FSX)
   PRINTSTRING("+++ Fsys ".ITOS(FSYS)." +++".SNL)
   FLAG = GET USNAMES(USERS,ADDR(U(0)),FSYS)
   IF  FLAG # 0 THEN  MONITOR  AND  STOP 
   UX = 0
   WHILE  UX < USERS CYCLE 
      USER = U(UX)
      FROMREC = 0; NGIVEN = 256;   ! Set to max prepared to receive
      FLAG = DFILENAMES(USER,FLIS,FROMREC,NGIVEN,NFILES,FSYS,0)
      IF  FLAG # 0 THEN  MONITOR  AND  STOP 
      FX = 0
      WHILE  FX < NFILES CYCLE 
         IF  FLIS(FX)_CODES & X'02' # 0 THEN  START ;   ! File on OFFER
            FILE = FLIS(FX)_NAME
            PRINTSTRING("+++ ".USER.".".FILE)
            SPACES(30-OUTPOS)
            PRINTSTRING(" on OFFER to ")
            FLAG = DFINFO(USER,FILE,FSYS,AD)
            IF  FLAG # 0 THEN  PRINTSTRING("??????") ELSE  START 
               PRINTSTRING(INF_OFFER)
               FLAG = DOFFER(USER,"",FILE,FSYS)
               PRINTSTRING("       OFFER revoke flag =".DERRS(FLAG))
            FINISH 
            NEWLINE
         FINISH 
         FX = FX + 1
      REPEAT 
      UX = UX + 1
   REPEAT 
REPEAT 
END ;   ! of UNOFFER
ENDOFFILE