CHARACTER*50 INFILE1,INFILE2,OUTFILE,FILENAME,FILENAME2 CHARACTER*8 ANSWER CHARACTER*1 BLINE(2400),BLINE2(2400),nullstr,extrastr INTEGER*2 null,ILINE(1200),ILINE2(1200),xbreak,yshift,H,K,L,N equivalence (null,nullstr) INTEGER*4 IX,IY,I64K,I32K LOGICAL EFLG CHARACTER DAT*12,TIM*12 C DATA STRUCTURE: EQUIVALENCE (BLINE,ILINE),(BLINE2,ILINE2) CHARACTER*12 AQDATE, AQTIME,AQDATE2, AQTIME2 REAL*4 LAMBDA,DISTANCE,PHI_START,PHI_END EQUIVALENCE (LAMBDA,BLINE(77)),(DISTANCE,BLINE(81)),(PHI_START, - BLINE(85)),(PHI_END,BLINE(89)),(AQDATE,BLINE(101)), - (AQTIME,BLINE(113)) REAL*4 LAMBDA2,DISTANCE2,PHI_START2,PHI_END2 EQUIVALENCE (LAMBDA2,BLINE2(77)),(DISTANCE2,BLINE2(81)), - (PHI_START2,BLINE2(85)),(PHI_END2,BLINE2(89)), - (AQDATE2,BLINE2(101)),(AQTIME2,BLINE2(113)) I64K=256*256 I32K=I64K/2 null=0 write(6,*)' nullstr= ->',nullstr,'<-' 5 WRITE(6,1100),1 1100 FORMAT(/'$Input filename',I2,' (CR to quit): ') READ(5,1200) INFILE1 1200 FORMAT(A) IF (INFILE1(:5).EQ.' ') STOP INQUIRE(FILE=INFILE1, NAME=FILENAME,EXIST=EFLG) IF (.NOT.EFLG) GOTO 5 OPEN (UNIT=1,FILE=INFILE1,readonly,STATUS='OLD') c WRITE(6,1100),2 c READ(5,1200) INFILE2 c IF (INFILE2(:5).EQ.' ') STOP c INQUIRE(FILE=INFILE2, NAME=FILENAME2,EXIST=EFLG) c IF (.NOT.EFLG) GOTO 5 c OPEN (UNIT=2,FILE=INFILE2,readonly,STATUS='OLD') WRITE(6,1600) 1600 FORMAT('$Output filename: ') READ(5,1200) OUTFILE OPEN (UNIT=3,FILE=OUTFILE,STATUS='NEW',RECL=2400, & CARRIAGECONTROL='NONE',RECORDTYPE='FIXED') write(6,*)' number of first record to shift?' read(5,*) xbreak write(6,*)' number of pixels to shift by?' read(5,*) yshift yshift=2*yshift !pixels to bytes READ(1,155) (BLINE(II),II=1,2400) c READ(2,155) (BLINE2(II),II=1,2400) c CALL DATE(DAT) c CALL TIME(TIM) c AQDATE2=DAT c AQTIME2=TIM C CHECK FILMS ADJACENT, USE PHI_START OF FIRST AND PHI_END OF SECOND. C PRESENT VERSION OF MAR SOFTWARE DOESN'T REPORT PHI_START. C IF (PHI_END.NE.PHI_START2) STOP'FILMS NOT ADJACENT!' c PHI_START2=PHI_START write(3,155) (BLINE2(II),II=1,2400) DO 200 I=1,xbreak-1 READ(1,155,end=360) (BLINE(II),II=1,2400) 155 FORMAT (4096A1) 200 write(3,155) (BLINE(II),II=1,2400) DO 300 I=xbreak,1200 READ(1,155,end=360) (BLINE(II),II=1,2400) write(3,155)(BLINE2(II),II=2401-yshift,2400), . (BLINE(II),II=1,2400-yshift) c copy as yet unused tail of bline into bline2 for adding to front of next line. do 300 ii=2400-yshift,2400 300 bline2(ii)=bline(ii) goto 400 c fill to end with zero if premature eof: 360 j=i do 380 ii=1,1200 380 bline2(ii)=nullstr DO 400 I=J,1200 write(3,155)(BLINE2(II),II=1,2400) 400 continue CLOSE(UNIT=1) CLOSE(UNIT=3) c WRITE(6,*)'DELETE ',FILENAME,' (Y/N)' c READ(5,1200),ANSWER c IF (ANSWER(:1).NE.'Y') GOTO 5 cC IF (ANSWER(:1).NE.'Y').AND.(ANSWER(:1).NE.'y') GOTO 5 c write(6,*)'DELETING ',FILENAME c J=LIB$SPAWN('DEL '//FILENAME) cC FILENAME RETURNED BY INQUIRE, HAS VERSION #. c GOTO 5 END