FTN4,L 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 SOURCE PART NUMBER :92067-18382 C C RELOCATABLE PART NUMBER : 92067-16363 C C PROGRAMER(S) : J.M.N. C C C C C ACACP PURGES ACCOUNTS WHICH C ARE FLAGED FOR PURGING C C CALLING SEQUENCE C CALL ACACP C SUBROUTINE ACACP ,92067-16363 REV.2001 791021 LOGICAL IFBRK DIMENSION NAMEF(3),NALL(11) DIMENSION LOGON(5),LGOFF(5),NAME1(5),NAME2(5) COMMON /ACOM1/NDCB(272),NBUF(256),MBUF(256) COMMON /ACOM4/ICMND(40),NAMPR(3),ICLFG,NMPR3 COMMON /ACOM6 /LOC(6),IRN,IPFLG,IRN2 COMMON /ACOM7/IPBUF(11),ISTRC,JPBUF(11) COMMON /ACOM9/IBUF(128) COMMON /ACOMD/ICLASS,KPB,KRR,KRRR,IDSES,MYCAP,MYDIR,MYGID DATA NAMEF /2H+@,2HCC,2HT! / DATA NALL /257,2H@ ,2H ,2H ,2H ,2H , 1 2H@ ,2H ,2H ,2H ,2H / DATA DJNP,DSNP /4HDJNP,4HDSNP / DATA LOGON / 2HOF,2H,L,2HOG,2HON,2H,1 / DATA LGOFF / 2HOF,2H,L,2HGO,2HFF,2H,1 / IFLG=0 C C GO SEE IF SHUT DOWN OR PURGE ACCOUNTS C CALL READF(NDCB,IERR,NBUF,128,LEN,1) IF(NBUF(30) .NE.0) IPFLG=NBUF(30) IF(NBUF(29).NE.0.OR.NBUF(30).GE.0) GO TO 50 IF(IPFLG.EQ.-1.OR.IPFLG.EQ.-3) GO TO 50 C C CHECK FOR SPOOLS C CALL ACGSP(NALL,IERR,DJNP) CALL ACGSP(NALL,JERR,DSNP) IF(IERR.NE.0.OR.JERR.NE.0) GO TO 50 C C RELEASE DISC POOL C ISIZE=0 CALL ACINM(ISIZE,MAXEV,IDUM,0,NBUF(35)) ICLS=0 IF(IPFLG.EQ.-2) ICLS=ICLASS C C RELEASE MEMORY ALLOCATION C DO 8 J=1,1000 CALL RLMEM(-2,ICLS) GO TO 600 5 IF(IPFLG.NE.-2) GO TO 50 IF(ICLS.EQ.0) GO TO 9 IF(J.EQ.2) CALL ACWRI(28HWAITING FOR CLASS # TO CLEAR ,14) C C WAIT 2 SEC C CALL EXEC(12,0,2,0,-2) IF(.NOT.IFBRK(IDUM)) GO TO 8 CALL ACERR(0) RETURN 8 CONTINUE RETURN C C RELEASE RESOURCE NUMBERS C 9 CALL RNRQ(44B,IRN,ISTAT) CALL RNRQ(44B,IRN2,ISTAT) ICLS=0 CALL RLMEM(-1,ICLS) GO TO 600 11 DO 10 I=1,100 CALL CLOSE(NDCB) CALL ACCRE(NDCB,NAMEF,0,IERR) IF(IERR.GE.0.OR.IERR.EQ.-6) GO TO 30 DO 44 JJJ=1,5 NAME1(JJJ)=LOGON(JJJ) 44 NAME2(JJJ)=LGOFF(JJJ) CALL MESSS(NAME1,10) CALL MESSS(NAME2,10) CALL EXEC(12,0,1,0,-1) 10 CONTINUE CALL ACERR(IERR) CALL ACOPN(IERR,IDSES) RETURN 30 CALL ACWRI(30HACCOUNTS FILE HAS BEEN PURGED ,15) IPFLG=-1 ICLFG=-1 CALL ACTRM 50 IF(IPFLG.EQ.0) RETURN LD=LOC(5) IDIRN=1 100 CALL READF(NDCB,IERR,NBUF,256,LEN,LD) DO 400 I=1,256,16 IF(NBUF(I).LT.0) GO TO 400 IF(0.EQ.NBUF(I)) GO TO 450 IF(0.LE.NBUF(I+1)) GO TO 400 C C FOUND ENTRY TO BE PURGED C ID=NBUF(I+12) IDU=NBUF(I+11) C C SEARCH ACTIVE SESSION BLOCK C TO SEE IF ACCOUNT IS IDLE C IRECA=LOC(1) IRECD=LOC(5) ILAST=128*(LOC(2)-IRECA) DO 150 IDX=1,ILAST,4 IF(IVBUF(IDX,IRECA).EQ.0) GO TO 150 IDR=IVBUF(IDX+3,IRECA)+1 IDG=IVBUF(16*IDR-3,IRECD) IF(IDIRN.EQ.IDR.OR.(IDU.EQ.0.AND.IDG.EQ.ID)) GO TO 160 150 CONTINUE 160 CALL IVBUF IF(IDIRN.EQ.IDR.OR.(IDU.EQ.0.AND.IDG.EQ.ID)) GO TO 350 C C IF GROUP ACCOUNT GO CHECK DISCS C IF(IDU.EQ.0) GO TO 200 ID=IDU C C NOT ACTIVE SESSION C SO GO CHECK GASP C CALL ACGSP(NBUF(I),IERR,DJNP) IF(IERR.NE.0) GO TO 350 CALL ACGSP(NBUF(I),IERR,DSNP) IF(IERR.NE.0) GO TO 350 C C SEE IF ANOUTHER ACCOUNT HAS THIS ID C DO 170 IDR=1,10000 CALL ACDIR(1,IDR,IBUF,IRR) IF(IRR.LT.0) GO TO 200 IF(IDR.NE.IDIRN.AND.ID.EQ.IBUF(12)) GO TO 300 C C YES GO PURGE THIS ACCOUNT C 170 CONTINUE C C GET CARTRIDGE LIST C 200 CALL ACFST(MBUF) C C CHECK FOR DISCS THAT BELONG TO ACCOUNT C DO 250 J=4,256,4 IF(MBUF(J-3).EQ.0) GO TO 300 IF(MBUF(J).EQ.ID) GO TO 340 250 CONTINUE 300 CALL READF(NDCB,IERR,NBUF,256,LEN,LD) IREC=NBUF(I+14) IOFST=0 IF(IREC.LT.0) IOFST=64 IREC=IAND(77777B,IREC) CALL RNRQ(1,IRN,ISTAT) IF(NBUF(I).LE.255) GO TO 320 CALL READF(NDCB,IERR,IBUF,128,LEN,IREC) IF(IBUF(IOFST+1).GE.0) GO TO 320 JDIRN=IAND(IBUF(IOFST+64),77777B)-LOC(6)+1 IF(IBUF(IOFST+64).LT.0) JDIRN=JDIRN+1 CALL ACPGA(-1,JDIRN,0) 320 CALL ACPGA(-1,IDIRN,0) CALL RNRQ(4,IRN,ISTAT) GO TO 390 C C IF NOT ALREADY SET,THEN SET TO 20 FOR DISC ONLY C 340 IF(IFLG.EQ.0) IFLG=20 GO TO 390 C C SET IFLG=1 FOR ALL OTHER CONFLICTS C 350 IFLG=1 390 CALL READF(NDCB,IERR,NBUF,256,LEN,LD) 400 IDIRN=IDIRN+1 LD=LD+2 GO TO 100 C C UPDATE PURGE FLAG C 450 CALL ACSID CALL RNRQ(1,IRN,ISTAT) CALL READF(NDCB,IERR,NBUF,128,LEN,1) IF(NBUF(30).LT.0) GO TO 500 NBUF(30)=IFLG IPFLG=IFLG CALL WRITF(NDCB,IERR,NBUF,128,1) 500 CALL RNRQ(4,IRN,ISTAT) RETURN C C MEMORY ACERR RETURN C 600 CALL ACERR(-225) RETURN END