43,10 → 43,15 |
return entries; |
} |
|
public String getName() { return name; } |
public String getTitle() { return title; } |
public String getName() { |
return name; |
} |
|
public String getTitle() { |
return title; |
} |
} |
|
public static abstract class ConfigEntry { |
String name; |
|
71,13 → 76,11 |
} |
} |
|
public static class ByteEntry extends ConfigEntry { |
ByteEntry(String name, boolean isDynamic) { |
public static class StaticByteEntry extends ConfigEntry { |
StaticByteEntry(String name) { |
super(name); |
this.isDynamic = isDynamic; |
} |
|
boolean isDynamic; |
int value; |
|
int getByteCount() { |
99,10 → 102,58 |
|
void toXML(StringBuilder result) { |
String s_value; |
int numberOfHighestVariable = 255; |
int numberOfLowestVariable = numberOfHighestVariable |
- NUMBER_OF_VARIABLES; |
if (isDynamic && value >= numberOfLowestVariable) { |
s_value = Integer.toString(value); |
result.append(" <parameter name=\"" + name + "\" value=\"" |
+ s_value + "\"/>\n"); |
} |
} |
|
public static class DynamicByteEntry extends StaticByteEntry { |
int minValue = 0; |
int maxValue = 255; |
String staticCodeName; |
String dynamicCodeName; |
|
DynamicByteEntry(String name) { |
super(name); |
} |
|
int getMinValue() { |
return minValue; |
} |
|
int getMaxValue() { |
return maxValue; |
} |
|
void setMinValue(int minValue) { |
this.minValue = minValue; |
} |
|
void setMaxValue(int maxValue) { |
this.maxValue = maxValue; |
} |
|
String getStaticCodeName() { |
return staticCodeName; |
} |
|
String getDynamicCodeName() { |
return dynamicCodeName; |
} |
|
void setStaticCodeName(String staticCodeName) { |
this.staticCodeName = staticCodeName; |
} |
|
void setDynamicCodeName(String dynamicCodeName) { |
this.dynamicCodeName = dynamicCodeName; |
} |
|
void toXML(StringBuilder result) { |
String s_value; |
int numberOfLowestVariable = 256 - NUMBER_OF_VARIABLES; |
if (value >= numberOfLowestVariable) { |
s_value = "var" + (value - numberOfLowestVariable); |
} else |
s_value = Integer.toString(value); |
287,7 → 338,8 |
|
for (int i = 0; i < sectionNodes.getLength(); i++) { |
Element sectionNode = (Element) sectionNodes.item(i); |
Section section = new Section(sectionNode.getAttribute("name"), sectionNode.getAttribute("title")); |
Section section = new Section(sectionNode.getAttribute("name"), |
sectionNode.getAttribute("title")); |
result.declaredSections.add(section); |
|
NodeList parameterNodes = (NodeList) xpath.evaluate( |
300,7 → 352,9 |
|
if (!sectionNode.hasAttribute("name")) { |
throw new IOException("A parameter element (the " + j |
+ "th in section "+sectionNode.getAttribute("name")+") had no name attribute!"); |
+ "th in section " |
+ sectionNode.getAttribute("name") |
+ ") had no name attribute!"); |
} |
|
String s_name = parameterNode.getAttribute("name"); |
313,11 → 367,25 |
} |
|
if ("static".equals(s_type)) { |
entry = new ConfigSet.ByteEntry(s_name, false); |
entry = new ConfigSet.StaticByteEntry(s_name); |
} else if ("dynamic".equals(s_type)) { |
entry = new ConfigSet.ByteEntry(s_name, true); |
ConfigSet.DynamicByteEntry de = new ConfigSet.DynamicByteEntry(s_name); |
if (parameterNode.hasAttribute("minValue")) { |
de.setMinValue(Integer.parseInt(parameterNode.getAttribute("minValue"))); |
} |
if (parameterNode.hasAttribute("maxValue")) { |
de.setMinValue(Integer.parseInt(parameterNode.getAttribute("maxValue"))); |
} |
if (parameterNode.hasAttribute("staticCodeName")) { |
de.setStaticCodeName(parameterNode.getAttribute("staticCodeName")); |
} else de.setStaticCodeName(de.getName()); |
if (parameterNode.hasAttribute("dynamicCodeName")) { |
de.setDynamicCodeName(parameterNode.getAttribute("dynamicCodeName")); |
} else de.setDynamicCodeName(de.getName()); |
entry = de; |
} else if ("bitset".equals(s_type)) { |
NodeList bitNodes = (NodeList) xpath.evaluate("bit", parameterNode, XPathConstants.NODESET); |
NodeList bitNodes = (NodeList) xpath.evaluate("bit", |
parameterNode, XPathConstants.NODESET); |
String[] bitNames = new String[8]; |
for (int k=0; k<8; k++) { |
Element bitNode = (Element) bitNodes.item(k); |
329,7 → 397,8 |
} |
entry = new ConfigSet.BitSetEntry(s_name, bitNames); |
} else { |
throw new IOException("Unknown parameter type: " + s_type); |
throw new IOException("Unknown parameter type: " |
+ s_type); |
} |
|
result.entries.add(entry); |
348,4 → 417,30 |
throw new IOException(ex); |
} |
} |
|
public String generateDynamicSubstitutionCode() { |
StringBuilder result = new StringBuilder( |
"const MMXLATION XLATIONS[] = {\n"); |
boolean hasEntries = false; |
for (ConfigEntry entry : entries) { |
if (entry instanceof ConfigSet.DynamicByteEntry) { |
if (hasEntries) |
result.append(",\n"); |
else |
hasEntries = true; |
ConfigSet.DynamicByteEntry de = (ConfigSet.DynamicByteEntry) entry; |
result.append("{offsetof(ParamSet_t, "); |
result.append(de.getStaticCodeName()); |
result.append("), offsetof(DynamicParams_t, "); |
result.append(de.getDynamicCodeName()); |
result.append("),"); |
result.append(Integer.toString(de.getMinValue())); |
result.append(","); |
result.append(Integer.toString(de.getMaxValue())); |
result.append("}"); |
} |
} |
result.append("};"); |
return result.toString(); |
} |
} |