From 1a676c541a82ec2ac32bb859eefb3a6e4ab6b4ee Mon Sep 17 00:00:00 2001 From: giomba Date: Tue, 13 Aug 2019 17:47:49 +0200 Subject: [PATCH] Slow shaping --- CNS.cpp | 46 ++++++++++--------- CNS.h | 24 +++++----- Ex.cpp | 1 - README | 15 ++++++ cnsparser.pro | 4 +- main.cpp | 15 ++---- ...personali.cpp => read_dati_personali_c.cpp | 2 +- ...ati_personali.h => read_dati_personali_c.h | 0 8 files changed, 60 insertions(+), 47 deletions(-) create mode 100644 README rename read_dati_personali.cpp => read_dati_personali_c.cpp (98%) rename read_dati_personali.h => read_dati_personali_c.h (100%) diff --git a/CNS.cpp b/CNS.cpp index 14c310d..45cea39 100644 --- a/CNS.cpp +++ b/CNS.cpp @@ -1,16 +1,11 @@ #include "CNS.h" -cnsp::CNS cnsp::dati_CNS_to_cpp() { - cnsp::CNS data; - +void CNS::fromSmartCard(void) { char* buffer; size_t len; int rv = read_dati_personali_c(&buffer, &len); - std::clog << "[D] " << rv << std::endl; if (rv != 0) throw ExPCSC("can not read_dati_personali_c()"); - //std::clog << "[D] " << len << '\t' << buffer << std::endl; - std::vector field; for (int i = 12; i < len; ) { @@ -27,24 +22,33 @@ cnsp::CNS cnsp::dati_CNS_to_cpp() { free(buffer); for (int i = 0; i < field.size(); ++i) { - std::clog << i << '\t' << field[i] << std::endl; + qDebug() << i << '\t' << field[i].data(); switch (i) { - case 0: data.dataRilascio = QDate::fromString(QString(field[i].data()), "ddMMyyyy"); break; - case 1: data.dataScadenza = QDate::fromString(QString(field[i].data()), "ddMMyyyy"); break; - case 2: data.cognome = QString(field[i].data()); break; - case 3: data.nome = QString(field[i].data()); break; - case 4: data.dataNascita = QDate::fromString(QString(field[i].data()), "ddMMyyyy"); break; - case 5: data.sesso = field[i] == "F" ? cnsp::F : cnsp::M; break; /* TODO what about other genders? */ - case 7: data.codiceFiscale = QString(field[i].data()); break; - case 9: data.comuneNascita = QString(field[i].data()); break; - case 12: data.comuneResidenza = QString(field[i].data()); break; + case 0: this->dataRilascio = QDate::fromString(QString(field[i].data()), "ddMMyyyy"); break; + case 1: this->dataScadenza = QDate::fromString(QString(field[i].data()), "ddMMyyyy"); break; + case 2: this->cognome = QString(field[i].data()); break; + case 3: this->nome = QString(field[i].data()); break; + case 4: this->dataNascita = QDate::fromString(QString(field[i].data()), "ddMMyyyy"); break; + case 5: this->sesso = field[i] == "F" ? F : M; break; /* TODO what about other genders? */ + case 7: this->codiceFiscale = QString(field[i].data()); break; + case 9: this->comuneNascita = QString(field[i].data()); break; + case 12: this->comuneResidenza = QString(field[i].data()); break; default: break; } - - } - - - return data; } + +QTextStream& operator<< (QTextStream& os, const CNS& cns) { + os << "DataRilascio:\t" << cns.dataRilascio.year() << '-' << cns.dataRilascio.month() << '-' << cns.dataRilascio.day() << endl; + os << "DataScadenza:\t" << cns.dataScadenza.year() << '-' << cns.dataScadenza.month() << '-' << cns.dataScadenza.day() << endl; + os << "Nome:\t" << cns.nome << endl; + os << "Cognome:\t" << cns.cognome << endl; + os << "DataNascita:\t" << cns.dataNascita.year() << '-' << cns.dataNascita.month() << '-' << cns.dataNascita.day() << endl; + os << "ComuneNascita:\t" << cns.comuneNascita << endl; + os << "ComuneResidenza:\t" << cns.comuneResidenza << endl; + os << "CodiceFiscale:\t" << cns.codiceFiscale << endl; + os << "Sesso:\t" << ((cns.sesso == F) ? 'F' : 'M') << endl; + + return os; +} \ No newline at end of file diff --git a/CNS.h b/CNS.h index 3eb17bb..920031e 100644 --- a/CNS.h +++ b/CNS.h @@ -7,19 +7,21 @@ #include #include +#include #include +#include #include "Ex.h" -#include "read_dati_personali.h" +#include "read_dati_personali_c.h" -namespace cnsp { - enum Sex { - F, - M - }; +enum Sex { + F, + M +}; - struct CNS { +class CNS { + private: QString nome; QString cognome; QDate dataNascita; @@ -29,10 +31,10 @@ namespace cnsp { Sex sesso; QDate dataRilascio; QDate dataScadenza; - }; - - CNS dati_CNS_to_cpp(void); -} + public: + void fromSmartCard(void); + friend QTextStream& operator<<(QTextStream& os, const CNS& cns); +}; #endif diff --git a/Ex.cpp b/Ex.cpp index 8ab5a5d..b38d3a9 100644 --- a/Ex.cpp +++ b/Ex.cpp @@ -18,7 +18,6 @@ Ex::Ex(const char* msg, int n) { } */ - std::ostream& operator<<(std::ostream& os, const Ex& e) { os << e.msg; return os; diff --git a/README b/README new file mode 100644 index 0000000..2303360 --- /dev/null +++ b/README @@ -0,0 +1,15 @@ +======================================================================= +=== CNSPARSER === +======================================================================= + +A parser for Dati Personali contained in your Italian Carta Nazionale dei Servizi. + += Compile = + $ cd $REPO + $ mkdir build + $ cd build + $ qmake .. + $ make -j$(nproc) + += Disable debugging = + QT_LOGGING_RULES="*.debug=false;" diff --git a/cnsparser.pro b/cnsparser.pro index a908669..cc3972f 100644 --- a/cnsparser.pro +++ b/cnsparser.pro @@ -27,12 +27,12 @@ SOURCES += \ main.cpp \ CNS.cpp \ Ex.cpp \ - read_dati_personali.cpp + read_dati_personali_c.cpp HEADERS += \ CNS.h \ Ex.h \ - read_dati_personali.h + read_dati_personali_c.h QMAKE_CXXFLAGS += $(shell pkg-config --cflags libpcsclite) QMAKE_LFLAGS += $(shell pkg-config --libs libpcsclite) diff --git a/main.cpp b/main.cpp index 00b0b8b..d0cd0c2 100644 --- a/main.cpp +++ b/main.cpp @@ -5,21 +5,14 @@ #include "CNS.h" int main(void) { - cnsp::CNS cns; + CNS cns; int r = 0; try { - cns = cnsp::dati_CNS_to_cpp(); + cns.fromSmartCard(); - QTextStream(stdout) << "Data Rilascio:\t" << cns.dataRilascio.year() << '-' << cns.dataRilascio.month() << '-' << cns.dataRilascio.day() << endl; - QTextStream(stdout) << "Data Scadenza:\t" << cns.dataScadenza.year() << '-' << cns.dataScadenza.month() << '-' << cns.dataScadenza.day() << endl; - QTextStream(stdout) << "Nome:\t" << cns.nome << endl; - QTextStream(stdout) << "Cognome:\t" << cns.cognome << endl; - QTextStream(stdout) << "Data Nascita:\t" << cns.dataNascita.year() << '-' << cns.dataNascita.month() << '-' << cns.dataNascita.day() << endl; - QTextStream(stdout) << "Comune Nascita:\t" << cns.comuneNascita << endl; - QTextStream(stdout) << "Comune Residenza:\t" << cns.comuneResidenza << endl; - QTextStream(stdout) << "Codice Fiscale:\t" << cns.codiceFiscale << endl; - QTextStream(stdout) << "Sesso:\t" << cns.sesso << endl; + QTextStream out(stdout); + out << cns << endl; r = 0; } catch (Ex e) { diff --git a/read_dati_personali.cpp b/read_dati_personali_c.cpp similarity index 98% rename from read_dati_personali.cpp rename to read_dati_personali_c.cpp index f08d543..923f7fe 100644 --- a/read_dati_personali.cpp +++ b/read_dati_personali_c.cpp @@ -1,4 +1,4 @@ -#include "read_dati_personali.h" +#include "read_dati_personali_c.h" /* `` diff --git a/read_dati_personali.h b/read_dati_personali_c.h similarity index 100% rename from read_dati_personali.h rename to read_dati_personali_c.h