#include #include #include #include #include "ba7.h" /////////////////////////////////////////////////////////// // Main app /////////////////////////////////////////////////////////// class TCopia_ini_app : public TSkeleton_application { protected: bool process_number(TString& val, int len) const; void save_ini_var(ostream& out, TConfig& input, const char* key, int len = -1) const; bool replace_var(TFilename& filename, const char* key, const char* var) const; bool copy_ini(const TFilename& ini_in, TFilename& ini_out) const; public: virtual void main_loop(); }; /////////////////////////////////////////////////////////// // Main /////////////////////////////////////////////////////////// bool TCopia_ini_app::process_number(TString& val, int len) const { const TString80 old(val); if (len > 0) { const long n = atol(val); val.format("%0*ld", len, n); } else { if (val.find('.') > 0) { const real n = val; val = n.stringa(0, 2); } if (val.starts_with("-")) val.ltrim(1); } return val != old; } bool TCopia_ini_app::replace_var(TFilename& filename, const char* key, const char* var) const { if (key && *key > ' ' && var && *var > ' ') { TString80 k; k << "$(" << key; const int start = filename.find(k); if (start >= 0) { const int end = filename.find(')', start+1); if (end > start) { TString str; str << filename.left(start) << var << filename.mid(end+1); filename = str; return true; } } } return false; } void TCopia_ini_app::save_ini_var(ostream& out, TConfig& input, const char* key, int len) const { TString val = input.get(key); if (len >= 0) process_number(val, len); else val.strip("\""); out << key << " = " << val << endl; } bool TCopia_ini_app::copy_ini(const TFilename& ini_in, TFilename& ini_out) const { TFilename tmp_out; tmp_out.temp("pm", "ini"); ofstream output(tmp_out); if (!output) return false; TConfig input(ini_in, "Transaction"); const TString user = input.get("User"); const TString host = input.get("HostName"); TString str; output << "[Transaction]" << endl; save_ini_var(output, input, "Firm", 3); output << "Action = INSERT" << endl; output << endl; input.set_paragraph("23"); output << "[23]" << endl; save_ini_var(output, input, "ANNOES", 4); save_ini_var(output, input, "DATAREG"); save_ini_var(output, input, "DATACOMP"); save_ini_var(output, input, "DATADOC"); save_ini_var(output, input, "NUMDOC"); save_ini_var(output, input, "NUMREG"); save_ini_var(output, input, "TIPODOC"); save_ini_var(output, input, "DESCR"); save_ini_var(output, input, "TIPOMOV", 1); save_ini_var(output, input, "ANNOIVA", 4); save_ini_var(output, input, "TIPO"); save_ini_var(output, input, "CODCF", 7); save_ini_var(output, input, "TOTDOC", 0); output << "PROVVIS = 0" << endl; save_ini_var(output, input, "CODPAG"); save_ini_var(output, input, "CODCAUS"); for (int r = 1; ; r++) { TString8 str; str.format("25,%d", r); if (!input.set_paragraph(str)) break; output << endl << '[' << str << ']' << endl; save_ini_var(output, input, "ANNOES", 4); save_ini_var(output, input, "NUMRIG"); save_ini_var(output, input, "CODIVA"); save_ini_var(output, input, "IMPONIBILE", 0); save_ini_var(output, input, "IMPOSTA", 0); save_ini_var(output, input, "GRUPPO", 2); save_ini_var(output, input, "CONTO", 2); str.format("%02d%02d%03d", input.get_int("GRUPPO"), input.get_int("CONTO"), input.get_int("SOTTOCONTO")); output << "SOTTOCONTO = " << str << endl; output << "TIPODET = " << endl; } output.close(); replace_var(ini_out, "User", user); replace_var(ini_out, "Host", host); bool done = fcopy(tmp_out, ini_out); tmp_out.fremove(); return done; } void TCopia_ini_app::main_loop() { TFilename ini_in; if (argc() >= 3) { ini_in = argv(2); if (ini_in.starts_with("/i", true) || ini_in.starts_with("-i", true)) ini_in.ltrim(2); } if (ini_in.exist()) { const TString& vers = ini_get_string(ini_in, "Transaction", "Version"); if (vers.full()) // Elabora solo file generati da campo { int err = NOERR; TFilename ini_out = ini_get_string(CONFIG_DITTA, "ba7", "ForwardTo"); if (ini_out.full()) { const struct tm* n = xvt_time_now(); TString80 fname; fname.format("%02d%02d%02d_%02d%02d%02d_0.ini", n->tm_year%100, n->tm_mon+1, n->tm_mday, n->tm_hour, n->tm_min, n->tm_sec); ini_out.add(fname); if (!copy_ini(ini_in, ini_out)) { xvt_dm_popup_error(TString("Impossibile copiare file in ") << ini_out); err = EACCES; } } else err = ENOTDIR; ini_set_string(ini_in, "Transaction", "Result", err ? "ERROR" : "OK"); ini_set_int(ini_in, "Transaction", "Error", err); } } else { ini_in.insert(TR("Impossibile aprire il file ini da convertire\n")); xvt_dm_popup_error(ini_in); } } int ba7400(int argc, char* argv[]) { TCopia_ini_app ma; ma.run(argc, argv, "Copia Ini"); return 0; }