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 address() { return m_address; }
quint16 length() { return m_length; } quint16 length() { return m_length; }
QByteArray data() { return m_data; }
void dump(); void dump();
protected: protected:

View File

@ -5,6 +5,8 @@
#include <QDebug> #include <QDebug>
#include "tracksectorlist.h" #include "tracksectorlist.h"
#include "applesoftfile.h"
#include "binaryfile.h"
DiskFile::DiskFile(QString filename) 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) bool DiskFile::read(QString filename)
{ {
QFile infile(filename); QFile infile(filename);
@ -68,11 +78,33 @@ QList<CatalogSector> DiskFile::getCatalogSectors()
return retval; return retval;
} }
QByteArray DiskFile::getFile(FileDescriptiveEntry fde) GenericFile *DiskFile::getFile(FileDescriptiveEntry fde)
{ {
QByteArray retval; GenericFile *retval = 0;
if (m_files.contains(fde))
{
retval = m_files[fde];
}
else
{
TrackSectorList tsl = getSector(fde.firstTSListSector).promoteToTrackSectorList(); TrackSectorList tsl = getSector(fde.firstTSListSector).promoteToTrackSectorList();
return getDataFromTrackSectorList(tsl); 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 "sector.h"
#include "vtoc.h" #include "vtoc.h"
#include "genericfile.h"
class DiskFile class DiskFile
{ {
public: public:
DiskFile(QString filename = ""); DiskFile(QString filename = "");
~DiskFile();
bool read(QString filename); bool read(QString filename);
@ -29,7 +30,7 @@ public:
QList<CatalogSector> getCatalogSectors(); QList<CatalogSector> getCatalogSectors();
QByteArray getFile(FileDescriptiveEntry fde); GenericFile *getFile(FileDescriptiveEntry fde);
QByteArray getDataFromTrackSectorList(TrackSectorList tsl); QByteArray getDataFromTrackSectorList(TrackSectorList tsl);
@ -39,6 +40,7 @@ public:
private: private:
QMap< int, QMap< int, Sector> > m_contents; QMap< int, QMap< int, Sector> > m_contents;
QMap<FileDescriptiveEntry,GenericFile *> m_files;
}; };

View File

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

View File

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

View File

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

View File

@ -3,7 +3,11 @@
#include <QFileDialog> #include <QFileDialog>
#include "hiresviewwidget.h" #include "hiresviewwidget.h"
#include "applesoftfileviewer.h"
#include <QMdiSubWindow> #include <QMdiSubWindow>
#include "binaryfile.h"
#include "applesoftfile.h"
#include <QTextDocument>
MainWindow::MainWindow(QWidget *parent) : MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent), QMainWindow(parent),
@ -18,7 +22,7 @@ MainWindow::MainWindow(QWidget *parent) :
connect(ui->action_Load_Disk_Image, SIGNAL(triggered()), SLOT(showLoadDialog())); connect(ui->action_Load_Disk_Image, SIGNAL(triggered()), SLOT(showLoadDialog()));
connect(ui->action_Unload_Disk_Image, SIGNAL(triggered()), SLOT(unloadDiskFile())); connect(ui->action_Unload_Disk_Image, SIGNAL(triggered()), SLOT(unloadDiskFile()));
connect(ui->catalogWidget,SIGNAL(itemSelected(DiskFile*,FileDescriptiveEntry)), connect(ui->catalogWidget,SIGNAL(itemSelected(DiskFile*,FileDescriptiveEntry)),
SLOT(handleDiskItemSelected(DiskFile*,FileDescriptiveEntry))); SLOT(handleDiskItemSelectedDefaultOpen(DiskFile*,FileDescriptiveEntry)));
connect(this, SIGNAL(diskFileLoading(QString, DiskFile*)), 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)
{ {
GenericFile *file = disk->getFile(fde);
if (dynamic_cast<BinaryFile*>(file)) {
if (fde.lengthInSectors == 34)
{
HiresViewWidget *hvwma = new HiresViewWidget(0); HiresViewWidget *hvwma = new HiresViewWidget(0);
hvwma->resize(280,192); hvwma->resize(280,192);
QString title = QString("Image: %1").arg(AppleString(fde.filename).printable().trimmed()); QString title = QString("Image: %1").arg(AppleString(fde.filename).printable().trimmed());
hvwma->setWindowTitle(title); hvwma->setWindowTitle(title);
hvwma->show(); 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(); void showLoadDialog();
private slots: private slots:
void handleDiskItemSelected(DiskFile *disk, FileDescriptiveEntry fde); void handleDiskItemSelectedDefaultOpen(DiskFile *disk, FileDescriptiveEntry fde);
signals: signals:
void diskFileLoading(QString filename, DiskFile *file); void diskFileLoading(QString filename, DiskFile *file);