Various changes.

This commit is contained in:
Mark Long 2015-12-04 21:47:13 -06:00
parent 42386ea39e
commit d652dad5c8
8 changed files with 101 additions and 19 deletions

View File

@ -12,7 +12,6 @@ public:
quint16 address() { return m_address; }
quint16 length() { return m_length; }
QByteArray data() { return m_data; }
void dump();
protected:

View File

@ -5,6 +5,8 @@
#include <QDebug>
#include "tracksectorlist.h"
#include "applesoftfile.h"
#include "binaryfile.h"
DiskFile::DiskFile(QString filename)
{
@ -14,6 +16,14 @@ DiskFile::DiskFile(QString filename)
}
}
DiskFile::~DiskFile()
{
foreach (GenericFile *file, m_files)
{
delete file;
}
}
bool DiskFile::read(QString filename)
{
QFile infile(filename);
@ -68,11 +78,33 @@ QList<CatalogSector> DiskFile::getCatalogSectors()
return retval;
}
QByteArray DiskFile::getFile(FileDescriptiveEntry fde)
GenericFile *DiskFile::getFile(FileDescriptiveEntry fde)
{
QByteArray retval;
TrackSectorList tsl = getSector(fde.firstTSListSector).promoteToTrackSectorList();
return getDataFromTrackSectorList(tsl);
GenericFile *retval = 0;
if (m_files.contains(fde))
{
retval = m_files[fde];
}
else
{
TrackSectorList tsl = getSector(fde.firstTSListSector).promoteToTrackSectorList();
QByteArray data = getDataFromTrackSectorList(tsl);
if (fde.fileTypeAndFlags & ApplesoftBasicFile)
{
retval = new ApplesoftFile(data);
}
else if (fde.fileTypeAndFlags & RawBinaryFile)
{
retval = new BinaryFile(data);
}
else
{
retval = new GenericFile(data);
}
m_files[fde] = retval;
}
return retval;
}

View File

@ -10,12 +10,13 @@
#include "sector.h"
#include "vtoc.h"
#include "genericfile.h"
class DiskFile
{
public:
DiskFile(QString filename = "");
~DiskFile();
bool read(QString filename);
@ -29,7 +30,7 @@ public:
QList<CatalogSector> getCatalogSectors();
QByteArray getFile(FileDescriptiveEntry fde);
GenericFile *getFile(FileDescriptiveEntry fde);
QByteArray getDataFromTrackSectorList(TrackSectorList tsl);
@ -39,6 +40,7 @@ public:
private:
QMap< int, QMap< int, Sector> > m_contents;
QMap<FileDescriptiveEntry,GenericFile *> m_files;
};

View File

@ -11,6 +11,10 @@ struct FileDescriptiveEntry {
AppleString filename;
quint16 lengthInSectors;
bool operator<(const FileDescriptiveEntry& f1) const {
return f1.filename < filename;
}
QString fileType() {
if (fileTypeAndFlags & IntegerBasicFile) { return "I"; }
if (fileTypeAndFlags & ApplesoftBasicFile) { return "A"; }

View File

@ -7,7 +7,9 @@ class GenericFile
{
public:
GenericFile(QByteArray data = QByteArray());
virtual ~GenericFile() { }
virtual void setData(QByteArray data);
virtual QByteArray data() { return m_data; }
protected:
QByteArray m_data;

View File

@ -39,8 +39,8 @@ int main(int argc, char** argv)
QApplication a(argc, argv);
MainWindow w;
// w.loadDiskFile("/home/mlong/Desktop/missing_ring_good.dsk");
w.loadDiskFile("/home/mlong/Desktop/dos.3.3.system.master.dsk");
w.loadDiskFile("/home/mlong/Desktop/missing_ring_good.dsk");
// w.loadDiskFile("/home/mlong/Desktop/dos.3.3.system.master.dsk");
w.show();
return a.exec();

View File

@ -3,7 +3,11 @@
#include <QFileDialog>
#include "hiresviewwidget.h"
#include "applesoftfileviewer.h"
#include <QMdiSubWindow>
#include "binaryfile.h"
#include "applesoftfile.h"
#include <QTextDocument>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
@ -18,7 +22,7 @@ MainWindow::MainWindow(QWidget *parent) :
connect(ui->action_Load_Disk_Image, SIGNAL(triggered()), SLOT(showLoadDialog()));
connect(ui->action_Unload_Disk_Image, SIGNAL(triggered()), SLOT(unloadDiskFile()));
connect(ui->catalogWidget,SIGNAL(itemSelected(DiskFile*,FileDescriptiveEntry)),
SLOT(handleDiskItemSelected(DiskFile*,FileDescriptiveEntry)));
SLOT(handleDiskItemSelectedDefaultOpen(DiskFile*,FileDescriptiveEntry)));
connect(this, SIGNAL(diskFileLoading(QString, DiskFile*)),
@ -73,15 +77,54 @@ void MainWindow::showLoadDialog()
}
}
void MainWindow::handleDiskItemSelected(DiskFile *disk, FileDescriptiveEntry fde)
void MainWindow::handleDiskItemSelectedDefaultOpen(DiskFile *disk, FileDescriptiveEntry fde)
{
HiresViewWidget *hvwma = new HiresViewWidget(0);
hvwma->resize(280,192);
QString title = QString("Image: %1").arg(AppleString(fde.filename).printable().trimmed());
hvwma->setWindowTitle(title);
hvwma->show();
GenericFile *file = disk->getFile(fde);
if (dynamic_cast<BinaryFile*>(file)) {
if (fde.lengthInSectors == 34)
{
HiresViewWidget *hvwma = new HiresViewWidget(0);
hvwma->resize(280,192);
QString title = QString("Image: %1").arg(AppleString(fde.filename).printable().trimmed());
hvwma->setWindowTitle(title);
hvwma->show();
hvwma->setData(file->data());
}
}
else if (dynamic_cast<ApplesoftFile *>(file))
{
ApplesoftFile *abf = dynamic_cast<ApplesoftFile *>(file);
ApplesoftFileViewer *afv = new ApplesoftFileViewer(0);
QString title = QString("AppleSoft Viewer: %1").arg(AppleString(fde.filename).printable().trimmed());
afv->setWindowTitle(title);
QStringList strings;
foreach (ApplesoftLine line, abf->detokenized())
{
QString linestring = QString("%1 %2").arg(line.linenum,5,10,QChar(' ')).arg(line.detokenized_line);
strings.append(linestring);
}
QString fulltext = Qt::convertFromPlainText(strings.join("\n"));
fulltext.replace("POKE","<font color=\"purple\">POKE</font>");
fulltext.replace("PEEK","<font color=\"purple\">PEEK</font>");
fulltext.replace("CALL","<font color=\"blue\">CALL</font>");
fulltext.replace("GOTO","<b><font color=\"green\">GOTO</font></b>");
fulltext.replace("GOSUB","<b><font color=\"green\">GOSUB</font></b>");
// fulltext.replace("0","<font color=\"orange\">0</font>");
// fulltext.replace("1","<font color=\"orange\">1</font>");
// fulltext.replace("2","<font color=\"orange\">2</font>");
// fulltext.replace("3","<font color=\"orange\">3</font>");
// fulltext.replace("4","<font color=\"orange\">4</font>");
// fulltext.replace("5","<font color=\"orange\">5</font>");
// fulltext.replace("6","<font color=\"orange\">6</font>");
// fulltext.replace("7","<font color=\"orange\">7</font>");
// fulltext.replace("8","<font color=\"orange\">8</font>");
// fulltext.replace("9","<font color=\"orange\">9</font>");
fulltext.replace("RETURN","RETURN<p>");
afv->setText(fulltext);
afv->show();
}
QByteArray data = disk->getFile(fde).mid(4);
hvwma->setData(data);
}

View File

@ -24,7 +24,7 @@ public slots:
void showLoadDialog();
private slots:
void handleDiskItemSelected(DiskFile *disk, FileDescriptiveEntry fde);
void handleDiskItemSelectedDefaultOpen(DiskFile *disk, FileDescriptiveEntry fde);
signals:
void diskFileLoading(QString filename, DiskFile *file);