From 6e2c2fee8cacb353d58fb10e489f45131d223826 Mon Sep 17 00:00:00 2001 From: Andy Spencer Date: Mon, 9 Jun 2008 04:38:11 +0000 Subject: [PATCH] init function, level-2 parseing template --- src/aweather.c | 6 ++-- src/cube.c | 7 ++++ src/level2.c | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 100 insertions(+), 3 deletions(-) create mode 100644 src/level2.c diff --git a/src/aweather.c b/src/aweather.c index c96cf19..6680850 100644 --- a/src/aweather.c +++ b/src/aweather.c @@ -57,9 +57,9 @@ int main(int argc, char *argv[]) GdkGLConfig *glconfig = gdk_gl_config_new_by_mode(GDK_GL_MODE_RGB | GDK_GL_MODE_DEPTH | GDK_GL_MODE_DOUBLE); if (!glconfig) g_assert_not_reached(); if (!gtk_widget_set_gl_capability(drawing, glconfig, NULL, TRUE, GDK_GL_RGBA_TYPE)) g_assert_not_reached(); - g_signal_connect(drawing, "configure-event", G_CALLBACK(configure), NULL); - g_signal_connect(drawing, "expose-event", G_CALLBACK(expose), NULL); - g_timeout_add(1000/60, rotate, drawing); + + /* Load plugins */ + cube_init(drawing); gtk_widget_show_all(window); gtk_main(); diff --git a/src/cube.c b/src/cube.c index 9465938..1a13e05 100644 --- a/src/cube.c +++ b/src/cube.c @@ -143,3 +143,10 @@ gboolean rotate (gpointer user_data) return TRUE; } + +gboolean cube_init(GtkDrawingArea *drawing) +{ + g_signal_connect(drawing, "configure-event", G_CALLBACK(configure), NULL); + g_signal_connect(drawing, "expose-event", G_CALLBACK(expose), NULL); + g_timeout_add(1000/60, rotate, drawing); +} diff --git a/src/level2.c b/src/level2.c new file mode 100644 index 0000000..9259a14 --- /dev/null +++ b/src/level2.c @@ -0,0 +1,90 @@ +/* Prototype stuff for parsing Level-II data */ + +#include +#include +#include +#include +#include + +struct packet { + short junk1[6]; + unsigned short size; + unsigned char id, type; + unsigned short seq, gen_date; + unsigned int gen_time; + unsigned short num_seg, seg; + unsigned int coll_time; + unsigned short coll_date, range, angle, radial, rad_status, elev_angle; + unsigned short elev_num; + short first_refl, first_dopp; + unsigned short refl_size, dopp_size; + unsigned short num_refl_gate, num_dopp_gate, sector; + float gain; + unsigned short refl_ptr, vel_ptr, spec_ptr, dopp_res, pattern; + short junk2[4]; + unsigned short refl_ptr_rda, vel_ptr_rda, spec_ptr_rda, nyquist, atten; + short thresh; + short junk3[17]; + unsigned char data[2304]; + float dbz[460]; +}; + +typedef struct { + /* 24 bytes */ + char version[4]; + char unknown0[16]; + char station[4]; +} __attribute__ ((packed)) header_t; + +int main(int argc, char **argv) +{ + if (argc < 2) { + printf("usage: %s \n", argv[0]); + return 0; + } + + /* Read header */ + FILE *fd = fopen(argv[1], "r"); + if (fd == NULL) + error(1, errno, "Error opening files `%s'", argv[1]); + header_t header; + if (1 != fread(&header, sizeof(header_t), 1, fd)) + error(1, errno, "Error reading header"); + + /* Cut up the bzips */ + int file_num = 0; + char filename[16]; + char *buf = NULL; + FILE *outfile = NULL; + unsigned int size = 0; + + while ((int)size >= 0) { + if (1 != fread(&size, 4, 1, fd)) + break; //error(1, errno, "Error reading size, pos=%x", (unsigned int)ftell(fd)); + size = ntohl(size); + + /* Read data */ + ; + if (NULL == (buf = (char *)realloc(buf, size))) + error(1, errno, "cannot allocate `%d' bytes for buffer", size); + if (size != fread(buf, 1, size, fd)) + error(1, errno, "error reading from input file"); + + /* Decmopress data */ + //char *block = (char *)malloc(8192), *oblock = (char *)malloc(262144); + //error = BZ2_bzBuffToBuffDecompress(oblock, &olength, block, length, 0, 0); + + /* Write data */ + snprintf(filename, 16, "%d.bz2", file_num); + outfile = fopen(filename, "w+"); + fwrite(buf, 1, size, outfile); + fclose(outfile); + + //fprintf(stderr, "wrote `%d' bytes to file `%s'\n", size, filename); + + /* iterate */ + file_num++; + } + + return 0; +} -- 2.43.2