From 8764dd0db8345b1bcc550c3ce251f63fd369d530 Mon Sep 17 00:00:00 2001 From: Denis Molony Date: Sat, 20 Apr 2019 07:15:12 +1000 Subject: [PATCH] zork source code released --- .../diskbrowser/infocom/InfocomDisk.java | 1 + .../diskbrowser/infocom/ObjectManager.java | 12 ++++-- .../diskbrowser/infocom/PropertyManager.java | 6 +-- .../bytezone/diskbrowser/infocom/ZObject.java | 43 +++++++++++-------- 4 files changed, 36 insertions(+), 26 deletions(-) diff --git a/src/com/bytezone/diskbrowser/infocom/InfocomDisk.java b/src/com/bytezone/diskbrowser/infocom/InfocomDisk.java index 1603fe7..493b80d 100755 --- a/src/com/bytezone/diskbrowser/infocom/InfocomDisk.java +++ b/src/com/bytezone/diskbrowser/infocom/InfocomDisk.java @@ -17,6 +17,7 @@ import com.bytezone.diskbrowser.utilities.HexFormatter; // https://mud.co.uk/richard/htflpism.htm // https://inform-fiction.org/zmachine/standards/ +// https://github.com/historicalsource?tab=repositories public class InfocomDisk extends AbstractFormattedDisk { diff --git a/src/com/bytezone/diskbrowser/infocom/ObjectManager.java b/src/com/bytezone/diskbrowser/infocom/ObjectManager.java index cfca1dc..14fe235 100755 --- a/src/com/bytezone/diskbrowser/infocom/ObjectManager.java +++ b/src/com/bytezone/diskbrowser/infocom/ObjectManager.java @@ -79,10 +79,14 @@ class ObjectManager extends InfocomAbstractFile implements Iterable { String header1 = "ID Attributes Pr Sb Ch Prop Title\n-- -----------" + " -- -- -- ----- -----------------------------\n"; - String underline = " --------------------------"; - String header2 = "ID Title Parent Sibling" - + " Child Attributes Prop\n" + "-- " - + underline + underline + underline + underline + " ----------- -----" + "\n"; + String underline = " ----------------------------------------"; + String titles[] = + { "ID ", "Title ", + "Parent ", + "Sibling ", + "Child ", "Attributes Prop\n" }; + String header2 = titles[0] + titles[1] + titles[2] + titles[3] + titles[4] + titles[5] + + "-- " + underline + underline + underline + underline + " ----------- -----\n"; StringBuilder text = new StringBuilder (header2); int objectNumber = 0; diff --git a/src/com/bytezone/diskbrowser/infocom/PropertyManager.java b/src/com/bytezone/diskbrowser/infocom/PropertyManager.java index 0fc4e0f..f8b7ea1 100644 --- a/src/com/bytezone/diskbrowser/infocom/PropertyManager.java +++ b/src/com/bytezone/diskbrowser/infocom/PropertyManager.java @@ -77,8 +77,8 @@ class PropertyManager extends AbstractFile for (ZObject o : list) { ZObject.Property p = o.getProperty (id); - text.append (String.format ("%3d %-29s%s%n", o.id, o.getName (), - p.toString ().substring (7))); + text.append (String.format ("%02X %-29s%s%n", o.id, o.getName (), + p.toString ().substring (7))); } if (text.length () > 0) text.deleteCharAt (text.length () - 1); @@ -89,7 +89,7 @@ class PropertyManager extends AbstractFile public String toString () { return String.format (" %2d %-6s %3d", id, header.propertyNames[id], - list.size ()); + list.size ()); } } } \ No newline at end of file diff --git a/src/com/bytezone/diskbrowser/infocom/ZObject.java b/src/com/bytezone/diskbrowser/infocom/ZObject.java index ee32061..083fb27 100755 --- a/src/com/bytezone/diskbrowser/infocom/ZObject.java +++ b/src/com/bytezone/diskbrowser/infocom/ZObject.java @@ -35,7 +35,7 @@ class ZObject extends AbstractFile byte b = buffer[offset + i]; for (int j = 0; j < 8; j++) { - if ((b & 0x80) == 0x80) + if ((b & 0x80) != 0) attributes.set (bitIndex); b <<= 1; ++bitIndex; @@ -69,18 +69,19 @@ class ZObject extends AbstractFile { StringBuilder text = new StringBuilder (); - text.append (String.format ("ID : %3d %s%n%nAttributes : ", id, name)); - text.append (HexFormatter.getHexString (buffer, startPtr, 4)); - text.append (" " + attributes.toString ()); + text.append (String.format ("ID : %02X (%<3d) %s%n%n", id, name)); String obj1 = parent == 0 ? "" : header.objectManager.list.get (parent - 1).name; String obj2 = sibling == 0 ? "" : header.objectManager.list.get (sibling - 1).name; String obj3 = child == 0 ? "" : header.objectManager.list.get (child - 1).name; - text.append ( - String.format ("%n%nParent : %02X (%3d) %s%n", parent, parent, obj1)); - text.append (String.format ("Sibling : %02X (%3d) %s%n", sibling, sibling, obj2)); - text.append (String.format ("Child : %02X (%3d) %s%n%n", child, child, obj3)); + text.append (String.format ("Parent : %02X (%<3d) %s%n", parent, obj1)); + text.append (String.format ("Sibling : %02X (%<3d) %s%n", sibling, obj2)); + text.append (String.format ("Child : %02X (%<3d) %s%n%n", child, obj3)); + + text.append ("Attributes : "); + text.append (HexFormatter.getHexString (buffer, startPtr, 4)); + text.append (" " + attributes.toString () + "\n\n"); for (Property prop : properties) text.append (prop + "\n"); @@ -115,13 +116,13 @@ class ZObject extends AbstractFile public String getDescription (List list) { - StringBuilder text = new StringBuilder (String.format (" %-26s", getName ())); + StringBuilder text = new StringBuilder (String.format (" %-40s", getName ())); for (int i = 4; i < 7; i++) { int index = buffer[startPtr + i] & 0xFF; String name = index > 0 ? list.get (index - 1).getName () : ""; - text.append (String.format (" %-26s", name)); + text.append (String.format (" %-40s", name)); } text.append (" "); @@ -166,7 +167,7 @@ class ZObject extends AbstractFile text.append ( String.format ("%-20s", HexFormatter.getHexString (buffer, ptr + 1, length))); - if (propertyType.charAt (0) >= 'a') // directions are in lowercase + if (propertyType.charAt (0) >= 'a') // directions are in lowercase { switch (length) { @@ -176,9 +177,10 @@ class ZObject extends AbstractFile case 2: text.append ("\"" + header.stringManager.stringAt (offset) + "\""); break; - case 3: + case 3: // executable routine int address = header.getWord (ptr + 1) * 2; text.append (String.format ("R:%05X", address)); + appendRoutine (text, address); break; case 4: address = header.getWord (ptr + 3) * 2; @@ -202,13 +204,7 @@ class ZObject extends AbstractFile else if (propertyType.startsWith ("CODE")) { if (offset > 0) // cretin contains 00 00 - { - Routine r = header.codeManager.getRoutine (offset); - if (r != null) - text.append ("\n\n" + r.getText ()); - else // this can happen if the property is mislabelled as code - text.append ("\n\n****** null routine\n"); - } + appendRoutine (text, offset); } else if (propertyType.startsWith ("STR")) { @@ -218,5 +214,14 @@ class ZObject extends AbstractFile return text.toString (); } + + private void appendRoutine (StringBuilder text, int offset) + { + Routine r = header.codeManager.getRoutine (offset); + if (r != null) + text.append ("\n\n" + r.getText ()); + else // this can happen if the property is mislabelled as code + text.append ("\n\n****** null routine\n"); + } } } \ No newline at end of file