Example #1
0
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();

}
Example #7
0
/**
	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);
}