File indexing completed on 2024-05-12 04:01:33

0001 /*
0002     SPDX-FileCopyrightText: 2010-2016 Sune Vuorela <sune@vuorela.dk>
0003 
0004     SPDX-License-Identifier: MIT
0005 */
0006 
0007 #include <Prison/Barcode>
0008 
0009 #include <QCoreApplication>
0010 #include <QImageWriter>
0011 #include <QStringList>
0012 
0013 #include <iostream>
0014 #include <qtextstream.h>
0015 #include <stdlib.h>
0016 
0017 void error(const QString &error, const QString &errormessage)
0018 {
0019     QTextStream str(stdout);
0020     str << error << ": " << errormessage << '\n';
0021     str.flush();
0022     exit(0);
0023 }
0024 
0025 int main(int argc, char *argv[])
0026 {
0027     QCoreApplication app(argc, argv);
0028 
0029     QString size;
0030     QString outputfile;
0031     QString outputformat;
0032     QStringList arguments = app.arguments();
0033 
0034     arguments.takeFirst(); // Program (argv[0]).
0035     while (!arguments.isEmpty()) {
0036         QString argument = arguments.takeFirst();
0037         if (argument == QLatin1String("--")) {
0038             break; // rest is data
0039         } else if (argument == QLatin1String("--size") || argument == QLatin1String("-s")) {
0040             size = arguments.takeFirst();
0041         } else if (argument == QLatin1String("--outputfile") || argument == QLatin1String("--output-file") || argument == QLatin1String("-o")) {
0042             outputfile = arguments.takeFirst();
0043         } else if (argument == QLatin1String("--output-format") || argument == QLatin1String("--output-format") || argument == QLatin1String("-f")) {
0044             outputformat = arguments.takeFirst();
0045         } else if (argument.startsWith(QLatin1String("-"))) {
0046             error(QStringLiteral("unknown argument"), argument);
0047         } else {
0048             break;
0049         }
0050     }
0051 
0052     if (outputformat.isEmpty()) {
0053         outputformat = QStringLiteral("png");
0054     }
0055 
0056     if (!QImageWriter::supportedImageFormats().contains(outputformat.toLocal8Bit())) {
0057         error(QStringLiteral("unsupported output format"), outputformat);
0058     }
0059 
0060     if (outputfile.isEmpty()) {
0061         error(QStringLiteral("outputfile is missing"), QString());
0062     }
0063 
0064     bool ok = false;
0065     int intsize = size.toInt(&ok);
0066     if (!ok) {
0067         error(QStringLiteral("size not a int"), size);
0068     }
0069     if (intsize < 10) {
0070         error(QStringLiteral("needs a larger output size"), size);
0071     }
0072 
0073     QString data = arguments.join(QLatin1Char(' '));
0074     if (data.size() == 0) {
0075         QTextStream in(stdin);
0076         data = in.readAll();
0077         if (data.size() == 0) {
0078             error(QStringLiteral("No data, neither on commandline nor on stdin"), QString());
0079         }
0080     }
0081 
0082     auto barcode = Prison::Barcode::create(Prison::DataMatrix);
0083     if (!barcode) {
0084         error(QStringLiteral("unsupported barcode type"), QString());
0085     }
0086 
0087     barcode->setData(data);
0088     QImage result = barcode->toImage(QSizeF(intsize, intsize));
0089     QImageWriter w(outputfile, outputformat.toLocal8Bit());
0090     if (!w.write(result)) {
0091         error(QStringLiteral("writing failed"), w.errorString());
0092     }
0093     return EXIT_SUCCESS;
0094 }