#include #include #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(int& mode, long& firm, char& floppy, TString& desc, bool& tmp, bool& zip) 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 long firm = f.mask().get_long(F_CODDITTA); if (firm > 0 && !prefix().exist(firm)) return f.error_box("La ditta %ld non esiste.", firm); } return TRUE; } KEY TArchive_app::query(int& mode, long& firm, char& floppy, TString& desc, bool& temp, bool& zip) const { TMask m("ba2200"); m.set_handler(F_SALVA,test_firm); const KEY k = m.run(); if (k != K_QUIT) { mode = 0x0; firm = 0L; if (m.get_bool(F_COM)) mode |= 0x1; if (m.get_bool(F_DITTA)) { mode |= 0x2; firm = m.get_long(F_CODDITTA); } if (m.get_bool(F_CONFIG)) mode |= 0x4; if (m.get_bool(F_770)) mode |= 0x8; if (m.get_bool(F_CESP)) mode |= 0x10; floppy = m.get(F_FLOPPY)[0]; desc = m.get(F_DESCR); temp = m.get_bool(F_TEMP); #if XVT_OS == XVT_OS_WIN zip = m.get_bool(F_ZIP); #else zip = TRUE; #endif } return k; } void TArchive_app::main_loop() { KEY k; int mode; long firm; char floppy; TString desc(80); bool temp; bool zip; while ((k = query(mode, firm, floppy, desc, temp, zip)) != K_QUIT) { if (mode) { if (k == K_SAVE) { if (zip) _arc.zip(firm, floppy, desc); #if XVT_OS == XVT_OS_WIN else _arc.backup(firm, floppy, desc); #endif } else { if (zip) _arc.unzip(firm, floppy, temp); #if XVT_OS == XVT_OS_WIN else _arc.restore(firm, floppy, temp); #endif } } else error_box("Non e' stato specificato nessun archivio"); } } int ba2200(int argc, char* argv[]) { TArchive_app a; a.run(argc, argv, "Archiviazione"); return 0; }