Anot batch of small bug-fixes
This commit is contained in:
parent
ed924b6da4
commit
054b8e4127
1 changed files with 72 additions and 67 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue