File: read_any.c

package info (click to toggle)
grib-api 1.9.0-1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 28,008 kB
  • ctags: 10,015
  • sloc: ansic: 63,157; sh: 9,355; f90: 2,545; makefile: 2,496; yacc: 519; perl: 240; lex: 217
file content (69 lines) | stat: -rw-r--r-- 1,703 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include "grib_api_internal.h"

void usage(char* prog) {
  printf("usage: %s infile\n",prog);
  exit(1);
}

int main(int argc,char* argv[]) {

  char* filename;
  FILE* f;
  unsigned char buffer[50000000];
  grib_handle* h=NULL;
  grib_context* c;
  size_t size=0;
  int ret=0;
  size_t bufsize=sizeof(buffer);
  long count,step,edition,totalLength;
  char gridType[50],levelType[50],level[50],shortName[50];
  size_t gridTypelen=sizeof(gridType);
  size_t levelTypelen=sizeof(levelType);
  size_t levellen=sizeof(level);
  size_t shortNamelen=sizeof(shortName);
  size_t len;

  if (argc!=2) usage(argv[0]);
  filename=argv[1];

  f=fopen(filename,"r");
  if (!f) {
    perror(filename);
	exit(1);
  }
  c=grib_context_get_default();

  size=bufsize;
  count=1;
  while ((ret=grib_read_any_from_file(c,f,buffer,&size))==GRIB_SUCCESS) {
	if (1) {
		h=grib_handle_new_from_message_copy(c,buffer,size);
		if (!h) {
		  printf("unable to new from message\n");
		  exit(1);
		} else {
		  grib_get_long(h,"edition",&edition);
		  grib_get_long(h,"step",&step);
		  grib_get_long(h,"totalLength",&totalLength);
		  len=gridTypelen;
		  grib_get_string(h,"gridType",gridType,&len);
		  len=levelTypelen;
		  GRIB_CHECK(grib_get_string(h,"levelType",levelType,&len),0);
		  len=levellen;
		  grib_get_string(h,"level",level,&len);
		  len=shortNamelen;
		  grib_get_string(h,"shortName",shortName,&len);
		  printf("- %3ld -\t ed=%ld\t size=%8d totalLength=%8ld \t %s\t %s\t %s\t level=%s\t step=%ld\n",
		  	count,edition,size,totalLength,shortName,gridType,levelType,level,step); 
		  grib_handle_delete(h);
		}
	} else { 
		printf("MESSAGE #%ld\n",count);
	}
    size=bufsize;
	count++;
  }

  return 0;

}