PROGRAM COMPFITS C---------------------------------------------------------------------- C This VAX FORTRAN-77 program compares FITS-like files to assure that C they are identical. It uses the SYS$TRNLOG service in the same C way that COPYFITS does in order to be able to read either tape C or disk. It rewinds both inputs and then does a comparison of both C their structure and their contents. It types out informative C messages about the structure as it proceeds. The input logical C names are INFIL1 and INFIL2. C DCW, 04Jan82; revised slightly 15Sept83. C---------------------------------------------------------------------- INTEGER*4 NF, NR, NT INTEGER*4 STATUS, SYS$TRNLOG, SS$_NORMAL, SS$_NOTRAN CHARACTER INNAM1*63, INCLS1*4, B1*2880, DEVTYP*4 CHARACTER INNAM2*63, INCLS2*4, B2*2880 C DATA SS$_NORMAL /1/, SS$_NOTRAN /'00000629'X/ C----------------------------------------------------------------------- C Is input1 tape, or disk? STATUS = SYS$TRNLOG ('INFIL1', LC, INNAM1, , , ) IF (STATUS.EQ.SS$_NORMAL) GO TO 1 IF (STATUS.EQ.SS$_NOTRAN) TYPE *, 'INFIL1 not ASSIGNed!' IF (STATUS.NE.SS$_NOTRAN) TYPE *, * 'Unexpected STATUS returned by SYS$TRNLOG! STATUS=', STATUS GO TO 999 1 CONTINUE DEVTYP = INNAM1(1:2) IF (DEVTYP(1:1).EQ.'_') DEVTYP = INNAM1(2:3) INCLS1 = 'DISK' C MF = TU78; C MM = 6250 bpi drives @ NRAO; C MS = TS-11; C MT = TE16, TU45, or TU77: IF ((DEVTYP.EQ.'MF') .OR. (DEVTYP.EQ.'MM') .OR. (DEVTYP.EQ.'MS') * .OR. (DEVTYP.EQ.'MT')) INCLS1 = 'TAPE' TYPE *, 'INFIL1=', ''''//INNAM1(1:LC)//''',', * 'Device_Class=',INCLS1 IF (INCLS1.EQ.'DISK') OPEN (UNIT=1, FILE=INNAM1, * STATUS='OLD', READONLY) IF (INCLS1.EQ.'TAPE') OPEN (UNIT=1, FILE=INNAM1, STATUS='OLD', * ACCESS='SEQUENTIAL', FORM='FORMATTED', * RECORDTYPE='FIXED', RECL=2880, BUFFERCOUNT=2) C Is input2 tape, or disk? STATUS = SYS$TRNLOG ('INFIL2', LC, INNAM2, , , ) IF (STATUS.EQ.SS$_NORMAL) GO TO 2 IF (STATUS.EQ.SS$_NOTRAN) TYPE *, 'INFIL2 not ASSIGNed!' IF (STATUS.NE.SS$_NOTRAN) TYPE *, * 'Unexpected STATUS returned by SYS$TRNLOG! STATUS=', STATUS GO TO 999 2 CONTINUE DEVTYP = INNAM2(1:2) IF (DEVTYP(1:1).EQ.'_') DEVTYP = INNAM2(2:3) INCLS2 = 'DISK' C MF = TU78; C MM = 6250 bpi drives @ NRAO; C MS = TS-11; C MT = TE16, TU45, or TU77: IF ((DEVTYP.EQ.'MF') .OR. (DEVTYP.EQ.'MM') .OR. (DEVTYP.EQ.'MS') * .OR. (DEVTYP.EQ.'MT')) INCLS2 = 'TAPE' TYPE *, 'INFIL2=', ''''//INNAM2(1:LC)//''',', * 'Device_Class=',INCLS2 IF (INCLS2.EQ.'DISK') OPEN (UNIT=2, FILE=INNAM2, * STATUS='OLD', READONLY) IF (INCLS2.EQ.'TAPE') OPEN (UNIT=2, FILE=INNAM2, STATUS='OLD', * ACCESS='SEQUENTIAL', FORM='FORMATTED', * RECORDTYPE='FIXED', RECL=2880, BUFFERCOUNT=2) C REWIND 1 REWIND 2 NF = 0 NT = 0 C Loop to compare files: 40 CONTINUE NR = 0 C Loop to compare records in a file: 50 CONTINUE READ (1, 1020, END=70) B1 NR = NR + 1 NT = NT + 1 READ (2, 1020, END=80) B2 IF (B1.NE.B2) GO TO 90 GO TO 50 C Assure tapemarks in same position: 70 CONTINUE READ (2, 1020, END=100) B2 TYPE *, ' Tapemark seen on 1 but not seen on 2! NR=', NR STOP 70 C 80 CONTINUE TYPE *, ' Tapemark seen on 2 but not seen on 1! NR=', NR STOP 80 C 90 CONTINUE TYPE *, ' Bad compare in record', NR STOP 90 C Tapemark seen on both tapes: 100 CONTINUE NF = NF + 1 NT = NT + 1 TYPE *, ' Tapemark number', NF, ' seen after', NR, ' records.' C Test for double tapemark: IF (NR.GT.0) GO TO 40 C TYPE *, ' Double tape mark seen. Good compare!' TYPE *, ' Total number of blocks (data+tapemarks) =', NT C CLOSE (UNIT=1) CLOSE (UNIT=2) C 999 STOP C---------------------------------------------------------------------- 1020 FORMAT (A2880) END