*+  USI_CMN - Internal common for USI routines

*    Constants constraining system
      INTEGER			USI__MXCTX		! Max no. contexts
        PARAMETER		( USI__MXCTX = 5 )
      INTEGER			USI__MXPSYS		! Max no. par systems
        PARAMETER		( USI__MXPSYS = 3 )
      INTEGER			USI__MXPRTN		! Max no. par methods
        PARAMETER		( USI__MXPRTN = 100 )
      INTEGER 			USI__NMAX
        PARAMETER               ( USI__NMAX = 20 )

*    List markers
      INTEGER			USI__L_UNUSED		! Unused slot
        PARAMETER		( USI__L_UNUSED = -1 )
      INTEGER			USI__L_TERM		! List terminator
        PARAMETER		( USI__L_TERM = 0 )

*    Constants constraining system
      INTEGER			USI__MXTSK		! Max no. tasks
        PARAMETER		( USI__MXTSK = 300 )
      INTEGER			USI__MXPAR		! Max no. parameters
        PARAMETER		( USI__MXPAR = 2000 )
      INTEGER			USI__MXACTPAR		! Max no. parameters
        PARAMETER		( USI__MXACTPAR = 50 )  ! in active applic

*    Parameter storage
      STRUCTURE /PARAMETER/
	BYTE			TYPE			! Type code
        BYTE			POSITION		! Parameter position
        INTEGER			PROMPT			! ADI prompt id
        INTEGER			DEF			! ADI default id
        INTEGER			HLP			! ADI help id
        INTEGER			ASS			! ADI association id
        INTEGER			KEY			! ADI key id
        INTEGER                 CURDAT			! Current data id
        BYTE                    VPATH(5), PPATH(5)
        CHARACTER*16		NAME			! Parameter name
        LOGICAL			WRITE			! Write access?
      END STRUCTURE

*    Task storage
      STRUCTURE /TASK/
        INTEGER			F_PAR			! First parameter name
        CHARACTER*20		NAME			! Task name
        INTEGER			NPAR			! Number of parameters
        INTEGER                 PARDAT			! Parameter data
        INTEGER                 SPARE(3)
      END STRUCTURE

*    Parameter system
      STRUCTURE /PARSYSTEM/
        CHARACTER*80		NAME
        INTEGER			NLEN
	INTEGER			RTN(USI__MXPRTN)
      END STRUCTURE

*    USI context type
      STRUCTURE /USI_CONTEXT/
        INTEGER			TYPE			! Context par system
        LOGICAL			GOTIFL
        CHARACTER*512		CSTRING			! Command string
        INTEGER			CLEN			! Length of CSTRING
        CHARACTER*512		PSTRING			! Parameters used
        INTEGER			PLEN			! Length of PSTRING
        INTEGER                 TASK			! Active task id
        INTEGER                 PARCODE(USI__MXACTPAR)	! Par code
        INTEGER                 PARSTATE(USI__MXACTPAR)	! Par states 
        BYTE                    PARVPATH(5,USI__MXACTPAR)
        BYTE                    PARPPATH(5,USI__MXACTPAR)
        INTEGER                 PARTYPE(USI__MXACTPAR)	! Par types
        INTEGER                 PARVAL(USI__MXACTPAR)	! Par values
        INTEGER			PARDYN(USI__MXACTPAR)	! Par dynamic defaults
      END STRUCTURE

*    Master USI initialised switch
      LOGICAL			USI_SYINIT		! USI initialised?

*    Command logging control
      CHARACTER*4		USI_LOGMODE		! Logging mode
      CHARACTER*132      	USI_LOGFILE		! Logging file
      INTEGER			USI_LOGIMODE		! Logging mode id
      INTEGER			USI_LOGFID		! Logging FIO id
      LOGICAL			USI_LOGGING		! Logging enabled?

*    Parameter system storage
      INTEGER			USI_NPSYS		! Number of par systems
      RECORD /PARSYSTEM/        USI_PSYS(USI__MXPSYS)	! Par systems

      INTEGER                   USI_N_P, USI_N_T

      RECORD /PARAMETER/        USI_P(USI__MXPAR)
      RECORD /TASK/        	USI_T(USI__MXTSK)
 
*    Context storage
      INTEGER			USI_ICTX		! Current context
      RECORD /USI_CONTEXT/	USI_CTX(USI__MXCTX)	! Contexts

*    Common block definitions
      COMMON /USI_CMN_I/        USI_ICTX,USI_NPSYS,USI_SYINIT,
     :                           USI_LOGGING, USI_LOGIMODE, USI_LOGFID,
     :                           USI_N_P, USI_N_T

      COMMON /USI_CMN_R1/       USI_CTX,USI_PSYS
      COMMON /USI_CMN_R2/       USI_P, USI_T

      COMMON /USI_CMN_C/        USI_LOGFILE, USI_LOGMODE


      STRUCTURE /DATASET/
        LOGICAL USED			! whether this slot being used
        INTEGER ADI_ID			! ADI identifier
        CHARACTER*20 PAR		! Parameter name
        CHARACTER*(DAT__SZLOC) LOC	! locator to dataset
        CHARACTER*1 IO			! input or output dataset
      ENDSTRUCTURE

      RECORD /DATASET/          DS(USI__NMAX)	! datasets

      COMMON /USI_CMN_DS/ DS
*-