From 301b6c27c4cc3cb01f31103647cd0b82a5cc5542 Mon Sep 17 00:00:00 2001 From: Denis Molony Date: Thu, 14 Jan 2021 21:55:57 +1000 Subject: [PATCH] moved string handling to SubLine --- .../applefile/ApplesoftBasicProgram.java | 5 ++++ .../diskbrowser/applefile/SourceLine.java | 7 ----- .../diskbrowser/applefile/SubLine.java | 26 ++++++++++++++----- .../bytezone/diskbrowser/gui/MenuHandler.java | 10 +++---- 4 files changed, 29 insertions(+), 19 deletions(-) diff --git a/src/com/bytezone/diskbrowser/applefile/ApplesoftBasicProgram.java b/src/com/bytezone/diskbrowser/applefile/ApplesoftBasicProgram.java index f8e0f07..f8fd136 100644 --- a/src/com/bytezone/diskbrowser/applefile/ApplesoftBasicProgram.java +++ b/src/com/bytezone/diskbrowser/applefile/ApplesoftBasicProgram.java @@ -86,6 +86,11 @@ public class ApplesoftBasicProgram extends BasicProgram implements ApplesoftCons addNumberFloat (line.lineNumber, num, constantsFloat); if (subline.callTarget != null) addString (line.lineNumber, subline.callTarget, callLines); + for (String s : subline.getStringsText ()) + { + stringsText.add (s); + stringsLine.add (line.lineNumber); + } } } endPtr = ptr; diff --git a/src/com/bytezone/diskbrowser/applefile/SourceLine.java b/src/com/bytezone/diskbrowser/applefile/SourceLine.java index ab82a49..bf06924 100644 --- a/src/com/bytezone/diskbrowser/applefile/SourceLine.java +++ b/src/com/bytezone/diskbrowser/applefile/SourceLine.java @@ -31,7 +31,6 @@ public class SourceLine implements ApplesoftConstants boolean inString = false; // can toggle boolean inRemark = false; // can only go false -> true byte b; - int stringPtr = 0; while (ptr < buffer.length && (b = buffer[ptr++]) != 0) { @@ -41,12 +40,7 @@ public class SourceLine implements ApplesoftConstants if (inString) { if (b == Utility.ASCII_QUOTE) // terminate string - { inString = false; - String s = new String (buffer, stringPtr - 1, ptr - stringPtr + 1); - parent.stringsText.add (s); - parent.stringsLine.add (lineNumber); - } continue; } @@ -89,7 +83,6 @@ public class SourceLine implements ApplesoftConstants case Utility.ASCII_QUOTE: inString = true; - stringPtr = ptr; break; } } diff --git a/src/com/bytezone/diskbrowser/applefile/SubLine.java b/src/com/bytezone/diskbrowser/applefile/SubLine.java index fe49cd5..6b2d3a1 100644 --- a/src/com/bytezone/diskbrowser/applefile/SubLine.java +++ b/src/com/bytezone/diskbrowser/applefile/SubLine.java @@ -27,12 +27,16 @@ public class SubLine implements ApplesoftConstants private final List gotoLines = new ArrayList<> (); private final List gosubLines = new ArrayList<> (); + private final List symbols = new ArrayList<> (); private final List functions = new ArrayList<> (); private final List arrays = new ArrayList<> (); + private final List constantsInt = new ArrayList<> (); private final List constantsFloat = new ArrayList<> (); + private final List stringsText = new ArrayList<> (); + // ---------------------------------------------------------------------------------// SubLine (SourceLine parent, int startPtr, int length) // ---------------------------------------------------------------------------------// @@ -69,6 +73,7 @@ public class SubLine implements ApplesoftConstants boolean inQuote = false; boolean inFunction = false; boolean inDefine = false; + int stringPtr = 0; int max = startPtr + length - 1; if (buffer[max] == 0 || buffer[max] == Utility.ASCII_COLON) @@ -101,13 +106,18 @@ public class SubLine implements ApplesoftConstants if (inQuote) { if (b == Utility.ASCII_QUOTE) // ignore strings + { inQuote = false; + String s = new String (buffer, stringPtr - 1, ptr - stringPtr + 1); + stringsText.add (s); + } continue; } if (b == Utility.ASCII_QUOTE) { inQuote = true; + stringPtr = ptr; continue; } @@ -230,6 +240,13 @@ public class SubLine implements ApplesoftConstants return constantsFloat; } + // ---------------------------------------------------------------------------------// + List getStringsText () + // ---------------------------------------------------------------------------------// + { + return stringsText; + } + // ---------------------------------------------------------------------------------// private void doToken (byte b) // ---------------------------------------------------------------------------------// @@ -324,12 +341,9 @@ public class SubLine implements ApplesoftConstants b = (byte) chunk.charAt (0); if (Utility.isDigit (b) || b == Utility.ASCII_MINUS || b == Utility.ASCII_DOT) addNumber (chunk); - else if (Utility.isLetter (b)) // quoted strings are already handled - { - parent.parent.stringsText.add (chunk); - parent.parent.stringsLine.add (parent.lineNumber); - } - else if (b != Utility.ASCII_QUOTE) + else if (Utility.isLetter (b) || b == Utility.ASCII_QUOTE) + stringsText.add (chunk); + else System.out.println ("Unknown data: " + chunk); } diff --git a/src/com/bytezone/diskbrowser/gui/MenuHandler.java b/src/com/bytezone/diskbrowser/gui/MenuHandler.java index da2a721..9e65908 100755 --- a/src/com/bytezone/diskbrowser/gui/MenuHandler.java +++ b/src/com/bytezone/diskbrowser/gui/MenuHandler.java @@ -97,8 +97,8 @@ class MenuHandler implements DiskSelectionListener, FileSelectionListener, QuitL private final List textPreferencesListeners = new ArrayList<> (); - private List applesoftFormatItems; - private List applesoftXrefItems; + private List applesoftFormatItems; + private List applesoftXrefItems; JMenuBar menuBar = new JMenuBar (); JMenu fileMenu = new JMenu ("File"); @@ -289,15 +289,13 @@ class MenuHandler implements DiskSelectionListener, FileSelectionListener, QuitL prodosMenu.add (prodosSortDirectoriesItem); - applesoftFormatItems = new ArrayList (Arrays.asList (splitRemarkItem, splitDimItem, + applesoftFormatItems = new ArrayList<> (Arrays.asList (splitRemarkItem, splitDimItem, alignAssignItem, showBasicTargetsItem, onlyShowTargetLinesItem, showCaretItem, showThenItem, blankAfterReturn, deleteExtraRemSpace, deleteExtraDataSpace)); - applesoftXrefItems = new ArrayList (Arrays.asList (showXrefItem, showCallsItem, + applesoftXrefItems = new ArrayList<> (Arrays.asList (showXrefItem, showCallsItem, showSymbolsItem, showFunctionsItem, showConstantsItem, showDuplicateSymbolsItem)); - List anotherList = Arrays.asList (5, 12, 9, 3, 15, 88); - ActionListener basicPreferencesAction = new ActionListener () { @Override