#include #include #include #include #include #include "ba2200.h" /////////////////////////////////////////////////////////// // Archiving application /////////////////////////////////////////////////////////// class TArchive_app : public TSkeleton_application { TArchive _arc; protected: virtual bool create(); virtual void main_loop(); static bool test_firm(TMask_field& f, KEY k); KEY query(long& firm, char& floppy, TString& desc, bool& tmp) const; public: void stop_job(); TArchive_app() {} virtual ~TArchive_app() {} }; bool TArchive_app::create() { bool ok = TRUE; TIsamfile utenti(LF_USER); utenti.open(_excllock); for (int err = utenti.first(); err == NOERR; err = utenti.next()) { const TString16 u = utenti.get("USERNAME"); if (u != user() && utenti.get_bool("CONNECTED")) { ok = error_box("L'archiviazione non puo' essere effettuata\n" "se ci sono altri utenti collegati: %s", (const char*)u); } } utenti.close(); if (ok) ok = TSkeleton_application::create(); return ok; } bool TArchive_app::test_firm(TMask_field& f, KEY k) { if (k == K_SPACE) { const char* d = f.mask().get(F_CODDITTA); const long firm = atol(d); if (firm > 0 && !prefix().exist(firm)) return f.error_box("La ditta %s non esiste.",d); } return TRUE; } KEY TArchive_app::query(long& firm, char& floppy, TString& desc, bool& temp) const { TMask m("ba2200"); m.set_handler(F_SALVA,test_firm); const KEY k = m.run(); if (k != K_QUIT) { if (m.get(F_DATA) == "T") firm = -1; else firm = m.get_long(F_CODDITTA); floppy = m.get(F_FLOPPY)[0]; desc = m.get(F_DESCR); temp = m.get_bool(F_TEMP); } return k; } void TArchive_app::main_loop() { KEY k; long firm; char floppy; TString desc(80); bool temp; while ((k = query(firm, floppy, desc, temp)) != K_QUIT) { if (k == K_SAVE) _arc.backup(firm, floppy, desc); else _arc.restore(firm, floppy, temp); } } int ba2200(int argc, char* argv[]) { TArchive_app a; a.run(argc, argv, "Archiviazione"); return 0; }