SUBROUTINE W3FI04(IENDN,ITYPEC,LW)
C$$$   SUBPROGRAM  DOCUMENTATION  BLOCK
C
C SUBPROGRAM: W3FI04         FIND WORD SIZE, ENDIAN, CHARACTER SET
C   PRGMNR: JONES,R.E.       ORG: W/NMC42       DATE: 94-10-07
C
C ABSTRACT: SUBROUTINE COMPUTES WORD SIZE, THE TYPE OF CHARACTER
C   SET, ASCII OR EBCDIC, AND IF THE COMPUTER IS BIG-ENDIAN, OR
C   LITTLE-ENDIAN.
C
C PROGRAM HISTORY LOG:
C   94-10-07  R.E.JONES
C   98-07-08  Gilbert    -  Removed the Fortran SAVE Statement.
C                           The SAVE statement is not needed for this
C                           routine, and may have been causing errors
C                           using the f90 compiler under the 2.0
C                           Programming Environment.
C   02-10-15  Vuong         Replaced Function ICHAR with mova2i
C
C USAGE:  CALL W3FI04 (IENDN, ITYPEC, LW)
C
C   OUTPUT ARGUMENT LIST:
C     IENDN     -  INTEGER FOR BIG-ENDIAN OR LITTLE-ENDIAN
C                  = 0   BIG-ENDIAN
C                  = 1   LITTLE-ENDIAN
C                  = 2   CANNOT COMPUTE
C     ITYPEC    -  INTEGER FOR TYPE OF CHARACTER SET
C                  = 0   ASCII  CHARACTER SET
C                  = 1   EBCDIC CHARACTER SET
C                  = 2   NOT ASCII OR EBCDIC
C     LW        -  INTEGER FOR WORDS SIZE OF COMPUTER IN BYTES 
C                  = 4   FOR 32 BIT COMPUTERS
C                  = 8   FOR 64 BIT COMPUTERS  
C
C ATTRIBUTES:
C  LANGUAGE: CRAY CFT77 FORTRAN
C  MACHINE:  CRAY C916/256, Y-MP8/64, Y-MP EL92/256, J916/2048
C
C$$$
C
      INTEGER       ITEST1
      INTEGER       ITEST2
      INTEGER       ITEST3
      INTEGER       IENDN
      INTEGER       ITYPEC
      INTEGER       LW
C
      CHARACTER * 8 CTEST1
      CHARACTER * 8 CTEST2
      CHARACTER * 1 CTEST3(8)
      CHARACTER * 1 BLANK
C
      EQUIVALENCE   (CTEST1,ITEST1),(CTEST2,ITEST2)
C
      EQUIVALENCE   (ITEST3,CTEST3(1))
C
      DATA  CTEST1/'12345678'/
      DATA  ITEST3/Z'01020304'/
      DATA  BLANK /' '/
C
C     SAVE
C
C     TEST FOR TYPE OF CHARACTER SET
C     BLANK IS 32 (20 HEX) IN ASCII, 64 (40 HEX) IN EBCDEC
C
      IF (MOVA2I(BLANK).EQ.32) THEN
        ITYPEC = 0
      ELSE IF (MOVA2I(BLANK).EQ.64) THEN
C
C     COMPUTER IS PROBABLY AN IBM360, 370, OR 390 WITH
C     A 32 BIT WORD SIZE, AND BIG-ENDIAN.
C
        ITYPEC = 1
      ELSE
        ITYPEC = 2
      END IF
C
C     TEST FOR WORD SIZE, SET LW TO 4 FOR 32 BIT COMPUTER,
C     8 FOR FOR 64 BIT COMPUTERS
C
      ITEST2 = ITEST1
      IF (CTEST1 .EQ. CTEST2) THEN
C
C     COMPUTER MAY BE A CRAY, OR COULD BE DEC VAX ALPHA
C     OR SGI WITH R4000, R4400, R8800 AFTER THEY CHANGE
C     FORTRAN COMPILERS FOR 64 BIT INTEGER.
C
        LW = 8
      ELSE
        LW = 4
      ENDIF
C 
C     USING ITEST3 WITH Z'01020304' EQUIVALNCED TO CTEST3
C     ON A 32 BIT BIG-ENDIAN COMPUTER 03 IS IN THE 3RD 
C     BYTE OF A 4 BYTE WORD. ON A 32 BIT LITTLE-ENDIAN 
C     COMPUTER IT IS IN 2ND BYTE.
C     ON A 64 BIT COMPUTER Z'01020304' IS RIGHT ADJUSTED IN
C     A 64 BIT WORD, 03 IS IN THE 7TH BYTE.  ON A LITTLE-
C     ENDIAN 64 BIT COMPUTER IT IS IN THE 2ND BYTE.
C 
      IF (LW.EQ.4) THEN           
        IF (MOVA2I(CTEST3(3)).EQ.3) THEN
          IENDN = 0
        ELSE IF (MOVA2I(CTEST3(3)).EQ.2) THEN 
          IENDN = 1
        ELSE
          IENDN = 2
        END IF
      ELSE IF (LW.EQ.8) THEN           
        IF (MOVA2I(CTEST3(7)).EQ.3) THEN
          IENDN = 0
        ELSE IF (MOVA2I(CTEST3(2)).EQ.3) THEN
          IENDN = 1
        ELSE
          IENDN = 2
        END IF
      ELSE
        IENDN = 2
      END IF
C
      RETURN
      END