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-18372 
C 
C     RELOCATABLE PART NUMBER : 92067-16361 
C 
C     PROGRAMER(S)   : J.M.N. 
C 
C 
C 
C     ACNWG - NEW GROUP COMMAND ROUTINE 
C 
C     CALLING SEQUENCE:  CALL ACNWG 
C 
C     ACERRS:            -201  NO FREE ACCOUNTS 
C                        -202  ACCOUNT WITH THIS NAME ALREADY EXISTS
C                        -203  INVALID ACCOUNT NAME 
C                        -209  INVALID SST ENTRY
C                        -211  USER OR GROUP ID NOT AVAILABLE 
C                         FMP ACERR (READF,WRITF) 
C 
C 
      SUBROUTINE ACNWG ,92067-16361 REV.1940 790227 
      DIMENSION MSGNM(6),MSGST(29),IUSER(5),IDMY(2) 
      COMMON /ACOM1/NDCB(272),NBUF(128) 
      COMMON /ACOM6 /LOC(6),IRN 
      COMMON /ACOM7/IPBUF(11),ISTRC,JPBUF(11) 
      COMMON /ACOM9/IBUF(40),JBUF(96) 
      DATA MSGNM/2HGR,2HOU,2HP ,2HNA,2HME,2H? / 
      DATA MSGST/2HSS,2HT ,2HDE,2HFI,2HNI,2HTI,2HON,2H? ,2H(E,
     1     2HNT,2HER,2H S,2HES,2HSI,2HON,2H L,2HU,,2H S,2HYS, 
     2     2HTE,2HM ,2HLU,2H, ,2HOR,2H E,2HNT,2HER,2H /,2HE)/ 
C 
C 
      INDX=6
C 
C     CHECK IF A FREE ACCOUNT OF 64 WORDS EXISTS
C 
      CALL ACFDF(IDIRN,IRECN,IOFST,IERR,1)
      IF(IERR.EQ.0) GO TO 100 
      CALL ACERR(IERR)
      RETURN
C 
C     PROMPT FOR THE GROUP NAME 
C 
  100 CALL ACPRM(MSGNM,6) 
C 
C     READ AND PARSE THE GROUP NAME 
C 
      CALL ACREI(IBUF,IERR) 
      ICHAR=1 
      CALL PARSN(IPBUF,IBUF,80,ICHAR,IERR)
C 
C     CHECK FOR REQUEST TO ABORT COMMAND
C 
      IF(IPBUF(2).EQ.2H/E.OR.IPBUF(2).EQ.2H/A) RETURN 
C 
C     IF NAME IS INVALID, REPORT ACERR AND RE-PROMPT
C 
      IF(IERR.EQ.0) GO TO 300 
  200 CALL ACERR(-203)
      GO TO 100 
C 
C     CHECK THAT NAME IS NOT IN USER.GROUP FORMAT,
C     THAT NAME IS NOT "@", AND THAT NAME IS NOT NULL 
C 
  300 IF(IAND(IPBUF(1),255).NE.0) GO TO 200 
      IF(IPBUF(2).EQ.2H@ ) GO TO 200
      IF(IPBUF(1).EQ.0) GO TO 200 
C 
C     CHECK IF GROUP ALREADY EXISTS 
C 
      IUSER(1)=0
      CALL ACFDA(IUSER,IPBUF(2),IDMY,IDMY,IDMY,IERR)
      IF(IERR.EQ.-200) GO TO 350
C 
C     ACERR - GROUP ACCOUNT ALREADY EXISTS
C 
      CALL ACERR(-202)
      GO TO 100 
C 
C     PROMPT FOR GROUP SST DEFINITION 
C 
  350 ICL=29
  400 CALL ACPRM(MSGST,ICL) 
      ICL=8 
      CALL ACREI(IBUF,IERR) 
      ICHAR=1 
      CALL NAMR(JPBUF,IBUF,80,ICHAR)
C 
C     CHECK FOR REQUEST TO END SST DEFINITION 
C     ALSO CHECK FOR NULL OR BLANK (DEFAULT TO NO GROUP SST)
C 
      IF(JPBUF(1).EQ.2H/E) GO TO 500
      ITEMP=IAND(JPBUF(4),3)
      IF((ITEMP.EQ.0).AND.(INDX.EQ.6)) GO TO 500
C 
C     CHECK FOR REQUEST TO ABORT COMMAND
C 
      IF(JPBUF(1).EQ.2H/A) RETURN 
C 
C     READ, PARSE AND VALIDATE SST ENTRY
C     SYSTEM LU MUST BE NUMERIC, 0-254
C     SESSION LU MUST BE NUMERIC, 4-63
C 
      IF(IAND(JPBUF(4),3).NE.1) GO TO 430 
      ISES=JPBUF(1) 
      CALL NAMR(JPBUF,IBUF,80,ICHAR)
      ISYS=JPBUF(1) 
      IF((ISYS.LT.0).OR.(ISYS.GT.254)) GO TO 430
      IF(IAND(JPBUF(4),3).NE.1) GO TO 430 
      IF((ISES.LT.4).OR.(ISES.GT.63)) GO TO 430 
C 
C     CHECK IF SESSION LU HAS ALREADY BEEN DEFINED
C 
      IF(INDX.EQ.6) GO TO 420 
      DO 410 I=7,INDX 
      IDMY=IAND(JBUF(I),255)+1
      IF(IDMY.EQ.ISES) GO TO 430
  410 CONTINUE
  420 INDX=INDX+1 
      JBUF(INDX)=(IAND(255,ISYS-1)*256)+ISES-1
      GO TO 400 
  430 CALL ACERR(-209)
      GO TO 400 
C 
C     GET A FREE ACCOUNT ENTRY
C 
  500 ISIZE=INDX
      LEN=6-INDX
      CALL ACFDF(IDIRN,IRECN,IOFST,IERR,1)
      IF(IERR.GE.0) GO TO 600 
      CALL ACERR(IERR)
      RETURN
C 
C     GET A GROUP ID
C 
  600 CALL ACGID(-1,ID,IERR)
      IF(IERR.NE.-2) GO TO 700
      CALL ACERR(-211)
      RETURN
C 
C     BUILD THE DIRECTORY ENTRY 
C 
  700 IBUF(1)=IPBUF(1)/256
      DO 800 I=2,6
      IBUF(I)=2H
  800 CONTINUE
      DO 900 I=7,11 
      IBUF(I)=IPBUF(I-5)
  900 CONTINUE
      IBUF(12)=0
      IBUF(13)=ID 
      IBUF(14)=IRECN
      IF(IOFST.NE.0) IBUF(14)=IOR(IRECN,100000B)
      IBUF(15)=0
      IBUF(16)=0
      CALL RNRQ(1,IRN,ISTAT)
      CALL ACDIR(2,IDIRN,IBUF,IERR) 
C 
C     BUILD THE GROUP ACCOUNT ENTRY 
C 
      CALL READF(NDCB,IERR,NBUF,128,IDMY,IRECN) 
      IF(ISIZE.GT.64) ID=IOR(ID,100000B)
      NBUF(IOFST+1)=ID
      DO 1000 I=2,5 
      NBUF(IOFST+I)=0 
 1000 CONTINUE
      NBUF(IOFST+6)=LEN 
      IF(ISIZE.EQ.6) GO TO 1200 
      DO 1100 I=7,INDX
      NBUF(IOFST+I)=JBUF(I) 
 1100 CONTINUE
 1200 CALL WRITF(NDCB,IERR,NBUF,128,IRECN)
      IF(IERR.LT.0) CALL ACERR(IERR)
      CALL RNRQ(4,IRN,ISTAT)
      RETURN
      END 
                              