C  MOVE - MOVE A FIELD WITHIN A RECORD        PROGRAMMER - PAUL STENDAL
C     MOVE MOVES A GIVEN FIELD OF EACH RECORD TO ANOTHER AREA OF THE
C     SAME RECORD, LEAVING THE ORIGINAL FIELD INTACT.  THE USER
C     SPECIFIES THE FOLLOWING:
C        THE STARTING SOURCE COLUMN
C        THE NUMBER OF COLUMNS TO MOVE
C        THE STARTING DESTINATION COLUMN
C        THE FIRST RECORD NUMBER TO MODIFY (OR 0 FOR ALL)
C        THE NUMBER OF RECORDS TO MODIFY
C        !SET F:1 /IN-FILE-NAME
C        !SET F:2 /OUT-FILE-NAME;OUT
      IMPLICIT INTEGER (A-Z); DIMENSION CARD(80), NCARD(3)
      EXTERNAL F1,F2; CALL LI(F1,F2); REWIND 2
      DATA NCARD/0/, IX/1/, NUMMOD/99999999/
      OUTPUT 'SOURCE START COLUMN  '; INPUT SORCOL
      OUTPUT '# OF COLUMNS  '; INPUT NUMCOL
      OUTPUT 'DESTINATION START COLUMN  '; INPUT DESCOL
      OUTPUT 'FIRST RECORD # TO MODIFY (OR 0 FOR ALL)  '
      INPUT FRSTCRD; IF(FRSTCRD.EQ.0) GO TO 100
      OUTPUT '# OF RECORDS TO MODIFY  '; INPUT NUMMOD
  100 REPEAT 200, FOR J=(0,FRSTCRD-2),(MIN(1,(IX=IX+1)),NUMMOD),
     *(MIN(0,(IX=IX+1)),99999999)
      READ(1,1000,END=999) CARD; NCARD(IX)=NCARD(IX)+1
      IF(IX.NE.2) GOTO 200
      DO 150 I=0,NUMCOL-1
  150 CARD(DESCOL+I)=CARD(SORCOL+I)
  200 WRITE(2,1000) CARD
  999 WRITE(108,1010) NCARD
 1000 FORMAT(80A1)
 1010 FORMAT(I5,' RECORDS SKIPPED'/I5,' RECORDS MODIFIED'); END
