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-18390 C C RELOCATABLE PART NUMBER : 92067-16361 C C PROGRAMER(S) : J.M.N. C C C C ACGID - ROUTINE TO GET A FREE USER OR GROUP ID C C CALLING SEQUENCE: CALL ACGID(ITYPE,ID,IERR) C WHERE C ITYPE = 1 FOR USER ID C = -1 FOR GROUP ID C ID = ID NUMBER (1-4095), RETURNED C IERR = ACERR RETURN WORD C C ACERRS: -1 = INVALID PARAMETER C -2 = NO ID AVAILABLE C FMP ACERR (READF,WRITF) C C SUBROUTINE ACGID(ITYPE,ID,IERR) ,92067-16361 REV.1940 781024 COMMON /ACOM5/LOWUS,IHIGR COMMON /ACOM6 /LOC(6),IRN COMMON /ACOM1/NDCB(272),NBUF(256) C C CHECK TYPE PARAMETER C IF(IABS(ITYPE).NE.1) GO TO 70 C C READ USER/GROUP ID MAP FROM ACCOUNT FILE C CALL RNRQ(1,IRN,ISTAT) CALL READF(NDCB,IERR,NBUF,256,LEN,LOC(4)) IF(IERR.LT.0) RETURN C C SEARCH FOR USER OR GROUP ID? C IF(ITYPE.EQ.1) GO TO 40 C C SEARCHING FOR GROUP ID. SCAN ID MAP FROM 0 THROUGH C LOWEST USER ID C MAPWD=0 ID=0 10 IF(ID.GE.LOWUS) GO TO 80 MAPWD=MAPWD-ITYPE CALL ACGBT(NBUF(MAPWD),ITYPE,IBIT) IF(IBIT.NE.-1) GO TO 20 ID=ID+16 GO TO 10 20 ID=ID+IBIT C C UPDATE THE ID MAP C CALL WRITF(NDCB,IERR,NBUF,256,LOC(4)) IF(IERR.LT.0) RETURN C C UPDATE THE "USE" WORD (HIGHEST GROUP ID USED OR LOWEST C USER ID USED) C IF(ID.LE.IHIGR) RETURN IHIGR=ID IOFST=24 C C UPDATE THE WORD IN THE ACCOUNT FILE HEADER C 30 CALL READF(NDCB,IERR,NBUF,128,LEN,1) NBUF(IOFST)=ID CALL WRITF(NDCB,IERR,NBUF,128,1) 35 CALL RNRQ(4,IRN,ISTAT) RETURN C C SEARCHING FOR USER ID. SCAN ID MAP FROM 4095 THROUGH C HIGHEST GROUP ID C 40 MAPWD=257 ID=4095 50 IF(ID.LE.IHIGR) GO TO 80 MAPWD=MAPWD-ITYPE CALL ACGBT(NBUF(MAPWD),ITYPE,IBIT) IF(IBIT.NE.-1) GO TO 60 ID=ID-16 GO TO 50 60 ID=ID-(15-IBIT) C C UPDATE THE ID MAP C CALL WRITF(NDCB,IERR,NBUF,256,LOC(4)) IF(IERR.LT.0) RETURN IF(ID.GE.LOWUS) RETURN LOWUS=ID IOFST=23 GO TO 30 C C ACERR - INVALID PARAMETER C 70 IERR=-1 RETURN C C ACERR - NO ID AVAILABLE C 80 IERR=-2 GO TO 35 END