コード例 #1
0
ファイル: parse-xml.c プロジェクト: syuxue/subsurface
/* We're in samples - try to convert the random xml value to something useful */
static void try_to_fill_sample(struct sample *sample, const char *name, char *buf)
{
	int len = strlen(name);
	int in_deco;

	start_match("sample", name, buf);
	if (MATCH(".sample.pressure", pressure, &sample->cylinderpressure))
		return;
	if (MATCH(".sample.cylpress", pressure, &sample->cylinderpressure))
		return;
	if (MATCH(".sample.cylinderindex", get_cylinderindex, &sample->sensor))
		return;
	if (MATCH(".sample.sensor", get_sensor, &sample->sensor))
		return;
	if (MATCH(".sample.depth", depth, &sample->depth))
		return;
	if (MATCH(".sample.temp", temperature, &sample->temperature))
		return;
	if (MATCH(".sample.temperature", temperature, &sample->temperature))
		return;
	if (MATCH(".sample.sampletime", sampletime, &sample->time))
		return;
	if (MATCH(".sample.time", sampletime, &sample->time))
		return;
	if (MATCH(".sample.ndl", sampletime, &sample->ndl))
		return;
	if (MATCH(".sample.in_deco", get_index, &in_deco)) {
		sample->in_deco = (in_deco == 1);
		return;
	}
	if (MATCH(".sample.stoptime", sampletime, &sample->stoptime))
		return;
	if (MATCH(".sample.stopdepth", depth, &sample->stopdepth))
		return;
	if (MATCH(".sample.cns", get_index, &sample->cns))
		return;
	if (MATCH(".sample.po2", double_to_permil, &sample->po2))
		return;

	switch (import_source) {
	case DIVINGLOG:
		if (divinglog_fill_sample(sample, name, len, buf))
			return;
		break;

	case UDDF:
		if (uddf_fill_sample(sample, name, len, buf))
			return;
		break;

	default:
		break;
	}

	nonmatch("sample", name, buf);
}
コード例 #2
0
ファイル: parse-xml.c プロジェクト: syuxue/subsurface
static void try_to_match_autogroup(const char *name, char *buf)
{
	int len = strlen(name);
	int autogroupvalue;

	start_match("autogroup", name, buf);
	if (MATCH(".autogroup.state", get_index, &autogroupvalue)) {
		set_autogroup(autogroupvalue);
		return;
	}
	nonmatch("autogroup", name, buf);
}
コード例 #3
0
ファイル: parse-xml.c プロジェクト: draco003/subsurface
static void try_to_fill_event(const char *name, char *buf)
{
	int len = strlen(name);

	start_match("event", name, buf);
	if (MATCH(".event", utf8_string, &event.name))
		return;
	if (MATCH(".name", utf8_string, &event.name))
		return;
	if (MATCH(".time", eventtime, &event.time))
		return;
	if (MATCH(".type", get_index, &event.type))
		return;
	if (MATCH(".flags", get_index, &event.flags))
		return;
	nonmatch("event", name, buf);
}
コード例 #4
0
ファイル: parse-xml.c プロジェクト: syuxue/subsurface
static void try_to_fill_dc_settings(const char *name, char *buf)
{
	int len = strlen(name);

	start_match("divecomputerid", name, buf);
	if (MATCH("divecomputerid.model", utf8_string, &cur_settings.dc.model))
		return;
	if (MATCH("divecomputerid.deviceid", hex_value, &cur_settings.dc.deviceid))
		return;
	if (MATCH("divecomputerid.nickname", utf8_string, &cur_settings.dc.nickname))
		return;
	if (MATCH("divecomputerid.serial", utf8_string, &cur_settings.dc.serial_nr))
		return;
	if (MATCH("divecomputerid.firmware", utf8_string, &cur_settings.dc.firmware))
		return;

	nonmatch("divecomputerid", name, buf);
}
コード例 #5
0
ファイル: parse-xml.c プロジェクト: denghuancong/subsurface
/* We're in samples - try to convert the random xml value to something useful */
static void try_to_fill_sample(struct sample *sample, const char *name, char *buf)
{
	int len = strlen(name);

	start_match("sample", name, buf);
	if (MATCH(".sample.pressure", pressure, &sample->cylinderpressure))
		return;
	if (MATCH(".sample.cylpress", pressure, &sample->cylinderpressure))
		return;
	if (MATCH(".sample.cylinderindex", get_index, &sample->cylinderindex))
		return;
	if (MATCH(".sample.depth", depth, &sample->depth))
		return;
	if (MATCH(".sample.temp", temperature, &sample->temperature))
		return;
	if (MATCH(".sample.temperature", temperature, &sample->temperature))
		return;
	if (MATCH(".sample.sampletime", sampletime, &sample->time))
		return;
	if (MATCH(".sample.time", sampletime, &sample->time))
		return;

	switch (import_source) {
	case UEMIS:
		if (uemis_fill_sample(sample, name, len, buf))
			return;
		break;

	case DIVINGLOG:
		if (divinglog_fill_sample(sample, name, len, buf))
			return;
		break;

	case UDDF:
		if (uddf_fill_sample(sample, name, len, buf))
			return;
		break;

	default:
		break;
	}

	nonmatch("sample", name, buf);
}
コード例 #6
0
ファイル: parse-xml.c プロジェクト: syuxue/subsurface
/* We're in the top-level trip xml. Try to convert whatever value to a trip value */
static void try_to_fill_trip(dive_trip_t **dive_trip_p, const char *name, char *buf)
{
	int len = strlen(name);

	start_match("trip", name, buf);

	dive_trip_t *dive_trip = *dive_trip_p;

	if (MATCH(".date", divedate, &dive_trip->when))
		return;
	if (MATCH(".time", divetime, &dive_trip->when))
		return;
	if (MATCH(".location", utf8_string, &dive_trip->location))
		return;
	if (MATCH(".notes", utf8_string, &dive_trip->notes))
		return;

	nonmatch("trip", name, buf);
}
コード例 #7
0
ファイル: parse-xml.c プロジェクト: syuxue/subsurface
/* We're in the top-level dive xml. Try to convert whatever value to a dive value */
static void try_to_fill_dc(struct divecomputer *dc, const char *name, char *buf)
{
	int len = strlen(name);

	start_match("divecomputer", name, buf);

	if (MATCH(".date", divedate, &dc->when))
		return;
	if (MATCH(".time", divetime, &dc->when))
		return;
	if (MATCH(".model", utf8_string, &dc->model))
		return;
	if (MATCH(".deviceid", hex_value, &dc->deviceid))
		return;
	if (MATCH(".diveid", hex_value, &dc->diveid))
		return;

	if (match_dc_data_fields(dc, name, len, buf))
		return;

	nonmatch("divecomputer", name, buf);
}
コード例 #8
0
ファイル: parse-xml.c プロジェクト: syuxue/subsurface
/* We're in the top-level dive xml. Try to convert whatever value to a dive value */
static void try_to_fill_dive(struct dive *dive, const char *name, char *buf)
{
	int len = strlen(name);

	start_match("dive", name, buf);

	switch (import_source) {
	case DIVINGLOG:
		if (divinglog_dive_match(dive, name, len, buf))
			return;
		break;

	case UDDF:
		if (uddf_dive_match(dive, name, len, buf))
			return;
		break;

	default:
		break;
	}

	if (MATCH(".number", get_index, &dive->number))
		return;
	if (MATCH(".tripflag", get_tripflag, &dive->tripflag))
		return;
	if (MATCH(".date", divedate, &dive->when))
		return;
	if (MATCH(".time", divetime, &dive->when))
		return;
	if (MATCH(".datetime", divedatetime, &dive->when))
		return;
	/*
	 * Legacy format note: per-dive depths and duration get saved
	 * in the first dive computer entry
	 */
	if (match_dc_data_fields(&dive->dc, name, len, buf))
		return;

	if (MATCH(".cylinderstartpressure", pressure, &dive->cylinder[0].start))
		return;
	if (MATCH(".cylinderendpressure", pressure, &dive->cylinder[0].end))
		return;
	if (MATCH(".gps", gps_location, dive))
		return;
	if (MATCH(".Place", gps_location, dive))
		return;
	if (MATCH(".latitude", gps_lat, dive))
		return;
	if (MATCH(".sitelat", gps_lat, dive))
		return;
	if (MATCH(".lat", gps_lat, dive))
		return;
	if (MATCH(".longitude", gps_long, dive))
		return;
	if (MATCH(".sitelon", gps_long, dive))
		return;
	if (MATCH(".lon", gps_long, dive))
		return;
	if (MATCH(".location", utf8_string, &dive->location))
		return;
	if (MATCH("dive.name", utf8_string, &dive->location))
		return;
	if (MATCH(".suit", utf8_string, &dive->suit))
		return;
	if (MATCH(".divesuit", utf8_string, &dive->suit))
		return;
	if (MATCH(".notes", utf8_string, &dive->notes))
		return;
	if (MATCH(".divemaster", utf8_string, &dive->divemaster))
		return;
	if (MATCH(".buddy", utf8_string, &dive->buddy))
		return;
	if (MATCH("dive.rating", get_rating, &dive->rating))
		return;
	if (MATCH("dive.visibility", get_rating, &dive->visibility))
		return;
	if (MATCH(".cylinder.size", cylindersize, &dive->cylinder[cur_cylinder_index].type.size))
		return;
	if (MATCH(".cylinder.workpressure", pressure, &dive->cylinder[cur_cylinder_index].type.workingpressure))
		return;
	if (MATCH(".cylinder.description", utf8_string, &dive->cylinder[cur_cylinder_index].type.description))
		return;
	if (MATCH(".cylinder.start", pressure, &dive->cylinder[cur_cylinder_index].start))
		return;
	if (MATCH(".cylinder.end", pressure, &dive->cylinder[cur_cylinder_index].end))
		return;
	if (MATCH(".weightsystem.description", utf8_string, &dive->weightsystem[cur_ws_index].description))
		return;
	if (MATCH(".weightsystem.weight", weight, &dive->weightsystem[cur_ws_index].weight))
		return;
	if (MATCH("weight", weight, &dive->weightsystem[cur_ws_index].weight))
		return;
	if (MATCH(".o2", gasmix, &dive->cylinder[cur_cylinder_index].gasmix.o2))
		return;
	if (MATCH(".o2percent", gasmix, &dive->cylinder[cur_cylinder_index].gasmix.o2))
		return;
	if (MATCH(".n2", gasmix_nitrogen, &dive->cylinder[cur_cylinder_index].gasmix))
		return;
	if (MATCH(".he", gasmix, &dive->cylinder[cur_cylinder_index].gasmix.he))
		return;
	if (MATCH(".divetemperature.air", temperature, &dive->airtemp))
		return;

	nonmatch("dive", name, buf);
}