diff o3pack.cpp @ 1:0b3630a29ad8

Initial version based on previous repository. Project was ported to QT6 and in now cmake based.
author Ideenmodellierer <tiefenrauscher@web.de>
date Thu, 27 Nov 2025 18:40:28 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/o3pack.cpp	Thu Nov 27 18:40:28 2025 +0100
@@ -0,0 +1,113 @@
+#include <QApplication>
+#include <QDir>
+#include <QProgressBar>
+#include <QProgressDialog>
+#include <QtDebug>
+
+#include "HexFile.h"
+
+//////////////////////////////////////////////////////////////////////////////
+static unsigned char frogSecretKey[16] = {
+    111, 85, 190, 69,
+    108,254, 242, 19,
+    231, 49, 248,255,
+    233, 48, 176,241
+};
+static unsigned char ostc3SecretKey[16] = {
+    241,233, 176, 48,
+     69,111, 190, 85,
+    255,231, 248, 49,
+     19,108, 242,254
+};
+
+int main(int argc, char *argv[])
+{
+    QApplication app(argc, argv);
+    app.processEvents();
+
+    //---- Parse parameters --------------------------------------------------
+    QString in, out;
+    QDir current;
+    bool force = false;
+    bool ostc3 = true;
+
+    if( argc < 2 ) goto Usage;
+
+    if( QString(argv[1]).toLower() == "-frog" ) {
+        ostc3 = false;
+        argc--, argv++;
+    } else if(  QString(argv[1]).toLower() == "-ostc3" ) {
+        ostc3 = true;
+        argc--, argv++;
+    }
+
+    in  = QDir::cleanPath(current.absoluteFilePath(argv[1]));
+    out = QDir::cleanPath(current.absoluteFilePath(argv[2]));
+    if( argv[2] == QString("-f") && argc >= 3 ) {
+        out = QDir::cleanPath(current.absoluteFilePath(argv[3]));
+        force = true;
+    }
+
+    //---- Check parameters consistency --------------------------------------
+    {
+        QFileInfo fi(in);
+        if( ! fi.exists() || ! fi.isReadable() ) {
+            qWarning().nospace() << "Cannot read input file " << in;
+            goto Usage;
+        }
+    }
+
+    {
+        QFileInfo fo(out);
+        if( fo.exists() ) {
+            if( !force ) {
+                qWarning().nospace() << "File " << out << " exists. Use -f to force overwrite.";
+                goto Usage;
+            }
+
+            if( !fo.isWritable() ) {
+                qWarning().nospace() << "Cannot write to " << out << ". Protected file ?";
+                goto Usage;
+            }
+            current.remove(out);
+        }
+    }
+
+    //---- Load the HEX file -------------------------------------------------
+    {
+        QProgressBar* progress = new QProgressBar(0);
+        progress->setFormat("Loading %p%");
+        progress->show();
+
+        try {
+            HexFile hex;
+            hex.allocate(0x20000);
+
+            hex.load(in, progress);
+            hex.sqwiz(0x1E000);
+
+            char sum[10];
+            sprintf(sum, "%08X", hex.checksum());
+            qDebug() << "Checksum " << sum;
+
+    //---- Save encrypted HEX file -------------------------------------------
+            progress->setFormat("Saving %p%");
+            hex.saveEncrypted(out, (ostc3 ? ostc3SecretKey : frogSecretKey), progress);
+        }
+        catch(const char* msg) {
+            qWarning() << "Failed: " << msg;
+        }
+
+        delete progress;
+    }
+
+    //---- End --------------------------------------------------------------
+    return 0;
+
+Usage:
+    qWarning() << "Usage:" << endl
+               << "    " << QString(app.arguments()[0]).section('/', -1).section('\\',-1)
+               << "[-frog|-ostc3]"
+               << " input.hex [-f] output.hex";
+    exit(-1);
+}