mirror of
https://github.com/dmolony/DiskBrowser.git
synced 2025-02-20 04:29:02 +00:00
show Xref
This commit is contained in:
parent
c07b8795bf
commit
8f019f7e8c
@ -1,10 +1,10 @@
|
|||||||
package com.bytezone.diskbrowser.applefile;
|
package com.bytezone.diskbrowser.applefile;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Map;
|
||||||
import java.util.Stack;
|
import java.util.Stack;
|
||||||
|
import java.util.TreeMap;
|
||||||
|
|
||||||
import com.bytezone.diskbrowser.utilities.HexFormatter;
|
import com.bytezone.diskbrowser.utilities.HexFormatter;
|
||||||
import com.bytezone.diskbrowser.utilities.Utility;
|
import com.bytezone.diskbrowser.utilities.Utility;
|
||||||
@ -29,8 +29,8 @@ public class ApplesoftBasicProgram extends BasicProgram
|
|||||||
|
|
||||||
private final List<SourceLine> sourceLines = new ArrayList<> ();
|
private final List<SourceLine> sourceLines = new ArrayList<> ();
|
||||||
private final int endPtr;
|
private final int endPtr;
|
||||||
private final Set<Integer> gotoLines = new HashSet<> ();
|
private final Map<Integer, List<Integer>> gotoLines = new TreeMap<> ();
|
||||||
private final Set<Integer> gosubLines = new HashSet<> ();
|
private final Map<Integer, List<Integer>> gosubLines = new TreeMap<> ();
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------//
|
// ---------------------------------------------------------------------------------//
|
||||||
public ApplesoftBasicProgram (String name, byte[] buffer)
|
public ApplesoftBasicProgram (String name, byte[] buffer)
|
||||||
@ -70,6 +70,7 @@ public class ApplesoftBasicProgram extends BasicProgram
|
|||||||
{
|
{
|
||||||
int indentSize = 2;
|
int indentSize = 2;
|
||||||
boolean insertBlankLine = false;
|
boolean insertBlankLine = false;
|
||||||
|
boolean showGosubs = true;
|
||||||
|
|
||||||
StringBuilder fullText = new StringBuilder ();
|
StringBuilder fullText = new StringBuilder ();
|
||||||
Stack<String> loopVariables = new Stack<> ();
|
Stack<String> loopVariables = new Stack<> ();
|
||||||
@ -254,9 +255,25 @@ public class ApplesoftBasicProgram extends BasicProgram
|
|||||||
programLoadAddress + ptr));
|
programLoadAddress + ptr));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (basicPreferences.showXref)
|
||||||
|
{
|
||||||
|
if (fullText.charAt (fullText.length () - 2) != '\n')
|
||||||
|
fullText.append ("\n");
|
||||||
|
fullText.append ("Subroutine:\n");
|
||||||
|
for (Integer line : gosubLines.keySet ())
|
||||||
|
{
|
||||||
|
fullText.append (String.format (" %5s %s%n", line, gosubLines.get (line)));
|
||||||
|
}
|
||||||
|
fullText.append ("\nGoTo:\n");
|
||||||
|
for (Integer line : gotoLines.keySet ())
|
||||||
|
{
|
||||||
|
fullText.append (String.format (" %5s %s%n", line, gotoLines.get (line)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (fullText.length () > 0)
|
if (fullText.length () > 0)
|
||||||
while (fullText.charAt (fullText.length () - 1) == '\n')
|
while (fullText.charAt (fullText.length () - 1) == '\n')
|
||||||
fullText.deleteCharAt (fullText.length () - 1); // remove last newline
|
fullText.deleteCharAt (fullText.length () - 1); // remove trailing newlines
|
||||||
|
|
||||||
return fullText.toString ();
|
return fullText.toString ();
|
||||||
}
|
}
|
||||||
@ -363,8 +380,8 @@ public class ApplesoftBasicProgram extends BasicProgram
|
|||||||
private String getBase (SourceLine line)
|
private String getBase (SourceLine line)
|
||||||
// ---------------------------------------------------------------------------------//
|
// ---------------------------------------------------------------------------------//
|
||||||
{
|
{
|
||||||
boolean isTarget =
|
boolean isTarget = gotoLines.containsKey (line.lineNumber)
|
||||||
gotoLines.contains (line.lineNumber) || gosubLines.contains (line.lineNumber);
|
|| gosubLines.containsKey (line.lineNumber);
|
||||||
|
|
||||||
if (!basicPreferences.showTargets)
|
if (!basicPreferences.showTargets)
|
||||||
{
|
{
|
||||||
@ -381,9 +398,9 @@ public class ApplesoftBasicProgram extends BasicProgram
|
|||||||
c1 = "<<";
|
c1 = "<<";
|
||||||
if (subline.is (TOKEN_GOTO))
|
if (subline.is (TOKEN_GOTO))
|
||||||
c1 = " <";
|
c1 = " <";
|
||||||
if (gotoLines.contains (line.lineNumber))
|
if (gotoLines.containsKey (line.lineNumber))
|
||||||
c2 = "> ";
|
c2 = "> ";
|
||||||
if (gosubLines.contains (line.lineNumber))
|
if (gosubLines.containsKey (line.lineNumber))
|
||||||
c2 = ">>";
|
c2 = ">>";
|
||||||
if (c1.equals (" ") && !c2.equals (" "))
|
if (c1.equals (" ") && !c2.equals (" "))
|
||||||
c1 = "--";
|
c1 = "--";
|
||||||
@ -570,7 +587,6 @@ public class ApplesoftBasicProgram extends BasicProgram
|
|||||||
SourceLine (int ptr)
|
SourceLine (int ptr)
|
||||||
{
|
{
|
||||||
linePtr = ptr;
|
linePtr = ptr;
|
||||||
// lineNumber = Utility.intValue (buffer[ptr + 2], buffer[ptr + 3]);
|
|
||||||
lineNumber = Utility.unsignedShort (buffer, ptr + 2);
|
lineNumber = Utility.unsignedShort (buffer, ptr + 2);
|
||||||
|
|
||||||
int startPtr = ptr += 4;
|
int startPtr = ptr += 4;
|
||||||
@ -689,7 +705,19 @@ public class ApplesoftBasicProgram extends BasicProgram
|
|||||||
String target = new String (buffer, startPtr + 1, length - 2);
|
String target = new String (buffer, startPtr + 1, length - 2);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
gotoLines.add (Integer.parseInt (target));
|
int targetLine = Integer.parseInt (target);
|
||||||
|
// gotoLines.add (Integer.parseInt (target));
|
||||||
|
if (gotoLines.containsKey (targetLine))
|
||||||
|
{
|
||||||
|
List<Integer> lines = gotoLines.get (targetLine);
|
||||||
|
lines.add (parent.lineNumber);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
List<Integer> lines = new ArrayList<> ();
|
||||||
|
lines.add (parent.lineNumber);
|
||||||
|
gotoLines.put (targetLine, lines);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (NumberFormatException e)
|
catch (NumberFormatException e)
|
||||||
{
|
{
|
||||||
@ -699,16 +727,28 @@ public class ApplesoftBasicProgram extends BasicProgram
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case TOKEN_GOSUB:
|
case TOKEN_GOSUB:
|
||||||
String target2 = new String (buffer, startPtr + 1, length - 2);
|
target = new String (buffer, startPtr + 1, length - 2);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
gosubLines.add (Integer.parseInt (target2));
|
int targetLine = Integer.parseInt (target);
|
||||||
|
// gosubLines.add (Integer.parseInt (target));
|
||||||
|
if (gosubLines.containsKey (targetLine))
|
||||||
|
{
|
||||||
|
List<Integer> lines = gosubLines.get (targetLine);
|
||||||
|
lines.add (parent.lineNumber);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
List<Integer> lines = new ArrayList<> ();
|
||||||
|
lines.add (parent.lineNumber);
|
||||||
|
gosubLines.put (targetLine, lines);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (NumberFormatException e)
|
catch (NumberFormatException e)
|
||||||
{
|
{
|
||||||
System.out.println (HexFormatter.format (buffer, startPtr + 1, length - 2));
|
System.out.println (HexFormatter.format (buffer, startPtr + 1, length - 2));
|
||||||
System.out.println (
|
System.out.println (
|
||||||
"Error parsing : GOSUB " + target2 + " in " + parent.lineNumber);
|
"Error parsing : GOSUB " + target + " in " + parent.lineNumber);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -721,7 +761,18 @@ public class ApplesoftBasicProgram extends BasicProgram
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
targetLine = Integer.parseInt (target);
|
targetLine = Integer.parseInt (target);
|
||||||
gotoLines.add (targetLine);
|
// gotoLines.add (targetLine);
|
||||||
|
if (gotoLines.containsKey (targetLine))
|
||||||
|
{
|
||||||
|
List<Integer> lines = gotoLines.get (targetLine);
|
||||||
|
lines.add (parent.lineNumber);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
List<Integer> lines = new ArrayList<> ();
|
||||||
|
lines.add (parent.lineNumber);
|
||||||
|
gotoLines.put (targetLine, lines);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (NumberFormatException e)
|
catch (NumberFormatException e)
|
||||||
{
|
{
|
||||||
|
@ -14,6 +14,7 @@ public class BasicPreferences
|
|||||||
public boolean blankAfterReturn = false;
|
public boolean blankAfterReturn = false;
|
||||||
public boolean deleteExtraRemSpace = false;
|
public boolean deleteExtraRemSpace = false;
|
||||||
public boolean deleteExtraDataSpace = false;
|
public boolean deleteExtraDataSpace = false;
|
||||||
|
public boolean showXref = false;
|
||||||
public int wrapPrintAt = 0;
|
public int wrapPrintAt = 0;
|
||||||
public int wrapRemAt = 60;
|
public int wrapRemAt = 60;
|
||||||
public int wrapDataAt = 60;
|
public int wrapDataAt = 60;
|
||||||
@ -33,6 +34,7 @@ public class BasicPreferences
|
|||||||
text.append (String.format ("Show header .............. %s%n", showHeader));
|
text.append (String.format ("Show header .............. %s%n", showHeader));
|
||||||
text.append (String.format ("Show caret ............... %s%n", showCaret));
|
text.append (String.format ("Show caret ............... %s%n", showCaret));
|
||||||
text.append (String.format ("Show THEN ................ %s%n", showThen));
|
text.append (String.format ("Show THEN ................ %s%n", showThen));
|
||||||
|
text.append (String.format ("Show Xref ................ %s%n", showXref));
|
||||||
text.append (String.format ("Blank after RETURN ....... %s%n", blankAfterReturn));
|
text.append (String.format ("Blank after RETURN ....... %s%n", blankAfterReturn));
|
||||||
text.append (String.format ("Delete extra REM space ... %s%n", deleteExtraRemSpace));
|
text.append (String.format ("Delete extra REM space ... %s%n", deleteExtraRemSpace));
|
||||||
text.append (String.format ("Delete extra DATA space .. %s%n", deleteExtraDataSpace));
|
text.append (String.format ("Delete extra DATA space .. %s%n", deleteExtraDataSpace));
|
||||||
|
@ -49,6 +49,7 @@ class MenuHandler implements DiskSelectionListener, FileSelectionListener, QuitL
|
|||||||
private static final String PREFS_SHOW_HEADER = "showHeader";
|
private static final String PREFS_SHOW_HEADER = "showHeader";
|
||||||
private static final String PREFS_SHOW_CARET = "showCaret";
|
private static final String PREFS_SHOW_CARET = "showCaret";
|
||||||
private static final String PREFS_SHOW_THEN = "showThen";
|
private static final String PREFS_SHOW_THEN = "showThen";
|
||||||
|
private static final String PREFS_SHOW_XREF = "showXref";
|
||||||
private static final String PREFS_BLANK_AFTER_RETURN = "blankAfterReturn";
|
private static final String PREFS_BLANK_AFTER_RETURN = "blankAfterReturn";
|
||||||
private static final String PREFS_DELETE_EXTRA_REM_SPACE = "deleteExtraRemSpace";
|
private static final String PREFS_DELETE_EXTRA_REM_SPACE = "deleteExtraRemSpace";
|
||||||
private static final String PREFS_DELETE_EXTRA_DATA_SPACE = "deleteExtraDataSpace";
|
private static final String PREFS_DELETE_EXTRA_DATA_SPACE = "deleteExtraDataSpace";
|
||||||
@ -136,6 +137,7 @@ class MenuHandler implements DiskSelectionListener, FileSelectionListener, QuitL
|
|||||||
final JMenuItem showHeaderItem = new JCheckBoxMenuItem ("Show header");
|
final JMenuItem showHeaderItem = new JCheckBoxMenuItem ("Show header");
|
||||||
final JMenuItem showCaretItem = new JCheckBoxMenuItem ("Show caret");
|
final JMenuItem showCaretItem = new JCheckBoxMenuItem ("Show caret");
|
||||||
final JMenuItem showThenItem = new JCheckBoxMenuItem ("Show THEN after IF");
|
final JMenuItem showThenItem = new JCheckBoxMenuItem ("Show THEN after IF");
|
||||||
|
final JMenuItem showXrefItem = new JCheckBoxMenuItem ("Show Xref");
|
||||||
final JMenuItem blankAfterReturn = new JCheckBoxMenuItem ("Blank line after RETURN");
|
final JMenuItem blankAfterReturn = new JCheckBoxMenuItem ("Blank line after RETURN");
|
||||||
final JMenuItem deleteExtraRemSpace = new JCheckBoxMenuItem ("Delete extra REM space");
|
final JMenuItem deleteExtraRemSpace = new JCheckBoxMenuItem ("Delete extra REM space");
|
||||||
final JMenuItem deleteExtraDataSpace =
|
final JMenuItem deleteExtraDataSpace =
|
||||||
@ -234,6 +236,7 @@ class MenuHandler implements DiskSelectionListener, FileSelectionListener, QuitL
|
|||||||
applesoftMenu.add (onlyShowTargetLinesItem);
|
applesoftMenu.add (onlyShowTargetLinesItem);
|
||||||
applesoftMenu.add (showCaretItem);
|
applesoftMenu.add (showCaretItem);
|
||||||
applesoftMenu.add (showThenItem);
|
applesoftMenu.add (showThenItem);
|
||||||
|
applesoftMenu.add (showXrefItem);
|
||||||
applesoftMenu.add (blankAfterReturn);
|
applesoftMenu.add (blankAfterReturn);
|
||||||
applesoftMenu.add (deleteExtraRemSpace);
|
applesoftMenu.add (deleteExtraRemSpace);
|
||||||
applesoftMenu.add (deleteExtraDataSpace);
|
applesoftMenu.add (deleteExtraDataSpace);
|
||||||
@ -294,6 +297,7 @@ class MenuHandler implements DiskSelectionListener, FileSelectionListener, QuitL
|
|||||||
showHeaderItem.addActionListener (basicPreferencesAction);
|
showHeaderItem.addActionListener (basicPreferencesAction);
|
||||||
showCaretItem.addActionListener (basicPreferencesAction);
|
showCaretItem.addActionListener (basicPreferencesAction);
|
||||||
showThenItem.addActionListener (basicPreferencesAction);
|
showThenItem.addActionListener (basicPreferencesAction);
|
||||||
|
showXrefItem.addActionListener (basicPreferencesAction);
|
||||||
blankAfterReturn.addActionListener (basicPreferencesAction);
|
blankAfterReturn.addActionListener (basicPreferencesAction);
|
||||||
deleteExtraRemSpace.addActionListener (basicPreferencesAction);
|
deleteExtraRemSpace.addActionListener (basicPreferencesAction);
|
||||||
deleteExtraDataSpace.addActionListener (basicPreferencesAction);
|
deleteExtraDataSpace.addActionListener (basicPreferencesAction);
|
||||||
@ -340,6 +344,7 @@ class MenuHandler implements DiskSelectionListener, FileSelectionListener, QuitL
|
|||||||
basicPreferences.alignAssign = alignAssignItem.isSelected ();
|
basicPreferences.alignAssign = alignAssignItem.isSelected ();
|
||||||
basicPreferences.showCaret = showCaretItem.isSelected ();
|
basicPreferences.showCaret = showCaretItem.isSelected ();
|
||||||
basicPreferences.showThen = showThenItem.isSelected ();
|
basicPreferences.showThen = showThenItem.isSelected ();
|
||||||
|
basicPreferences.showXref = showXrefItem.isSelected ();
|
||||||
basicPreferences.blankAfterReturn = blankAfterReturn.isSelected ();
|
basicPreferences.blankAfterReturn = blankAfterReturn.isSelected ();
|
||||||
basicPreferences.deleteExtraRemSpace = deleteExtraRemSpace.isSelected ();
|
basicPreferences.deleteExtraRemSpace = deleteExtraRemSpace.isSelected ();
|
||||||
basicPreferences.deleteExtraDataSpace = deleteExtraDataSpace.isSelected ();
|
basicPreferences.deleteExtraDataSpace = deleteExtraDataSpace.isSelected ();
|
||||||
@ -496,6 +501,7 @@ class MenuHandler implements DiskSelectionListener, FileSelectionListener, QuitL
|
|||||||
prefs.putBoolean (PREFS_ALIGN_ASSIGN, alignAssignItem.isSelected ());
|
prefs.putBoolean (PREFS_ALIGN_ASSIGN, alignAssignItem.isSelected ());
|
||||||
prefs.putBoolean (PREFS_SHOW_CARET, showCaretItem.isSelected ());
|
prefs.putBoolean (PREFS_SHOW_CARET, showCaretItem.isSelected ());
|
||||||
prefs.putBoolean (PREFS_SHOW_THEN, showThenItem.isSelected ());
|
prefs.putBoolean (PREFS_SHOW_THEN, showThenItem.isSelected ());
|
||||||
|
prefs.putBoolean (PREFS_SHOW_XREF, showXrefItem.isSelected ());
|
||||||
prefs.putBoolean (PREFS_SHOW_HEADER, showHeaderItem.isSelected ());
|
prefs.putBoolean (PREFS_SHOW_HEADER, showHeaderItem.isSelected ());
|
||||||
prefs.putBoolean (PREFS_SHOW_TARGETS, showBasicTargetsItem.isSelected ());
|
prefs.putBoolean (PREFS_SHOW_TARGETS, showBasicTargetsItem.isSelected ());
|
||||||
prefs.putBoolean (PREFS_ONLY_SHOW_TARGETS, onlyShowTargetLinesItem.isSelected ());
|
prefs.putBoolean (PREFS_ONLY_SHOW_TARGETS, onlyShowTargetLinesItem.isSelected ());
|
||||||
@ -545,6 +551,7 @@ class MenuHandler implements DiskSelectionListener, FileSelectionListener, QuitL
|
|||||||
alignAssignItem.setSelected (prefs.getBoolean (PREFS_ALIGN_ASSIGN, true));
|
alignAssignItem.setSelected (prefs.getBoolean (PREFS_ALIGN_ASSIGN, true));
|
||||||
showCaretItem.setSelected (prefs.getBoolean (PREFS_SHOW_CARET, false));
|
showCaretItem.setSelected (prefs.getBoolean (PREFS_SHOW_CARET, false));
|
||||||
showThenItem.setSelected (prefs.getBoolean (PREFS_SHOW_THEN, true));
|
showThenItem.setSelected (prefs.getBoolean (PREFS_SHOW_THEN, true));
|
||||||
|
showXrefItem.setSelected (prefs.getBoolean (PREFS_SHOW_XREF, false));
|
||||||
showHeaderItem.setSelected (prefs.getBoolean (PREFS_SHOW_HEADER, true));
|
showHeaderItem.setSelected (prefs.getBoolean (PREFS_SHOW_HEADER, true));
|
||||||
showBasicTargetsItem.setSelected (prefs.getBoolean (PREFS_SHOW_TARGETS, false));
|
showBasicTargetsItem.setSelected (prefs.getBoolean (PREFS_SHOW_TARGETS, false));
|
||||||
onlyShowTargetLinesItem
|
onlyShowTargetLinesItem
|
||||||
|
Loading…
x
Reference in New Issue
Block a user