Sample* sample_dup(Sample* s) { Sample* r = g_new0(Sample, 1); r->id = s->id; r->ref_count = 0; r->sample_rate = s->sample_rate; r->length = s->length; r->frames = s->frames; r->channels = s->channels; r->bit_depth = s->bit_depth; r->bit_rate = s->bit_rate; r->peaklevel = s->peaklevel; r->colour_index = s->colour_index; r->online = s->online; r->mtime = s->mtime; #define DUPSTR(P) if (s->P) r->P = strdup(s->P); DUPSTR(sample_dir) DUPSTR(name) DUPSTR(full_path) DUPSTR(keywords) DUPSTR(ebur) DUPSTR(notes) DUPSTR(mimetype) r->meta_data = s->meta_data ? g_ptr_array_ref(s->meta_data) : NULL; if (s->overview) r->overview = gdk_pixbuf_copy(s->overview); sample_ref(r); return r; }
static void parse_track_header(void) { char *str; int column = -1; route_head *trk; bind_fields(track_header); trk = route_head_alloc(); while ((str = csv_lineparse(NULL, "\t", "", column++))) { int field_no = header_fields[track_header][column]; switch(field_no) { case 1: trk->rte_name = DUPSTR(str); break; case 6: trk->rte_url = DUPSTR(str); break; } } track_add_head(trk); current_trk = trk; }
static void parse_route_header(void) { char *str; int column = -1; route_head *rte; rte = route_head_alloc(); bind_fields(route_header); while ((str = csv_lineparse(NULL, "\t", "", column++))) { int field_no = header_fields[route_header][column]; switch(field_no) { case 1: rte->rte_name = DUPSTR(str); break; case 5: rte->rte_url = DUPSTR(str); break; } } route_add_head(rte); current_rte = rte; }
static void parse_waypoint(void) { char *str; int column = -1; waypoint *wpt; garmin_fs_p gmsd = NULL; bind_fields(waypt_header); wpt = waypt_new(); gmsd = garmin_fs_alloc(-1); fs_chain_add(&wpt->fs, (format_specific_data *) gmsd); while ((str = csv_lineparse(NULL, "\t", "", column++))) { int i, dynamic; double d; int field_no = header_fields[waypt_header][column]; switch(field_no) { case 1: wpt->shortname = DUPSTR(str); break; case 2: wpt->notes = DUPSTR(str); break; case 3: for (i = 0; i <= gt_waypt_class_map_line; i++) { if (case_ignore_strcmp(str, gt_waypt_class_names[i]) == 0) { GMSD_SET(wpt_class, i); break; } } break; case 4: parse_coordinates(str, datum_index, grid_index, &wpt->latitude, &wpt->longitude, MYNAME); break; case 5: if (parse_distance(str, &d, 1, MYNAME)) wpt->altitude = d; break; case 6: if (parse_distance(str, &d, 1, MYNAME)) WAYPT_SET(wpt, depth, d); break; case 7: if (parse_distance(str, &d, 1, MYNAME)) WAYPT_SET(wpt, proximity, d); break; case 8: if (parse_temperature(str, &d)) WAYPT_SET(wpt, temperature, d); break; case 9: if (parse_display(str, &i)) GMSD_SET(display, i); break; case 10: break; /* skip color */ case 11: i = gt_find_icon_number_from_desc(str, GDB); GMSD_SET(icon, i); wpt->icon_descr = gt_find_desc_from_icon_number(i, GDB, &dynamic); wpt->wpt_flags.icon_descr_is_dynamic = dynamic; break; case 12: GMSD_SETSTR(facility, str); break; case 13: GMSD_SETSTR(city, str); break; case 14: GMSD_SETSTR(state, str); break; case 15: GMSD_SETSTR(country, str); GMSD_SETSTR(cc, gt_get_icao_cc(str, wpt->shortname)); break; case 16: parse_date_and_time(str, &wpt->creation_time); break; case 17: wpt->url = DUPSTR(str); break; case 18: GMSD_SET(category, parse_categories(str)); break; default: break; } } waypt_add(wpt); }