C
C Program SWAP to swap the bytes, i.e., to convert binary gridded data C (data cubes) between little-endian (PC's) and big-endian (VAX, Alpha, C RISC workstations) hardware C C Version: 5.50 C Date: 2000, November 25 C C Coded by: Ludek Klimes C Department of Geophysics, Charles University Prague, C Ke Karlovu 3, 121 16 Praha 2, Czech Republic, C http://sw3d.cz/staff/klimes.htm C C....................................................................... C C Attention: Functionality of program SWAP is strongly affected by C the Fortran compiler and by the options of the compiler. C Program SWAP can work only if the compiler supports unformatted C direct-access files "without headers". C Program SWAP uses INTEGER*1 statement, which violates Fotran 77 C standard. C C....................................................................... C C Description of data files: C C Input data read from the standard input device (*): C The data are read by the list directed input (free format) and C consist of a single string 'SEP': C 'SEP'...String in apostrophes containing the name of the input C SEP parameter or history file with the input data. C No default, 'SEP' must be specified and cannot be blank. C C C Input data file 'SEP': C File 'SEP' has the form of the SEP C parameter file. The parameters, which do not differ from their C defaults, need not be specified in file 'SEP'. C Data specifying dimensions of the input grid: C N1=positive integer... Number of gridpoints along the X1 axis. C Default: N1=1 C N2=positive integer... Number of gridpoints along the X2 axis. C Default: N2=1 C N3=positive integer... Number of gridpoints along the X3 axis. C Default: N3=1 C Names of the grid file being swapped: C IN='string'... String with the name of the input unformatted file C containing the gridded values. The file should contain C just the 4 byte IEEE reals. The length of the file is C thus exactly 4*N1*N2*N3 bytes. C No default, IN must be specified and cannot be blank. C Data specifying input/output format: C ESIZE=integer... Number of bytes per a real in the input binary C file. Must be ESIZE=4. C Default: ESIZE=4 C C======================================================================= C CHARACTER*80 FILE1 INTEGER LU1 PARAMETER (LU1=1) C INTEGER N1,N2,N3,I INTEGER*1 I1(4),I2(4) REAL AUX1,AUX2 EQUIVALENCE (I1,AUX1),(I2,AUX2) C C....................................................................... C C Reading main input data: WRITE(*,'(A)') '+SWAP: Enter input filename: ' FILE1=' ' READ(*,*) FILE1 IF (FILE1.EQ.' ') THEN C SWAP-01 CALL ERROR('SWAP-01: SEP file not given') C Input file in the form of the SEP (Stanford Exploration Project) C parameter or history file must be specified. C There is no default filename. END IF CALL RSEP1(LU1,FILE1) C C Input/output file with gridded data: CALL RSEP3T('IN',FILE1,' ') IF (FILE1.EQ.' ') THEN C SWAP-02 CALL ERROR('SWAP-02: Input file not specified') END IF CALL RSEP3I('ESIZE',I,4) IF (I.NE.4) THEN C SWAP-04 CALL ERROR('SWAP-04: Binary reals not 4-byte long') END IF C C Reading grid dimensions: CALL RSEP3I('N1',N1,1) CALL RSEP3I('N2',N2,1) CALL RSEP3I('N3',N3,1) C C Swapping: WRITE(*,'(A)') '+SWAP: Swapping... ' OPEN(LU1,FILE=FILE1,FORM='UNFORMATTED',ACCESS='DIRECT',RECL=4, * STATUS='OLD') C C Any Fortran 77 compiler (option "direct files without headers"): DO 10 I=1,N1*N2*N3 READ(LU1,REC=I) AUX1 I2(1)=I1(4) I2(2)=I1(3) I2(3)=I1(2) I2(4)=I1(1) WRITE(LU1,REC=I) AUX2 10 CONTINUE C CLOSE(LU1) WRITE(*,'(A)') '+SWAP: Done. ' STOP END C C======================================================================= C INCLUDE 'error.for' C error.for INCLUDE 'sep.for' C sep.for INCLUDE 'length.for' C length.for C C======================================================================= C