}
SGPropertyNode *n = fgGetNode(name.c_str(), true);
+ bool writable = n->getAttribute(SGPropertyNode::WRITE);
+ if (!writable)
+ n->setAttribute(SGPropertyNode::WRITE, true);
+
+ bool ret = false;
if (type.empty())
- return n->setUnspecifiedValue(value.c_str());
+ ret = n->setUnspecifiedValue(value.c_str());
else if (type == "s" || type == "string")
- return n->setStringValue(value.c_str());
+ ret = n->setStringValue(value.c_str());
else if (type == "d" || type == "double")
- return n->setDoubleValue(strtod(value.c_str(), 0));
+ ret = n->setDoubleValue(strtod(value.c_str(), 0));
else if (type == "f" || type == "float")
- return n->setFloatValue(atof(value.c_str()));
+ ret = n->setFloatValue(atof(value.c_str()));
else if (type == "l" || type == "long")
- return n->setLongValue(strtol(value.c_str(), 0, 0));
+ ret = n->setLongValue(strtol(value.c_str(), 0, 0));
else if (type == "i" || type == "int")
- return n->setIntValue(atoi(value.c_str()));
+ ret = n->setIntValue(atoi(value.c_str()));
else if (type == "b" || type == "bool")
- return n->setBoolValue(value == "true" || atoi(value.c_str()) != 0);
+ ret = n->setBoolValue(value == "true" || atoi(value.c_str()) != 0);
- return false;
+ if (!writable)
+ n->setAttribute(SGPropertyNode::WRITE, false);
+ return ret;
}