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-18406 
C 
C     RELOCATABLE PART NUMBER : 92067-16361 
C 
C     PROGRAMER(S)   : J.M.N. 
C 
C 
C 
C     ACFDA - ROUTINE TO FIND A USER'S OR GROUP'S ACCOUNT LOCATION
C 
C     CALLING SEQUENCE:  CALL ACFDA(IUSER,IGRP,IDIRN,IRECU,IRECG,JERR)
C                WHERE
C                        IUSER = 5-WD BUFFER CONTAINING USER NAME,
C                                PADDED WITH BLANKS 
C                                IF GROUP, IUSER(1)=0 
C                        IGRP  = 5-WD BUFFER CONTAINING GROUP NAME, 
C                                PADDED WITH BLANKS 
C                        IDIRN = DIRECTORY ENTRY NUMBER OF ACCOUNT
C                                (RETURNED) 
C                        IRECU = 2-WD ARRAY, WORD 1 IS RETURNED AS
C                                RECORD NBR OF USER ACCT, 
C                                WORD 2 IS RETURNED AS OFFSET (0 OR 64) 
C                        IRECG = 2-WD ARRAY, WORD 1 IS RETURNED AS
C                                RECORD NBR OF GROUP ACCT,
C                                WORD 2 IS RETURNED AS OFFSET (0 OR 64) 
C                        JERR  = ACERR RETURN WORD
C 
C     ACERRS:             -200 = ACCOUNT NOT FOUND
C                          FMP ACERR (READF)
C 
C 
      SUBROUTINE ACFDA(IUSER,IGRP,IDIRN,IRECU,IRECG,JERR) 
     1 ,92067-16361 REV.1940 781024 
      LOGICAL ISRCH 
      DIMENSION IUSER(5),IGRP(5),IRECU(2),IRECG(2)
      COMMON /ACOM6 /LOC(5) 
      COMMON /ACOM1/NDCB(272),NBUF(128) 
      COMMON /ACOMA  /ISRCH,IUR,IU,IGR,IG 
C 
      DATA IAT/2H@  / 
C 
C 
C     GET RECORD NUMBER OF START OF DIRECTORY 
C     INITIALIZE DIRECTORY ENTRY NBR, OFFSET, INDEX TO DIRECTORY
C 
      IRECU(2)=0
      IRECG(2)=0
      IF(ISRCH) GO TO 550 
      IREC=LOC(5) 
      IF(IUSER(1).EQ.0) GO TO 50
      IUR=IREC
      IU=1
      GO TO 100 
   50 IGR=IREC
      IG=1
  100 I=1 
C 
C     READ THE NEXT RECORD OF DIRECTORY 
C 
  150 CALL READF(NDCB,JERR,NBUF,128,LEN,IREC) 
      IF(JERR.LT.0)RETURN 
C 
C     CHECK FOR END OF DIRECTORY
C 
  200 IF(NBUF(I).EQ.0) GO TO 600
C 
C     CHECK IF DIRECTORY ENTRY POINTS TO A FREE ACCOUNT ENTRY (-1)
C     OR TO AN EXTENDED ACCOUNT ENTRY (-2)
C 
      IF(NBUF(I).LT.0) GO TO 500
C 
C     CHECK IF DIRECTORY ENTRY POINTS TO A GROUP ACCOUNT OR USER
C     ACCOUNT. (GROUP IF NUMBER OF CHARACTERS IN USER NAME = 0) 
C 
      IWD1=IAND(NBUF(I),177400B)
      IF((IWD1.EQ.0).AND.(IUSER(1).EQ.0)) GO TO 350 
      IF((IWD1.NE.0).AND.(IUSER(1).NE.0)) GO TO 250 
      GO TO 500 
C 
C     FOUND A USER ACCOUNT.  SEE IF USER NAME MATCHES.
C 
  250 IF(IUSER(1).EQ.IAT.AND.NBUF(I+1).GE.0) GO TO 350
      DO 300 J=1,5
      IF(IUSER(J).NE.NBUF(I+J)) GO TO 500 
  300 CONTINUE
C 
C     SEE IF GROUP NAME MATCHES 
C 
  350 IF(IGRP(1).EQ.IAT) GO TO 410
      DO 400 J=1,5
      IF(IGRP(J).NE.NBUF(I+J+5)) GO TO 500
  400 CONTINUE
C 
C     SAVE USER OR GROUP POSITION 
C 
  410 IF(IUSER(1).EQ.0) GO TO 415 
      IU=I
      IUR=IREC
      GO TO 420 
  415 IG=I
      IGR=IREC
C 
C     PUT USER NAME IN IUSER
C     AND PUT GROUP IN IGRP 
C 
  420 DO 425 J=1,5
      IUSER(J)=NBUF(I+J)
 425  IGRP(J)=NBUF(I+J+5) 
C 
C     FOUND THE MATCHING DIRECTORY ENTRY
C     RETURN THE ACCOUNT RECORD NUMBER AND THE OFFSET 
C     AND COMPUTE DIRECTORY NUMBER
C 
      IDIRN=8*(IREC-LOC(5))+1+((I-1)/16)
      JERR=0
      J=NBUF(I+13)
      IRECG(1)=IAND(J,77777B) 
      IF(J.LT.0) IRECG(2)=64
      J=NBUF(I+14)
      IF(IUSER(1).EQ.0) GO TO 450 
      IRECU(1)=IAND(J,77777B) 
      IF(J.LT.0) IRECU(2)=64
      RETURN
  450 IRECU(1)=J
      RETURN
C 
C     GET THE NEXT DIRECTORY ENTRY
C 
  500 I=I+16
      IF(I.LT.129) GO TO 200
      IREC=IREC+1 
      GO TO 100 
C 
C     RESTORE USER OR GROUP POSITION
C 
  550 I=IG
      IREC=IGR
      IF(IUSER(1).EQ.0) GO TO 575 
      I=IU
      IREC=IUR
C 
C     REREAD TO GET NEXT DIRECTORY ENTRY
C 
  575 I=I+16
      IF(I.LT.129) GO TO 150
      IREC=IREC+1 
      GO TO 100 
C 
C     RETURN ACCOUNT NOT FOUND
C 
  600 JERR=-200 
      RETURN
      END 
                