Esempio n. 1
0
static void
create_me (void)
{
  /* create store */
  store = gtk_list_store_new (N_COLS, G_TYPE_INT, G_TYPE_STRING);
  g_assert (store);

  /* create view */
  view = GTK_TREE_VIEW (gtk_tree_view_new_with_model
						(GTK_TREE_MODEL (store)));
  g_assert (view);

  gtk_widget_show (GTK_WIDGET (view));

  /* add column */
  _add_column (view, C_NO, _("Line No"));
  _add_column (view, C_MESG, _("Assembler Message"));

  /* connect signals */
  g_signal_connect (view, "cursor-changed", (GCallback) cb_clicked,
					NULL);
}
Esempio n. 2
0
int main(int argc, char ** argv)
{
  if (stdout_is_piped()) // other wise you don't see the seg fault
    setup_segfault_handling(argv);
  
  assert_stdin_is_piped();
  assert_stdout_is_piped();
  //assert_stdin_or_out_is_piped();
  
  static char remove_columns_all[1000] = "";
  static char int_columns_all[1000] = "";
  static char intfromtime_columns_all[1000] = "";
  static char float_columns_all[1000] = "";
  static int output_header = 1;
  static int debug = 0;
  
  int c;
  while (1)
  {
    static struct option long_options[] = {
      {"remove", required_argument, 0, 'r'},
      {"makeint", required_argument, 0, 'i'},
      {"makeintfromtime", required_argument, 0, 't'},
      {"makefloat", required_argument, 0, 'f'},
      //{"add", no_argument, &output_header, 1},
      {"debug", no_argument, &debug, 1},
      {0, 0, 0, 0}
    };
    
    int option_index = 0;
    c = getopt_long(argc, argv, "r:i:", long_options, &option_index);
    if (c == -1) break;
    
    switch (c)
    {
      case 0: break;
      case 'r': strncpy(remove_columns_all, optarg, sizeof(remove_columns_all)); break;
      case 'i': strncpy(int_columns_all, optarg, sizeof(int_columns_all)); break;
      case 't': strncpy(intfromtime_columns_all, optarg, sizeof(intfromtime_columns_all)); break;
      case 'f': strncpy(float_columns_all, optarg, sizeof(float_columns_all)); break;
      default: abort();
    }
  }
  
  char remove_columns_copy[1000] = "";
  strncpy(remove_columns_copy, remove_columns_all, 1000);
  
  char int_columns_copy[1000] = "";
  strncpy(int_columns_copy, int_columns_all, 1000);

  char intfromtime_columns_copy[1000] = "";
  strncpy(intfromtime_columns_copy, intfromtime_columns_all, 1000);

  char float_columns_copy[1000] = "";
  strncpy(float_columns_copy, float_columns_all, 1000);
  
  int num_remove_columns = 0;
  char ** remove_columns = NULL;
  char * pch = strtok(remove_columns_all, ",");
  while (pch != NULL)
  {
    num_remove_columns++;
    remove_columns = realloc(remove_columns, sizeof(char*)*num_remove_columns);
    remove_columns[num_remove_columns-1] = pch;
    pch = strtok(NULL, ",");
  }
  
  int num_int_columns = 0;
  char ** int_columns = NULL;
  pch = strtok(int_columns_all, ",");
  while (pch != NULL)
  {
    num_int_columns++;
    int_columns = realloc(int_columns, sizeof(char*)*num_int_columns);
    int_columns[num_int_columns-1] = pch;
    pch = strtok(NULL, ",");
  }
  
  int num_intfromtime_columns = 0;
  char ** intfromtime_columns = NULL;
  pch = strtok(intfromtime_columns_all, ",");
  while (pch != NULL)
  {
    num_intfromtime_columns++;
    intfromtime_columns = realloc(intfromtime_columns, sizeof(char*)*num_intfromtime_columns);
    intfromtime_columns[num_intfromtime_columns-1] = pch;
    pch = strtok(NULL, ",");
  }
  
  int num_float_columns = 0;
  char ** float_columns = NULL;
  pch = strtok(float_columns_all, ",");
  while (pch != NULL)
  {
    num_float_columns++;
    float_columns = realloc(float_columns, sizeof(char*)*num_float_columns);
    float_columns[num_float_columns-1] = pch;
    pch = strtok(NULL, ",");
  }
  
  int i,j;
  struct Block * block = NULL;
  while ((block = read_block(stdin)))
  {
    struct Block * newblock = new_block();
    newblock = copy_all_attributes(newblock, block);
    
    if (remove_columns_copy[0] != 0)
      newblock = add_string_attribute(newblock, "remove attributes", remove_columns_copy);
    
    if (int_columns_copy[0] != 0)
      newblock = add_string_attribute(newblock, "convert columns to int", int_columns_copy);
    
    if (intfromtime_columns_copy[0] != 0)
      newblock = add_string_attribute(newblock, "convert columns to time", intfromtime_columns_copy);
    
    if (float_columns_copy[0] != 0)
      newblock = add_string_attribute(newblock, "convert columns to float", float_columns_copy);
    
    int num_remove_column_ids = 0;
    int * remove_column_ids = NULL;
    
    for (i = 0 ; i < block->num_columns ; i++)
    {
      struct Column * col = get_column(block, i);
      for (j = 0 ; j < num_remove_columns ; j++)
      {
        // fprintf(stderr, "%s(%d(%d)) vs %s(%d) = %d\n", 
        //                  column_get_name(col), col->name_length, strlen(column_get_name(col)), 
        //                  remove_columns[j], strlen(remove_columns[j]), 
        //                   strcmp(column_get_name(col), remove_columns[j]));
        if (strcmp(column_get_name(col), remove_columns[j])==0) break;
      }
      if (j == num_remove_columns) // not a column to be removed
      {
        //fprintf(stderr, "%d: %s (%d) - do not remove\n", i, column_get_name(col), strlen(column_get_name(col)));
        for (j = 0 ; j < num_int_columns ; j++)
          if (strcmp(column_get_name(col), int_columns[j])==0) break;
        int l = 0;
        for (l = 0 ; l < num_intfromtime_columns ; l++)
          if (strcmp(column_get_name(col), intfromtime_columns[l])==0) break;
        int k = 0;
        for (k = 0 ; k < num_float_columns ; k++)
          if (strcmp(column_get_name(col), float_columns[k])==0) break;

        if (j == num_int_columns && k == num_float_columns && l == num_intfromtime_columns)
        {
          num_remove_column_ids++;
          remove_column_ids = realloc(remove_column_ids, sizeof(int)*num_remove_column_ids);
          remove_column_ids[num_remove_column_ids-1] = i;
          newblock = _add_column(newblock, col->type, col->bsize, column_get_name(col));
        }
      }
    }
    
    int num_int_column_ids = 0;
    int * int_column_ids = NULL;
    
    for (i = 0 ; i < block->num_columns ; i++)
    {
      struct Column * col = get_column(block, i);
      for (j = 0 ; j < num_int_columns ; j++)
        if (strcmp(column_get_name(col), int_columns[j])==0) break;
      if (j != num_int_columns)
      {
        num_int_column_ids++;
        int_column_ids = realloc(int_column_ids, sizeof(int)*num_int_column_ids);
        int_column_ids[num_int_column_ids-1] = i;
        newblock = add_int32_column(newblock, column_get_name(col));
      }
    }
    
    int num_intfromtime_column_ids = 0;
    int * intfromtime_column_ids = NULL;
    
    for (i = 0 ; i < block->num_columns ; i++)
    {
      struct Column * col = get_column(block, i);
      for (j = 0 ; j < num_intfromtime_columns ; j++)
        if (strcmp(column_get_name(col), intfromtime_columns[j])==0) break;
      if (j != num_intfromtime_columns)
      {
        num_intfromtime_column_ids++;
        intfromtime_column_ids = realloc(intfromtime_column_ids, sizeof(int)*num_intfromtime_column_ids);
        intfromtime_column_ids[num_intfromtime_column_ids-1] = i;
        newblock = add_int32_column(newblock, column_get_name(col));
      }
    }
    
    int num_float_column_ids = 0;
    int * float_column_ids = NULL;
    
    for (i = 0 ; i < block->num_columns ; i++)
    {
      struct Column * col = get_column(block, i);
      for (j = 0 ; j < num_float_columns ; j++)
        if (strcmp(column_get_name(col), float_columns[j])==0) break;
      if (j != num_float_columns)
      {
        num_float_column_ids++;
        float_column_ids = realloc(float_column_ids, sizeof(int)*num_float_column_ids);
        float_column_ids[num_float_column_ids-1] = i;
        newblock = add_double_column(newblock, column_get_name(col));
      }
    }
    
    newblock = set_num_rows(newblock, block->num_rows);
    
    for (i = 0 ; i < newblock->num_rows ; i++)
    {
      for (j = 0 ; j < num_remove_column_ids ; j++)
      {
        void * dst = get_cell(newblock, i, j);
        void * src = get_cell(block, i, remove_column_ids[j]);
        struct Column * col = get_column(block, remove_column_ids[j]);
        
        memcpy(dst, src, col->bsize);
      }
      for (j = 0 ; j < num_int_column_ids ; j++)
      {
        set_cell_from_int32(newblock, i, j + num_remove_column_ids, get_cell_as_int32(block, i, int_column_ids[j]));
      }
      for (j = 0 ; j < num_intfromtime_column_ids ; j++)
      {
        char * cell = get_cell(block, i, intfromtime_column_ids[j]);
        int len = strlen(cell);
        if (len >= 7)
        { 
          int32_t t = atoi(&cell[len-2]) + atoi(&cell[len-5])*60 + atoi(cell)*60*60;
          set_cell_from_int32(newblock, i, j + num_remove_column_ids + num_int_column_ids, t);
        }
        else
        {
          fprintf(stderr, "ABORTING: %s expecting time to be in #:##:## format. But length invalid. (%d)\n", __func__, len);
          exit(1);
        }
      }
      for (j = 0 ; j < num_float_column_ids ; j++)
      {
        set_cell_from_double(newblock, i, j + num_remove_column_ids + num_int_column_ids + num_intfromtime_column_ids, get_cell_as_double(block, i, float_column_ids[j]));
      }
    }
    free(remove_column_ids);
    free(int_column_ids);
    free(float_column_ids);
    
    write_block(stdout, newblock);
    free_block(newblock);
    free_block(block);
  }
}
Esempio n. 3
0
int main(int argc, char ** argv)
{
	if (stdout_is_piped()) // other wise you don't see the seg fault
		setup_segfault_handling(argv);
	
	assert_stdin_is_piped();
	assert_stdout_is_piped();
	//assert_stdin_or_out_is_piped();
	
	static int join = INNER_JOIN;
	static char join_as_string[100] = "";
	static char right_file[1000] = "";
	static char left_column[100] = "";
	static char right_column[100] = "";
	static int debug = 0;
	
	struct Params * params = NULL;
	params = add_string_param(params, "join", 'j', join_as_string, 1);
	params = add_string_param(params, "right_file", 'f', right_file, 1);
	params = add_string_param(params, "left_column", 'l', left_column, 1);
	params = add_string_param(params, "right_column", 'r', right_column, 1);
	eval_params(params, argc, argv);
	
	if (strcmp(join_as_string, "left")==0) {
		join = LEFT_JOIN;
	} else if (strcmp(join_as_string, "inner")==0) {
		join = INNER_JOIN;
	} else if (strcmp(join_as_string, "right")==0) {
		join = RIGHT_JOIN;
	} else {
		fprintf(stderr, "invalid --join option, choices are: 'left', 'inner' or 'right'\n");
	}
	
	if (right_file[0] == 0 || left_column[0] == 0 || right_column[0] == 0)
	{
		fprintf(stderr, "Usage: cat left_table.b | ./join_inner --right_file=right_table.b --left_column=shape_row_id --right_column=first_hit_shape_row_id | ...");
		return EXIT_FAILURE;
	}
	
	FILE * fp = fopen(right_file, "r");
	if (fp == NULL)
	{
		fprintf(stderr, "right_file '%s' is invalid.\n", right_file);
		return EXIT_FAILURE;
	}
	struct Block * left_block = read_block(stdin);
	
	int left_block_join_column_id = get_column_id_by_name(left_block, left_column);
	if (left_block_join_column_id == -1) { fprintf(stderr, "%s: left_block didn't have column '%s'\n", argv[0], left_column); return EXIT_FAILURE; }
	//fprintf(stderr, "left_block_join_column_id = %d\n", left_block_join_column_id);
	
	struct Block * right_block = NULL;
	while ((right_block = read_block(fp)))
	{
		int right_block_join_column_id = get_column_id_by_name(right_block, right_column);
		//fprintf(stderr, "right_block_join_column_id = %d\n", right_block_join_column_id);
		if (right_block_join_column_id == -1) {
			fprintf(stderr, "%s: right_block didn't have column '%s'\n", argv[0], right_column);
			free_block(right_block);
			continue;
		}
		
		struct Column * left_column = get_column(left_block, left_block_join_column_id);
		struct Column * right_column = get_column(right_block, right_block_join_column_id);
		
		if (left_column->type != right_column->type || left_column->bsize != right_column->bsize) {
			fprintf(stderr, "columns found, but they do not match type or bsize\n");
			free_block(right_block);
			continue;
		}
		
		struct Block * join_block = new_block();
		join_block = copy_all_columns(join_block, left_block);
		join_block = copy_all_attributes(join_block, left_block);
		join_block = add_command(join_block, argc, argv);
		
		int num_columns_from_right_block = 0;
		int * column_ids_from_right_block = NULL;
		
		int i, j, k;
		for (i = 0 ; i < right_block->num_columns ; i++) {
			struct Column * column = get_column(right_block, i);
			if (get_column_id_by_name(join_block, column_get_name(column)) == -1) {
				//fprintf(stderr, "add %s\n", column_get_name(column));
				join_block = _add_column(join_block, column->type, column->bsize, column_get_name(column));
				num_columns_from_right_block++;
				column_ids_from_right_block = realloc(column_ids_from_right_block, sizeof(int)*num_columns_from_right_block);
				column_ids_from_right_block[num_columns_from_right_block-1] = i;
			}
		}
		
		for (i = 0 ; i < left_block->num_rows ; i++) {
			int found = 0;
			for (j = 0 ; j < right_block->num_rows ; j++) {
				if (memcmp(get_cell(left_block, i, left_block_join_column_id), get_cell(right_block, j, right_block_join_column_id), left_column->bsize)==0) {
					join_block = add_row_and_blank(join_block);
					
					for (k = 0 ; k < left_block->num_columns ; k++) {
						memcpy(get_cell(join_block, join_block->num_rows-1, k), get_cell(left_block, i, k), get_column(left_block, k)->bsize);
					}
					//memcpy(get_row(join_block, join_block->num_rows-1), get_row(left_block, i), left_block->row_bsize);
					
					for (k = 0 ; k < num_columns_from_right_block ; k++) {
						//fprintf(stderr, "copy cell %d over\n", column_ids_from_right_block[k]);
						memcpy(get_cell(join_block, join_block->num_rows-1, left_block->num_columns + k), get_cell(right_block, j, column_ids_from_right_block[k]), get_column(right_block, column_ids_from_right_block[k])->bsize);
					}
					found++;
				}
			}
			if (found == 0) {
				join_block = add_row_and_blank(join_block);
				for (k = 0 ; k < left_block->num_columns ; k++) {
					memcpy(get_cell(join_block, join_block->num_rows-1, k), get_cell(left_block, i, k), get_column(left_block, k)->bsize);
				}
			}
		}
		
		write_block(stdout, join_block);
		free_block(right_block);
		free_block(join_block);
	}
	free_block(left_block);
	fclose(fp);
}