C**** FAPPEND.S 98/04/20 C**** APPEND subset of records from one datafile to end of another C**** C**** Compile: FCE90 FAPPEND.S C**** PARAMETER (IMxJM=72*46, IODIM=1320) CHARACTER*80 FILEIN,FILOUT, ARG, TITLE INTEGER*4 INofOUT(IODIM) COMMON /TITLCB/ TITLE(1320) COMMON /DATACB/ REAL4(IMxJM*1320) C**** IARGS = IARGC() IF(IARGS.lt.3) GO TO 800 C**** C**** Open input and output data files C**** CALL GETARG (1,FILEIN) CALL GETARG (2,FILOUT) OPEN (1,FILE=FILEIN,ACCESS='DIRECT',RECL=4,STATUS='OLD') READ (1,REC=1) IJRES CLOSE (1) IJRES = (IJRES-80)/4 NRDIM = IMxJM*1320 / IJRES OPEN (1,FILE=FILEIN,FORM='UNFORMATTED',STATUS='OLD') OPEN (2,FILE=FILOUT,FORM='UNFORMATTED',POSITION='APPEND') C**** C**** Decode required records C**** Loop over command line arguments containing record numbers C**** NRMAX = 0 ! last input record to be read in NROUT = 0 ! number of output records to be appended DO 130 IARG=3,IARGS CALL GETARG (IARG,ARG) MINUS = SCAN(ARG,'-') IF(MINUS.eq.0) GO TO 120 C**** Argument contains a range of record numbers NR1 = 0 NRM = 0 READ (ARG(1:MINUS-1) ,*) NR1 READ (ARG(MINUS+1:80),*) NRM IF(NR1.le.0 .or. NR1.gt.NRM) GO TO 810 IF(NRM.gt.NRDIM) GO TO 820 IF(NRM.gt.NRMAX) NRMAX = NRM DO 110 NR=NR1,NRM NROUT = NROUT+1 IF(NROUT.gt.IODIM) GO TO 830 110 INofOUT(NROUT) = NR GO TO 130 C**** Argument contains a single record number 120 NR1 = 0 READ (ARG,*) NRM IF(NRM.le.0) GO TO 810 IF(NRM.gt.NRDIM) GO TO 820 IF(NRM.gt.NRMAX) NRMAX = NRM NROUT = NROUT+1 IF(NROUT.gt.IODIM) GO TO 830 INofOUT(NROUT) = NRM 130 continue C**** C**** Read input data records C**** DO 210 NIN=1,NRMAX IM = NIN*IJRES I1 = IM - IJRES + 1 210 READ (1,ERR=840) TITLE(NIN),(REAL4(I),I=I1,IM) CLOSE (1) C**** C**** Append records to output datafile C**** DO 310 NOUT=1,NROUT NIN = INofOUT(NOUT) IM = NIN*IJRES I1 = IM - IJRES + 1 WRITE (2) TITLE(NIN),(REAL4(I),I=I1,IM) 310 WRITE (6,931) NOUT,TITLE(NIN)(1:72) CLOSE (2) GO TO 999 C**** 800 WRITE (0,*) *' Usage: FAPPEND fileold fileapp n1 [n2-n3 ...] 98/04/20' WRITE (0,*) *' Append and reorder subset of records from fileold to fileapp' GO TO 999 810 WRITE (0,*) ' Unable to deciper record numbers in command line', * ' argument',IARG,' ',ARG STOP 810 820 WRITE (0,*) ' Input record number exceeds internal dimension', * ' NRDIM =',NRDIM STOP 820 830 WRITE (0,*) ' Number of output records exceeds internal', * ' dimension IODIM =',IODIM STOP 830 840 WRITE (0,*) ' Error reading input record number:',NIN STOP 840 C**** 931 FORMAT (I5,': ',A72) 999 END