Last change
on this file since 2759 was
2759,
checked in by aslmd, 2 years ago
|
adding unmodified code from WRFV3.0.1.1, expurged from useless data +1M size
|
File size:
1.5 KB
|
Line | |
---|
1 | #include <stdio.h> |
---|
2 | #include <stdlib.h> |
---|
3 | #include <stddef.h> |
---|
4 | #include "grib.h" |
---|
5 | |
---|
6 | |
---|
7 | /* wesley ebisuzaki v1.3 |
---|
8 | * |
---|
9 | * write ieee file -- big endian format |
---|
10 | * |
---|
11 | * input float *array data to be written |
---|
12 | * int n size of array |
---|
13 | * int header 1 for f77 style header 0 for none |
---|
14 | * (header is 4 byte header |
---|
15 | * FILE *output output file |
---|
16 | * |
---|
17 | * v1.2 7/97 buffered, faster |
---|
18 | * v1.3 2/99 fixed (typo) error in wrtieee_header found by |
---|
19 | * Bob Farquhar |
---|
20 | */ |
---|
21 | |
---|
22 | #define BSIZ 1024*4 |
---|
23 | |
---|
24 | int wrtieee(float *array, int n, int header, FILE *output) { |
---|
25 | |
---|
26 | unsigned long int l; |
---|
27 | int i, nbuf; |
---|
28 | unsigned char buff[BSIZ]; |
---|
29 | unsigned char h4[4]; |
---|
30 | |
---|
31 | nbuf = 0; |
---|
32 | if (header) { |
---|
33 | l = n * 4; |
---|
34 | for (i = 0; i < 4; i++) { |
---|
35 | h4[i] = l & 255; |
---|
36 | l >>= 8; |
---|
37 | } |
---|
38 | buff[nbuf++] = h4[3]; |
---|
39 | buff[nbuf++] = h4[2]; |
---|
40 | buff[nbuf++] = h4[1]; |
---|
41 | buff[nbuf++] = h4[0]; |
---|
42 | } |
---|
43 | for (i = 0; i < n; i++) { |
---|
44 | if (nbuf >= BSIZ) { |
---|
45 | fwrite(buff, 1, BSIZ, output); |
---|
46 | nbuf = 0; |
---|
47 | } |
---|
48 | flt2ieee(array[i], buff + nbuf); |
---|
49 | nbuf += 4; |
---|
50 | } |
---|
51 | if (header) { |
---|
52 | if (nbuf == BSIZ) { |
---|
53 | fwrite(buff, 1, BSIZ, output); |
---|
54 | nbuf = 0; |
---|
55 | } |
---|
56 | buff[nbuf++] = h4[3]; |
---|
57 | buff[nbuf++] = h4[2]; |
---|
58 | buff[nbuf++] = h4[1]; |
---|
59 | buff[nbuf++] = h4[0]; |
---|
60 | } |
---|
61 | if (nbuf) fwrite(buff, 1, nbuf, output); |
---|
62 | return 0; |
---|
63 | } |
---|
64 | |
---|
65 | /* write a big-endian 4 byte integer .. f77 IEEE header */ |
---|
66 | |
---|
67 | int wrtieee_header(unsigned int n, FILE *output) { |
---|
68 | unsigned h4[4]; |
---|
69 | |
---|
70 | h4[0] = n & 255; |
---|
71 | h4[1] = (n >> 8) & 255; |
---|
72 | h4[2] = (n >> 16) & 255; |
---|
73 | h4[3] = (n >> 24) & 255; |
---|
74 | |
---|
75 | putc(h4[3],output); |
---|
76 | putc(h4[2],output); |
---|
77 | putc(h4[1],output); |
---|
78 | putc(h4[0],output); |
---|
79 | |
---|
80 | return 0; |
---|
81 | } |
---|
82 | |
---|
Note: See
TracBrowser
for help on using the repository browser.