      SUBROUTINE GET_JPI(DETACH,LIST,LMPRIV,LMPRIB,DEBUG)
C
C     The purpose of this routine is to set up
C     a quota list for use by creprc in creating a
C     sub- or detached process.
C     DETACH is TRUE iff it is for a detached process.
C     LIST contains the address of the quota list constructed.
C     LMPRIV will be set to the privileges of current process.
C     LMPRIB will be set to base priority.
C
C     Warning !!! Setting the proper formulae for allocating
C     quotas (deductible in particular) to sub-processes is tricky.
C     The following is a list of all known uses of CREPRC for
C     subprocesses which should be verified to work before
C     any permanent changes are made in these formulae:
C
C     Interactive Graphics (especially [CLOUD]ANAL2)
C     RJE images REMOTE and RJEREC where they set up /BATCH jobs)
C
      IMPLICIT INTEGER*4 (A-Z)
      INTEGER*2 LST2(86)
      INTEGER*4 LST4(43)
      INTEGER*4 LMPRIV(2)
      LOGICAL DETACH,DEBUG
      common/quota/
     .   astlm,astval,biolm,bioval,
     .   bytlm,bytval,
     .   cpulm,cpuval,diolm,dioval,
     .   fillm,filval,pgflqu,pgfval,
     .   prclm,prcval,tqelm,tqval,
     .   wsdefa,wsdval,wsquot,wsqval,
     .   endval
      byte astlm,biolm,bytlm,cpulm,diolm
      byte fillm,pgflqu,prclm,tqelm,wsdefa
      byte wsquot,endval
      external pql$_astlm,pql$_biolm
      external pql$_bytlm,pql$_fillm,pql$_pgflquota
      external pql$_cpulm,pql$_diolm
      external pql$_prclm,pql$_tqelm,pql$_listend
      external pql$_wsdefault,pql$_wsquota
      EXTERNAL JPI$_CURPRIV
      EXTERNAL JPI$_PRIB
      EXTERNAL JPI$_ASTLM,JPI$_BIOLM,JPI$_BYTLM
      EXTERNAL JPI$_CPULIM,JPI$_CPUTIM,JPI$_DIOLM
      EXTERNAL JPI$_FILLM,JPI$_PGFLQUOTA
      EXTERNAL JPI$_PRCLM,JPI$_TQLM
      EXTERNAL JPI$_WSQUOTA,JPI$_WSAUTH
      EQUIVALENCE (LST2,LST4)
      astlm = %loc(pql$_astlm)
      biolm = %loc(pql$_biolm)
      bytlm = %loc(pql$_bytlm)
      cpulm = %loc(pql$_cpulm)
      diolm = %loc(pql$_diolm)
      fillm = %loc(pql$_fillm)
      pgflqu = %loc(pql$_pgflquota)
      prclm = %loc(pql$_prclm)
      tqelm = %loc(pql$_tqelm)
      wsdlm = %loc(pql$_wsdefault)
      wsqlm = %loc(pql$_wsquota)
      endval = %loc(pql$_listend)
      LST2(1) = 8
      LST2(2) = %LOC(JPI$_CURPRIV)
      LST4(2) = %LOC(LMPRIV)
      LST4(3) = 0
      LST2(7) = 4
      LST2(8) = %LOC(JPI$_PRIB)
      LST4(5) = %LOC(LMPRIB)
      LST4(6) = 0
      LST2(13) = 4
      LST2(14) = %LOC(JPI$_ASTLM)
      LST4(8) = %LOC(ASTVAL)
      LST4(9) = 0
      LST2(19) = 4
      LST2(20) = %LOC(JPI$_BIOLM)
      LST4(11) = %LOC(BIOVAL)
      LST4(12) = 0
      LST2(25) = 4
      LST2(26) = %LOC(JPI$_BYTLM)
      LST4(14) = %LOC(BYTVAL)
      LST4(15) = 0
      LST2(31) = 4
      LST2(32) = %LOC(JPI$_CPULIM)
      LST4(17) = %LOC(CPUVAL)
      LST4(18) = 0
      LST2(37) = 4
      LST2(38) = %LOC(JPI$_CPUTIM)
      LST4(20) = %LOC(JCPUVAL)
      LST4(21) = 0
      LST2(43) = 4
      LST2(44) = %LOC(JPI$_DIOLM)
      LST4(23) = %LOC(DIOVAL)
      LST4(24) = 0
      LST2(49) = 4
      LST2(50) = %LOC(JPI$_FILLM)
      LST4(26) = %LOC(FILVAL)
      LST4(27) = 0
      LST2(55) = 4
      LST2(56) = %LOC(JPI$_PGFLQUOTA)
      LST4(29) = %LOC(PGFVAL)
      LST4(30) = 0
      LST2(61) = 4
      LST2(62) = %LOC(JPI$_PRCLM)
      LST4(32) = %LOC(PRCVAL)
      LST4(33) = 0
      LST2(67) = 4
      LST2(68) = %LOC(JPI$_TQLM)
      LST4(35) = %LOC(TQVAL)
      LST4(36) = 0
      LST2(73) = 4
      LST2(74) = %LOC(JPI$_WSQUOTA)
      LST4(38) = %LOC(WSDVAL)
      LST4(39) = 0
      LST2(79) = 4
      LST2(80) = %LOC(JPI$_WSAUTH)
      LST4(41) = %LOC(WSQVAL)
      LST4(42) = 0
      LST4(43) = 0
      CALL IFERR(LIB$GET_EF(IFLAG),'NO EVENT FLAGS AVAIL FOR GETJPI')
      CALL IFERR(SYS$GETJPI(%VAL(IFLAG),,,LST2,,,),
     .   'CREPRC ERROR IN GETJPI')
      CALL IFERR(LIB$FREE_EF(IFLAG),'ERROR RETURNING EF IN GETJPI')
      IF(DEBUG)TYPE *,'RESULTS FROM GETJPI :'
      IF(DEBUG)TYPE *,'priv(1), priv(2), & base prio'
      IF(DEBUG)TYPE 100,LMPRIV,LMPRIB
100   FORMAT(4Z10)
      IF(DEBUG)TYPE *,'astval, bioval, BYTVAL, CPUVAL, jcpuval,& dioval'
      IF(DEBUG)TYPE 100,ASTVAL,BIOVAL,BYTVAL,CPUVAL,JCPUVAL,DIOVAL
      IF(DEBUG)TYPE *,'FILVAL, PGFVAL, PRCVAL, TQVAL, wsdval, & wsqval'
      IF(DEBUG)TYPE 100,FILVAL,PGFVAL,PRCVAL,TQVAL,WSDVAL,WSQVAL
      IF(.NOT.DETACH)THEN
         IF(CPUVAL.NE.0)CPUVAL = (CPUVAL-JCPUVAL)/3
      END IF
      IF(DEBUG)TYPE *,'FINAL RESULTS'
      IF(DEBUG)TYPE *,'priv(1), priv(2), & base prio'
      IF(DEBUG)TYPE 100,LMPRIV,LMPRIB
      IF(DEBUG)TYPE *,'astval, bioval, BYTVAL, CPUVAL, jcpuval,& dioval'
      IF(DEBUG)TYPE 100,ASTVAL,BIOVAL,BYTVAL,CPUVAL,JCPUVAL,DIOVAL
      IF(DEBUG)TYPE *,'FILVAL, PGFVAL, PRCVAL, TQVAL, wsdval, & wsqval'
      IF(DEBUG)TYPE 100,FILVAL,PGFVAL,PRCVAL,TQVAL,WSDVAL,WSQVAL
      LIST = %LOC(ASTLM)
      RETURN
      END
