diff --git a/src/com/bytezone/diskbrowser/applefile/ApplesoftBasicProgram.java b/src/com/bytezone/diskbrowser/applefile/ApplesoftBasicProgram.java index 43ec1e5..a50013b 100644 --- a/src/com/bytezone/diskbrowser/applefile/ApplesoftBasicProgram.java +++ b/src/com/bytezone/diskbrowser/applefile/ApplesoftBasicProgram.java @@ -36,6 +36,7 @@ public class ApplesoftBasicProgram extends BasicProgram private final Map> gotoLines = new TreeMap<> (); private final Map> gosubLines = new TreeMap<> (); private final Map> symbolLines = new TreeMap<> (); + private final Map> uniqueSymbols = new TreeMap<> (); private final List stringsLine = new ArrayList<> (); private final List stringsText = new ArrayList<> (); @@ -285,6 +286,21 @@ public class ApplesoftBasicProgram extends BasicProgram for (String symbol : symbolLines.keySet ()) fullText.append (String.format ("%6s %s%n", symbol, symbolLines.get (symbol))); + + boolean headingShown = false; + for (String key : uniqueSymbols.keySet ()) + { + List usage = uniqueSymbols.get (key); + if (usage.size () > 1) + { + if (!headingShown) + { + headingShown = true; + fullText.append ("\nNon-unique Variable Names:\n"); + } + fullText.append (String.format ("%6s %s%n", key, usage)); + } + } } if (basicPreferences.listStrings && stringsLine.size () > 0) @@ -818,6 +834,7 @@ public class ApplesoftBasicProgram extends BasicProgram if (lastLine != parent.lineNumber) lines.add (parent.lineNumber); } + checkUniqueName (var); } } @@ -890,6 +907,31 @@ public class ApplesoftBasicProgram extends BasicProgram } } + private String checkUniqueName (String symbol) + { + int ptr = symbol.length () - 1; + if (symbol.charAt (ptr) == ASCII_LEFT_BRACKET) // array + ptr--; + if (symbol.charAt (ptr) == ASCII_DOLLAR || symbol.charAt (ptr) == ASCII_PERCENT) + ptr--; + + String unique = + (ptr <= 1) ? symbol : symbol.substring (0, 2) + symbol.substring (ptr + 1); + + List usage = uniqueSymbols.get (unique); + if (usage == null) + { + usage = new ArrayList<> (); + uniqueSymbols.put (unique, usage); + } + + if (!usage.contains (symbol)) + usage.add (symbol); + + // System.out.printf ("%8s %s%n", symbol, unique); + return unique; + } + private void doDigit () { int targetLine = getLineNumber (buffer, startPtr); diff --git a/src/com/bytezone/diskbrowser/applefile/BasicProgram.java b/src/com/bytezone/diskbrowser/applefile/BasicProgram.java index 2eabaf5..b01f724 100644 --- a/src/com/bytezone/diskbrowser/applefile/BasicProgram.java +++ b/src/com/bytezone/diskbrowser/applefile/BasicProgram.java @@ -59,7 +59,9 @@ public abstract class BasicProgram extends AbstractFile return value >= 0x41 && value <= 0x5A; } + // ---------------------------------------------------------------------------------// boolean isPossibleVariable (byte value) + // ---------------------------------------------------------------------------------// { return isDigit (value) || isLetter (value) || value == ASCII_DOLLAR || value == ASCII_PERCENT;