From 654e2f515b6797b47b2c2579eff121f50abd681e Mon Sep 17 00:00:00 2001 From: Jared Gould Date: Sat, 1 Jul 2006 17:49:59 +0000 Subject: [PATCH] Added checksum/CEL fix git-svn-id: http://svn.3splooges.com/romraider-arch/trunk@56 d2e2e1cd-ba16-0410-be16-b7c4453c7c2d --- src/enginuity/maps/Table.java | 2 + src/enginuity/maps/TableSwitch.java | 46 ++++++++++++++++++++--- src/enginuity/xml/DOMRomUnmarshaller.java | 33 +++++++++++----- 3 files changed, 66 insertions(+), 15 deletions(-) diff --git a/src/enginuity/maps/Table.java b/src/enginuity/maps/Table.java index ca1d9359..4ae3f7d8 100644 --- a/src/enginuity/maps/Table.java +++ b/src/enginuity/maps/Table.java @@ -33,11 +33,13 @@ public abstract class Table extends JPanel implements Serializable { public static final int ENDIAN_LITTLE= 1; public static final int ENDIAN_BIG = 2; + public static final int TABLE_1D = 1; public static final int TABLE_2D = 2; public static final int TABLE_3D = 3; public static final int TABLE_X_AXIS = 4; public static final int TABLE_Y_AXIS = 5; + public static final int TABLE_SWITCH = 6; public static final int COMPARE_OFF = 0; public static final int COMPARE_ORIGINAL = 1; diff --git a/src/enginuity/maps/TableSwitch.java b/src/enginuity/maps/TableSwitch.java index bb36dad8..4f2bfe8e 100644 --- a/src/enginuity/maps/TableSwitch.java +++ b/src/enginuity/maps/TableSwitch.java @@ -1,15 +1,19 @@ package enginuity.maps; +import enginuity.xml.RomAttributeParser; import java.awt.Color; +import java.util.StringTokenizer; import javax.swing.JCheckBox; public class TableSwitch extends Table { private byte[] on = new byte[0]; private byte[] off = new byte[0]; - private JCheckBox checkbox = new JCheckBox(); + private JCheckBox checkbox = new JCheckBox("Enabled", true); // checkbox selected by default public TableSwitch() { + storageType = 1; + add(checkbox); } public void setDataSize(int size) { @@ -17,18 +21,48 @@ public class TableSwitch extends Table { off = new byte[size]; } - public void setOnValues(byte[] input) { + public void populateTable(byte[] input) { + System.out.println(on.length); for (int i = 0; i < on.length; i++) { - on[i] = input[i]; + + System.out.println(on[i] + " " + input[storageAddress - ramOffset + 1]); + + // check each byte -- if it doesn't match "on", it's off + if (on[i] != input[storageAddress - ramOffset + i]) { + checkbox.setSelected(false); + break; + } + } + } + + public byte[] saveFile(byte[] input) { + if (checkbox.isSelected()) { // switch is on + for (int i = 0; i < on.length; i++) { + input[storageAddress - ramOffset + i] = on[i]; + } + + } else { // switch is off + for (int i = 0; i < on.length; i++) { + input[storageAddress - ramOffset + i] = off[i]; + } + } + return input; + } + + public void setOnValues(String input) { + StringTokenizer tokens = new StringTokenizer(input); + for (int i = 0; i < off.length; i++) { + on[i] = (byte)RomAttributeParser.parseHexString(tokens.nextToken()); } } - public void setOffValues(byte[] input) { + public void setOffValues(String input) { + StringTokenizer tokens = new StringTokenizer(input); for (int i = 0; i < off.length; i++) { - off[i] = input[i]; + off[i] = (byte)RomAttributeParser.parseHexString(tokens.nextToken()); } } - + public void colorize() { } public void cursorUp() { } public void cursorDown() { } diff --git a/src/enginuity/xml/DOMRomUnmarshaller.java b/src/enginuity/xml/DOMRomUnmarshaller.java index a2123937..7329963f 100644 --- a/src/enginuity/xml/DOMRomUnmarshaller.java +++ b/src/enginuity/xml/DOMRomUnmarshaller.java @@ -171,12 +171,11 @@ public class DOMRomUnmarshaller { private Table unmarshallTable(Node tableNode, Table table, Rom rom) throws XMLParseException, TableIsOmittedException, Exception { - if (unmarshallAttribute(tableNode, "omit", "false").equalsIgnoreCase("true")) { + if (unmarshallAttribute(tableNode, "omit", "false").equalsIgnoreCase("true")) { // remove table if omitted throw new TableIsOmittedException(); } - if (!unmarshallAttribute(tableNode, "base", "none").equalsIgnoreCase("none")) { - + if (!unmarshallAttribute(tableNode, "base", "none").equalsIgnoreCase("none")) { // copy base table for inheritance try { table = (Table)ObjectCloner.deepCopy((Object)rom.getTable(unmarshallAttribute(tableNode, "base", "none"))); @@ -212,7 +211,8 @@ public class DOMRomUnmarshaller { throw new XMLParseException(); } } - + + // unmarshall table attributes table.setName(unmarshallAttribute(tableNode, "name", table.getName())); table.setType(RomAttributeParser.parseTableType(unmarshallAttribute(tableNode, "type", table.getType()))); if (unmarshallAttribute(tableNode, "beforeram", "false").equalsIgnoreCase("true")) table.setBeforeRam(true); @@ -238,9 +238,9 @@ public class DOMRomUnmarshaller { ((Table3D)table).setFlipX(Boolean.parseBoolean(unmarshallAttribute(tableNode, "flipx", ((Table3D)table).getFlipX()+""))); ((Table3D)table).setFlipY(Boolean.parseBoolean(unmarshallAttribute(tableNode, "flipy", ((Table3D)table).getFlipY()+""))); ((Table3D)table).setSizeX(Integer.parseInt(unmarshallAttribute(tableNode, "sizex", ((Table3D)table).getSizeX()))); - ((Table3D)table).setSizeY(Integer.parseInt(unmarshallAttribute(tableNode, "sizey", ((Table3D)table).getSizeY()))); + ((Table3D)table).setSizeY(Integer.parseInt(unmarshallAttribute(tableNode, "sizey", ((Table3D)table).getSizeY()))); } - + Node n; NodeList nodes = tableNode.getChildNodes(); @@ -250,7 +250,7 @@ public class DOMRomUnmarshaller { if (n.getNodeType() == Node.ELEMENT_NODE) { if (n.getNodeName().equalsIgnoreCase("table")) { - if (table.getType() == Table.TABLE_2D) { + if (table.getType() == Table.TABLE_2D) { // if table is 2D, parse axis if (RomAttributeParser.parseTableType(unmarshallAttribute(n, "type", "unknown")) == Table.TABLE_Y_AXIS || RomAttributeParser.parseTableType(unmarshallAttribute(n, "type", "unknown")) == Table.TABLE_X_AXIS) { @@ -262,7 +262,7 @@ public class DOMRomUnmarshaller { ((Table2D)table).setAxis(tempTable); } - } else if (table.getType() == Table.TABLE_3D) { + } else if (table.getType() == Table.TABLE_3D) { // if table is 3D, populate axiis if (RomAttributeParser.parseTableType(unmarshallAttribute(n, "type", "unknown")) == Table.TABLE_X_AXIS) { Table1D tempTable = (Table1D)unmarshallTable(n, ((Table3D)table).getXAxis(), rom); @@ -271,25 +271,40 @@ public class DOMRomUnmarshaller { tempTable.setAxisParent(table); ((Table3D)table).setXAxis(tempTable); - } else if (RomAttributeParser.parseTableType(unmarshallAttribute(n, "type", "unknown")) == Table.TABLE_Y_AXIS) { + } else if (RomAttributeParser.parseTableType(unmarshallAttribute(n, "type", "unknown")) == Table.TABLE_Y_AXIS) { Table1D tempTable = (Table1D)unmarshallTable(n, ((Table3D)table).getYAxis(), rom); if (tempTable.getDataSize() != ((Table3D)table).getSizeY()) tempTable.setDataSize(((Table3D)table).getSizeY()); tempTable.setData(((Table3D)table).getYAxis().getData()); tempTable.setAxisParent(table); ((Table3D)table).setYAxis(tempTable); + } } + } else if (n.getNodeName().equalsIgnoreCase("scaling")) { table.setScale(unmarshallScale(n, table.getScale())); + } else if (n.getNodeName().equalsIgnoreCase("data")) { // parse and add data to table DataCell dataCell = new DataCell(); dataCell.setDisplayValue(unmarshallText(n)); dataCell.setTable(table); ((Table1D)table).addStaticDataCell(dataCell); + } else if (n.getNodeName().equalsIgnoreCase("description")) { table.setDescription(unmarshallText(n)); + + } else if (n.getNodeName().equalsIgnoreCase("state")) { + // set on/off values for switch type + if (this.unmarshallAttribute(n, "name", "").equalsIgnoreCase("on")) { + ((TableSwitch)table).setOnValues(unmarshallAttribute(n, "data", "0")); + + } else if (this.unmarshallAttribute(n, "name", "").equalsIgnoreCase("off")) { + ((TableSwitch)table).setOffValues(unmarshallAttribute(n, "data", "0")); + + } + } else { /*unexpected element in Table (skip) */ } } else { /* unexpected node-type in Table (skip) */ } }