C C C MARXER.FOR C* ********************************************** C COMMON //NX,NY,NZ,IXMIN,IYMIN,IZMIN,IXMAX,IYMAX,IZMAX DIMENSION NXYZ(3),MXYZ(3),NXYZST(3) CHARACTER*80 TITLE DIMENSION IXYZMIN(3),IXYZMAX(3),OUT(9998) DIMENSION LABELS(20,10),CELL(6) COMPLEX CLINE(4999),COUT(4999) CHARACTER*50 INFILE,OUTFILE,FILENAME CHARACTER*40 FNAME,ASTRING CHARACTER*1 BLINE(2400),OUTSTRING(1200),HSTRING(16),BOXFLAG INTEGER*2 ILINE(1200),H,K,L,N LOGICAL EFLG EQUIVALENCE (NX,NXYZ), (ALINE,CLINE), (OUT,COUT), (BLINE,ILINE) EQUIVALENCE (IXYZMIN, IXMIN), (IXYZMAX, IXMAX) CHARACTER*12 AQDATE, AQTIME CHARACTER DAT*12,TIM*12 EQUIVALENCE (AQDATE,BLINE(101)),(AQTIME,BLINE(113)) REAL*4 LAMBDA,DISTANCE,PHI_START,PHI_END EQUIVALENCE (LAMBDA,BLINE(77)),(DISTANCE,BLINE(81)),(PHI_START, - BLINE(85)),(PHI_END,BLINE(89)) R64K=256*256 R32K=128*256 DATA HSTRING/'0','1','2','3','4','5','6','7','8','9','A','B','C', - 'D','E','F'/ DATA NXYZST/3*0/, CNV/57.29578/ c DO 2 I=1,16 c2 WRITE(6,*)I,' ',HSTRING(I) WRITE(6,1000) 1000 FORMAT(//' MAR RESEARCH TO POSTSCRIPT IMAGE FILE CONVERSION . PROGRAM Version 920704'/' To print image: LPR MARXER.TMP') 5 WRITE(6,1100) 1100 FORMAT(/'$Input filename (CR to quit): ') READ(5,1200) INFILE 1200 FORMAT(A) IF (INFILE(:5).EQ.' ') STOP INQUIRE(FILE=INFILE, NAME=FILENAME,EXIST=EFLG) IF (.NOT.EFLG) GOTO 5 OPEN (UNIT=2,FILE=INFILE,readonly,STATUS='OLD') WRITE(6,*)FILENAME WRITE(6,*)'Enter "1" to get density mean, range; (0) to skip it.' READ(5,*)XM CALL DATE(DAT) CALL TIME(TIM) C FIND MIN, MAX, MEAN DENSITY DMEAN=0 DMAX=-1E32 DMIN=1E32 NXYZ(1)=1200 NXYZ(2)=1200 NXYZ(3)=1 C read HEADER into bline, encode into titles: READ(2,155) (BLINE(II),II=1,2400) 155 FORMAT (4096A1) call byteswapr4(DISTANCE) call byteswapr4(LAMBDA) call byteswapr4(PHI_START) call byteswapr4(PHI_END) C TYPE *,'TIME: ',AQTIME C TYPE *,'DISTANCE: ',DISTANCE C TYPE *,'LAMBDA: ',LAMBDA C TYPE *,'PHI_START: ',PHI_START C TYPE *,'PHI_END: ',PHI_END ENCODE(80,6740,TITLE) AQDATE,AQTIME 6740 FORMAT('MAR IPS image of: ',2A20) WRITE(6,72)TITLE 72 FORMAT(' ',A80) C write(3,'(A)') '50 752 moveto ('//title//') show' ENCODE(80,6741,TITLE) LAMBDA,DISTANCE,PHI_START,PHI_END 6741 FORMAT('LAMBDA: ',F11.4,' DISTANCE:',F9.2,' PHI:',2F9.2) WRITE (6,72)TITLE C write(3,'(A)') '50 742 moveto ('//title//') show' IF (XM.EQ.0) GOTO 87 TYPE *,'READING IMAGE. FINDING MIN, MAX DENSITY' DO 85 IZ = 1,NZ DO 85 IY = 1,NY READ(2,155) (BLINE(II),II=1,2400) DO 80 IX=1,NX C TYPE *, ILINE(IX) X=ILINE(IX) IF (X.LT.0)X=X+R64K DMEAN=DMEAN+X IF (X.GT.DMAX) DMAX=X 80 IF (X.LT.DMIN) DMIN=X 85 CONTINUE DMEAN=DMEAN/(NX*NY*NZ) ENCODE(80,6750,TITLE) DMIN,DMAX,DMEAN 6750 FORMAT('MHEADER V920927: Min/Max/mean density = ',2f8.0,f8.2) write(6,*) title 87 CLOSE(UNIT=2) GOTO 5 END subroutine byteswapr4(value) real*4 value,exch1,exch2 character*1 exbyt1(4),exbyt2(4) equivalence (exch1,exbyt1(1)) equivalence (exch2,exbyt2(1)) exch1=value exbyt2(1)=exbyt1(2) exbyt2(2)=exbyt1(1) exbyt2(3)=exbyt1(4) exbyt2(4)=exbyt1(3) c value= exch2*4.0 !if run on vms-type machine (but file access needs fixing) value= exch2/4.0 !if run on unix machine return end c----------------------------------------- subroutine byteswapi4(value) integer*4 value,exch1,exch2 character*1 exbyt1(4),exbyt2(4) equivalence (exch1,exbyt1(1)) equivalence (exch2,exbyt2(1)) exch1=value exbyt2(1)=exbyt1(2) exbyt2(2)=exbyt1(1) exbyt2(3)=exbyt1(4) exbyt2(4)=exbyt1(3) value= exch2 return end c----------------------------------------- subroutine byteswapi2(value) real*4 value,exch1,exch2 character*1 exbyt1(2),exbyt2(2) equivalence (exch1,exbyt1(1)) equivalence (exch2,exbyt2(1)) exch1=value exbyt2(1)=exbyt1(2) exbyt2(2)=exbyt1(1) value= exch2 return end