four2eight.c
References to this file elsewhere.
1 /* Jan. 2005.
2
3 A utility that converts unformatted binary real data files
4 to unformatted binary double precision data files.
5
6 Compile as
7
8 cc -o four2eight four2eight.c
9
10 If you are running this on a little-endian platform
11 compile with -DSWAP like so:
12
13 cc -o four2eight -DSWAP four2eight.c
14
15 Use as
16
17 four2eight < RRTM_DATA > RRTM_DATA_DBL (for example)
18
19 JM
20
21 */
22
23
24 #include <stdio.h>
25
26 main()
27 {
28 int in, cr, cr1, n ;
29 int i ;
30 float x, x1 ;
31 double y, y1 ;
32
33 while (
34 fread( &in, 1, 4, stdin ) > 0 ) {
35 swap4(&in, &cr) ;
36 n = cr ;
37 cr1 = 2*cr ;
38 fprintf(stderr, "%d > %d\n",cr,cr1) ;
39 swap4(&cr1,&cr) ;
40 fwrite( &cr, 1, 4, stdout ) ;
41 for ( i = 0 ; i < n ; i += 4 )
42 {
43 fread ( &x, 1, 4, stdin ) ;
44 swap4(&x,&x1) ;
45 y1 = x1 ;
46 swap8(&y1,&y) ;
47 fwrite ( &y, 1, 8, stdout ) ;
48 }
49 fread( &in, 1, 4, stdin ) ;
50 fwrite( &cr, 1, 4, stdout ) ;
51 }
52 fprintf(stderr,"\n") ;
53 }
54
55 swap4( a, b )
56 char a[], b[] ;
57 {
58 #ifdef SWAP
59 b[0] = a[3] ;
60 b[1] = a[2] ;
61 b[2] = a[1] ;
62 b[3] = a[0] ;
63 #else
64 b[0] = a[0] ;
65 b[1] = a[1] ;
66 b[2] = a[2] ;
67 b[3] = a[3] ;
68 #endif
69 }
70
71 swap8( a, b )
72 char a[], b[] ;
73 {
74 #ifdef SWAP
75 b[0] = a[7] ;
76 b[1] = a[6] ;
77 b[2] = a[5] ;
78 b[3] = a[4] ;
79 b[4] = a[3] ;
80 b[5] = a[2] ;
81 b[6] = a[1] ;
82 b[7] = a[0] ;
83 #else
84 b[0] = a[0] ;
85 b[1] = a[1] ;
86 b[2] = a[2] ;
87 b[3] = a[3] ;
88 b[4] = a[4] ;
89 b[5] = a[5] ;
90 b[6] = a[6] ;
91 b[7] = a[7] ;
92 #endif
93 }
94