#include SUBROUTINE CONVERT_108(dfile) C C Subroutine to convert from VAX binary to SUN. C The routine writes out every 100th record to a formatted ASCII file. It C can easily be modified by the user to write to SUN binary. C C A. Tekle May 16, 1994 Baseline Version C C-- X -- 1 -- X -- 2 -- X -- 3 -- X -- 4 -- X -- 5 -- X -- 6 -- X -- 7 | C IMPLICIT NONE CHARACTER FN*6, stringfile*50, . filen1*25,dfile*6 INTEGER*4 I, NRec,yymmdd, . jydd,jsec,nhouse(10),o_term,first_10 REAL*4 SMM(48), ZMM(48), real_var(96) integer*4 round integer*4 src_int(4),dest_int(4) integer*4 src_rl(4),dest_rl(4) integer*4 intgr_var(12) equivalence (intgr_var(1),jydd),(intgr_var(2),jsec), . (nhouse,intgr_var(3)),(smm,real_var(1)), . (zmm,real_var(49)) LOGICAL*1 Open_Error, . readmore C C-- X -- 1 -- X -- 2 -- X -- 3 -- X -- 4 -- X -- 5 -- X -- 6 -- X -- 7 | C src_int(1) = convert_external_vax src_int(2) = convert_external_signed src_int(3) = 4 dest_int(1) = convert_external_sparc dest_int(2) = convert_external_signed dest_int(3) = 4 src_rl(1) = convert_external_vax src_rl(2) = convert_external_float src_rl(3) = 4 dest_rl(1) = convert_external_sparc dest_rl(2) = convert_external_float dest_rl(3) = 4 round = convert_external_common o_term = 6 READMORE = .TRUE. stringfile = 'ia'//dfile OPEN( UNIT = 50, . FILE = Stringfile, . STATUS = 'OLD', . ACCESS = 'DIRECT', . FORM = 'UNFORMATTED', . RECL = 432) READ(50, ERR=100, REC = 1, END = 100) . jydd,jsec,(smm(i),i = 1,48), . (zmm(i), i = 1,48), (nhouse(i), i = 1,10) CLOSE (50) CALL convert_external(intgr_var,src_int,intgr_var, . dest_int,round,12) CALL YD2YMD(JYDD,YYMMDD) WRITE(FN,'(I6.6)')YYMMDD FILEN1 = 'ice'//fn//'.a108' OPEN ( UNIT = 23, . FILE = filen1, . FORM = 'FORMATTED', . STATUS = 'UNKNOWN' ) OPEN( UNIT = 50, . FILE = Stringfile, . STATUS = 'OLD', . ACCESS = 'DIRECT', . FORM = 'UNFORMATTED', . RECL = 432) Open_Error = .TRUE. IF ( Open_Error ) THEN WRITE (O_Term,2011) ENDIF C C No records have been read. C NRec = 0 first_10 = 0 C C Read all the records and write only good records. C DO WHILE ( READMORE ) C C Read a record. C NRec = NRec + 1 READ(50, ERR=100, REC = Nrec, END =100) . jydd,jsec,(smm(i),i = 1,48), . (zmm(i), i = 1,48), (nhouse(i), i = 1,10) CALL convert_external(intgr_var,src_int,intgr_var, . dest_int,round,12) CALL convert_external(real_var,src_rl,real_var, . dest_rl,round,96) IF(READMORE) THEN IF ((MOD(FIRST_10,100)) .EQ. 1) THEN WRITE(23,225)JYDD,JSEC WRITE(23,226)SMM WRITE(23,226)ZMM WRITE(23,227)NHOUSE ENDIF FIRST_10 = FIRST_10 + 1 225 FORMAT(1X,I5,1X,I12) 226 FORMAT(8((6(1X,E12.6))/)) 227 FORMAT(1X,2((5(I12,1X))/)) ENDIF ENDDO 100 continue 2017 CONTINUE CLOSE ( 23 ) CLOSE ( 50 ) WRITE (6,6011) NRec-1 2011 FORMAT (' Creating 108 SEC report file.',/) 5011 FORMAT (' ',I5,' 108 SEC records read.') 6011 FORMAT (/' Total 108 SEC records read: ',I5,/) RETURN END