mirror of
https://github.com/markdavidlong/AppleSAWS.git
synced 2024-11-22 00:31:04 +00:00
Added new retokenizing to make strings and REM arguments into tokens, themselves.
This commit is contained in:
parent
37f450fd95
commit
9da780252f
@ -52,7 +52,11 @@ void ApplesoftFile::parse(quint16 start_address)
|
||||
line.tokens.append(token);
|
||||
} while (val != 0x00);
|
||||
|
||||
Retokenizer ret;
|
||||
ret.retokenize(line);
|
||||
|
||||
current_address = line.next_address;
|
||||
|
||||
m_lines.append(line);
|
||||
}
|
||||
|
||||
@ -93,78 +97,90 @@ QByteArray ApplesoftFile::extraData()
|
||||
void Retokenizer::retokenize(ApplesoftLine &line)
|
||||
{
|
||||
Q_UNUSED(line);
|
||||
// QList <QByteArray> string_list;
|
||||
// QList <QByteArray> number_list;
|
||||
|
||||
// QByteArray newTokens;
|
||||
|
||||
//// Set Strings aside for a bit to simplify parsing
|
||||
// QByteArray tmpTokens = line.raw_tokens;
|
||||
// QByteArray tmpstr;
|
||||
// bool inString = false;
|
||||
// for (int idx = 0; idx < line.raw_tokens.length(); idx++)
|
||||
// {
|
||||
// quint8 byte = tmpTokens.at(idx);
|
||||
|
||||
// if (byte == '"') {
|
||||
// if (!inString) {
|
||||
// inString = true;
|
||||
// tmpstr.append(byte);
|
||||
// } else {
|
||||
// inString = false;
|
||||
// string_list.append(tmpstr);
|
||||
// tmpstr = "";
|
||||
// newTokens.append(0xff);
|
||||
// }
|
||||
// } else if (!inString) {
|
||||
// newTokens.append(byte);
|
||||
// }
|
||||
// }
|
||||
// if (inString) {
|
||||
// string_list.append(tmpstr);
|
||||
// newTokens.append(0xff);
|
||||
// }
|
||||
|
||||
|
||||
QVector<ApplesoftToken> replacements;
|
||||
QVector<ApplesoftToken> tmptokens = line.tokens;
|
||||
ApplesoftToken token;
|
||||
|
||||
QByteArray buffer;
|
||||
|
||||
////// Set Numbers aside for a bit too
|
||||
//// tmpTokens = newTokens;
|
||||
//// newTokens = "";
|
||||
//// bool inNumber = false;
|
||||
//// QByteArray tmpnum;
|
||||
//// for (int idx = 0; idx < tmpTokens.length(); idx++)
|
||||
//// {
|
||||
//// quint8 byte = tmpTokens.at(idx);
|
||||
bool inRem = false;
|
||||
|
||||
//// if ((byte >= '0' && byte <= '9') || byte == '.') {
|
||||
//// if (!inNumber) {
|
||||
//// inNumber = true;
|
||||
//// tmpnum.append(byte);
|
||||
//// }
|
||||
//// } else if (inNumber) {
|
||||
//// inNumber = false;
|
||||
//// number_list.append(tmpnum);
|
||||
//// tmpnum = "";
|
||||
//// newTokens.append(0xfe);
|
||||
//// newTokens.append(byte);
|
||||
//// } else {
|
||||
//// newTokens.append(byte);
|
||||
//// }
|
||||
//// }
|
||||
//// if (inNumber) {
|
||||
//// number_list.append(tmpnum);
|
||||
//// newTokens.append(0xfe);
|
||||
//// }
|
||||
// Handle REMs
|
||||
|
||||
while (!tmptokens.isEmpty())
|
||||
{
|
||||
token = tmptokens.takeFirst();
|
||||
|
||||
// line.advanced_tokens = newTokens;
|
||||
if (!inRem) {
|
||||
replacements.append(token);
|
||||
if (token.getByteValue() == ApplesoftToken::ASRem)
|
||||
{
|
||||
inRem = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
buffer.append(token.getByteValue());
|
||||
}
|
||||
}
|
||||
if (inRem) {
|
||||
ApplesoftToken remstrtoken(ApplesoftToken::RemStringTokenVal, buffer);
|
||||
replacements.append(remstrtoken);
|
||||
buffer.clear();
|
||||
inRem = false;
|
||||
}
|
||||
|
||||
// // QList<QByteArray> tmpParts = tmpTokens.split(':');
|
||||
line.tokens = replacements;
|
||||
replacements.clear();
|
||||
|
||||
// Handle DATAs
|
||||
|
||||
// Handle Strings
|
||||
|
||||
tmptokens = line.tokens;
|
||||
bool inString = false;
|
||||
|
||||
while (!tmptokens.isEmpty())
|
||||
{
|
||||
token = tmptokens.takeFirst();
|
||||
if (token.getTokenId() >= 0x80)
|
||||
{
|
||||
replacements.append(token);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (token.getByteValue() == '"')
|
||||
{
|
||||
if (!inString)
|
||||
{
|
||||
inString = true;
|
||||
buffer.append(token.getByteValue());
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
buffer.append(token.getByteValue());
|
||||
ApplesoftToken strtoken(ApplesoftToken::StringTokenVal, buffer);
|
||||
replacements.append(strtoken);
|
||||
buffer.clear();
|
||||
inString = false;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (inString)
|
||||
{
|
||||
buffer.append(token.getByteValue());
|
||||
continue;
|
||||
}
|
||||
|
||||
replacements.append(token);
|
||||
}
|
||||
|
||||
line.tokens = replacements;
|
||||
|
||||
//// foreach (QByteArray part, tmpParts) {
|
||||
//// QByteArray retokenizedPart = retokenzePart(part);
|
||||
//// }
|
||||
}
|
||||
|
||||
QByteArray Retokenizer::retokenizePart(QByteArray part) {
|
||||
|
@ -1,4 +1,5 @@
|
||||
#include "applesoftformatter.h"
|
||||
#include "util.h"
|
||||
|
||||
ApplesoftFormatter::ApplesoftFormatter(QObject *parent) :
|
||||
QObject(parent)
|
||||
@ -19,23 +20,44 @@ QString ApplesoftFormatter::formatText()
|
||||
}
|
||||
|
||||
QString retval;
|
||||
|
||||
foreach (ApplesoftLine line, m_file->getLines()) {
|
||||
QString linestring = QString("%1 ").arg(line.linenum,5,10,QChar(' '));
|
||||
retval.append(linestring);
|
||||
foreach (ApplesoftToken token, line.tokens) {
|
||||
foreach (ApplesoftToken token, line.tokens)
|
||||
{
|
||||
QString tokenstr = token.getRawPrintableString();
|
||||
|
||||
if (m_format_options.testFlag(BreakAfterReturn)) {
|
||||
if (token.getByteValue() == ApplesoftToken::ASReturn)
|
||||
{
|
||||
tokenstr += "\n";
|
||||
}
|
||||
}
|
||||
|
||||
#define DEBUGTOKENS
|
||||
#ifdef DEBUGTOKENS
|
||||
if (token.getTokenId() >= 0x80)
|
||||
{
|
||||
tokenstr = QString(" {%1} ").arg(uint16ToHex(token.getTokenId()));
|
||||
// tokenstr = " __ ";
|
||||
}
|
||||
else
|
||||
{
|
||||
tokenstr = QString("%1").arg(QChar(token.getByteValue()));
|
||||
}
|
||||
#endif
|
||||
|
||||
if (m_format_options.testFlag(ShowCtrlChars)) {
|
||||
tokenstr.replace(QChar(0x7f),QChar(0x2401));
|
||||
|
||||
for (int idx = 1; idx <= 0x1f; idx++) {
|
||||
if (idx == '\n') continue;
|
||||
if (idx == '\t') continue;
|
||||
tokenstr.replace(QChar(idx),QChar(idx+0x2400));
|
||||
}
|
||||
}
|
||||
|
||||
if (m_format_options.testFlag(BreakAfterReturn)) {
|
||||
tokenstr.replace("RETURN","RETURN\n");
|
||||
}
|
||||
|
||||
retval.append(tokenstr);
|
||||
}
|
||||
|
@ -97,8 +97,11 @@ QString ApplesoftToken::getRawPrintableString()
|
||||
return QString(QChar(m_token_id));
|
||||
} else if (m_token_id <= 0xff) {
|
||||
return m_tokens[m_token_id];
|
||||
} else
|
||||
} else if (m_token_id == StringTokenVal) {
|
||||
return getByteStringValue();
|
||||
} else {
|
||||
return "[temp undefined]";
|
||||
}
|
||||
}
|
||||
|
||||
void ApplesoftToken::initializeTokenTable()
|
||||
|
@ -12,12 +12,16 @@ public:
|
||||
static const quint16 StringTokenVal = 0x100;
|
||||
static const quint16 RemStringTokenVal = 0x101;
|
||||
static const quint16 DataStringTokenVal = 0x102;
|
||||
|
||||
static const quint16 IntegerTokenVal = 0x103;
|
||||
static const quint16 FloatTokenVal = 0x104;
|
||||
|
||||
static const quint16 IntVarTokenVal = 0x105;
|
||||
static const quint16 IntAryVarTokenVal = 0x106;
|
||||
|
||||
static const quint16 FloatVarTokenVal = 0x107;
|
||||
static const quint16 FloatAryVarTokenVal = 0x108;
|
||||
|
||||
static const quint16 StringVarTokenVal = 0x109;
|
||||
static const quint16 StringAryVarTokenVal = 0x10A;
|
||||
|
||||
@ -127,8 +131,8 @@ public:
|
||||
quint16 getTokenId() const { return m_token_id; }
|
||||
|
||||
void setValue(QVariant value);
|
||||
|
||||
QVariant getValue() const { return m_payload; }
|
||||
|
||||
QByteArray getByteStringValue() const { return m_payload.toByteArray(); }
|
||||
quint16 getWordValue() const { return (quint16) (m_payload.toUInt() & 0xFFFF); }
|
||||
quint8 getByteValue() const { return (quint8) (m_payload.toUInt() & 0xFF); }
|
||||
|
@ -82,9 +82,11 @@ void MainWindow::unloadDiskFile()
|
||||
|
||||
void MainWindow::showLoadDialog()
|
||||
{
|
||||
QSettings settings;
|
||||
QString last = settings.value("lastOpened",".").toString();
|
||||
QString filename = QFileDialog::getOpenFileName(this,
|
||||
tr("Open Disk Image"),
|
||||
"/home/mlong/Desktop",
|
||||
last,
|
||||
"Disk Images (*.do *.dsk)");
|
||||
if (!filename.isEmpty()) {
|
||||
loadDiskFile(filename);
|
||||
|
@ -12,7 +12,7 @@ ApplesoftFileViewer::ApplesoftFileViewer(QWidget *parent) :
|
||||
setWindowTitle(title);
|
||||
|
||||
m_formatter = new ApplesoftFormatter(this);
|
||||
m_formatter->setFlags(ApplesoftFormatter::PrettyFlags);
|
||||
m_formatter->setFlags(ApplesoftFormatter::PrettyFlags | ApplesoftFormatter::BreakAfterReturn);
|
||||
|
||||
connect(ui->findButton,SIGNAL(clicked(bool)), SLOT(findText()));
|
||||
m_isFirstFind = true;
|
||||
|
Loading…
Reference in New Issue
Block a user