SUBROUTINE CUTIT(KFILDO,XIN,NXIN,NYIN,NXOFF,NYOFF,
     1                 XOUT,NXOUT,NYOUT,IER)
C
C        OCTOBER   2004   GLAHN   MDL   MOS-2000
C                                 MODIFIED FROM CUT (LAMPLIB)
C        NOVEMBER  2004   GLAHN   PUT "D" ON ESLEIF ABOVE 106
C        NOVEMBER  2004   GLAHN   IMPROVED STATEMENT IN PURPOSE
C        DECEMBER  2004   GLAHN   SPLIT IF TEST USING FORMAT 107 FROM
C                                 ABOVE; CHANGED FIRST TEST USING
C                                 FORMAT 105 FROM NYOUT TO NYOFF
C
C        PURPOSE
C            TO ACCEPT A GRID OF TYPE REAL DATA XIN(NXIN,NYIN)
C            AND TO PUT A PORTION OF THAT GRID INTO XOUT(NXOUT,NYOUT)
C            WITH AN OFFSET OF NXOFF, NYOFF.  XIN( , ) AND XOUT( , )
C            CAN BE EQUIVALENCED IN THE CALLING PROGRAM.  THE GRID
c            LENGTHS OF THE INPUT AND OUTPUT GRIDS ARE THE SAME.
C
C        DATA SET USE
C            KFILDO - OUTPUT (PRINT) FILE UNIT NUMBER.
C
C        VARIABLES
C              KFILDO = UNIT NUMBER OF OUTPUT (PRINT) FILE.  (INPUT)
C          XIN(IX,JY) = INPUT GRID (IX=1,NXIN) (JY=1,NYIN).  (INPUT)
C          NXIN, NYIN = DIMENSIONS OF XIN( , ).  (INPUT)
C               NXOFF = OFFSET OF OUTPUT GRID WITH REFERENCE TO INPUT
C                       GRID IN GRID LENGTHS IN IX DIRECTION.  (INPUT)
C               NYOFF = OFFSET OF OUTPUT GRID WITH REFERENCE TO INPUT
C                       GRID IN GRID LENGTHS IN JY DIRECTION.  (INPUT)
C        NXOUT(IX,JY) = OUTPUT GRID (IX=1,NXOUT) (JY=1,NYOUT).  (OUTPUT)
C        NXOUT, NYOUT = DIMENSIONS OF XOUT( , ).  (INPUT)
C                 IER = ERROR RETURN.
C                         0 = SUCCESSFUL RETURN.
C                       194 = OFFSET NXOFF OR NYOFF IS NEGATIVE.
C                       (OUTPUT)
C
C        NONSYSTEM SUBROUTINES CALLED
C            NONE.
C        1         2         3         4         5         6         7 X
C
      DIMENSION XIN(NXIN,NYIN),XOUT(NXOUT*NYOUT)
C
      IER=0
C
D     WRITE(KFILDO,101)NXIN,NYIN,NXOFF,NYOFF,NXOUT,NYOUT
D101  FORMAT(/' IN CUTIT AT 101--NXIN,NYIN,NXOFF,NYOFF,NXOUT,NYOUT',
D    1        6I10)
      IF(NXOFF.LT.0.OR.NYOFF.LT.0)THEN
         IER=194
         WRITE(KFILDO,105)NXOFF,NYOFF,IER
 105     FORMAT(/' ****OUTPUT GRID NOT WITHIN',
     1           ' INPUT GRID WITH OFFSETS NXOFF, NYOFF =',2I6,
     2           ' IN CUTIT.  IER =',I4)
         GO TO 150
C
D     ELSEIF(NXOFF.EQ.0.AND.NYOFF.EQ.0)THEN
D        WRITE(KFILDO,106)
D106     FORMAT(/' ****BOTH OFFSETS IN CUTIT = 0.',
D    1           '  PROCEEDING.')
C
      ENDIF
C
      IF((NXOUT+NXOFF.GT.NXIN).OR.(NYOUT+NYOFF.GT.NYIN))THEN
         IER=194
         WRITE(KFILDO,107)NXOFF,NYOFF,IER
 107     FORMAT(/' ****OFFSET NXOFF OR NYOFF =',2I6,
     1           ' IS TOO LARGE FOR OUTPUT',
     2           ' GRID TO BE WITHIN INPUT GRID IN CUTIT.  IER =',I4)
         GO TO 150 
C
      ENDIF
C
      IOUT=1
C
      DO 140 JY=1+NYOFF,NYOUT+NYOFF
CCCD     WRITE(KFILDO,120)JY,(XIN(IX,JY),IX=1+NXOFF,NXOUT+NXOFF)
CCCD120  FORMAT(' ROW =',I5,/,(15F8.3))
C
      DO 130 IX=1+NXOFF,NXOUT+NXOFF
      XOUT(IOUT)=XIN(IX,JY)
      IOUT=IOUT+1
 130  CONTINUE
C
 140  CONTINUE
C
 150  RETURN
      END