int main(int argc, char *argv[]) { kdu_customize_warnings(&pretty_cout); kdu_customize_errors(&pretty_cerr); kdu_args args(argc,argv,"-s"); if ((args.get_first() == NULL) || (args.find("-usage") != NULL)) print_usage(args.get_prog_name(),true); if (args.find("-u") != NULL) print_usage(args.get_prog_name(),false); bool quiet = false; if (args.find("-quiet") != NULL) { quiet = true; args.advance(); } kd_message *messages=NULL; while (args.find("-i") != NULL) { const char *string = args.advance(); if (string == NULL) { kdu_error e; e << "The \"-i\" argument requires an input file name."; } FILE *in = fopen(string,"r"); if (in == NULL) { kdu_error e; e << "Cannot open input file, \"" << string << "\"."; } process_input_file(in,messages,string,quiet); fclose(in); args.advance(); } if (args.find("-o") != NULL) { const char *string = args.advance(); if (string == NULL) { kdu_error e; e << "The \"-o\" argument requires an output file name."; } FILE *out = fopen(string,"w"); if (out == NULL) { kdu_error e; e << "Cannot open output file, \"" << string << "\"."; } generate_output_file(out,messages,string,quiet); fclose(out); args.advance(); } if (args.show_unrecognized(pretty_cout) != 0) { kdu_error e; e << "There were unrecognized command line arguments!"; } return 0; }
END_TEST START_TEST(test_nsdata_count) { hid_t fid, sid; herr_t err; int iseed = 0xaa44; char data_name[32]; int cnt; int gen_cnt, idx; int data; int size; generate_output_file(&fid,&sid); fail_unless(H5_ISA_VALID_ID(sid) && H5_ISA_VALID_ID(fid), "failed to generate test file"); printf("line=%d sid=0x%lx\n", __LINE__,sid); err = data_count(sid,&cnt); fail_unless(H5_RETURN_OK(err), "Failed to return success status"); fail_unless(cnt == 0, "Failed to return correct count (0)"); printf("line=%d sid=0x%lx\n", __LINE__,sid); data = generate_random_int(&iseed); size = 1; //gen_cnt = generate_random_bound_int(10,1024,&iseed); gen_cnt=1; for(idx=0; idx < gen_cnt; idx++) { sprintf(data_name, "Data Mu %04d",idx); data_write_int(sid,data_name,1,&size,&data); } printf("line=%d sid=0x%lx\n", __LINE__,sid); err = data_count(sid,&cnt); fail_unless(H5_RETURN_OK(err), "Failed to return success status"); fail_unless(cnt == gen_cnt, "Failed to return correct count (<0)"); printf("line=%d sid=0x%lx\n", __LINE__,sid); danu_group_close(sid); output_file_close(&fid); //file_delete(); }
END_TEST START_TEST (test_nsdata_read_int) { hid_t fid, sid; char data_name[] = "Test Non-Series INT"; int iseed = 2090; herr_t err; int dim = generate_random_bound_int(1,3,&iseed); int *dimensions; int *data, *read_data; int data_size,idx; generate_output_file(&fid,&sid); dimensions = DANU_MALLOC(int,dim); data_size = 1; for(idx=0; idx < dim; idx++) { dimensions[idx] = generate_random_bound_int(10,1024,&iseed); data_size*=dimensions[idx]; } data = DANU_MALLOC(int,data_size); read_data = DANU_MALLOC(int,data_size); generate_random_int_data(data,data_size,&iseed); data_write_int(sid,data_name,dim, dimensions,data); output_file_close(&fid); open_file(&fid,&sid); data_read_int(sid,data_name,dim,dimensions,read_data); fail_unless(memcmp(read_data,data,sizeof(int)*data_size) == 0, "Failed to read correct INT data"); DANU_FREE(dimensions); DANU_FREE(data); DANU_FREE(read_data); file_delete(); }
END_TEST START_TEST(test_nsdata_exists) { hid_t fid, sid; herr_t err; char data_name[] = "Data DNE"; int exists; int iseed = 0x44508; int data; int size; generate_output_file(&fid,&sid); err = data_exists(sid,data_name,&exists); fail_unless(H5_RETURN_OK(err), "Failed to return success status"); fail_unless(exists == 0, "Failed to return correct exists flag (F)"); data = generate_random_int(&iseed); size = 1; data_write_int(sid,data_name,1,&size,&data); err = data_exists(sid,data_name,&exists); fail_unless(H5_RETURN_OK(err), "Failed to return success status"); fail_unless(exists != 0, "Failed to return correct exists flag (T)"); danu_group_close(sid); output_file_close(&fid); file_delete(); }
END_TEST START_TEST (test_nsdata_write_float) { hid_t fid, sid; char data_name[] = "Test Non-Series FLOAT"; int iseed = 10; herr_t err; int dim = generate_random_bound_int(1,3,&iseed); int *dimensions; float *data; int data_size,idx; generate_output_file(&fid,&sid); dimensions = DANU_MALLOC(int,dim); data_size = 1; for(idx=0; idx < dim; idx++) { dimensions[idx] = generate_random_bound_int(10,1024,&iseed); data_size*=dimensions[idx]; } data = DANU_MALLOC(float,data_size); generate_random_float_data(data,data_size,&iseed); err = data_write_float(sid,data_name,dim, dimensions, data); fail_unless(H5_RETURN_OK(err), "Failed to write non-series int data"); DANU_FREE(dimensions); DANU_FREE(data); file_delete(); }
END_TEST START_TEST(test_nsdata_list) { hid_t fid, sid; herr_t err; int iseed = 0xaa44; char **data_names; char **read_names; int gen_cnt, read_size, idx, num_found; int data; int size; generate_output_file(&fid,&sid); data = generate_random_int(&iseed); size = 1; gen_cnt = generate_random_bound_int(10,1024,&iseed); data_names = DANU_MALLOC(char *, gen_cnt); for(idx=0; idx < gen_cnt; idx++) { data_names[idx] = DANU_MALLOC(char, 32); sprintf(data_names[idx], "Data Mu %04d",idx); data_write_int(sid,data_names[idx],1,&size,&data); } read_names = DANU_MALLOC(char *, gen_cnt); err = data_list(sid,gen_cnt,read_names,&num_found); fail_unless(H5_RETURN_OK(err), "Failed to return success status"); fail_unless(num_found == gen_cnt, "Failed to find the correct number in data_list"); fail_unless(char_array_cmp(read_names,data_names,gen_cnt) == 0, "Failed to read data names"); DANU_FREE(read_names); read_size = gen_cnt / 2; read_names = DANU_MALLOC(char *, read_size); err = data_list(sid,read_size,read_names, &num_found); fail_unless(H5_RETURN_FAIL(err), "Failed to return fail status when array too small"); fail_unless(num_found == gen_cnt, "Failed to find correct number in data_list"); fail_unless(char_array_cmp(read_names,data_names,read_size) == 0, "Failed to read data names"); danu_group_close(sid); output_file_close(&fid); file_delete(); }
/** LB_notification callback - updates the status of each client @param lb_fd(in) - FD that event occcurred on @param msg_id(in) - message id that has changed @param msg_len(in) - message length @param user_data - user data, should be NULL */ void on_lb_change(int lb_fd, LB_id_t msg_id, int msg_len, void* user_data) { int retval; Prod_header* product; static char* file_name = NULL; char text[100]; struct tm* time; float elevation; int i; int rda_elev_indx; prod_count++; retval = LB_read(lb_fd, (void*)&product, LB_ALLOC_BUF, msg_id); if (retval >= 0) { LE_send_msg(GL_INFO, "Generated product id %d, msg id = %d\n", product->g.prod_id, msg_id); LE_send_msg(GL_INFO, "Product code = %d\n", ORPGPAT_get_code(product->g.prod_id)); LE_send_msg(GL_INFO, "Prod desc = %s\n", ORPGPAT_get_description(product->g.prod_id, STRIP_MNEMONIC)); LE_send_msg(GL_INFO, "Prod count = %d\n", prod_count); if (!select_product(ORPGPAT_get_code(product->g.prod_id))) { LE_send_msg(GL_INFO, "Product code %d not selected for extraction", ORPGPAT_get_code(product->g.prod_id)); return; } else LE_send_msg(GL_INFO, "Product code %d is selected for extraction", ORPGPAT_get_code(product->g.prod_id)); file_name = STR_copy(file_name, ORPGPAT_get_description(product->g.prod_id, STRIP_MNEMONIC)); for (i = 0; (i < strlen(file_name)); i++) { if ((isspace((int)file_name[i])) || (file_name[i] == ':') || (file_name[i] == '/')) file_name[i] = '_'; else if (file_name[i] == '.') file_name[i] = '.'; else if (!isalnum((int)file_name[i])) { file_name[i] = '\0'; break; } } rda_elev_indx = ORPGVST_get_rda_index(product->g.elev_ind); elevation = ((float)ORPGVST_get_elevation(rda_elev_indx)) / 10.0; LE_send_msg(GL_INFO, "Elev index = %d, rda elev indx = %d, elevation = %f", rda_elev_indx, product->g.elev_ind, elevation); if (ORPGPAT_get_type(product->g.prod_id) == 0) elevation = 0.0; sprintf(text, "_%2.1f", elevation); file_name = STR_cat(file_name, text); time = gmtime((const time_t*)&product->elev_t); sprintf(text, "_%4.4d%2.2d%2.2d_%2.2d%2.2d%2.2d", time->tm_year + 1900, time->tm_mon + 1, time->tm_mday, time->tm_hour, time->tm_min, time->tm_sec); file_name = STR_cat(file_name, text); LE_send_msg(GL_INFO, "File_name=%s\n", file_name); LE_send_msg(GL_INFO, "Size of msg=%d, size of product=%d\n", retval, product->g.len); if (product->g.len > 0) { LE_send_msg(GL_INFO, "Writing %s format\n", orpg_format?"ORPG":"ICD"); if (orpg_format) generate_output_file(file_name, ((char*)product), product->g.len); else generate_output_file(file_name, ((char*)product) + sizeof(Prod_header), product->g.len - sizeof(Prod_header)); if (index_name != NULL) generate_xml_string(product, file_name); } else LE_send_msg(GL_INFO, "Skip writing file %s because size is %d\n", file_name, product->g.len); free(product); } else LE_send_msg(GL_INFO, "Read error %d on msg id %d\n", retval, msg_id); }