1
0
Fork 0

Anot batch of small bug-fixes

This commit is contained in:
Erik Hofman 2017-03-25 14:21:05 +01:00
parent ed924b6da4
commit 054b8e4127

View file

@ -6,6 +6,9 @@
#include <xml.h> #include <xml.h>
#define PRINT(a) \
tag = (a); if (tag) printf(" <tag>%s</tag>\n", tag)
char * char *
getCommandLineOption(int argc, char **argv, char const *option) getCommandLineOption(int argc, char **argv, char const *option)
{ {
@ -54,12 +57,14 @@ char *strlwr(char *str)
const char* const char*
jsb_wing_tag(void *xid) jsb_wing_tag(void *xid)
{ {
void *xmid = xmlNodeGet(xid, "/fdm_config/metrics"); void *xlid, *xmid = xmlNodeGet(xid, "/fdm_config/metrics");
void *xlid = xmlMarkId(xmid);
double aero_z = 0.0; double aero_z = 0.0;
double eye_z = 0.0; double eye_z = 0.0;
int i, num; int i, num;
if (!xmid) return NULL;
xlid = xmlMarkId(xmid);
num = xmlNodeGetNum(xmid, "location"); num = xmlNodeGetNum(xmid, "location");
for (i=0; i<num; ++i) for (i=0; i<num; ++i)
{ {
@ -82,13 +87,15 @@ jsb_wing_tag(void *xid)
const char* const char*
jsb_gear_tag(void *xid) jsb_gear_tag(void *xid)
{ {
void *xgid = xmlNodeGet(xid, "/fdm_config/ground_reactions"); void *xcid, *xgid = xmlNodeGet(xid, "/fdm_config/ground_reactions");
void *xcid = xmlMarkId(xgid);
double nose_x = 0.0; double nose_x = 0.0;
double main_x = 0.0; double main_x = 0.0;
int bogeys = 0; int bogeys = 0;
int i, num; int i, num;
if (!xgid) return NULL;
xcid = xmlMarkId(xgid);
num = xmlNodeGetNum(xgid, "contact"); num = xmlNodeGetNum(xgid, "contact");
for (i=0; i<num; ++i) for (i=0; i<num; ++i)
{ {
@ -108,8 +115,8 @@ jsb_gear_tag(void *xid)
xmlFree(xcid); xmlFree(xcid);
xmlFree(xgid); xmlFree(xgid);
if (bogeys < 3) return "skids"; if (bogeys == 0) return "skids";
else if (main_x < nose_x) return "tail-dragger"; else if (bogeys < 3 || main_x < nose_x) return "tail-dragger";
return "tricycle"; return "tricycle";
} }
@ -124,12 +131,14 @@ jsb_gear_retract_tag(void *xid)
const char* const char*
jsb_gear_steering_tag(void *xid) jsb_gear_steering_tag(void *xid)
{ {
void *xgid = xmlNodeGet(xid, "/fdm_config/ground_reactions"); void *xcid, *xgid = xmlNodeGet(xid, "/fdm_config/ground_reactions");
void *xcid = xmlMarkId(xgid); char *rv = NULL;
char *rv = "no-steering";
int found = 0; int found = 0;
int i, num; int i, num;
if (!xgid) return NULL;
xcid = xmlMarkId(xgid);
num = xmlNodeGetNum(xgid, "contact"); num = xmlNodeGetNum(xgid, "contact");
for (i=0; i<num; ++i) for (i=0; i<num; ++i)
{ {
@ -143,14 +152,14 @@ jsb_gear_steering_tag(void *xid)
int c = xmlNodeGetInt(xcid, "castered"); int c = xmlNodeGetInt(xcid, "castered");
if (c || (m == 360.0 && !c)) { if (c || (m == 360.0 && !c)) {
rv = "castering-wheel"; rv = "castering";
break; break;
} else if (m > 0.0) { } else if (m > 0.0) {
rv = "normal-steering"; // rv = "normal-steering";
break; break;
} }
else { else {
rv = "no-steering"; // rv = "no-steering";
} }
} }
} }
@ -165,13 +174,16 @@ jsb_gear_steering_tag(void *xid)
const char* const char*
jsb_engines_tag(void *xid) jsb_engines_tag(void *xid)
{ {
void *xpid = xmlNodeGet(xid, "/fdm_config/propulsion"); void *xeid, *xpid = xmlNodeGet(xid, "/fdm_config/propulsion");
void *xeid = xmlMarkId(xpid); const char* rv = NULL;
const char* rv = "multi-engine";
int engines = 0; int engines = 0;
int i, num; int i, num;
char *main; char *main;
if (!xpid) return rv;
xeid = xmlMarkId(xpid);
num = xmlNodeGetNum(xpid, "engine"); num = xmlNodeGetNum(xpid, "engine");
for (i=0; i<num; ++i) for (i=0; i<num; ++i)
{ {
@ -352,7 +364,7 @@ jsb_thruster_tag(void *xid, char *path)
} }
void void
update_metadata_jsb(char *path, char *aero) update_metadata_jsb(char *path, char *aero, char *desc)
{ {
const char *tag; const char *tag;
char *fname; char *fname;
@ -377,22 +389,15 @@ update_metadata_jsb(char *path, char *aero)
} }
printf(" <tags>\n"); printf(" <tags>\n");
printf(" <tag>%s</tag>\n", strlwr(aero)); PRINT(strlwr(desc ? desc : aero));
printf(" <tag>%s</tag>\n", jsb_wing_tag(xid)); PRINT(jsb_wing_tag(xid));
printf(" <tag>%s</tag>\n", jsb_gear_tag(xid)); PRINT(jsb_gear_tag(xid));
printf(" <tag>%s</tag>\n", jsb_gear_retract_tag(xid)); PRINT(jsb_gear_retract_tag(xid));
printf(" <tag>%s</tag>\n", jsb_gear_steering_tag(xid)); PRINT(jsb_gear_steering_tag(xid));
printf(" <tag>%s</tag>\n", jsb_engines_tag(xid)); PRINT(jsb_engines_tag(xid));
PRINT(jsb_engine_tag(xid, path));
tag = jsb_engine_tag(xid, path); PRINT(jsb_propulsion_tag(xid, path));
if (tag) printf(" <tag>%s</tag>\n", tag); PRINT(jsb_thruster_tag(xid, path));
tag = jsb_propulsion_tag(xid, path);
if (tag) printf(" <tag>%s</tag>\n", tag);
tag = jsb_thruster_tag(xid, path);
if (tag) printf(" <tag>%s</tag>\n", tag);
printf(" </tags>\n"); printf(" </tags>\n");
xmlClose(xid); xmlClose(xid);
@ -404,30 +409,38 @@ update_metadata_jsb(char *path, char *aero)
const char* const char*
yasim_wing_tag(void *xid) yasim_wing_tag(void *xid)
{ {
void *xaid = xmlNodeGet(xid, "/airplane");
void *xwid, *xcid; void *xwid, *xcid;
int n_wings;
double wing_z = 0.0; double wing_z = 0.0;
double eye_z = 0.0; double eye_z = 0.0;
if (xmlNodeTest(xid, "/airplane/rotor")) { if (xmlNodeTest(xaid, "rotor")) {
return "helicopter"; return "helicopter";
} }
xwid = xmlNodeGet(xid, "/airplane/wing"); xwid = xmlNodeGet(xaid, "wing");
if (xwid) if (xwid)
{ {
wing_z = xmlAttributeGetDouble(xwid, "z"); wing_z = xmlAttributeGetDouble(xwid, "z");
xmlFree(xwid); xmlFree(xwid);
} }
xcid = xmlNodeGet(xid, "/airplane/cockpit"); xcid = xmlNodeGet(xaid, "cockpit");
if (xcid) if (xcid)
{ {
eye_z = xmlAttributeGetDouble(xcid, "z"); eye_z = xmlAttributeGetDouble(xcid, "z");
xmlFree(xcid); xmlFree(xcid);
} }
n_wings = xmlNodeGetNum(xaid, "mstab");
xmlFree(xaid);
// if (n_wings == 2) return "triplane";
// if (n_wings == 1) return "biplane";
if (wing_z > eye_z) return "high-wing"; if (wing_z > eye_z) return "high-wing";
else return "low-wing"; return "low-wing";
} }
const char* const char*
@ -456,8 +469,8 @@ yasim_gear_tag(void *xid)
xmlFree(xgid); xmlFree(xgid);
xmlFree(xaid); xmlFree(xaid);
if (gears < 3) return "skids"; if (gears == 0) return "skids";
else if (main_x > nose_x) return "tail-dragger"; else if (gears < 3 || main_x > nose_x) return "tail-dragger";
return "tricycle"; return "tricycle";
} }
@ -502,7 +515,7 @@ yasim_gear_steering_tag(void *xid)
{ {
void *xaid = xmlNodeGet(xid, "/airplane"); void *xaid = xmlNodeGet(xid, "/airplane");
void *xgid = xmlMarkId(xaid); void *xgid = xmlMarkId(xaid);
char *rv = "no-steering"; char *rv = NULL;
int found = 0; int found = 0;
int i, num; int i, num;
@ -518,12 +531,12 @@ yasim_gear_steering_tag(void *xid)
if (xmlNodeGetPos(xgid, xgcid, "control-input", j)) if (xmlNodeGetPos(xgid, xgcid, "control-input", j))
{ {
if (!xmlAttributeCompareString(xgcid, "control", "STEER")) { if (!xmlAttributeCompareString(xgcid, "control", "STEER")) {
rv = "normal-steering"; // rv = "normal-steering";
found = 1; found = 1;
break; break;
} }
else if (!xmlAttributeCompareString(xgcid, "control", "CASTERING")) { else if (!xmlAttributeCompareString(xgcid, "control", "CASTERING")) {
rv = "castering-wheel"; rv = "castering";
found = 1; found = 1;
break; break;
} }
@ -641,7 +654,7 @@ yasim_thruster_tag(void *xid, char *path)
} }
void void
update_metadata_yasim(char *path, char *aero) update_metadata_yasim(char *path, char *aero, char *desc)
{ {
const char *tag; const char *tag;
char *fname; char *fname;
@ -666,22 +679,15 @@ update_metadata_yasim(char *path, char *aero)
} }
printf(" <tags>\n"); printf(" <tags>\n");
printf(" <tag>%s</tag>\n", strlwr(aero)); PRINT(strlwr(desc ? desc : aero));
printf(" <tag>%s</tag>\n", yasim_wing_tag(xid)); PRINT(yasim_wing_tag(xid));
printf(" <tag>%s</tag>\n", yasim_gear_tag(xid)); PRINT(yasim_gear_tag(xid));
printf(" <tag>%s</tag>\n", yasim_gear_retract_tag(xid)); PRINT(yasim_gear_retract_tag(xid));
printf(" <tag>%s</tag>\n", yasim_gear_steering_tag(xid)); PRINT(yasim_gear_steering_tag(xid));
printf(" <tag>%s</tag>\n", yasim_engines_tag(xid)); PRINT(yasim_engines_tag(xid));
PRINT(yasim_engine_tag(xid, path));
tag = yasim_engine_tag(xid, path); PRINT(yasim_propulsion_tag(xid, path));
if (tag) printf(" <tag>%s</tag>\n", tag); PRINT(yasim_thruster_tag(xid, path));
tag = yasim_propulsion_tag(xid, path);
if (tag) printf(" <tag>%s</tag>\n", tag);
tag = yasim_thruster_tag(xid, path);
if (tag) printf(" <tag>%s</tag>\n", tag);
printf(" </tags>\n"); printf(" </tags>\n");
xmlClose(xid); xmlClose(xid);
@ -711,7 +717,7 @@ update_metadata(const char *fname)
if (xmlNodeTest(xsid, "tags") == 0) if (xmlNodeTest(xsid, "tags") == 0)
{ {
char *str = NULL; char *desc = NULL, *str = NULL;
char *path, *pend; char *path, *pend;
pend = strrchr(fname, '/'); pend = strrchr(fname, '/');
@ -724,15 +730,13 @@ update_metadata(const char *fname)
memcpy(path, fname, pend-fname); memcpy(path, fname, pend-fname);
} }
if (!xmlNodeCompareString(xsid, "flight-model", "jsb")) desc = xmlNodeGetString(xsid, "description");
{ str = xmlNodeGetString(xsid, "aero");
str = xmlNodeGetString(xsid, "aero"); if (!xmlNodeCompareString(xsid, "flight-model", "jsb")) {
update_metadata_jsb(path, str); update_metadata_jsb(path, str, desc);
} }
else if (!xmlNodeCompareString(xsid, "flight-model", "yasim")) else if (!xmlNodeCompareString(xsid, "flight-model", "yasim")) {
{ update_metadata_yasim(path, str, desc);
str = xmlNodeGetString(xsid, "aero");
update_metadata_yasim(path, str);
} }
else else
{ {
@ -742,6 +746,7 @@ update_metadata(const char *fname)
xmlFree(xsid); xmlFree(xsid);
xmlFree(desc);
xmlFree(str); xmlFree(str);
free(path); free(path);
} }