// for _any we must return one by one static int point_attr_get(void *priv_data, enum attr_type attr_type, struct attr *attr) { struct gobject *g = priv_data; struct map_rect_priv *mr = g->priv_data; int rc; switch (attr_type) { case attr_any: if (g != mr->last_oattr) { mr->last_oattr = g; mr->last_attr = 0; } switch(mr->last_attr) { case 0: mr->last_attr++; attr->type = attr_label; rc = garmin_object_label(g, attr); if (rc) return rc; case 1: mr->last_attr++; attr->type = attr_debug; rc = garmin_object_debug(g, attr); if (rc) return rc; default: return 0; } break; case attr_label: attr->type = attr_label; return garmin_object_label(g, attr); case attr_limit: return 0; default: dlog(1, "Dont know about attribute %d[%04X]=%s yet\n", attr_type,attr_type, attr_to_name(attr_type)); } return 0; }
static int search_attr_get(void *priv_data, enum attr_type attr_type, struct attr *attr) { struct gobject *g = priv_data; struct map_rect_priv *mr = g->priv_data; int rc; switch (attr_type) { case attr_any: if (g != mr->last_oattr) { mr->last_oattr = g; mr->last_attr = 0; } switch(mr->last_attr) { case 0: mr->last_attr++; attr->type = attr_label; rc = garmin_object_label(g, attr); if (rc) return rc; case 1: mr->last_attr++; attr->type = attr_debug; rc = garmin_object_debug(g, attr); if (rc) return rc; case 2: mr->last_attr++; if (g->type == GO_POLYLINE) { attr->type = attr_street_name; rc = garmin_object_label(g, attr); if (rc) return rc; } case 3: mr->last_attr++; attr->type = attr_flags; attr->u.num = 0; rc = gar_object_flags(g); if (rc & F_ONEWAY) attr->u.num |= AF_ONEWAY; if (rc & F_SEGMENTED) attr->u.num |= AF_SEGMENTED; return 1; default: return 0; } break; case attr_label: attr->type = attr_label; return garmin_object_label(g, attr); case attr_town_name: attr->type = attr_town_name; if (mr->label) free(mr->label); mr->label = gar_srch_get_city(g); attr->u.str = mr->label; if (attr->u.str) return 1; return 0; case attr_town_id: rc = gar_srch_get_cityid(g); if (rc) { attr->type = attr_town_id; attr->u.num = rc; return 1; } return 0; case attr_town_postal: attr->type = attr_town_postal; attr->u.str = gar_srch_get_zip(g); if (attr->u.str) return 1; return 0; case attr_street_name: attr->type = attr_street_name; if (mr->label) free(mr->label); mr->label = gar_srch_get_roadname(g); attr->u.str = mr->label; if (attr->u.str) return 1; return 0; case attr_street_id: attr->type = attr_street_id; attr->u.num = gar_srch_get_roadid(g); if (attr->u.num) return 1; return 0; case attr_flags: attr->type = attr_flags; attr->u.num = 0; rc = gar_object_flags(g); if (rc & F_ONEWAY) attr->u.num |= AF_ONEWAY; if (rc & F_SEGMENTED) attr->u.num |= AF_SEGMENTED; return 1; case attr_country_id: rc = gar_srch_get_countryid(g); if (rc) { attr->type = attr_country_id; attr->u.num = rc; return 1; } return 0; case attr_country_name: attr->type = attr_country_name; attr->u.str = gar_srch_get_country(g); if (attr->u.str) return 1; return 0; case attr_district_id: rc = gar_srch_get_regionid(g); if (rc) { attr->type = attr_district_id; attr->u.num = rc; return 1; } return 0; case attr_district_name: attr->type = attr_district_name; attr->u.str = gar_srch_get_region(g); if (attr->u.str) return 1; return 0; case attr_town_streets_item: return 0; default: dlog(1, "Dont know about attribute %d[%04X]=%s yet\n", attr_type,attr_type, attr_to_name(attr_type)); } return 0; }
// for _any we must return one by one static int point_attr_get(void *priv_data, enum attr_type attr_type, struct attr *attr) { struct gobject *g = priv_data; struct map_rect_priv *mr = g->priv_data; int rc; switch (attr_type) { case attr_any: if (g != mr->last_oattr) { mr->last_oattr = g; mr->last_attr = 0; } switch(mr->last_attr) { case 0: mr->last_attr++; attr->type = attr_label; rc = garmin_object_label(g, attr); if (rc) return rc; case 1: mr->last_attr++; attr->type = attr_debug; rc = garmin_object_debug(g, attr); if (rc) return rc; case 2: mr->last_attr++; if (g->type == GO_POLYLINE) { attr->type = attr_street_name; rc = garmin_object_label(g, attr); if (rc) return rc; } case 3: mr->last_attr++; attr->type = attr_flags; attr->u.num = 0; rc = gar_object_flags(g); if (rc & F_ONEWAY) attr->u.num |= AF_ONEWAY; if (rc & F_SEGMENTED) attr->u.num |= AF_SEGMENTED; return 1; default: return 0; } break; case attr_label: attr->type = attr_label; return garmin_object_label(g, attr); case attr_town_name: attr->type = attr_town_name; return garmin_object_label(g, attr); case attr_street_name: attr->type = attr_street_name; return garmin_object_label(g, attr); case attr_flags: attr->type = attr_flags; attr->u.num = 0; rc = gar_object_flags(g); if (rc & F_ONEWAY) attr->u.num |= AF_ONEWAY; if (rc & F_SEGMENTED) attr->u.num |= AF_SEGMENTED; return 1; default: dlog(1, "Dont know about attribute %d[%04X]=%s yet\n", attr_type,attr_type, attr_to_name(attr_type)); } return 0; }