mirror of
https://github.com/dmolony/DiskBrowser.git
synced 2024-11-28 20:50:13 +00:00
handle negative literals
This commit is contained in:
parent
5a6c3841f9
commit
488b1cfeb2
@ -19,7 +19,7 @@ public class ApplesoftBasicProgram extends BasicProgram implements ApplesoftCons
|
||||
"----------------------------------------------------"
|
||||
+ "----------------------------------------------";
|
||||
private static Pattern dimPattern =
|
||||
Pattern.compile ("[A-Z][A-Z0-9]*[$%]?\\([0-9,]*\\)[,:]?");
|
||||
Pattern.compile ("[A-Z][A-Z0-9]*[$%]?\\([0-9]+(,[0-9]+)*\\)[,:]?");
|
||||
|
||||
private final List<SourceLine> sourceLines = new ArrayList<> ();
|
||||
private final int endPtr;
|
||||
@ -176,8 +176,21 @@ public class ApplesoftBasicProgram extends BasicProgram implements ApplesoftCons
|
||||
if (showDebugText)
|
||||
return getHexText ();
|
||||
|
||||
StringBuilder text =
|
||||
basicPreferences.formatApplesoft ? getFormatted () : originalFormat ();
|
||||
StringBuilder text = new StringBuilder ();
|
||||
|
||||
if (basicPreferences.showHeader)
|
||||
addHeader (text);
|
||||
|
||||
if (sourceLines.size () == 0)
|
||||
{
|
||||
text.append ("\n\nThis page intentionally left blank");
|
||||
return text.toString ();
|
||||
}
|
||||
|
||||
if (basicPreferences.formatApplesoft)
|
||||
userFormat (text);
|
||||
else
|
||||
appleFormat (text);
|
||||
|
||||
if (basicPreferences.showAllXref)
|
||||
addXref (text);
|
||||
@ -189,17 +202,41 @@ public class ApplesoftBasicProgram extends BasicProgram implements ApplesoftCons
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------------//
|
||||
private StringBuilder getFormatted ()
|
||||
private void appleFormat (StringBuilder text)
|
||||
// ---------------------------------------------------------------------------------//
|
||||
{
|
||||
int loadAddress = getLoadAddress ();
|
||||
int ptr = 0;
|
||||
int nextLine;
|
||||
byte b;
|
||||
|
||||
while ((nextLine = Utility.unsignedShort (buffer, ptr)) != 0)
|
||||
{
|
||||
int lineNumber = Utility.unsignedShort (buffer, ptr + 2);
|
||||
text.append (String.format (" %5d ", lineNumber));
|
||||
ptr += 4;
|
||||
|
||||
while ((b = buffer[ptr++]) != 0)
|
||||
if (Utility.isHighBitSet (b))
|
||||
text.append (String.format (" %s ", ApplesoftConstants.tokens[b & 0x7F]));
|
||||
else
|
||||
text.append ((char) b);
|
||||
|
||||
assert ptr == nextLine - loadAddress;
|
||||
// ptr = nextLine - loadAddress;
|
||||
text.append ("\n");
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------------//
|
||||
private void userFormat (StringBuilder fullText)
|
||||
// ---------------------------------------------------------------------------------//
|
||||
{
|
||||
int indentSize = 2;
|
||||
boolean insertBlankLine = false;
|
||||
|
||||
StringBuilder fullText = new StringBuilder ();
|
||||
Stack<String> loopVariables = new Stack<> ();
|
||||
|
||||
if (basicPreferences.showHeader)
|
||||
addHeader (fullText);
|
||||
int alignEqualsPos = 0;
|
||||
StringBuilder text;
|
||||
int baseOffset = basicPreferences.showTargets ? 12 : 8;
|
||||
@ -353,8 +390,6 @@ public class ApplesoftBasicProgram extends BasicProgram implements ApplesoftCons
|
||||
programLoadAddress + ptr));
|
||||
fullText.append ("\n");
|
||||
}
|
||||
|
||||
return fullText;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------------//
|
||||
@ -622,31 +657,31 @@ public class ApplesoftBasicProgram extends BasicProgram implements ApplesoftCons
|
||||
private List<String> splitLine (String line, int wrapLength, char breakChar)
|
||||
// ---------------------------------------------------------------------------------//
|
||||
{
|
||||
int firstSpace = 0;
|
||||
while (firstSpace < line.length () && line.charAt (firstSpace) != ' ')
|
||||
++firstSpace;
|
||||
String indent = " ".substring (0, firstSpace + 1);
|
||||
int spaceAt = 0;
|
||||
while (spaceAt < line.length () && line.charAt (spaceAt) != ' ')
|
||||
++spaceAt;
|
||||
String indent = spaceAt < 8 ? " ".substring (0, spaceAt + 1) : " ";
|
||||
|
||||
List<String> lines = new ArrayList<> ();
|
||||
|
||||
while (line.length () > wrapLength)
|
||||
{
|
||||
int breakAt = wrapLength;
|
||||
while (breakAt > firstSpace && line.charAt (breakAt) != breakChar)
|
||||
int breakAt = wrapLength - 1;
|
||||
while (breakAt > spaceAt && line.charAt (breakAt) != breakChar)
|
||||
--breakAt;
|
||||
|
||||
if (breakAt <= firstSpace)
|
||||
if (breakAt <= spaceAt)
|
||||
break;
|
||||
|
||||
lines.add (line.substring (0, breakAt + 1)); // keep breakChar at end
|
||||
line = indent + line.substring (breakAt + 1);
|
||||
}
|
||||
|
||||
if (lines.size () == 0) // no breaks
|
||||
while (line.length () > wrapLength)
|
||||
{
|
||||
lines.add (line.substring (0, wrapLength));
|
||||
line = indent + line.substring (wrapLength);
|
||||
}
|
||||
while (line.length () > wrapLength) // no breakChars found
|
||||
{
|
||||
lines.add (line.substring (0, wrapLength));
|
||||
line = indent + line.substring (wrapLength);
|
||||
}
|
||||
|
||||
lines.add (line);
|
||||
return lines;
|
||||
@ -949,38 +984,4 @@ public class ApplesoftBasicProgram extends BasicProgram implements ApplesoftCons
|
||||
|
||||
return (ptr <= 1) ? symbol : symbol.substring (0, 2) + symbol.substring (ptr + 1);
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------------//
|
||||
private StringBuilder originalFormat ()
|
||||
// ---------------------------------------------------------------------------------//
|
||||
{
|
||||
StringBuilder text = new StringBuilder ();
|
||||
|
||||
if (basicPreferences.showHeader)
|
||||
addHeader (text);
|
||||
|
||||
int loadAddress = getLoadAddress ();
|
||||
int ptr = 0;
|
||||
int nextLine;
|
||||
byte b;
|
||||
|
||||
while ((nextLine = Utility.unsignedShort (buffer, ptr)) != 0)
|
||||
{
|
||||
int lineNumber = Utility.unsignedShort (buffer, ptr + 2);
|
||||
text.append (String.format (" %5d ", lineNumber));
|
||||
ptr += 4;
|
||||
|
||||
while ((b = buffer[ptr++]) != 0)
|
||||
if (Utility.isHighBitSet (b))
|
||||
text.append (String.format (" %s ", ApplesoftConstants.tokens[b & 0x7F]));
|
||||
else
|
||||
text.append ((char) b);
|
||||
|
||||
assert ptr == nextLine - loadAddress;
|
||||
// ptr = nextLine - loadAddress;
|
||||
text.append ("\n");
|
||||
}
|
||||
|
||||
return text;
|
||||
}
|
||||
}
|
@ -46,7 +46,7 @@ public class SubLine implements ApplesoftConstants
|
||||
if (Utility.isHighBitSet (firstByte))
|
||||
{
|
||||
doToken (firstByte);
|
||||
if (is (TOKEN_REM) || is (TOKEN_DATA) || is (TOKEN_CALL))
|
||||
if (is (TOKEN_REM) || is (TOKEN_DATA))
|
||||
return;
|
||||
}
|
||||
else if (Utility.isDigit (firstByte))
|
||||
@ -63,7 +63,6 @@ public class SubLine implements ApplesoftConstants
|
||||
boolean inQuote = false;
|
||||
boolean inFunction = false;
|
||||
boolean inDefine = false;
|
||||
// int functionParens = 0;
|
||||
|
||||
int max = startPtr + length - 1;
|
||||
if (buffer[max] == 0)
|
||||
@ -100,7 +99,11 @@ public class SubLine implements ApplesoftConstants
|
||||
|
||||
if (Utility.isPossibleVariable (b)) // A-Z 0-9 $ %
|
||||
{
|
||||
if (var.isEmpty () && buffer[ptr - 2] == TOKEN_MINUS && Utility.isDigit (b))
|
||||
var = "-";
|
||||
|
||||
var += (char) b;
|
||||
|
||||
if ((b == Utility.ASCII_DOLLAR || b == Utility.ASCII_PERCENT) // var name end
|
||||
&& buffer[ptr] != Utility.ASCII_LEFT_BRACKET) // not an array
|
||||
{
|
||||
@ -117,6 +120,7 @@ public class SubLine implements ApplesoftConstants
|
||||
}
|
||||
else
|
||||
checkVar (var, b);
|
||||
|
||||
var = "";
|
||||
|
||||
if (b == Utility.ASCII_QUOTE)
|
||||
|
Loading…
Reference in New Issue
Block a user