diff --git a/ba/bafax.cpp b/ba/bafax.cpp index 692c73cb1..a636f083b 100755 --- a/ba/bafax.cpp +++ b/ba/bafax.cpp @@ -61,6 +61,8 @@ class TFax_data : public TAssoc_array { public: void set(const char* key, const char* value); + const char* get(const char* key) const; + void set_file(const char* file) { set("FILELIST", file); } char* get_char_star(const char* name) const; @@ -85,8 +87,24 @@ void TFax_data::set(const char* key, const char* value) add(key, TString(value), TRUE); } -char* TFax_data::get_char_star(const char* name) const +const char* TFax_data::get(const char* key) const { + const TString* s = (const TString*)((TAssoc_array*)this)->objptr(key); + return s ? (const char*)*s : ""; +} + + +char* TFax_data::get_char_star(const char* name) const +{ + if (stricmp(name, "FULLDESTFAX") == 0) + { + TString num(24); + num << get("DIALING"); + num << get("PREFIX"); + num << get("DESTFAX"); + ((TFax_data*)this)->set(name, num); + } + const TString* s = (const TString*)((TAssoc_array*)this)->objptr(name); return s ? (char*)(const char*)*s : ""; } @@ -238,7 +256,7 @@ protected: bool exec_command(const TString& comm, TToken_string& args); void handle_fax_message(word wparam, long lparam); void handle_drop_files(word wparam); - + // @cmember Ritorna TRUE se il server non e' in attesa di nessun lavoro bool can_close() const; @@ -262,6 +280,8 @@ public: bool set_destination(const TString& tipo, const TString& codice, TFax_data& data) const; bool push_destination(const TString& tipo, const TString& codice); + void auto_configure(); + TDDE_fax(); virtual ~TDDE_fax(); }; @@ -294,12 +314,23 @@ public: TFax_mask::TFax_mask(TDDE_fax* fax) : TMask("bafax01"), _fax(fax) -{ +{ + const char* pippe[] = { "DESTFAX", "FROMFAX", "PREFIX", NULL }; + for (int i = fields()-1; i >= 0; i--) { TMask_field& f = fld(i); if (f.in_group(1)) + { f.set_handler(code_handler); + const TFieldref* c = f.field(); + if (c != NULL) + { + for (int p = 0; pippe[p] != NULL; p++) + if (c->name() == pippe[p]) + f.allow_pipe(); + } + } else if (f.in_group(2)) f.set_handler(button_handler); @@ -479,6 +510,7 @@ bool TLog_mask::log_notify(TSheet_field& s, int, KEY k) const char* strid = s.row(i).get(0); unsigned long id; sscanf(strid, "%lu", &id); m._fax->log_delete(log, id); + do_events(); } return FALSE; } @@ -569,31 +601,29 @@ TDDE_fax::TDDE_fax() : _pappinfo(NULL), _log_mask(NULL), _fax_mask(NULL), _close_when_idle(FALSE) { +/* const bool already = initiate(get_app_name(), ""); if (already) { terminate(); xvt_statbar_set("C'e' gia' un server in esecuzione"); beep(); + return; } - else +*/ + _pappinfo = FaxRegisterApp(get_app_name(), hwnd()); + if (_pappinfo) + { + start_server(); // Inizia DDE server + FaxSubscribe(_pappinfo, SUBSCRIBE_LOG_ALL); // Connettiti a Faxman + update_all_logs(); // Aggiorna tutte le code + DragAcceptFiles((HWND)hwnd(), TRUE); // Attiva Drag'n'drop + } + else { - _pappinfo = FaxRegisterApp(get_app_name(), hwnd()); - if (_pappinfo) - { - DragAcceptFiles((HWND)hwnd(), TRUE); // Attiva Drag'n'drop - - FaxSubscribe(_pappinfo, SUBSCRIBE_LOG_ALL); // Connettiti a FAxman - update_all_logs(); - - start_server(); // Inizia DDE server - } - else - { - xvt_statbar_set("Impossibile connettersi a FAXMAN"); - beep(); - } - } + xvt_statbar_set("Impossibile connettersi a FAXMAN"); + beep(); + } } TDDE_fax::~TDDE_fax() @@ -669,6 +699,8 @@ bool TDDE_fax::do_execute(word id, const TString& cmd) return ok; } +// Genera il nome di un file temporaneo e gli cambia l'estensione: +// se esiste gia' ripete il ciclo. void TDDE_fax::choose_temp_name(TFilename& name) const { do @@ -815,9 +847,6 @@ bool TDDE_fax::send_next_fax() #endif tw.maximize(); - - if (_port.first_one() < 0) - warning_box("Non c'e nessun modem-fax collegato"); CHECK(_fax_mask == NULL, "Double fax mask"); _fax_mask = new TFax_mask(this); @@ -835,7 +864,7 @@ bool TDDE_fax::send_next_fax() PSEND_FAX sf = &_send_fax; FaxInitSendStruct(_pappinfo, sf); - sf->szDestFax = data.get_char_star("DESTFAX"); + sf->szDestFax = data.get_char_star("FULLDESTFAX"); sf->szDestName = data.get_char_star("DESTNAME"); sf->szToCompany = data.get_char_star("DESTFIRM"); @@ -954,29 +983,31 @@ void TDDE_fax::update_all_logs() _failed.destroy(); _complete.destroy(); - if (FaxLogInit(_pappinfo, SUBSCRIBE_LOG_PENDING) < MAXITERATORS) { - while (FaxLogNext(_pappinfo, &tmpsf) == LOGERR_CONTINUEIT) { + if (FaxLogInit(_pappinfo, SUBSCRIBE_LOG_PENDING) < MAXITERATORS) + { + while (FaxLogNext(_pappinfo, &tmpsf) == LOGERR_CONTINUEIT) do_custom_message(WM_FAXMSG, FAXLOGADD, (LPARAM)&tmpsf); - } } - if (FaxLogInit(_pappinfo, SUBSCRIBE_LOG_SENDING) < MAXITERATORS) { - while (FaxLogNext(_pappinfo, &tmpsf) == LOGERR_CONTINUEIT) { + if (FaxLogInit(_pappinfo, SUBSCRIBE_LOG_SENDING) < MAXITERATORS) + { + while (FaxLogNext(_pappinfo, &tmpsf) == LOGERR_CONTINUEIT) do_custom_message(WM_FAXMSG, FAXLOGADD, (LPARAM)&tmpsf); - } } - if (FaxLogInit(_pappinfo, SUBSCRIBE_LOG_COMPLETE) < MAXITERATORS) { - while (FaxLogNext(_pappinfo, &tmpsf) == LOGERR_CONTINUEIT) { + if (FaxLogInit(_pappinfo, SUBSCRIBE_LOG_COMPLETE) < MAXITERATORS) + { + while (FaxLogNext(_pappinfo, &tmpsf) == LOGERR_CONTINUEIT) do_custom_message(WM_FAXMSG, FAXLOGADD, (LPARAM)&tmpsf); - } } - if (FaxLogInit(_pappinfo, SUBSCRIBE_LOG_FAILED) < MAXITERATORS) { - while (FaxLogNext(_pappinfo, &tmpsf) == LOGERR_CONTINUEIT) { + if (FaxLogInit(_pappinfo, SUBSCRIBE_LOG_FAILED) < MAXITERATORS) + { + while (FaxLogNext(_pappinfo, &tmpsf) == LOGERR_CONTINUEIT) do_custom_message(WM_FAXMSG, FAXLOGADD, (LPARAM)&tmpsf); - } } + + FaxEnumDevices(_pappinfo); } void TDDE_fax::update_log(int log) @@ -997,6 +1028,13 @@ void TDDE_fax::log_delete(int log, unsigned long id) FaxLogDelete(_pappinfo, id, log); } +void TDDE_fax::auto_configure() +{ + const int err = FaxAddDevice(_pappinfo, 0); + if (err == 0) + error_box("Impossibile trovare il server Faxman"); +} + bool TDDE_fax::run_mask() { const bool ok = _log_mask == NULL; @@ -1178,10 +1216,12 @@ bool TFax_server::create() const bool ok = _fax->ok(); if (ok) { - TTemp_window w(TASK_WIN); - w.iconize(); + bool show_status = FALSE; - if (argc() > 3) + if (argc() == 2) + show_status = stricmp(argv(1), "-S") == 0; + + if (argc() > 2) { const TString tipo = argv(1); const TString codice = argv(2); @@ -1201,6 +1241,16 @@ bool TFax_server::create() msg = mb.next_s(topic); } } + + if (show_status) + { + dispatch_e_menu(MENU_ITEM(1)); + } + else + { + TTemp_window w(TASK_WIN); + w.iconize(); + } } else destroy(); // Non verrebbe mai chiamata @@ -1226,6 +1276,9 @@ bool TFax_server::menu(MENU_TAG mt) case MENU_ITEM(1): _fax->run_mask(); break; + case MENU_ITEM(2): + _fax->auto_configure(); + break; default: break; } diff --git a/ba/bafax.url b/ba/bafax.url index bb6a59e8a..6acfaec0d 100755 --- a/ba/bafax.url +++ b/ba/bafax.url @@ -1,6 +1,13 @@ +#define APPNAME EASYFAX +#define QAPPNAME "EASYFAX" + #include MENU TASK_MENUBAR - SUBMENU MENU_FILE "~File" - ITEM MENU_ITEM(1) "~Stato" + SUBMENU MENU_FILE "~File" + SUBMENU BAR_ITEM(1) "~Modem/Fax" + +MENU BAR_ITEM(1) + ITEM MENU_ITEM(1) "~Stato" + ITEM MENU_ITEM(2) "~Azzera"