mirror of
https://github.com/dmolony/DiskBrowser.git
synced 2024-06-01 18:41:27 +00:00
allow unterminated strings
This commit is contained in:
parent
112fbc086b
commit
dacfb130cb
|
@ -241,7 +241,20 @@ public class ApplesoftBasicProgram extends BasicProgram implements ApplesoftCons
|
||||||
if (Utility.isHighBitSet (b))
|
if (Utility.isHighBitSet (b))
|
||||||
text.append (String.format (" %s ", ApplesoftConstants.tokens[b & 0x7F]));
|
text.append (String.format (" %s ", ApplesoftConstants.tokens[b & 0x7F]));
|
||||||
else
|
else
|
||||||
text.append ((char) b);
|
switch (b)
|
||||||
|
{
|
||||||
|
case Utility.ASCII_CR:
|
||||||
|
text.append ("\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Utility.ASCII_BACKSPACE:
|
||||||
|
if (text.length () > 0)
|
||||||
|
text.deleteCharAt (text.length () - 1);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
text.append ((char) b);
|
||||||
|
}
|
||||||
|
|
||||||
assert ptr == nextLine - loadAddress;
|
assert ptr == nextLine - loadAddress;
|
||||||
// ptr = nextLine - loadAddress;
|
// ptr = nextLine - loadAddress;
|
||||||
|
@ -466,7 +479,7 @@ public class ApplesoftBasicProgram extends BasicProgram implements ApplesoftCons
|
||||||
}
|
}
|
||||||
|
|
||||||
if (basicPreferences.showCalls && !callLines.isEmpty ())
|
if (basicPreferences.showCalls && !callLines.isEmpty ())
|
||||||
showSymbolsLeft (fullText, callLines, "CALL");
|
showSymbolsLeftRight (fullText, callLines, " CALL");
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------//
|
// ---------------------------------------------------------------------------------//
|
||||||
|
@ -544,6 +557,38 @@ public class ApplesoftBasicProgram extends BasicProgram implements ApplesoftCons
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------------//
|
||||||
|
private void showSymbolsLeftRight (StringBuilder fullText,
|
||||||
|
Map<String, List<Integer>> map, String heading)
|
||||||
|
// ---------------------------------------------------------------------------------//
|
||||||
|
{
|
||||||
|
heading (fullText, formatLeft, heading);
|
||||||
|
|
||||||
|
for (String symbol : map.keySet ()) // left-justify strings
|
||||||
|
{
|
||||||
|
if (isNumeric (symbol))
|
||||||
|
appendLineNumbers (fullText, String.format (formatRight, symbol),
|
||||||
|
map.get (symbol));
|
||||||
|
else if (symbol.length () <= 7)
|
||||||
|
appendLineNumbers (fullText, String.format (formatLeft, symbol),
|
||||||
|
map.get (symbol));
|
||||||
|
else
|
||||||
|
appendLineNumbers (fullText, symbol + " ", map.get (symbol));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------------//
|
||||||
|
private boolean isNumeric (String value)
|
||||||
|
// ---------------------------------------------------------------------------------//
|
||||||
|
{
|
||||||
|
byte[] bytes = value.getBytes ();
|
||||||
|
int start = value.charAt (0) == Utility.ASCII_MINUS ? 1 : 0;
|
||||||
|
for (int i = start; i < bytes.length; i++)
|
||||||
|
if (!Utility.isPossibleNumber (bytes[i]))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------//
|
// ---------------------------------------------------------------------------------//
|
||||||
private void showSymbolsRight (StringBuilder fullText, Map<Integer, List<Integer>> map,
|
private void showSymbolsRight (StringBuilder fullText, Map<Integer, List<Integer>> map,
|
||||||
String heading)
|
String heading)
|
||||||
|
|
|
@ -70,14 +70,14 @@ public class SourceLine implements ApplesoftConstants
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TOKEN_REM:
|
case TOKEN_REM:
|
||||||
if (ptr != startPtr + 1) // REM appears mid-line (should follow a colon)
|
if (ptr == startPtr + 1)
|
||||||
{
|
inRemark = true;
|
||||||
System.out.println ("mid-line REM token");
|
else
|
||||||
|
{ // REM appears mid-line (should follow a colon)
|
||||||
|
System.out.printf ("%5d %s%n", lineNumber, "mid-line REM token");
|
||||||
sublines.add (new SubLine (this, startPtr, (ptr - startPtr) - 1));
|
sublines.add (new SubLine (this, startPtr, (ptr - startPtr) - 1));
|
||||||
startPtr = ptr - 1;
|
startPtr = ptr - 1;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
inRemark = true;
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -108,8 +108,7 @@ public class SubLine implements ApplesoftConstants
|
||||||
if (b == Utility.ASCII_QUOTE) // ignore strings
|
if (b == Utility.ASCII_QUOTE) // ignore strings
|
||||||
{
|
{
|
||||||
inQuote = false;
|
inQuote = false;
|
||||||
String s = new String (buffer, stringPtr - 1, ptr - stringPtr + 1);
|
addString (stringPtr, ptr);
|
||||||
stringsText.add (s);
|
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -151,9 +150,20 @@ public class SubLine implements ApplesoftConstants
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (inQuote) // unterminated string
|
||||||
|
addString (stringPtr, ptr);
|
||||||
|
|
||||||
checkVar (var, (byte) 0);
|
checkVar (var, (byte) 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------------//
|
||||||
|
private void addString (int stringPtr, int ptr)
|
||||||
|
// ---------------------------------------------------------------------------------//
|
||||||
|
{
|
||||||
|
String s = new String (buffer, stringPtr - 1, ptr - stringPtr + 1);
|
||||||
|
stringsText.add (s);
|
||||||
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------//
|
// ---------------------------------------------------------------------------------//
|
||||||
private void checkFunction (String var, byte terminator)
|
private void checkFunction (String var, byte terminator)
|
||||||
// ---------------------------------------------------------------------------------//
|
// ---------------------------------------------------------------------------------//
|
||||||
|
@ -342,7 +352,10 @@ public class SubLine implements ApplesoftConstants
|
||||||
continue;
|
continue;
|
||||||
b = (byte) chunk.charAt (0);
|
b = (byte) chunk.charAt (0);
|
||||||
if (Utility.isDigit (b) || b == Utility.ASCII_MINUS || b == Utility.ASCII_DOT)
|
if (Utility.isDigit (b) || b == Utility.ASCII_MINUS || b == Utility.ASCII_DOT)
|
||||||
addNumber (chunk);
|
{
|
||||||
|
if (!addNumber (chunk))
|
||||||
|
stringsText.add (chunk);
|
||||||
|
}
|
||||||
else if (Utility.isLetter (b) || b == Utility.ASCII_QUOTE)
|
else if (Utility.isLetter (b) || b == Utility.ASCII_QUOTE)
|
||||||
stringsText.add (chunk);
|
stringsText.add (chunk);
|
||||||
else
|
else
|
||||||
|
@ -354,7 +367,7 @@ public class SubLine implements ApplesoftConstants
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------//
|
// ---------------------------------------------------------------------------------//
|
||||||
private void addNumber (String var)
|
private boolean addNumber (String var)
|
||||||
// ---------------------------------------------------------------------------------//
|
// ---------------------------------------------------------------------------------//
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -375,8 +388,10 @@ public class SubLine implements ApplesoftConstants
|
||||||
}
|
}
|
||||||
catch (NumberFormatException nfe)
|
catch (NumberFormatException nfe)
|
||||||
{
|
{
|
||||||
System.out.printf ("NFE: %s%n", var);
|
// System.out.printf ("NFE1: %s%n", var);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------//
|
// ---------------------------------------------------------------------------------//
|
||||||
|
@ -438,7 +453,7 @@ public class SubLine implements ApplesoftConstants
|
||||||
}
|
}
|
||||||
catch (NumberFormatException e)
|
catch (NumberFormatException e)
|
||||||
{
|
{
|
||||||
System.out.printf ("NFE: %s%n", s);
|
System.out.printf ("NFE2: %s%n", s);
|
||||||
}
|
}
|
||||||
|
|
||||||
return lineNumbers;
|
return lineNumbers;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user