dmolony-DiskBrowser/src/com/bytezone/diskbrowser/applefile/ApplesoftBasicProgram.java

87 lines
2.9 KiB
Java

package com.bytezone.diskbrowser.applefile;
import java.util.ArrayList;
import java.util.List;
import com.bytezone.diskbrowser.utilities.Utility;
// -----------------------------------------------------------------------------------//
public class ApplesoftBasicProgram extends BasicProgram implements ApplesoftConstants
// -----------------------------------------------------------------------------------//
{
private final List<SourceLine> sourceLines = new ArrayList<> ();
private int ptr = 0; // end-of-program marker
private final UserBasicFormatter userBasicFormatter;
private final AppleBasicFormatter appleBasicFormatter;
private final DebugBasicFormatter debugBasicFormatter;
private final XrefFormatter xrefFormatter;
private final HeaderFormatter headerFormatter;
// ---------------------------------------------------------------------------------//
public ApplesoftBasicProgram (String name, byte[] buffer)
// ---------------------------------------------------------------------------------//
{
super (name, buffer);
while (buffer[ptr + 1] != 0) // msb of link field
{
SourceLine line = new SourceLine (this, buffer, ptr);
sourceLines.add (line);
ptr += line.length; // assumes lines are contiguous
}
userBasicFormatter = new UserBasicFormatter (this, basicPreferences);
appleBasicFormatter = new AppleBasicFormatter (this, basicPreferences);
debugBasicFormatter = new DebugBasicFormatter (this, basicPreferences);
xrefFormatter = new XrefFormatter (this, basicPreferences);
headerFormatter = new HeaderFormatter (this, basicPreferences);
}
// ---------------------------------------------------------------------------------//
@Override
public String getText ()
// ---------------------------------------------------------------------------------//
{
StringBuilder text = new StringBuilder ();
if (basicPreferences.showHeader)
headerFormatter.append (text);
if (showDebugText)
{
debugBasicFormatter.append (text);
return Utility.rtrim (text);
}
if (sourceLines.size () == 0)
{
text.append ("\n\nThis page intentionally left blank");
return text.toString ();
}
if (basicPreferences.userFormat)
userBasicFormatter.append (text);
else
appleBasicFormatter.append (text);
if (basicPreferences.showAllXref)
xrefFormatter.append (text);
return Utility.rtrim (text);
}
// ---------------------------------------------------------------------------------//
List<SourceLine> getSourceLines ()
// ---------------------------------------------------------------------------------//
{
return sourceLines;
}
// ---------------------------------------------------------------------------------//
int getEndPtr ()
// ---------------------------------------------------------------------------------//
{
return ptr;
}
}