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-18378 
C 
C     RELOCATABLE PART NUMBER : 92067-16361 
C 
C     PROGRAMER(S)   : J.M.N. 
C 
C 
      SUBROUTINE ACTEL ,92067-16361 REV.1940 790412 
      LOGICAL  ISRCH,XFTTY,IFBRK
      COMMON /ACOM1/NDCB(272),NBUF(256) 
      COMMON /ACOM2/ LRTRN,LRTR2,LGOTO,ITYPE,ITTYT,LTOSEG,NAMSG(3)
      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 
      COMMON /ACOM7/IPBUF(11),ISTRC,JPBUF(11) 
      COMMON /ACOM8/LASTP(40),LENP
      COMMON /ACOM9/IBUF(40),JBUF(96) 
      COMMON /ACOMA  /ISRCH,ISR1,ISR2,ISR3,ISR4 
      COMMON /ACOMB /ISTK(90),IPT 
      COMMON /ACOMC/IECHO,LULOG,ITLOG,KECHO 
      COMMON /ACOMD/ICLASS
      DIMENSION LU(2),IDMY(2) 
      DATA LU(2) / 0 /
C 
C     SET CLASS WITH WAIT 
C 
      ICLS=IAND(17777B,ICLASS)
C 
C     CHECK FOR LU
C 
      ILU=-1
      IC=ISTRC
      CALL NAMR(IPBUF,ICMND,80,IC)
      IF(IAND(IPBUF(4),3).NE.1) GO TO 10
C 
C     TELL LU INSTEAD ACCOUNT 
C 
      ISTRC=IC
      ILU=IPBUF(1)
      IF(ILU.LT.0.OR.ILU.GT.255) GO TO 398
      LU(1)=IOR(100000B,ILU)
      GO TO 25
C 
C     PARSE FOR USER NAME 
C 
   10 CALL PARSN(IPBUF,ICMND,80,ISTRC,IERR) 
C 
C     TEST FOR USER.GROUP FORMAT
C 
      IF(LBYTE(IPBUF(1)).NE.0) GO TO 25 
      IPBUF(7 )=2HGE
      IPBUF(8 )=2HNE
      IPBUF(9 )=2HRA
      IPBUF(10)=2HL 
      IPBUF(11)=2H
C 
C     PARSE FOR NAMR
C 
   25 CALL NAMR(JPBUF,ICMND,80,ISTRC) 
      IFILE=IAND(JPBUF(4),3)
      IF(IFILE.NE.3) GO TO 30 
      CALL OPEN(LDCB,JERR,JPBUF,0,JPBUF(5),JPBUF(6))
      IF(JERR.LT.0) GO TO 400 
   30 I=MOD(ISTRC-1,2)
      IDX=(ISTRC-1)/2+1 
      IF(I.NE.0) ICMND(IDX)=IOR(IAND(377B,ICMND(IDX)),20000B) 
      LNGTH=ISTRC-I-1-ITLOG 
      IF(ISTRC.GE.ITLOG) LNGTH=0
      IF(ILU.GE.0) GO TO 105
      IU=IPBUF(2) 
      IG=IPBUF(7) 
      IFLG=0
      ISRCH=.FALSE. 
C 
C     GO FIND ACOUNT(S) 
C 
   50 CALL ACFDA(IPBUF(2),IPBUF(7),IDIRN,IDMY,IDMY,IERR)
      IF(IERR.LT.0) GO TO 300 
      IF(IFLG.EQ.0) IFLG=-1 
      IDIRX=1 
  100 CALL ACASB(IDIRN,ISTAT,IDIRX) 
      IF(ISTAT.EQ.0) GO TO 200
      LU(1)=IOR(100000B,ISTAT)
      IF(.NOT.XFTTY(LU)) GO TO 100
  105 IFLG=1
C 
C     WRITE FILE
C 
      IF(IFILE.NE.3) GO TO 140
C 
C     OUTPUT FILE 
C 
  110 LIM=-10 
      CALL READF(LDCB,IERR,JBUF,96,IB)
      IF(IERR.LT.0.OR.IB.LE.0) GO TO 130
      CALL XLUEX(100022B,LU,JBUF,IB,ID,ID,ICLS) 
      GO TO 399 
C 
C     GO DO CLASS GETS TO CLEAR CLASS BUFFERS 
C 
  115 CALL ACCGT(LIM,JERR)
      IF(JERR.NE.0) GO TO 110 
      GO TO 400 
C 
  130 CALL RWNDF(LDCB)
C 
C     GO WRITE MESSAGE
C 
  140 IF(LNGTH.GE.0) GO TO 100
      CALL XLUEX(100022B,LU,ICMND(IDX),LNGTH,ID,ID,ICLS)
      GO TO 399 
C 
C     CLEAR CLASS BUFFERS 
C 
  145 CALL ACCGT(LIM,JERR)
      IF(JERR.EQ.0) GO TO 400 
  150 IF(ILU.GE.0) GO TO 300
      GO TO 100 
  200 ISRCH=.TRUE.
      IPBUF(2)=IU 
      IPBUF(7)=IG 
      IF(IU.EQ.2H@ .OR.IG.EQ.2H@ ) GO TO 50 
C 
C     WE ARE FINISED
C 
  300 ISRCH=.FALSE. 
      IF(IFLG.EQ.0) CALL ACERR(-200)
      IF(IFLG.LT.0) CALL ACERR(-221)
      IF(IFILE.EQ.3) CALL CLOSE(LDCB) 
      RETURN
  398 JERR=-222 
      GO TO 400 
  399 JERR=10 
  400 CALL ACERR(JERR)
      RETURN
      END 
      SUBROUTINE ACCGT(LIM,JERR) ,92067-16361 REV.1940 790412 
      LOGICAL  IFBRK
      COMMON /ACOMD/ICLASS
C 
C     SET JERR
C 
      JERR=1
C 
C     DO GETS TO RELEASE CLASS BUFFERS
C 
  120 CALL EXEC(100025B,ICLASS,JBUF,1)
      RETURN
  125 CALL ABREG(IA,IB) 
C 
C     IF ONE REQUEST WAS COMPLETE GO TRY TO GET ANOUTHER
C 
      IF(0.LE.IA) GO TO 120 
C 
C     IF TOTAL OUTSTANDING BUFFERS LESS THAN LIMIT GO DO NEXT WRITE 
C 
      IF(IA.GT.LIM) RETURN
C     ELSE SET LIMIT DOWN AN GO TO SLEEP FOR 0.5 SEC
      LIM=-5
      CALL EXEC(12,0,1,0,-50) 
      IF(.NOT.IFBRK(ID)) GO TO 120
      JERR=0
      RETURN
      END 
                                                                                                                      