mirror of
https://github.com/dmolony/DiskBrowser.git
synced 2024-06-25 11:29:32 +00:00
wrap variable xref lines
This commit is contained in:
parent
dcecfb1399
commit
16c677b83d
|
@ -17,10 +17,12 @@ 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;
|
||||||
|
|
||||||
final Map<Integer, List<Integer>> gotoLines = new TreeMap<> ();
|
final Map<Integer, List<Integer>> gotoLines = new TreeMap<> ();
|
||||||
final Map<Integer, List<Integer>> gosubLines = new TreeMap<> ();
|
final Map<Integer, List<Integer>> gosubLines = new TreeMap<> ();
|
||||||
final Map<String, List<Integer>> symbolLines = new TreeMap<> ();
|
final Map<String, List<Integer>> symbolLines = new TreeMap<> ();
|
||||||
final Map<String, List<String>> uniqueSymbols = new TreeMap<> ();
|
final Map<String, List<String>> uniqueSymbols = new TreeMap<> ();
|
||||||
|
|
||||||
final List<Integer> stringsLine = new ArrayList<> ();
|
final List<Integer> stringsLine = new ArrayList<> ();
|
||||||
final List<String> stringsText = new ArrayList<> ();
|
final List<String> stringsText = new ArrayList<> ();
|
||||||
|
|
||||||
|
@ -31,19 +33,19 @@ public class ApplesoftBasicProgram extends BasicProgram
|
||||||
super (name, buffer);
|
super (name, buffer);
|
||||||
|
|
||||||
int ptr = 0;
|
int ptr = 0;
|
||||||
int prevOffset = 0;
|
int currentAddress = 0;
|
||||||
|
|
||||||
int max = buffer.length - 6; // need at least 6 bytes to make a SourceLine
|
int max = buffer.length - 6; // need at least 6 bytes to make a SourceLine
|
||||||
while (ptr <= max)
|
while (ptr <= max)
|
||||||
{
|
{
|
||||||
int nextAddress = Utility.unsignedShort (buffer, ptr);
|
int nextAddress = Utility.unsignedShort (buffer, ptr);
|
||||||
if (nextAddress <= prevOffset) // usually zero
|
if (nextAddress <= currentAddress) // usually zero when finished
|
||||||
break;
|
break;
|
||||||
|
|
||||||
SourceLine line = new SourceLine (this, buffer, ptr);
|
SourceLine line = new SourceLine (this, buffer, ptr);
|
||||||
sourceLines.add (line);
|
sourceLines.add (line);
|
||||||
ptr += line.length;
|
ptr += line.length;
|
||||||
prevOffset = nextAddress;
|
currentAddress = nextAddress;
|
||||||
}
|
}
|
||||||
endPtr = ptr;
|
endPtr = ptr;
|
||||||
}
|
}
|
||||||
|
@ -181,8 +183,8 @@ public class ApplesoftBasicProgram extends BasicProgram
|
||||||
if (basicPreferences.wrapPrintAt > 0 //
|
if (basicPreferences.wrapPrintAt > 0 //
|
||||||
&& (subline.is (ApplesoftConstants.TOKEN_PRINT)
|
&& (subline.is (ApplesoftConstants.TOKEN_PRINT)
|
||||||
|| subline.is (ApplesoftConstants.TOKEN_INPUT))
|
|| subline.is (ApplesoftConstants.TOKEN_INPUT))
|
||||||
&& countChars (text, Utility.ASCII_QUOTE) == 2 // just start and end quotes
|
&& countChars (text, Utility.ASCII_QUOTE) == 2 // just start and end quotes
|
||||||
&& countChars (text, Utility.ASCII_CARET) == 0) // no control characters
|
&& countChars (text, Utility.ASCII_CARET) == 0) // no control characters
|
||||||
// && countChars (text, ASCII_SEMI_COLON) == 0)
|
// && countChars (text, ASCII_SEMI_COLON) == 0)
|
||||||
{
|
{
|
||||||
if (true) // new method
|
if (true) // new method
|
||||||
|
@ -279,7 +281,15 @@ public class ApplesoftBasicProgram extends BasicProgram
|
||||||
String format = longestVarName > 6 ? "%" + longestVarName + "s %s%n" : "%6s %s%n";
|
String format = longestVarName > 6 ? "%" + longestVarName + "s %s%n" : "%6s %s%n";
|
||||||
|
|
||||||
for (String symbol : symbolLines.keySet ())
|
for (String symbol : symbolLines.keySet ())
|
||||||
fullText.append (String.format (format, symbol, symbolLines.get (symbol)));
|
{
|
||||||
|
String line = symbolLines.get (symbol).toString ();
|
||||||
|
line = line.substring (1, line.length () - 2);
|
||||||
|
for (String s : splitXref (line, 90, ' '))
|
||||||
|
{
|
||||||
|
fullText.append (String.format (format, symbol, s));
|
||||||
|
symbol = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (basicPreferences.showDuplicateSymbols && !uniqueSymbols.isEmpty ())
|
if (basicPreferences.showDuplicateSymbols && !uniqueSymbols.isEmpty ())
|
||||||
|
@ -397,6 +407,7 @@ public class ApplesoftBasicProgram extends BasicProgram
|
||||||
int firstSpace = 0;
|
int firstSpace = 0;
|
||||||
while (firstSpace < line.length () && line.charAt (firstSpace) != ' ')
|
while (firstSpace < line.length () && line.charAt (firstSpace) != ' ')
|
||||||
++firstSpace;
|
++firstSpace;
|
||||||
|
System.out.println (line);
|
||||||
|
|
||||||
List<String> lines = new ArrayList<> ();
|
List<String> lines = new ArrayList<> ();
|
||||||
while (line.length () > wrapLength)
|
while (line.length () > wrapLength)
|
||||||
|
@ -414,6 +425,26 @@ public class ApplesoftBasicProgram extends BasicProgram
|
||||||
return lines;
|
return lines;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------------//
|
||||||
|
private List<String> splitXref (String line, int wrapLength, char breakChar)
|
||||||
|
// ---------------------------------------------------------------------------------//
|
||||||
|
{
|
||||||
|
List<String> lines = new ArrayList<> ();
|
||||||
|
while (line.length () > wrapLength)
|
||||||
|
{
|
||||||
|
int max = Math.min (wrapLength, line.length () - 1);
|
||||||
|
while (max > 0 && line.charAt (max) != breakChar)
|
||||||
|
--max;
|
||||||
|
if (max == 0)
|
||||||
|
break;
|
||||||
|
lines.add (line.substring (0, max + 1));
|
||||||
|
line = line.substring (max + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
lines.add (line);
|
||||||
|
return lines;
|
||||||
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------//
|
// ---------------------------------------------------------------------------------//
|
||||||
private List<String> splitDim (String line)
|
private List<String> splitDim (String line)
|
||||||
// ---------------------------------------------------------------------------------//
|
// ---------------------------------------------------------------------------------//
|
||||||
|
|
|
@ -9,12 +9,12 @@ import com.bytezone.diskbrowser.utilities.Utility;
|
||||||
public class SourceLine
|
public class SourceLine
|
||||||
// -----------------------------------------------------------------------------------//
|
// -----------------------------------------------------------------------------------//
|
||||||
{
|
{
|
||||||
|
ApplesoftBasicProgram parent;
|
||||||
List<SubLine> sublines = new ArrayList<> ();
|
List<SubLine> sublines = new ArrayList<> ();
|
||||||
int lineNumber;
|
int lineNumber;
|
||||||
int linePtr;
|
int linePtr;
|
||||||
int length;
|
int length;
|
||||||
byte[] buffer;
|
byte[] buffer;
|
||||||
ApplesoftBasicProgram parent;
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------//
|
// ---------------------------------------------------------------------------------//
|
||||||
SourceLine (ApplesoftBasicProgram parent, byte[] buffer, int ptr)
|
SourceLine (ApplesoftBasicProgram parent, byte[] buffer, int ptr)
|
||||||
|
@ -77,7 +77,6 @@ public class SourceLine
|
||||||
if (ptr != startPtr + 1) // REM appears mid-line (should follow a colon)
|
if (ptr != startPtr + 1) // REM appears mid-line (should follow a colon)
|
||||||
{
|
{
|
||||||
System.out.println ("mid-line REM token");
|
System.out.println ("mid-line REM token");
|
||||||
// System.out.println (HexFormatter.format (buffer, startPtr, 10));
|
|
||||||
sublines.add (new SubLine (this, startPtr, (ptr - startPtr) - 1));
|
sublines.add (new SubLine (this, startPtr, (ptr - startPtr) - 1));
|
||||||
startPtr = ptr - 1;
|
startPtr = ptr - 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,6 @@ public class SubLine
|
||||||
int length;
|
int length;
|
||||||
String[] nextVariables;
|
String[] nextVariables;
|
||||||
String forVariable = "";
|
String forVariable = "";
|
||||||
String onExpression = "";
|
|
||||||
int assignEqualPos; // used for aligning the equals sign
|
int assignEqualPos; // used for aligning the equals sign
|
||||||
byte[] buffer;
|
byte[] buffer;
|
||||||
|
|
||||||
|
@ -150,14 +149,14 @@ public class SubLine
|
||||||
while (p < max && parent.buffer[p] != ApplesoftConstants.TOKEN_GOTO
|
while (p < max && parent.buffer[p] != ApplesoftConstants.TOKEN_GOTO
|
||||||
&& parent.buffer[p] != ApplesoftConstants.TOKEN_GOSUB)
|
&& parent.buffer[p] != ApplesoftConstants.TOKEN_GOSUB)
|
||||||
{
|
{
|
||||||
if (Utility.isHighBitSet (parent.buffer[p]))
|
// if (Utility.isHighBitSet (parent.buffer[p]))
|
||||||
{
|
// {
|
||||||
int val = parent.buffer[p] & 0x7F;
|
// int val = parent.buffer[p] & 0x7F;
|
||||||
if (val < ApplesoftConstants.tokens.length)
|
// if (val < ApplesoftConstants.tokens.length)
|
||||||
onExpression += " " + ApplesoftConstants.tokens[val];
|
// onExpression += " " + ApplesoftConstants.tokens[val];
|
||||||
}
|
// }
|
||||||
else
|
// else
|
||||||
onExpression += (char) (parent.buffer[p]);
|
// onExpression += (char) (parent.buffer[p]);
|
||||||
p++;
|
p++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -325,6 +324,7 @@ public class SubLine
|
||||||
{
|
{
|
||||||
int ptr = startPtr + 1;
|
int ptr = startPtr + 1;
|
||||||
int max = startPtr + length;
|
int max = startPtr + length;
|
||||||
|
|
||||||
while (ptr < max)
|
while (ptr < max)
|
||||||
{
|
{
|
||||||
if (parent.buffer[ptr++] == token)
|
if (parent.buffer[ptr++] == token)
|
||||||
|
@ -378,14 +378,21 @@ public class SubLine
|
||||||
|
|
||||||
while (ptr <= max)
|
while (ptr <= max)
|
||||||
{
|
{
|
||||||
int c = buffer[ptr] & 0xFF;
|
switch (buffer[ptr])
|
||||||
// System.out.printf ("%02X %s%n", c, (char) c);
|
{
|
||||||
if (c == 0x08 && text.length () > 0)
|
case Utility.ASCII_BACKSPACE:
|
||||||
text.deleteCharAt (text.length () - 1);
|
if (text.length () > 0)
|
||||||
else if (c == 0x0D)
|
text.deleteCharAt (text.length () - 1);
|
||||||
text.append ("\n");
|
break;
|
||||||
else
|
|
||||||
text.append ((char) c);
|
case Utility.ASCII_CR:
|
||||||
|
text.append ("\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
text.append ((char) buffer[ptr]); // do not mask with 0xFF
|
||||||
|
}
|
||||||
|
|
||||||
ptr++;
|
ptr++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -418,6 +425,7 @@ public class SubLine
|
||||||
System.arraycopy (buffer, startPtr + 1, buffer2, 0, buffer2.length);
|
System.arraycopy (buffer, startPtr + 1, buffer2, 0, buffer2.length);
|
||||||
AssemblerProgram program =
|
AssemblerProgram program =
|
||||||
new AssemblerProgram ("REM assembler", buffer2, getAddress () + 1);
|
new AssemblerProgram ("REM assembler", buffer2, getAddress () + 1);
|
||||||
|
|
||||||
return program.getAssembler ().split ("\n");
|
return program.getAssembler ().split ("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -460,7 +468,7 @@ public class SubLine
|
||||||
}
|
}
|
||||||
else if (Utility.isControlCharacter (b))
|
else if (Utility.isControlCharacter (b))
|
||||||
line.append (ApplesoftBasicProgram.basicPreferences.showCaret
|
line.append (ApplesoftBasicProgram.basicPreferences.showCaret
|
||||||
? "^" + (char) (b + 64) : "");
|
? "^" + (char) (b + 64) : ".");
|
||||||
else
|
else
|
||||||
line.append ((char) b);
|
line.append ((char) b);
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,8 @@ import java.util.zip.Checksum;
|
||||||
public class Utility
|
public class Utility
|
||||||
// -----------------------------------------------------------------------------------//
|
// -----------------------------------------------------------------------------------//
|
||||||
{
|
{
|
||||||
|
public static final byte ASCII_BACKSPACE = 0x08;
|
||||||
|
public static final byte ASCII_CR = 0x0D;
|
||||||
public static final byte ASCII_QUOTE = 0x22;
|
public static final byte ASCII_QUOTE = 0x22;
|
||||||
public static final byte ASCII_DOLLAR = 0x24;
|
public static final byte ASCII_DOLLAR = 0x24;
|
||||||
public static final byte ASCII_PERCENT = 0x25;
|
public static final byte ASCII_PERCENT = 0x25;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user