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-18363
C 
C     RELOCATABLE PART NUMBER : 92067-16361 
C 
C     PROGRAMER(S)   : J.M.N. 
C 
C 
C 
C     ACALT ALTERS ACCOUNT WIDE INFORMATION 
C 
      SUBROUTINE ACALT ,92067-16361 REV.1940 790404 
      COMPLEX BUF13(2),MESG(4)
      DIMENSION IBF12(8)
C 
      COMMON /ACOM1/NDCB(272),NBUF(256),MBUF(256) 
      COMMON /ACOM3/LIST(10),LDCB(144),LLIST,LLDCB(144),ITTY,ITDCB(144) 
      COMMON /ACOM4/ICMND(40) 
      COMMON /ACOM5/LOWUS,IHIGR 
      COMMON /ACOM6 /LOC(6),IRN,IPFLG,IRN2,IDSZE
      COMMON /ACOM7/IPBUF(11),ISTRC,JPBUF(11) 
      COMMON /ACOM9/IBUF(40),JBUF(96) 
      COMMON /ACOMC/IECHO,LULOG,ITLOG 
C 
      EQUIVALENCE (IPBUF,IPB),(JPBUF,JPB) 
      EQUIVALENCE (BUF13,IBF12(2))
      DATA BUF13,IBF12 /8HPLEASE L ,8HOG-ON: _ ,-16/
      DATA MESG /8H       W,8HORDS CUR,8HRENTLY A,8HLLOCATED  / 
C 
C     TELL DEFAULT AN NO CHANGE ANSWERS 
C 
      CALL ACWRI(42HENTER " " FOR DEFAULT OR /  FOR NO CHANGE  ,21) 
C 
C     READ ACCOUNTS HEADER
C 
   50 CALL ACNVS(16HSESSION LIMIT? _,8,0) 
      ISL=9999
      IF(IPB.EQ.2H/A.OR.IPB.EQ.2H/E) GO TO 7000 
      IF(IPB.EQ.2H/ .OR.IAND(IPBUF(4),3).EQ.0) GO TO 55 
      IF(IAND(IPBUF(4),3).NE.1) GO TO 50
      ISL=-IPB
      IF(ISL.GT.0) GO TO 50 
   55 CALL READF(NDCB,IERR,NBUF,128,LEN,1)
      MEM=NBUF(27)
      IF(MEM.LT.0) MEM=-MEM 
   60 CALL ACNVS(36HCHANGE MEMORY ALLOCATION (Y OR N)? _,18,0)
      IF(IPB.EQ.2H/E.OR.IPB.EQ.2H/A) GO TO 7000 
      IF(IPB.EQ.2H/ ) GO TO 100 
      IPB=IAND(IPB,177400B)+40B 
      IF(IPB.EQ.2HN ) GO TO 100 
      IF(IPB.EQ.2HY ) GO TO 70
      CALL ACERR(-205)
      GO TO 60
   65 CALL ACERR(-213)
   70 CALL ACITA(MEM,MESG,3)
      CALL ACWRI(MESG,16) 
      CALL ACNVS(28HNO. OF WORDS TO ALLOCATE?  _,14,0)
      IF(IPB.EQ.2H/A.OR.IPB.EQ.2H/E) GO TO 7000 
      IF(IPB.EQ.2H/ ) GO TO 100 
      IF(IPB.LT.70.OR.IPB.GT.7000) GO TO 65 
      MEM=IPB 
      CALL ACWRI(34HFOR NEW ALLOCATION TO BE EFFECTIVE  ,17)
      CALL ACWRI(18H  REBOOT OR ENTER ,9) 
      CALL ACWRI(8H   SD,RE  ,4)
      CALL ACWRI(6H   SU  ,3) 
  100 CALL ACNVS(22HSYSTEM MESSAGE FILE? _,11,0)
      IF(IPB.EQ.2H/A.OR.IPB.EQ.2H/E) GO TO 7000 
      IF(IAND(IPBUF(4),3).NE.1) GO TO 125 
      CALL ACERR(-206)
      GO TO 100 
C 
  125 DO 150 I=1,6
  150 JPBUF(I)=IPBUF(I) 
C 
C 
C     PROMPT FOR NAME OF PROMPT STRING
C 
      CALL ACPRM(14HPROMPT STRING?  ,7) 
      CALL ACREI(NBUF(130),IERR)
      IF(NBUF(130).EQ.2H/A.OR.NBUF(130).EQ.2H/E) GO TO 7000 
      ITLG=ITLOG
C 
C     PROMPT FOR LOCATION OF MESSAGE FILES
C 
      CALL ACNVS(28HLOCATION OF MESSAGE FILES? _  ,14,0)
      IF(IPB.EQ.2H/A.OR.IPB.EQ.2H/E) GO TO 7000 
      CALL RNRQ(1,IRN,ISTAT)
      CALL READF(NDCB,IERR,NBUF,128,LEN,1)
      IF(ISL.GT.0) GO TO 211
C 
C     UPDATE SESSION LIMIT
C 
      NBUF(31)=ISL
      IF(NBUF(30).GE.0) NBUF(28)=ISL
C 
C     UPDATE MEMORY ALLOCATION
C 
  211 NBUF(27)=MEM
      IF(JPB.EQ.2H/ ) GO TO 213 
C 
C     UPDATE SYSTEM MESSAGE FILE NAME 
C 
      J=6 
      DO 212 I=1,6
      IF(I.NE.5) J=J+1
  212 NBUF(J)=JPBUF(I)
      IF(IAND(JPBUF(4),3).NE.0) GO TO 213 
      NBUF(7)=2H
      NBUF(8)=2H
      NBUF(9)=2H
  213 IF(IPB.EQ.2H/ ) GO TO 214 
      IF(IPB.EQ.2H/A.OR.IPB.EQ.2H/E) GO TO 7000 
      NBUF(26)=IPB
  214 IF(NBUF(130).EQ.2H/ ) GO TO 300 
      J=12
      IF(NBUF(130).EQ.2H  .AND.ITLG.LE.2) GO TO 215 
C 
C     UPDATE PROMPT STRING
C 
      IWRD=ITLG/2 
      LAROW=77B 
      IF(MOD(ITLG,2).EQ.0) LAROW=37400B 
      NBUF(130+IWRD)=NBUF(130+IWRD)+LAROW 
      IF(ITLG.GT.19) ITLG=19
      NBUF(129)=-ITLG-1 
      GO TO 230 
C 
C     PUT IN DEFAULT PROMPT STRING
C 
  215 DO 220 I=1,11 
      NBUF(J)=IBF12(I)
  220 J=J+1 
      GO TO 300 
C 
C     PUT STRING IN HEADER
C 
  230 DO 240 I=129,139
      NBUF(J)=NBUF(I) 
  240 J=J+1 
C 
C     POST HEADER 
C 
  300 CALL WRITF(NDCB,IERR,NBUF,128,1)
      CALL RNRQ(4,IRN,ISTAT)
C 
C     PUT PROMPT STRING IN MEMORY 
C 
      CALL LMES(NBUF(12),NBUF(13),NBUF(30)) 
C 
C     UPDATE DISC POOL
C 
      LENG=128*(LOC(4)-LOC(3))
      CALL READF(NDCB,IERR,NBUF,LENG,LEN,LOC(3))
C 
C     PROMPT TO ADD DISC LU 
C 
  350 CALL ACNVS(22HADD DISC LU(Y OR N)? _ ,11,0) 
      IF(IPB.EQ.2H/A.OR.IPB.EQ.2H/E) GO TO 7000 
      IF(IAND(IPB,177400B)+40B.NE.2HY ) GO TO 800 
C 
C     PROMPT FOR DISC LU TO ADD 
C 
  400 CALL ACNVS(10HDISC LU? _ ,5,0)
      IF(IPB.EQ.2H/E) GO TO 800 
      IF(IPB.EQ.2H/A.OR.IPB.EQ.2H/E) GO TO 7000 
      IF(IPB.GT.3.AND.IPB.LE.254) GO TO 500 
      CALL ACERR(-209)
      GO TO 400 
C 
C     SEARCH FOR LU OR END
C 
  500 DO 600 I=1,LEN-1
      NBF=NBUF(I) 
      IF(NBF.EQ.0) GO TO 650
      IF(NBF.EQ.IPB) GO TO 700
  600 CONTINUE
C 
C     MUST EXPAND THE FILE
C 
      CALL ACERR(-219)
      GO TO 7000
C 
C     PUT DISC LU IN BUFF 
C 
  650 NBUF(I+1)=0 
      NBUF(I)=IPB 
      GO TO 400 
C 
C     REPORT ACERR
C 
  700 CALL ACWRI(20HDISC ALREADY IN POOL  ,10)
      GO TO 400 
C 
C     PROMPT TO PURGE DISC LU 
C 
  800 CALL ACNVS(24HPURGE DISC LU(Y OR N)? _  ,12,0)
      IF(IPB.EQ.2H/E.OR.IPB.EQ.2H/ ) GO TO 950
      IF(IPB.EQ.2H/A.OR.IPB.EQ.2H/E) GO TO 7000 
      IF(IAND(IPB,177400B)+40B.NE.2HY ) GO TO 950 
  850 CALL ACNVS(10HDISC LU? _ ,5,0)
      IF(IPB.EQ.2H/E.OR.IPB.EQ.2H/ ) GO TO 950
      IF(IPB.EQ.2H/A.OR.IPB.EQ.2H/E) GO TO 7000 
      IF(IPB.GT.3.AND.IPB.LE.254) GO TO 900 
      CALL ACERR(-209)
      GO TO 850 
C 
C     SEARCH FOR LU TO BE DELETED 
C 
  900 DO 910 I=1,LEN-1
      IF(NBUF(I).EQ.IPB) GO TO 920
  910 CONTINUE
C 
C     REPORT ACERR
C 
      CALL ACWRI(14HDISC NOT FOUND  ,7) 
      GO TO 850 
C 
C     DELETE LU 
C 
  920 DO 930 J=I,LEN-1
      NBUF(J)=NBUF(J+1) 
      IF(NBUF(J).EQ.0) GO TO 850
  930 CONTINUE
C 
C     POST DISC POOL
C 
  950 CALL WRITF(NDCB,IERR,NBUF,LEN,LOC(3)) 
C 
C     GET LENGTH OF DISC POOL 
C 
      DO 960 LNGTH=1,LEN
      IF(NBUF(LNGTH).EQ.0) GO TO 970
  960 CONTINUE
C 
C 
C 
C     FIND MOUNTED POOL DISCS 
C 
  970 CALL ACFST(MBUF)
      DO 990 I=1,LEN
      IF(NBUF(I).EQ.0) GO TO 995
      DO 975 J=1,125,4
      LUD=LBYTE(MBUF(J))
      IF(LUD.EQ.0) GO TO 990
      IF(LUD.EQ.NBUF(I)) GO TO 980
  975 CONTINUE
C 
C 
C     FOUND A MATCH SO MARK IT
C 
  980 NBUF(I)=IOR(NBUF(I),100000B)
  990 CONTINUE
C 
C     RESET DISC POOL IN MEMORY 
C 
  995 NBUF(I)=-1
      ISIZE=0 
      CALL RNRQ(1,IRN,ISTAT)
      CALL READF(NDCB,IERR,MBUF,128,LEN,1)
      IF(IPFLG.GE.0) CALL ACINM(ISIZE,MAXEV,NBUF,LNGTH,MBUF(35))
      IDSZE=MBUF(35)
      CALL WRITF(NDCB,IERR,MBUF,128,1)
      CALL RNRQ(4,IRN,ISTAT)
C 
C     PROMPT FOR STATION CONFIGURATION
C 
 1000  CALL ACWRI(22HSTATION CONFIGURATION ,11) 
 1100 CALL ACNVS(44H(A[DD],D[ELETE],M[ODIFY] OR N[O CHANGE])?  _,22,1)
      ITMP=IPBUF(2) 
      IF(ITMP.EQ.2H/E.OR.ITMP.EQ.2H/A) GO TO 7000 
      IF(ITMP.EQ.2H/ ) GO TO 7000 
      ITMP=IAND(ITMP,177400B)+40B 
      IF(ITMP.EQ.2HN ) GO TO 7000 
      IF(ITMP.EQ.2HD ) GO TO 1200 
      IF(ITMP.EQ.2HA ) GO TO 1200 
      IF(ITMP.EQ.2HM ) GO TO 1200 
      CALL ACERR(-205)
      GO TO 1100
C 
C     FETCH CURRENT STATION CONFIGURATION 
C 
 1200 LC=LOC(2) 
 1300 CALL ACNVS(14HSTATION LU?  _,7,0) 
      IF(IPB.EQ.2H/E) GO TO 1000
      IF(IPB.EQ.2H/A.OR.IPB.EQ.2H/E ) GO TO 7000
      LU=IPB-1
      IF(LU.GE.-1.AND.LU.LT.254) GO TO 1400 
      CALL ACERR(-209)
      GO TO 1300
C 
C     GO FIND IT
C 
 1400 I=1 
      LU=256*IAND(255,LU) 
      LENG=128*(LOC(3)-LC)
 1410 IVAL=IVBUF(I,LC)
      IF(IVAL.EQ.0) GO TO 1430
      IF(IVBUF(I+1,LC).EQ.LU) GO TO 1440
      I=I+IVAL+1
      IF(I.LT.LENG) GO TO 1410
      GO TO 6900
C 
C     PUT IN DUMMY WHEN NOT FOUND 
C 
 1430 IF(ITMP.EQ.2HM .OR.ITMP.EQ.2HD )
     1 CALL ACWRI(18HSTATION NOT FOUND ,9)
      I1=I
      JBUF(1)=1 
      JBUF(2)=LU
C 
C     SET I2 FOR FLAG TO NOT DELEATE
C 
      I2=-1 
      GO TO 1490
C 
C     TRANSFER TO JBUF
C 
 1440 IF(ITMP.EQ.2HA ) CALL ACWRI(22HMODIFYING OLD STATION ,11) 
 1445 I1=I
      DO 1450 J=1,IVAL+1
      JBUF(J)=IVBUF(I,LC) 
 1450 I=I+1 
      I2=I
C 
C     IF DELETE BYPASS UPDATE 
C 
 1490 IF(ITMP.EQ.2HD ) GO TO 3000 
      J=JBUF(1)+2 
 1500 CALL ACNVS(22HSESSION LU,SYSTEM LU?  ,11,0) 
      IF(IPB.EQ.2H/A ) GO TO 7000 
      IF(IPB.EQ.2H/E) GO TO 3000
      LU2=IPB-1 
      CALL NAMR(IPBUF,ICMND,80,ISTRC) 
      LU=IPB-1
      IF(IPB.EQ.2H- ) GO TO 1610
      IF(LU.LT.254.AND.LU.GE.-1) GO TO 1600 
      CALL ACERR(-209)
      GO TO 1500
 1600 LU=IAND(LU,255) 
 1610 IF(LU2.GE.3.AND.LU2.LT.63) GO TO 1700 
      CALL ACERR(-209)
      GO TO 1500
C 
C     SEARCH FOR SESSION LU ALREADY DEFINED 
C 
 1700 IF(J.LE.2) GO TO 1900 
      DO 1800 JJ=2,J-1
      IF(LU2.EQ.IAND(JBUF(JJ),377B)) GO TO 2000 
 1800 CONTINUE
 1900 IF(LU+1.NE.2H- ) GO TO 1950 
      CALL ACWRI(12HLU NOT FOUND ,6)
      GO TO 1500
 1950 JBUF(J)=256*LU+LU2
      J=J+1 
      GO TO 1500
C 
 2000 IF(LU+1.EQ.2H- ) GO TO 2100 
      JBUF(JJ)=256*LU+LU2 
      GO TO 1500
 2100 DO 2200 JJJ=JJ,J-2
 2200 JBUF(JJJ)=JBUF(JJJ+1) 
      J=J-1 
      GO TO 1500
C 
C     PACK STATION TABLE
C 
 3000 CALL RNRQ(1,IRN,ISTAT)
C 
C     IF STATION WAS NOT THERE BEFORE BYPASS PACK 
C 
      IF(I1+1.GE.I2) GO TO 3080 
 3060 I3=I2+1+IVBUF(I2,LC)
      IF(I2+1.GE.I3) GO TO 3080 
      DO 3070 I=I2,I3-1 
      IVAL=IVBUF(I,LC)
      CALL IVBUF(I1,LC,IVAL)
 3070 I1=I1+1 
C 
      I2=I3 
      GO TO 3060
C 
C     BUFFER IS NOW PACKED
C 
C 
C     IF DELETE BYPASS UPDATE 
C 
 3080 IF(ITMP.EQ.2HD ) GO TO 4150 
C 
C     PUT STATION BACK INTO STATION TABLE 
C 
      J=J-1 
      JBUF(1)=J-1 
      IF(I1+J.LE.LENG) GO TO 4050 
      CALL ACERR(-219)
      CALL RNRQ(4,IRN,ISTAT)
      GO TO 7000
C 
C     DO IT 
C 
 4050 DO 4100 I=1,J 
      CALL IVBUF(I1,LC,JBUF(I)) 
 4100 I1=I1+1 
 4150 CALL IVBUF(I1,LC,0) 
      CALL IVBUF
      CALL READF(NDCB,IERR,NBUF,128,LEN,1)
      NBUF(33)=I1/128+1 
      CALL WRITF(NDCB,IERR,NBUF,128,1)
      CALL RNRQ(4,IRN,ISTAT)
C 
C     GO GET NEXT STATION ENTRY 
C 
      GO TO 1000
C 
C     CORRUPT STATION TABLE 
C 
 6900 CALL ACERR(-220)
C 
C     FINISHID
C 
C 
C     CLOSE VIRTUAL MEMORY ROUTINE
C 
 7000 CALL IVBUF
      RETURN
C 
      END 
                                                                                                                                    