      DOUBLE PRECISION FUNCTION DR7MDC(K)
C
C  ***  RETURN MACHINE DEPENDENT CONSTANTS USED BY NL2SOL  ***
C
C +++  COMMENTS BELOW CONTAIN DATA STATEMENTS FOR VARIOUS MACHINES.  +++
C +++  TO CONVERT TO ANOTHER MACHINE, PLACE A C IN COLUMN 1 OF THE   +++
C +++  DATA STATEMENT LINE(S) THAT CORRESPOND TO THE CURRENT MACHINE +++
C +++  AND REMOVE THE C FROM COLUMN 1 OF THE DATA STATEMENT LINE(S)  +++
C +++  THAT CORRESPOND TO THE NEW MACHINE.                           +++
C
      INTEGER K
C
C  ***  THE CONSTANT RETURNED DEPENDS ON K...
C
C  ***        K = 1... SMALLEST POS. ETA SUCH THAT -ETA EXISTS.
C  ***        K = 2... SQUARE ROOT OF ETA.
C  ***        K = 3... UNIT ROUNDOFF = SMALLEST POS. NO. MACHEP SUCH
C  ***                 THAT 1 + MACHEP .GT. 1 .AND. 1 - MACHEP .LT. 1.
C  ***        K = 4... SQUARE ROOT OF MACHEP.
C  ***        K = 5... SQUARE ROOT OF BIG (SEE K = 6).
C  ***        K = 6... LARGEST MACHINE NO. BIG SUCH THAT -BIG EXISTS.
C
      DOUBLE PRECISION BIG, ETA, MACHEP, ZERO
      INTEGER BIGI(2), ETAI(2), MACHEI(2)
      EQUIVALENCE (BIG,BIGI(1)), (ETA,ETAI(1)), (MACHEP,MACHEI(1))
      PARAMETER (ZERO=0.D+0)
C
C  +++ IEEE ARITHMETIC MACHINES IN WHICH THE MOST SIGNIFICANT BYTE
C  +++ IS STORED FIRST, SUCH AS THE AT&T 3B SERIES AND MACHINES
C  +++ BASED ON SPARC, MIPS, AND MOTOROLA 68XXX PROCESSORS.
C
C      DATA BIGI(1),BIGI(2)     / 2146435071,         -1 /
C      DATA ETAI(1),ETAI(2)     /    1048576,          0 /
C      DATA MACHEI(1),MACHEI(2) / 1017118720,          0 /
C
C  +++ IEEE ARITHMETIC MACHINES IN WHICH THE LEAST SIGNIFICANT BYTE
C  +++ IS STORED FIRST, SUCH AS MACHINES BASED ON INTEL PROCESSORS,
C  +++ E.G. PERSONAL COMPUTERS WITH AN INTEL 80X87.
C
C      DATA BIGI(1),BIGI(2)     / -1, 2146435071 /
C      DATA ETAI(1),ETAI(2)     /  0,    1048576 /
C      DATA MACHEI(1),MACHEI(2) /  0, 1017118720 /
C
C  +++  IBM, AMDAHL, OR XEROX MAINFRAME  +++
C
C      DATA BIGI(1),BIGI(2)/2147483647, -1/
C      DATA ETAI(1),ETAI(2)/1048576, 0/
C      DATA MACHEI(1),MACHEI(2)/873463808,0/
C
C  +++  VAX  +++
C
C      DATA BIGI(1),BIGI(2)     / -32769, -1 /
C      DATA ETAI(1),ETAI(2)     /    128,  0 /
C      DATA MACHEI(1),MACHEI(2) /   9344,  0 /
C
C  +++  CRAY  +++
C
C      DATA BIGI(1)/6917247552664371199/
C      DATA BIGI(2)/128891879815246481/
C      DATA ETAI(1)/2332160919536140288/
C      DATA ETAI(2)/0/
C      DATA MACHEI(1)/4585931058058362880/
C      DATA MACHEI(2)/0/
C
C  +++  PORT LIBRARY -- REQUIRES MORE THAN JUST A DATA STATEMENT, +++
C  +++                  BUT HAS CONSTANTS FOR MANY MORE MACHINES. +++
C
C  To get the current D1MACH, which has constants for many more
C  machines, ask netlib@research.att.com to
C                    send d1mach from cor
C  For machines with rounded arithmetic (e.g., IEEE or VAX arithmetic),
C  use MACHEP = 0.5D0 * D1MACH(4) below.
C
C      DOUBLE PRECISION D1MACH
C      EXTERNAL D1MACH
C      DATA BIG/0.D+0/, ETA/0.D+0/, MACHEP/0.D+0/, ZERO/0.D+0/
C      IF (BIG .GT. ZERO) GO TO 1
C         BIG = D1MACH(2)
C         ETA = D1MACH(1)
C         MACHEP = D1MACH(4)
C1     CONTINUE
C
C  +++ END OF PORT +++
C
C-------------------------------  BODY  --------------------------------
C
      IF (MACHEP .LE. ZERO) THEN
         WRITE(*,*) 'Edit DR7MDC to activate the appropriate statements'
         STOP 987
         ENDIF
      GO TO (10, 20, 30, 40, 50, 60), K
C
 10   DR7MDC = ETA
      GO TO 999
C
 20   DR7MDC = SQRT(256.D+0*ETA)/16.D+0
      GO TO 999
C
 30   DR7MDC = MACHEP
      GO TO 999
C
 40   DR7MDC = SQRT(MACHEP)
      GO TO 999
C
 50   DR7MDC = SQRT(BIG/256.D+0)*16.D+0
      GO TO 999
C
 60   DR7MDC = BIG
C
 999  RETURN
C  ***  LAST LINE OF DR7MDC FOLLOWS  ***
      END
      INTEGER FUNCTION I7MDCN(K)
C
      INTEGER K
C
C  ***  RETURN INTEGER MACHINE-DEPENDENT CONSTANTS  ***
C
C     ***  K = 1 MEANS RETURN STANDARD OUTPUT UNIT NUMBER.   ***
C     ***  K = 2 MEANS RETURN ALTERNATE OUTPUT UNIT NUMBER.  ***
C     ***  K = 3 MEANS RETURN  INPUT UNIT NUMBER.            ***
C          (NOTE -- K = 2, 3 ARE USED ONLY BY TEST PROGRAMS.)
C
C  +++  PORT VERSION FOLLOWS...
C      INTEGER I1MACH
C      EXTERNAL I1MACH
C      INTEGER MDPERM(3)
C      DATA MDPERM(1)/2/, MDPERM(2)/4/, MDPERM(3)/1/
C      I7MDCN = I1MACH(MDPERM(K))
C  +++  END OF PORT VERSION  +++
C
C  +++  NON-PORT VERSION FOLLOWS...
      INTEGER MDCON(3)
      DATA MDCON(1)/6/, MDCON(2)/8/, MDCON(3)/5/
      I7MDCN = MDCON(K)
C  +++  END OF NON-PORT VERSION  +++
C
 999  RETURN
C  ***  LAST LINE OF I7MDCN FOLLOWS  ***
      END
