From 6e0d5b427546fddccaf0585805ab70ef99c3196d Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 13 Sep 2002 14:56:23 +0000 Subject: [PATCH] Patch level : aga 2.0 patch 335 Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la versione Partners 2.0 patch 335 git-svn-id: svn://10.65.10.50/trunk@10496 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ba/ba0.cpp | 74 +++++---- ba/ba0100a.uml | 2 +- ba/ba0200a.uml | 9 +- ba/ba1600.cpp | 23 --- ba/ba1700.cpp | 6 +- ba/ba1900.cpp | 2 +- ba/ba4100.cpp | 2 +- ba/ba4200.cpp | 2 +- ba/bacnv.cpp | 4 +- cg/cglib01.cpp | 26 +-- include/applicat.cpp | 33 ++-- include/applicat.h | 4 + include/assoc.cpp | 70 +++++++++ include/assoc.h | 17 ++ include/controls.cpp | 135 ++++++++-------- include/date.cpp | 56 +++---- include/diction.cpp | 306 ++++++++++++++++++++++++++++++++++++ include/diction.h | 28 ++++ include/golem.cpp | 3 +- include/isamrpc.cpp | 20 +-- include/lffiles.h | 2 +- include/mask.cpp | 7 +- include/maskfld.cpp | 45 +++--- include/netsock.cpp | 365 +++++++++++++++++++++++++++---------------- include/netsock.h | 52 +++--- include/netutils.cpp | 189 +++++++--------------- include/netutils.h | 97 +++++------- include/printer.cpp | 63 +------- include/printer.h | 9 -- include/progind.cpp | 3 +- include/relapp.cpp | 2 +- include/sheet.cpp | 16 +- include/strings.cpp | 5 + include/strings.h | 2 + include/utility.cpp | 128 +++++++++------ include/utility.h | 3 +- sc/sc2100.cpp | 6 - sc/sc2400.cpp | 8 +- server/diction.cpp | 69 ++++++-- server/server.cpp | 113 +++++++++----- server/soap.cpp | 42 +++-- server/soap.h | 5 +- server/soapserv.opt | Bin 50688 -> 0 bytes server/soapserv.plg | 38 ----- ve/ve6400.cpp | 4 +- xvaga/oswin32.cpp | 9 ++ xvaga/oswin32.h | 5 +- xvaga/xvaga.cpp | 110 ++++++++++--- xvaga/xvt.h | 13 +- 49 files changed, 1381 insertions(+), 851 deletions(-) create mode 100755 include/diction.cpp create mode 100755 include/diction.h delete mode 100755 server/soapserv.opt delete mode 100755 server/soapserv.plg diff --git a/ba/ba0.cpp b/ba/ba0.cpp index b6f62952f..c96a33e85 100755 --- a/ba/ba0.cpp +++ b/ba/ba0.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -358,6 +359,7 @@ TColor_mask::TColor_mask() TConfig color(CONFIG_USER, "Colors"); _color = color.list_variables(); set(113, color.get_bool("Campi3D") ? "X" : ""); + set(115, color.get_bool("SmallIcons") ? "X" : ""); } PNT TColor_mask::log2dev(long x, long y) const @@ -439,6 +441,7 @@ void TColor_mask::save_colors() FOR_EACH_ASSOC_STRING(_color, obj, key, str) colors.set(key, str); colors.set("Campi3D", get_bool(113) ? "X" : ""); + colors.set("SmallIcons", get_bool(115) ? "X" : ""); } COLOR TColor_mask::get_color_entry(const char* name) const @@ -685,6 +688,7 @@ void TMenuitem::create(const char* t) start = get_next_string(t, start, _caption, brace); start = get_next_string(t, start, _action, _type); start = get_next_string(t, start, flags, brace); + _caption = dictionary_translate(_caption); for (int i = flags.len()-1; i >= 0; i--) { @@ -874,7 +878,10 @@ void TSubmenu::read(TScanner& scanner) char brace; if (line.compare("Caption", 7, TRUE) == 0) - get_next_string(line, 8, _caption, brace); else + { + get_next_string(line, 8, _caption, brace); + _caption = dictionary_translate(_caption); + } else if (line.compare("Module", 6, TRUE) == 0) { const int equal = line.find('='); @@ -1109,7 +1116,7 @@ TImage& TMenu::image(const char* name) { image = (TTimed_image*)_images.objptr(_default_bmp); if (image == NULL) - fatal_box("Impossibile trovare l'immagine %s", (const char*)_default_bmp); + fatal_box("%s %s", TR("Impossibile trovare l'immagine"), (const char*)_default_bmp); } if (_images.items() > 3) @@ -1317,13 +1324,13 @@ int TMenu_application::do_level() mask.disable(id); } - TEdit_field& ef = mask.add_string(DLG_USER, 0, "Cerca ", 1, -3, 50, "", 50); + TEdit_field& ef = mask.add_string(DLG_USER, 0, PR("Cerca "), 1, -3, 50, "", 50); ef.set_handler(menu_find_handler); const bool top = _menu.at_top(); - TButton_field& bf = mask.add_button(DLG_QUIT, 0, "Fine", -12, -1, bwidth, 2); + TButton_field& bf = mask.add_button(DLG_QUIT, 0, TR("Fine"), -12, -1, bwidth, 2); if (!top) - mask.add_button(DLG_CANCEL, 0, "Menu precedente", -22, -1, bwidth, 2); + mask.add_button(DLG_CANCEL, 0, TR("Menu precedente"), -22, -1, bwidth, 2); mask.first_focus(101+_menu.selected()); @@ -1360,10 +1367,9 @@ void TMenu_application::test_temp() TString_array files; const int count = list_files(dir, files); - if (count > 0 && yesno_box("Cancellare %d file temporane%c in %s?", - count, (count > 1) ? 'i' : 'o', dir.path())) + if (count > 0 && yesno_box(TR("Cancellare tutti i file temporanei in %s?"), dir.path())) { - TProgind bar(count, "Cancellazione file temporanei", TRUE, TRUE); + TProgind bar(count, TR("Cancellazione file temporanei"), TRUE, TRUE); for (int i = count-1; i >= 0; i--) { if (bar.iscancelled()) break; @@ -1475,8 +1481,9 @@ bool TMenu_application::check_user() ok = !users.get_bool("CONNECTED"); if (!ok) { - ok = yesno_box("L'utente %s risulta essere gia' collegato\n" - "Si desidera continuare ugualmente?", (const char*)utente); + ok = yesno_box("%s\n%s", + TR("L'utente risulta essere già collegato"), + TR("Si desidera continuare ugualmente?")); } if (ok) @@ -1485,15 +1492,15 @@ bool TMenu_application::check_user() users.read(_isequal); if (users.get("AUTSTR") == "CONVERTING") { - TString msg = "E' in corso una conversione archivi:\n"; + TString msg; msg << TR("E' in corso una conversione archivi") << ":\n"; if (utente == dongle().administrator()) { - msg << "Si desidera continuare ugualmente?"; + msg << TR("Si desidera continuare ugualmente?"); ok = yesno_box(msg); } else { - msg << "Accesso negato."; + msg << TR("Accesso negato."); ok = error_box(msg); } } @@ -1505,12 +1512,12 @@ bool TMenu_application::check_user() dongle().logout(); ok = get_serial_number() >= 0; if (!ok) - error_box("Probabilmente e' stato superato il numero massimo di utenti"); + error_box(TR("Probabilmente e' stato superato il numero massimo di utenti")); } } else { - error_box("Utente e/o password errata:\nfare attenzione alle maiuscole"); + error_box(TR("Utente e/o password errata: fare attenzione alle maiuscole")); m.set(F_PASSWORD,""); } @@ -1602,7 +1609,7 @@ bool TMenu_application::test_programs() remote_name.add("install.ini"); if (remote_name.exist()) { - TProgind pi(3, "Controllo aggiornamento programmi", FALSE, TRUE); + TProgind pi(3, TR("Controllo aggiornamento programmi"), FALSE, TRUE); TConfig remote_install(remote_name, "Main"); TAssoc_array my_modules, his_modules; pi.addstatus(1); @@ -1637,7 +1644,7 @@ bool TMenu_application::test_programs() if (more) break; if (dangerous.empty() || - (!more && !yesno_box("Si desidera aggiornare i moduli adesso?"))) + (!more && !yesno_box(TR("Si desidera aggiornare i moduli adesso?")))) break; app.run(FALSE, TRUE, TRUE, TRUE); more = TRUE; // ricontrolla @@ -1654,12 +1661,12 @@ bool TMenu_application::create() #ifdef _DEMO_ { - TMask w("ATTENZIONE", 1, 68, 12); - w.add_static(DLG_NULL, 0 ,"@bATTENZIONE" , 30 , 1); - w.add_static(DLG_NULL, 0 ,"Questo programma è in versione dimostrativa." , 1 , 3); - w.add_static(DLG_NULL, 0 ,"Non si possono memorizzare date con mese successivo a Marzo." , 1 , 5); - w.add_static(DLG_NULL, 0 ,"Il programma funziona circa per due ore ogni giorno." , 1 , 7); - w.add_static(DLG_NULL, 0 ,"Il numero di registrazioni è stato limitato ad un migliaio." , 1 , 9); + TMask w(TR("ATTENZIONE"), 1, 68, 12); + w.add_static(DLG_NULL, 0 , PR("@bATTENZIONE") , 30 , 1); + w.add_static(DLG_NULL, 0 , TR("Questo programma è in versione dimostrativa.") , 1 , 3); + w.add_static(DLG_NULL, 0 , TR("Non si possono memorizzare date con mese successivo a Marzo.") , 1 , 5); + w.add_static(DLG_NULL, 0 , TR("Il programma funziona circa per due ore ogni giorno.") , 1 , 7); + w.add_static(DLG_NULL, 0 , TR("Il numero di registrazioni è stato limitato ad un migliaio.") , 1 , 9); w.add_button(DLG_OK, 0, "", -11, -1, 10, 2); w.run(); } @@ -1767,7 +1774,7 @@ HIDDEN bool browse_file_handler(TMask_field& f, KEY k) DIRECTORY dir; xvt_fsys_get_dir(&dir); - const int err = xvt_dm_post_file_open(&fs, "Selezione programma"); + const int err = xvt_dm_post_file_open(&fs, TR("Selezione programma")); xvt_fsys_set_dir(&dir); if (err == FL_OK) { @@ -1861,18 +1868,17 @@ HIDDEN bool study_handler(TMask_field& f, KEY k) path.add("com"); path.add("dir.gen"); if (!path.exist()) - ok = f.error_box("La directory %s non e' uno studio valido!", - (const char*)f.get()); + ok = f.error_box("%s %s", (const char*)f.get(), TR("non e' uno studio valido!")); } return ok; } bool TMenu_application::choose_study() { - TMask m("Scelta studio", 1, 60, 5); + TMask m(TR("Scelta studio"), 1, 60, 5); m.add_button(DLG_OK, 0, "", -12, -1, 10, 2); m.add_button(DLG_CANCEL, 0, "", -22, -1, 10, 2); - m.add_string(DLG_USER, 0, "Studio ", 1, 1, 50); + m.add_string(DLG_USER, 0, PR("Studio "), 1, 1, 50); m.set_handler(DLG_USER, study_handler); m.set(DLG_USER, prefix().get_studio()); bool ok = m.run() == K_ENTER; @@ -2381,7 +2387,7 @@ void TMenu_application::add_to_preferred() } } else - error_box("Non e' possibile memorizzare piu' di %d preferenze", maxpref); + error_box(TR("Non e' possibile memorizzare piu' di %d preferenze"), maxpref); } class TPreferred_mask : public TAutomask @@ -2498,15 +2504,15 @@ int TMenu_application::do_tree() tree_fld.set_handler(tree_handler); RCT rct; tree_fld.get_rect(rct); - TMask_field& sf = mask.add_static(DLG_NULL, 0, "Cerca", -2, 0); + TMask_field& sf = mask.add_static(DLG_NULL, 0, TR("Cerca"), -2, 0); TEdit_field& ef = mask.add_string(DLG_USER, 0, "", -2, 1, 50, "", bwidth); ef.set_handler(tree_find_handler); - TButton_field& mf = mask.add_button(102, 0, "Menu principale", -1, 2, bwidth, 2); + TButton_field& mf = mask.add_button(102, 0, TR("Menu Principale"), -1, 2, bwidth, 2); mf.set_handler(tree_shrink_handler); - TButton_field& bf = mask.add_button(DLG_QUIT, 0, "Fine", -56, -1, bwidth/2, 2); + TButton_field& bf = mask.add_button(DLG_QUIT, 0, TR("Fine"), -56, -1, bwidth/2, 2); mask.first_focus(101); KEY key = mask.run(); @@ -2583,11 +2589,11 @@ int main(int argc, char** argv) if (menu.exist()) { TMenu_application *ma = new TMenu_application(menu); - ma->run(argc, argv, "Menu Principale"); + ma->run(argc, argv, TR("Menu Principale")); delete ma; } else - error_box("Non esiste il menu %s", (const char*)menu); + error_box(TR("Non esiste il menu %s"), (const char*)menu); return 0; } diff --git a/ba/ba0100a.uml b/ba/ba0100a.uml index c5b899665..ac7586543 100755 --- a/ba/ba0100a.uml +++ b/ba/ba0100a.uml @@ -1,6 +1,6 @@ #include "ba0100a.h" -PAGE "Selezione utente" -1 -1 30 7 +PAGE "Selezione utente" -1 -1 30 6 STRING F_USER 8 BEGIN diff --git a/ba/ba0200a.uml b/ba/ba0200a.uml index d40a22cd0..90533cdaa 100755 --- a/ba/ba0200a.uml +++ b/ba/ba0200a.uml @@ -87,12 +87,17 @@ END BOOLEAN 113 BEGIN - PROMPT 2 -1 "Campi 3D" + PROMPT 2 18 "Campi 3D" +END + +BOOLEAN 115 +BEGIN + PROMPT 2 17 "Icone alternative" END BUTTON 114 10 2 BEGIN - PROMPT 19 -1 "Font" + PROMPT 20 -1 "Font" END GROUPBOX DLG_NULL 14 8 diff --git a/ba/ba1600.cpp b/ba/ba1600.cpp index 5f574ba87..b456e2902 100755 --- a/ba/ba1600.cpp +++ b/ba/ba1600.cpp @@ -428,29 +428,6 @@ void TFconv_ini::export_module(const char* module, const char* summary) } } -/////////////////////////////////////////////////////////// -// TAuto_token_string -/////////////////////////////////////////////////////////// - -/* -TAuto_token_string& TAuto_token_string::create(const char* ts) -{ - // Copia la stringa - set(ts); - - // Calcola il separatore - for (const char* s = get_buffer(); *s; s++) - { - if (strchr("|;,!^&+\t\n", *s) != NULL) - { - separator(*s); - break; - } - } - - return *this; -} -*/ /////////////////////////////////////////////////////////// // Maschera composizione del modulo /////////////////////////////////////////////////////////// diff --git a/ba/ba1700.cpp b/ba/ba1700.cpp index 16c6351cc..7b5b7a4c7 100755 --- a/ba/ba1700.cpp +++ b/ba/ba1700.cpp @@ -1166,7 +1166,7 @@ bool TInstaller_mask::on_key(KEY key) TInstaller_mask::TInstaller_mask() : TArray_sheet(0, 0, 0, 0, "Installazione", - "@1C|Modulo@30|Cod.|Versione da\ninstallare@11|Livello\nPatch@8|Data\nRilascio@10|Versione\nInstallata@10|Livello\nPatch@8|Data\nInstallazione@13|Aggiornamento", + "@1|Modulo@30|Cod.|Versione da\ninstallare@11|Livello\nPatch@8|Data\nRilascio@10|Versione\nInstallata@10|Livello\nPatch@8|Data\nInstallazione@13|Aggiornamento", 0x18, 3) { _curr_mask = this; @@ -1212,7 +1212,7 @@ TInstaller_mask::~TInstaller_mask() switch (_reboot_program) { case NEW_MENU: - msg << "sono stati aggiornati i menu'"; + msg << "sono stati aggiornati i menu"; default: if (ba0exfile.exist()) { @@ -1220,7 +1220,7 @@ TInstaller_mask::~TInstaller_mask() msg << " e "; else msg << "e' stato "; - msg << "aggiornato il navigatore dei menu'"; + msg << "aggiornato il navigatore dei menu"; } if (ba1exfile.exist()) { diff --git a/ba/ba1900.cpp b/ba/ba1900.cpp index 90407f950..1f7d7164a 100755 --- a/ba/ba1900.cpp +++ b/ba/ba1900.cpp @@ -31,7 +31,7 @@ public: bool TDevotoOli_mask::something_selected() const { TSheet_field& sheet = sfield(F_MODULES); - FOR_EACH_SHEET_ROW_BACK(sheet, i, row) + FOR_EACH_SHEET_ROW(sheet, i, row) if (row->get_char(0) > ' ') break; return i >= 0; diff --git a/ba/ba4100.cpp b/ba/ba4100.cpp index f5faaa55f..17b41933d 100755 --- a/ba/ba4100.cpp +++ b/ba/ba4100.cpp @@ -52,6 +52,6 @@ bool TComuni_app::user_destroy() int ba4100(int argc, char* argv[]) { TComuni_app a ; - a.run(argc, argv, "Anagrafica Comuni"); + a.run(argc, argv, TR("Anagrafica Comuni")); return 0; } diff --git a/ba/ba4200.cpp b/ba/ba4200.cpp index 649818342..5512c8d7e 100755 --- a/ba/ba4200.cpp +++ b/ba/ba4200.cpp @@ -708,6 +708,6 @@ int ba4200(int argc, char* argv[]) TApplication::check_parameters(argc, argv); const char ta = (argc > 2 && toupper(*argv[2]) == 'G') ? 'G' : 'F'; TPersone_app a(ta); - a.run(argc, argv, "Anagrafica Persone"); + a.run(argc, argv, TR("Anagrafica Persone")); return 0; } diff --git a/ba/bacnv.cpp b/ba/bacnv.cpp index 2bb8628bd..125f79482 100755 --- a/ba/bacnv.cpp +++ b/ba/bacnv.cpp @@ -193,6 +193,7 @@ public: void convert_ca7() const; void change_ca7(TRectype& rec) const; void convert_quadst() const; + TConversione_archivi() : _oldditta(0), _codditta(0), _error(0) {} }; @@ -929,7 +930,7 @@ void TConversione_archivi::rebuild_dir_indexes() d.get(i); TFilename s(d.name()); s.ext("dbf"); - if (f.is_valid() == NOERR && fexist(s)) + if (f.is_valid(true) == NOERR && fexist(s)) { TSystemisamfile f(i); f.packindex(); @@ -1840,4 +1841,3 @@ int main(int argc,char** argv) return 0; } - diff --git a/cg/cglib01.cpp b/cg/cglib01.cpp index cc9b0f541..2d89021cf 100755 --- a/cg/cglib01.cpp +++ b/cg/cglib01.cpp @@ -869,15 +869,20 @@ bool TBill::find() bool TBill::read(TRectype &r) { - TLocalisamfile pcon(LF_PCON); - pcon.put(PCN_GRUPPO, _gruppo); - pcon.put(PCN_CONTO, _conto); - pcon.put(PCN_SOTTOCONTO, _sottoconto); + bool ok = FALSE; - const int err = pcon.read(); - if (err == NOERR) + if (tipo() <= ' ' || sottoconto() <= 0) + { + TString16 key; key.format("%d|%d|%ld", gruppo(), conto(), sottoconto()); + const TRectype& pcon = cache().get(LF_PCON, key); + if (!pcon.empty()) + { + r = pcon; + ok = TRUE; + } + } + if (ok) { - r = pcon.curr(); _tipo_cr = r.get_int(PCN_TIPOSPRIC); _sezione = r.get_char(PCN_SEZSALDI); set_description(r.get(PCN_DESCR)); @@ -886,7 +891,7 @@ bool TBill::read(TRectype &r) else r.zero(); - return err == NOERR; + return ok; } int TBill::tipo_att() @@ -946,9 +951,8 @@ char TBill::sezione() const // Certified 99% (uses __tmp_string) const char* TBill::string(int mode) const { - TFixed_string s(&__tmp_string[256], 80); - s.cut(0); - + TString& s = get_tmp_string(80); + if (mode & 0x4) { const int cr = tipo_cr(); diff --git a/include/applicat.cpp b/include/applicat.cpp index b6146ab3d..3328b0c36 100755 --- a/include/applicat.cpp +++ b/include/applicat.cpp @@ -237,6 +237,8 @@ long TApplication::task_eh(WINDOW win, EVENT *ep) xvt_menu_set_tree(win, menu); xvt_res_free_menu_tree(menu); } + if (dictionary_active()) + xvt_menu_translate_tree(win, dictionary_translate_menu_item); // Setta la caption della task window TString cap; @@ -251,9 +253,6 @@ long TApplication::task_eh(WINDOW win, EVENT *ep) // Crea il banner iniziale create_backdrop(); -#if defined(DBG) && XVT_OS == XVT_OS_SCOUNIX - message_box("Attach to process %d ...", getpid()); -#endif do_events(); os_allow_another_instance(); } @@ -414,7 +413,7 @@ void TApplication::stop_run() c.set(hname, encode(remaining_time.string())); } else - message_box("Questo e' un programma dimostrativo.\n Oggi rimangono %s minuti di utilizzo.", remaining_time.string(3, 0)); + message_box(TR("Questo e' un programma dimostrativo.\nOggi rimangono %s minuti di utilizzo."), remaining_time.string(3, 0)); } #endif terminate(); @@ -478,6 +477,8 @@ void TApplication::terminate() printer_destroy(); + dictionary_close(); + customize_controls(FALSE); // Rilascio eventuali DLL } @@ -520,7 +521,7 @@ const char* TApplication::get_module_name() const } if (!ok) { - error_box("Il modulo '%s' non e' autorizzato per l'utente %s", (const char*)module, ((const char*)user())); + error_box(TR("Il modulo '%s' non e' autorizzato per l'utente %s"), (const char*)module, ((const char*)user())); module.cut(0); } } @@ -650,12 +651,12 @@ void TApplication::run( if (sn < 0) { - error_box("Probabilmente non e' stata inserita la chiave di protezione"); + error_box(TR("Probabilmente non e' stata inserita la chiave di protezione")); return; } if (!test_assistance_year()) { - error_box("Probabilmente e' necessario attivare il contratto di assistenza"); + error_box(TR("Probabilmente e' necessario attivare il contratto di assistenza")); return; } @@ -702,7 +703,7 @@ void TApplication::about() const if (get_version_info(year, release, tag, patch)) { - message_box("Versione %d.%02d\nProgramma %s\nN.ro di serie %u-%02d.%03d \nUtente %s", + message_box(TR("Versione %d.%02d\nProgramma %s\nN.ro di serie %u-%02d.%03d \nUtente %s"), year, release, (const char*)n.name(), ser_no, tag, patch, (const char*)user()); } else @@ -791,8 +792,8 @@ bool TApplication::build_firm_data(long codditta, bool flagcom) exist = fexist(s); } if (exist) - return message_box("Direttorio dati danneggiato, impossibile attivare la ditta %ld", codditta); - if (!yesno_box("Gli archivi della ditta %ld non esistono: si desidera generarli?", codditta)) + return message_box(TR("Direttorio dati danneggiato, impossibile attivare la ditta %ld"), codditta); + if (!yesno_box(TR("Gli archivi della ditta %ld non esistono: si desidera generarli?"), codditta)) return FALSE; TLocalisamfile ditte(LF_NDITTE); @@ -800,24 +801,24 @@ bool TApplication::build_firm_data(long codditta, bool flagcom) ditte.put("CODDITTA",codditta); if (ditte.read(_isequal,_testandlock) == _islocked) { - message_box("Archivi della ditta %ld in fase di creazione da parte di un altro utente.",codditta); + message_box(TR("Archivi della ditta %ld in fase di creazione da parte di un altro utente."),codditta); return FALSE; } - set_autoload_new_files(yesno_box("Si desidera precaricare gli archivi standard")); + set_autoload_new_files(yesno_box(TR("Si desidera precaricare gli archivi standard"))); s = s.path(); s.rtrim(1); if (!fexist(s) && !make_dir(s)) - return error_box("Impossibile creare il direttorio della ditta %ld (%s)", + return error_box(TR("Impossibile creare il direttorio della ditta %ld (%s)"), codditta, (const char*)s); s << ndir; if (!fcopy(&ndir[1], s)) - return error_box("Impossibile copiare il file %s della ditta %ld", + return error_box(TR("Impossibile copiare il file %s della ditta %ld"), &ndir[1], codditta); s = s.path(); s << ntrc; if (!fcopy(&ntrc[1], s)) - return error_box("Impossibile copiare il file %s della ditta %ld", + return error_box(TR("Impossibile copiare il file %s della ditta %ld"), ntrc, codditta); TDir dir, dir1; @@ -844,7 +845,7 @@ bool TApplication::build_firm_data(long codditta, bool flagcom) dir.put(LF_DIR, _nordir, _sysdirop); rec.zero(); } - TString mess("Generazione archivi della ditta "); mess << codditta; + TString mess(TR("Generazione archivi della ditta ")); mess << codditta; TProgind p(maxeod0 ? maxeod0 : 1, mess, FALSE, TRUE, 70); for (int i = LF_DIR + 1; i <= maxeod0; i++) diff --git a/include/applicat.h b/include/applicat.h index 8e6fb0abf..13d24f1c8 100755 --- a/include/applicat.h +++ b/include/applicat.h @@ -9,6 +9,10 @@ #include #endif +#ifndef __DICTION_H +#include +#endif + #define MSG_AI "AI" // message auto_insert (relapp) #define MSG_FS "FS" // message filtered start (relapp) #define MSG_LN "LN" // message link (printapp -> relapp) diff --git a/include/assoc.cpp b/include/assoc.cpp index 0b4c6f715..3c77f2037 100755 --- a/include/assoc.cpp +++ b/include/assoc.cpp @@ -360,3 +360,73 @@ TAssoc_array & TAssoc_array::copy( return * this; } + +/////////////////////////////////////////////////////////// +// TCache +// Un simpatico contenitore che può dimenticare i contenuti +// a patto che riusciate a fornire un metodo per ricrearli! +/////////////////////////////////////////////////////////// + +TObject* TCache::key2obj(const char* key) +{ + NFCHECK("Pure key2obj function not implemented"); + return new TString(key); // Place holder +} + +void TCache::discarding(const THash_object* obj) +{ + // Nothing to do normally +} + +TObject* TCache::objptr(const TString& key) +{ + const int hv = key.hash() % _data.size(); + THash_object* ho = (THash_object*)_data.objptr(hv); + TObject* obj = NULL; + if (ho != NULL && ho->key() == key) + { + obj = &ho->obj(); + } + else + { + obj = key2obj(key); + if (obj != NULL) + { + if (ho != NULL) + { + discarding(ho); + _data.destroy(hv); + } + ho = new THash_object(key, obj); + _data.add(ho, hv); + } + } + return obj; +} + +TObject* TCache::objptr(size_t s) +{ + TString16 key; key.format("%10lu", s); + return objptr(key); +} + +void TCache::destroy() +{ + for (int i = _data.last(); i >= 0; i--) + { + THash_object* ho = (THash_object*)_data.objptr(i); + if (ho != NULL) + { + discarding(ho); + _data.destroy(i); + } + } +} + +TCache::TCache(size_t size) : _data(size > 0 ? size : HASH_SIZE) +{ } + +TCache::~TCache() +{ + destroy(); +} diff --git a/include/assoc.h b/include/assoc.h index 0120428f7..5153bedfd 100755 --- a/include/assoc.h +++ b/include/assoc.h @@ -148,6 +148,23 @@ public: { destroy(); } }; +class TCache : public TObject +{ + TArray _data; + +protected: + virtual void discarding(const THash_object* obj); + virtual TObject* key2obj(const char* key) pure; + +public: + TObject* objptr(const TString& key); + TObject* objptr(size_t nkey); + + void destroy(); // Not very useful, but who knows? + TCache(size_t size = 0); // 883 assigned by default + virtual ~TCache(); +}; + #define FOR_EACH_ASSOC_STRING(__ass, __obj, __key, __str) \ const char *__key, *__str; __ass.restart(); \ for (THash_object* __obj = __ass.get_hashobj(); \ diff --git a/include/controls.cpp b/include/controls.cpp index 3cb3e4364..1ca732e69 100755 --- a/include/controls.cpp +++ b/include/controls.cpp @@ -26,6 +26,7 @@ COLOR FOCUS_COLOR = NORMAL_COLOR; COLOR FOCUS_BACK_COLOR = COLOR_YELLOW; bool CAMPI_SCAVATI = TRUE; bool AUTOSELECT = FALSE; +bool SMALL_ICONS=FALSE; #ifndef STX_DATA // Very deep hacking @@ -118,7 +119,17 @@ bool TPicture_array::add(short id) TImage* i = (TImage*)objptr(id); if (i == NULL) { - i = new TImage(id); + if (SMALL_ICONS) + { + ignore_xvt_errors(TRUE); + i = new TImage(10000+id); + ignore_xvt_errors(FALSE); + if (!i->ok()) + i->load(id); + } + else + i = new TImage(id); + if (i->ok()) { i->convert_transparent_color(BTN_BACK_COLOR); @@ -135,14 +146,10 @@ bool TPicture_array::add(short id) void TPicture_array::reload() { - for (int id = last(); id >= 0; id--) + for (short id = last(); id > 0; id--) if (exist(id)) { - TImage* i = (TImage*)objptr(id); - if (i) - { - i->load(id); - i->convert_transparent_color(BTN_BACK_COLOR); - } + destroy(id); + add(id); } } @@ -288,6 +295,7 @@ void customize_colors() TOOL_BACK_COLOR = colors.get_color("ToolBack", NULL, -1, MASK_DARK_COLOR); CAMPI_SCAVATI = colors.get_bool("Campi3D", NULL, -1, CAMPI_SCAVATI); AUTOSELECT = colors.get_bool("AutoSelect", NULL, -1, AUTOSELECT); + SMALL_ICONS = colors.get_bool("SmallIcons", NULL, -1, SMALL_ICONS); xi_set_pref(XI_PREF_COLOR_LIGHT, MASK_LIGHT_COLOR); xi_set_pref(XI_PREF_COLOR_CTRL, MASK_BACK_COLOR); @@ -1368,7 +1376,7 @@ void TButton_control::create(WINDOW win, short cid, { bool bold; COLOR color; - TString txt(text); + TString80 txt(text); txt.trim(); char mnemonic = '\0'; int underscore = -1; @@ -1562,30 +1570,6 @@ void TPushbutton_control::set_bmp(short bmp_up, short bmp_dn) else _bmp_up = _bmp_dn = 0; _obj->v.btn->drawable = _bmp_up > 0; -/* - if (bmp_up > 0) - { - XI_BITMAP* b1 = xi_bitmap_create_res(bmp_up, XI_BITMAP_NORMAL); - xi_bitmap_background_set(b1, BTN_BACK_COLOR); - xi_bitmap_hcenter_set(b1, TRUE); - xi_bitmap_vcenter_set(b1, TRUE); - xi_set_bitmap(_obj, b1); - if (bmp_dn <= 0) - bmp_dn = bmp_up; - } - else - xi_set_bitmap(_obj, NULL); - if (bmp_dn > 0) - { - XI_BITMAP* b2 = xi_bitmap_create_res(bmp_dn, XI_BITMAP_NORMAL); - xi_bitmap_background_set(b2, BTN_BACK_COLOR); - xi_bitmap_hcenter_set(b2, TRUE); - xi_bitmap_vcenter_set(b2, TRUE); - xi_set_down_bitmap(_obj, b2); - } - else - xi_set_down_bitmap(_obj, NULL); -*/ } void TPushbutton_control::update() @@ -1623,39 +1607,62 @@ void TPushbutton_control::update() if (bmp > 0) { const TImage& i = _picture->image(bmp); - int x = (rct.right + rct.left - i.width()) / 2; - int y = (rct.bottom + rct.top - i.height()) / 2; - if (_obj->v.btn->down) - { - x += 2; - y += 2; - } + if (!SMALL_ICONS || i.width() > i.height()*2) + { + int x = (rct.right + rct.left - i.width()) / 2; + int y = (rct.bottom + rct.top - i.height()) / 2; + if (_obj->v.btn->down) + { + x += 2; + y += 2; + } - i.draw(win, x, y); + i.draw(win, x, y); - if (!(attrib & XI_ATR_ENABLED)) - { - CPEN pen; - pen.width = 1; - pen.pat = PAT_SOLID; - pen.style = P_SOLID; - pen.color = BTN_BACK_COLOR; - xvt_dwin_set_cpen(win, &pen); - for (int py = y + i.height(); py >= y; py -= 2) - { - PNT p; p.v = py; p.h = x; - xvt_dwin_draw_set_pos(win, p); - p.h += i.width(); - xvt_dwin_draw_line(win, p); - } - for (int px = x + i.width(); px >= x; px -= 2) - { - PNT p; p.v = y; p.h = px; - xvt_dwin_draw_set_pos(win, p); - p.v += i.height(); - xvt_dwin_draw_line(win, p); - } - } + if (!(attrib & XI_ATR_ENABLED)) + { + CPEN pen; + pen.width = 1; + pen.pat = PAT_SOLID; + pen.style = P_SOLID; + pen.color = BTN_BACK_COLOR; + xvt_dwin_set_cpen(win, &pen); + for (int py = y + i.height(); py >= y; py -= 2) + { + PNT p; p.v = py; p.h = x; + xvt_dwin_draw_set_pos(win, p); + p.h += i.width(); + xvt_dwin_draw_line(win, p); + } + for (int px = x + i.width(); px >= x; px -= 2) + { + PNT p; p.v = y; p.h = px; + xvt_dwin_draw_set_pos(win, p); + p.v += i.height(); + xvt_dwin_draw_line(win, p); + } + } + } + else + { + const char* cap = caption(); + int width = i.width(); + if (*cap) + width += xvt_dwin_get_text_width(win, cap, -1) + 1; + + int x = (rct.right + rct.left - width) / 2 + _obj->v.btn->down; + int y = (rct.bottom + rct.top - i.height()) / 2 + _obj->v.btn->down; + i.draw(win, x, y); + + if (*cap) + { + const int height = xvt_dwin_get_font_size_mapped(win); + x += i.width()+1; + y = (rct.top + rct.bottom + height) / 2 + _obj->v.btn->down; + xvt_dwin_set_fore_color(win, (attrib & XI_ATR_ENABLED) ? NORMAL_COLOR : DISABLED_COLOR); + xvt_dwin_draw_text(win, x, y, cap, -1); + } + } } #ifdef XI_R4 xi_set_clip(xiwin, NULL); diff --git a/include/date.cpp b/include/date.cpp index 0f44977fb..748cb3747 100755 --- a/include/date.cpp +++ b/include/date.cpp @@ -4,18 +4,22 @@ #define __DATE_CPP #include +#include #include #include #define DAYYEAR 365 #define DAYBIAS 36525L +static const byte _days_in_month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; + +inline bool is_leap(int year) +{ return (year % 4) == 0; } + /////////////////////////////////////////////////////////// // Utility functions /////////////////////////////////////////////////////////// -HIDDEN const byte _days_in_month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; - TDate::TDate(const TDate &d) : _val(d._val) {} @@ -27,9 +31,10 @@ TDate::TDate(long l) : _val(l) if (time(<) == -1) return; struct tm * timeloc = localtime(<); - if (timeloc == NULL) - fatal_box("Impossibile reperire la data corrente del sistema."); - _val = makedata(timeloc->tm_mday, timeloc->tm_mon+1, timeloc->tm_year + 1900); + if (timeloc != NULL) + _val = makedata(timeloc->tm_mday, timeloc->tm_mon+1, timeloc->tm_year + 1900); + else + _val = NULLDATE; } else { @@ -52,9 +57,8 @@ TDate::TDate(long l) : _val(l) cnt -= 100; wd += DAYBIAS; } - int m, y, leap; - - for(y = 0; wd > DAYYEAR + (leap = ((y % 4 ) == 0)); y++) + int m, y, leap; + for(y = 0; wd > DAYYEAR + (leap = is_leap(y)); y++) wd -= (DAYYEAR + leap); for(m = 0; wd > (_days_in_month[m] + (leap && (m == 1))); m++) wd -= (_days_in_month[m] + (leap && (m == 1))); @@ -119,22 +123,9 @@ int TDate::last_day(int month, int year) // son ventotto case uno // per default ce n'ha trentuno"); { - int d; - switch(month) - { - case 4: - case 6: - case 9: - case 11: - d = 30; - break; - case 2: - d = year % 4 ? 28 : 29; - break; - default: - d = 31; - break; - } + int d = _days_in_month[month-1]; + if (month == 2 && is_leap(year) == 0) + d++; return d; } @@ -296,7 +287,7 @@ char* TDate::string( else if (monthf == quarter) { if (ord < m_date) ord = ma_date; - mf.format("%do trimestre", (month() / 3) + 1); + mf.format("%s %d", TR("trimestre"), (month()/3)+1); } else mf.format(monthf == brief ? "%d" : "%02d", month()); @@ -662,11 +653,13 @@ const char* itom( // mese corrispondente a tale cifra (es. 15 = "Marzo") { CHECK(m>=1, "Il mese indicato deve essere un numero da 1 a 12 "); - const char* nomi[12] = + const char* const nomi[12] = { - "Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", - "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre" - }; + TR("Gennaio"), TR("Febbraio"), TR("Marzo"), + TR("Aprile"), TR("Maggio"), TR("Giugno"), + TR("Luglio"), TR("Agosto"), TR("Settembre"), + TR("Ottobre"), TR("Novembre"), TR("Dicembre") + }; return nomi[(m-1) % 12]; } @@ -681,8 +674,9 @@ const char* itow( // giorno corrispondente a tale cifra (es. 15 = "Lunedi") { CHECKD(d >= 1 && d <= 7, "Bad week day ", d); - const char* nomi[7] = - { "Lunedi", "Martedi", "Mercoledi", "Giovedi", "Venerdi", "Sabato", "Domenica" }; + const char* const nomi[7] = + { TR("Lunedì"), TR("Martedì"), TR("Mercoledì"), TR("Giovedì"), + TR("Venerdì"), TR("Sabato"), TR("Domenica") }; return nomi[(d-1) % 7]; } diff --git a/include/diction.cpp b/include/diction.cpp new file mode 100755 index 000000000..08b904503 --- /dev/null +++ b/include/diction.cpp @@ -0,0 +1,306 @@ +/* + + + + Attezione: premere OK per cancellare + Atension: pres OK to dilit + + + +*/ +#include + +#include +#include +#include +#include +#include + + +/////////////////////////////////////////////////////////// +// TTraduttore +/////////////////////////////////////////////////////////// + +class TTraduttore : public TCache +{ + TString _str; + TSocketClient _client; + CONNID _connection; + +protected: + virtual TObject* key2obj(const char* key); + +public: + bool active() const { return _connection != 0; } + const char* translate(const char* sentence); + TTraduttore(); + virtual ~TTraduttore(); +}; + +TObject* TTraduttore::key2obj(const char* key) +{ + const char* const prefix = ""; + const char* const posfix = ""; + + _str.cut(0); + _str << "\n" + << prefix << unesc(key) << posfix << '\n' + << "\n"; + + if (_client.HttpSoap(_connection, _str)) + { + _str.cut(0); + size_t size; + const TFixed_string buf((const char*)_client.GetBuffer(size)); + int start = buf.find(" 0) + start = buf.find('>', start+1)+1; + if (start > 0) + { + const int stop = buf.find('<', start); + if (stop > 0) + _str = esc(buf.sub(start, stop)); + } + // _client.ReleaseBuffer(); // Non perdiamo tempo in 'ste cose + } + else + return NULL; + + return _str.dup(); +} + +const char* TTraduttore::translate(const char* sentence) +{ + if (sentence && *sentence && active()) + { + TString str = sentence; str.trim(); + bool has_letters = false; + for (int i = 0; str[i]; i++) + { + if (isalpha(str[i])) + { + has_letters = true; + break; + } + } + if (has_letters) + { + TString* trans = (TString*)objptr(str); + if (trans != NULL && trans->not_empty()) + sentence = (const char*)*trans; + } + } + return sentence; +} + +TTraduttore::TTraduttore() : _connection(0) +{ + TConfig ini(CONFIG_INSTALL, "Server"); + const TString& server = ini.get("Dictionary"); + if (server.not_empty()) + _connection = _client.QueryConnection("", server); +} + +TTraduttore::~TTraduttore() +{ + // Autoclose connection +} + +static TTraduttore* _DevotoOli = NULL; + +const char* dictionary_translate(const char* sentence) +{ + if (_DevotoOli == NULL) + _DevotoOli = new TTraduttore; + return _DevotoOli->translate(sentence); +} + +const char* dictionary_translate_macro(const char* sentence) +{ + if (memcmp(sentence, TO_BE_TRANSLATED, 4) == 0) + sentence = dictionary_translate(sentence+4); + return sentence; +} + +char strip_accelerator(TString& str) +{ + char tilde= '\0'; + for (int i = 0; str[i]; i++) + { + if (str[i] == '~' || str[i] == '&') + { + tilde = str[i+1]; + str.strip("~&"); + break; + } + } + return tilde; +} + +void restore_accelerator(TString& str, char acc, char tilde) +{ + if (acc > ' ') + { + int newtilde = 0; + for (int m = 0; str[m]; m++) + { + if (toupper(str[m]) == acc) + { + newtilde = m; + break; + } + } + const char s[2] = { tilde, '\0' }; + str.insert(s, newtilde); + } +} + +// len - Effect +// -1 - No length limit +// 0 - Exactly same lenght as original +// >0 - Maximum specified length +const char* dictionary_translate_prompt(const char* prompt, int maxlen) +{ + if (prompt && *prompt && dictionary_active()) + { + TString& str = get_tmp_string(); + str = prompt; + TString8 prefix; + if (str[0] == '@') + { + prefix = str.left(2); // Usually bold = @b + str.ltrim(2); + } + + const char matilde = strip_accelerator(str); // Ricorda tasto rapido + + const int oldlen = str.len(); // Memorizza vecchia lunghezza + str = dictionary_translate(str); + if (maxlen >= 0) + { + const int limit = maxlen == 0 ? oldlen : maxlen; + if (str.len() > limit) + { + // Abbrevio all'ultima consonante + for (int i = limit-2; i > 0; i--) + { + if (strchr("aeiou", str[i]) == NULL) + { + str.cut(i+1); + str << '.'; + break; + } + } + if (i <= 0) + str.cut(limit); + } + if (maxlen == 0 && str.len() < limit) + str.left_just(limit); + } + restore_accelerator(str, matilde, '~'); + str.insert(prefix); + + return str; + } + return prompt; +} + +const char* dictionary_translate_macro_prompt(const char* sentence, int maxlen) +{ + if (memcmp(sentence, TO_BE_TRANSLATED, 4) == 0) + sentence = dictionary_translate_prompt(sentence+4, maxlen); + return sentence; +} + +const char* dictionary_translate_header(const char* head) +{ + if (head && *head && dictionary_active()) + { + TString str = head; + const int at = str.rfind('@'); + if (at >= 0) + { + TString8 postfix; + postfix = str.mid(at); + str.cut(at); + str = dictionary_translate(str); + str << postfix; + return str; + } + + if (str.right(1)[0] == ' ') + return dictionary_translate_prompt(head); + + return dictionary_translate(head); + } + return head; +} + +const char* dictionary_translate_macro_header(const char* head) +{ + if (memcmp(head, TO_BE_TRANSLATED, 4) == 0) + head = dictionary_translate_header(head+4); + return head; +} + +const char* dictionary_translate_menu_item(const char* text) +{ + TString& str = get_tmp_string(); + str = text; + const char matilde = strip_accelerator(str); + + TString16 posfix; + int start = str.find('\t'); + if (start < 0) + start = str.find("..."); + if (start > 0) + { + posfix = str.mid(start); + str.cut(start); + } + + const char* newtext = dictionary_translate(str); + if (str != newtext) + { + str = newtext; + restore_accelerator(str, matilde, '&'); + if (posfix.not_empty()) + str << posfix; + return str; + } + return text; +} + +void dictionary_translate_menu(MENU_ITEM* menu) +{ + if (menu && dictionary_active()) for (int m = 0; menu[m].tag != 0; m++) + { + MENU_ITEM& mi = menu[m]; + if (!mi.separator) + { + const char* newtext = dictionary_translate_menu_item(mi.text); + if (strlen(newtext) > strlen(mi.text)) // Posso sovrascrivere? + mi.text = xvt_mem_realloc(mi.text, strlen(newtext)+1); + strcpy(mi.text, newtext); + if (mi.child) + dictionary_translate_menu(mi.child); + } + } +} + +bool dictionary_active() +{ + return _DevotoOli != NULL && _DevotoOli->active(); +} + +void dictionary_close() +{ + if (_DevotoOli != NULL) + { + delete _DevotoOli; + _DevotoOli = NULL; + } +} + + + diff --git a/include/diction.h b/include/diction.h new file mode 100755 index 000000000..a53e35304 --- /dev/null +++ b/include/diction.h @@ -0,0 +1,28 @@ +#ifndef __DICTION_H +#define __DICTION_H + +#define TO_BE_TRANSLATED "\03\02\01\00" +#define ALREADY_TRANSLATED "\01\02\03\00" + +#ifndef XVT_INCL_XVT +typedef unsigned long WINDOW; +#endif + +const char* dictionary_translate(const char* sentence); +const char* dictionary_translate_macro(const char* sentence); +const char* dictionary_translate_prompt(const char* prompt, int maxlen = 0); +const char* dictionary_translate_macro_prompt(const char* prompt, int maxlen = 0); +const char* dictionary_translate_header(const char* head); +const char* dictionary_translate_macro_header(const char* head); +const char* dictionary_translate_menu_item(const char* menu); + +void dictionary_translate_menu(WINDOW win); +bool dictionary_active(); +void dictionary_close(); + +#define TR(str) dictionary_translate_macro(TO_BE_TRANSLATED##str) +#define PR(str) dictionary_translate_macro_prompt(TO_BE_TRANSLATED##str) +#define BR(str) dictionary_translate_macro_prompt(TO_BE_TRANSLATED##str, -1) +#define HR(str) dictionary_translate_macro_header(TO_BE_TRANSLATED##str) + +#endif \ No newline at end of file diff --git a/include/golem.cpp b/include/golem.cpp index 295db386b..ef9a6a47e 100755 --- a/include/golem.cpp +++ b/include/golem.cpp @@ -1367,7 +1367,7 @@ bool TMail_messages::remove() /////////////////////////////////////////////////////////// // Obsolete DDE management /////////////////////////////////////////////////////////// - +/* #include /////////////////////////////////////////////////////////// @@ -1580,3 +1580,4 @@ void TDDE::terminate() } } +*/ diff --git a/include/isamrpc.cpp b/include/isamrpc.cpp index d0c4f6b8f..92a84b6fe 100755 --- a/include/isamrpc.cpp +++ b/include/isamrpc.cpp @@ -3,12 +3,12 @@ #include #include -#define NO_MFC +#define XVAGA #include static TSocketClient* _client = NULL; -static DWORD _connection = 0; +static CONNID _connection = 0; bool rpc_Start() { @@ -44,7 +44,7 @@ bool rpc_Call(const char* cmd) return ok; } -char* rpc_Request(const char* cmd, DWORD& size, real& total) +char* rpc_Request(const char* cmd, size_t& size, real& total) { CHECK(_connection, "Server not connected"); const clock_t start = clock(); @@ -60,7 +60,7 @@ static TString _rpc_string; inline bool BoolCall() { CHECK(_connection, "Server not connected"); - BOOL yes; + bool yes; bool ok = _client->RequestBool(_connection, _rpc_call, yes) != 0; if (!ok) { @@ -176,7 +176,7 @@ bool rpc_DongleHasModule(word af) bool rpc_DongleModules(TBit_array& ba) { - DWORD size; + size_t size; real time; word* buff = (word*)rpc_Request("DongleModules()", size, time); @@ -240,7 +240,7 @@ bool rpc_UserLogin(const char* server, const char* user, cmd << "UserLogin(" << user << ")"; _rpc_call.format("UserLogin(%s,%s,%s)", user, password, application); - BOOL logged = FALSE; + bool logged = FALSE; bool connected = _client->RequestBool(_connection, _rpc_call, logged) != 0; if (connected) { @@ -293,12 +293,12 @@ bool http_get(const char* server, if (!client.IsOk()) return error_box("Impossibile inizializzare il client HTTP"); - unsigned long connection = client.QueryConnection("80", server); + CONNID connection = client.QueryConnection("80", server); bool ok = connection != 0; if (ok) { - ok = client.HttpGetFile(remote_file, local_file) != 0; - client.RemoveConnection(connection); + ok = client.HttpGetFile(connection, remote_file, local_file) != 0; + client.RemoveConnection(connection); } return ok; @@ -314,7 +314,7 @@ bool http_dir(const char* server, const char* remote_dir, TString_array& list) bool ok = connection != 0; if (ok) { - ok = client.HttpGetDir(remote_dir, list) != 0; + ok = client.HttpGetDir(connection, remote_dir, list) != 0; client.RemoveConnection(connection); } diff --git a/include/lffiles.h b/include/lffiles.h index 7f6ddfa92..5d18cbe6f 100755 --- a/include/lffiles.h +++ b/include/lffiles.h @@ -156,6 +156,7 @@ #define LF_EXTERNAL 1000 // Files with id >= are considered to be externals + #define CNF_GENERAL 10000 #define CNF_STUDIO CNF_GENERAL + 1 #define CNF_DITTA CNF_GENERAL + 2 @@ -168,4 +169,3 @@ - diff --git a/include/mask.cpp b/include/mask.cpp index adbd34fea..944188c34 100755 --- a/include/mask.cpp +++ b/include/mask.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -180,8 +181,8 @@ void TMask::read_mask( CHECKD(_pages < MAX_PAGES, "Maschera con troppe pagine: ", _pages); WINDOW w = read_page(scanner, FALSE); - TString title(80); - xvt_vobj_get_title(w, (char*)(const char*)title, title.size()); + TString80 title; + xvt_vobj_get_title(w, title.get_buffer(), title.size()); captions.add(title); _pagewin[_pages++] = w; @@ -945,7 +946,7 @@ WINDOW TMask::read_page( static int tooly; static RCT rect; - TString title(scanner.string()); + const TString title = dictionary_translate(scanner.string()); RCT r; if (toolwin()) diff --git a/include/maskfld.cpp b/include/maskfld.cpp index b543a741a..dc13b2307 100755 --- a/include/maskfld.cpp +++ b/include/maskfld.cpp @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -320,7 +321,7 @@ bool TMask_field::parse_item(TScanner& scanner) { _ctl_data._x = scanner.integer(); _ctl_data._y = scanner.integer(); - _ctl_data._prompt = scanner.string(); + _ctl_data._prompt = dictionary_translate_prompt(scanner.string(), is_editable() ? 0 : -1); return TRUE; } @@ -1059,23 +1060,23 @@ void TButton_field::create(WINDOW parent) { case DLG_OK: if (_ctl_data._prompt.empty() || _ctl_data._prompt == "Conferma") - _ctl_data._prompt = "~Conferma"; + _ctl_data._prompt = BR("~Conferma"); _exit_key = K_ENTER; - if (_ctl_data._bmp_up == 0 && _ctl_data._prompt == "~Conferma") + if (_ctl_data._bmp_up == 0 && _ctl_data._prompt == BR("~Conferma")) _ctl_data._bmp_up = BMP_OK; break; case DLG_CANCEL: if (_ctl_data._prompt.empty()) - _ctl_data._prompt = "Annulla"; + _ctl_data._prompt = BR("Annulla"); _virtual_key = _exit_key = K_ESC; - if (_ctl_data._bmp_up == 0 && _ctl_data._prompt == "Annulla") + if (_ctl_data._bmp_up == 0 && _ctl_data._prompt == BR("Annulla")) _ctl_data._bmp_up = BMP_CANCEL; break; case DLG_DELREC: if (_ctl_data._prompt.empty() || _ctl_data._prompt == "Elimina") - _ctl_data._prompt = "~Elimina"; + _ctl_data._prompt = BR("~Elimina"); _exit_key = K_DEL; - if (_ctl_data._bmp_up == 0 && _ctl_data._prompt == "~Elimina") + if (_ctl_data._bmp_up == 0 && _ctl_data._prompt == BR("~Elimina")) { _ctl_data._bmp_up = BMP_DELREC; _ctl_data._bmp_dn = BMP_DELRECDN; @@ -1083,17 +1084,17 @@ void TButton_field::create(WINDOW parent) break; case DLG_PRINT: if (_ctl_data._prompt.empty() || _ctl_data._prompt == "Stampa") - _ctl_data._prompt = "~Stampa"; + _ctl_data._prompt = BR("~Stampa"); _exit_key = K_ENTER; - if (_ctl_data._bmp_up <= 0 && _ctl_data._prompt == "~Stampa") + if (_ctl_data._bmp_up <= 0 && _ctl_data._prompt == BR("~Stampa")) _ctl_data._bmp_up = BMP_PRINT; break; case DLG_QUIT: if (_ctl_data._prompt.empty()) - _ctl_data._prompt = "Fine"; + _ctl_data._prompt = BR("Fine"); _virtual_key = K_F4; _exit_key = K_QUIT; - if (_ctl_data._bmp_up <= 0 && _ctl_data._prompt == "Fine") + if (_ctl_data._bmp_up <= 0 && _ctl_data._prompt == BR("Fine")) { _ctl_data._bmp_up = BMP_QUIT; _ctl_data._bmp_dn = BMP_QUITDN; @@ -1338,7 +1339,8 @@ bool TEditable_field::parse_item(TScanner& scanner) if (scanner.key() == "WA") { - set_warning(scanner.string()); + const char* msg = dictionary_translate(scanner.string()); + set_warning(msg); return TRUE; } @@ -1866,9 +1868,8 @@ TBrowse::~TBrowse() // Certified 100% void TBrowse::parse_display(TScanner& scanner) { - const char* s; - s = scanner.string(); - _head.add(s); + const char* s = scanner.string(); + _head.add(dictionary_translate_header(s)); s = scanner.line(); _items.add(s); } @@ -2294,12 +2295,9 @@ bool TBrowse::do_link(bool insert) { TString nm(_insert.mid(1)); if (nm.compare("tb", 2, TRUE) == 0) // Programma gestione tabelle - { _cursor->file().get_relapp(app); - } else // Programma generico di browse/edit app.format("ba3 -3 %s %d", (const char*)nm, _cursor->file().num()); - // Obbligatorio usare la format globale } else { @@ -4216,7 +4214,7 @@ void TList_field::read_item(TScanner& scanner) TToken_string ts(scanner.string()); _codes.add(ts.get()); - const char* v = ts.get(); + const char* v = dictionary_translate_prompt(ts.get(), _ctl_data._width); _values.add(v); CHECKS(v == NULL || strlen(v) <= (word)_ctl_data._width, "List item is too long:", v); @@ -4306,9 +4304,18 @@ void TList_field::add_list() csafe = _codes; _codes = ""; vsafe = _values; _values = ""; } +/* _codes.add("01|02|03|04|05|06|07|08|09|10|11|12"); _values.add("Gennaio|Febbraio|Marzo|Aprile|Maggio|Giugno|" "Luglio|Agosto|Settembre|Ottobre|Novembre|Dicembre"); +*/ + for (int i = 1; i <= 12; i++) + { + char num[4]; sprintf(num, "%02d", i); + _codes.add(num); + _values.add(itom(i)); + } + if (atoi(csafe) > 0) { _codes.add(csafe); diff --git a/include/netsock.cpp b/include/netsock.cpp index dbf70716c..09f43327d 100755 --- a/include/netsock.cpp +++ b/include/netsock.cpp @@ -3,6 +3,7 @@ #define XVT_INCL_NATIVE #include #include +#include // skstream.h // Copyright (C) 1995, 1996 by John C. Wang. All Rights Reserved. @@ -456,16 +457,134 @@ int sockbuf::sync() // end of skstreams /////////////////////////////////////////////////////////// -#define NO_MFC -#define CObject TObject -#define CString TString -#define CStringArray TString_array #include "NetSock.h" -#include +class TSocket_connection : public TConnection +{ + TString _server; + skstream::service _service; -static TLanManager* pSocketManager = NULL; -static skstream* cur_socket = NULL; + skstream* _socket; + +protected: + bool connect(); + +public: + virtual bool Execute(const char* cmd); + + bool WriteLine(const char* cmd); + bool ReadLine(TString& str); + bool Read(byte* buf, size_t size); + + skstream* GetSocket(); + + TSocket_connection(TLanManager* lm, const char* service, const char* server); + ~TSocket_connection(); +}; + +bool TSocket_connection::Execute(const char* cmd) +{ + bool ok = GetSocket() != NULL; + if (ok) + { + const size_t buflen = strlen(cmd)+1; + _socket->sync(); + _socket->write(cmd, buflen); + _socket->flush(); + ok = _socket->good() != 0; + } + return ok; +} + +bool TSocket_connection::WriteLine(const char* cmd) +{ + bool ok = GetSocket() != NULL; + if (ok) + { + const size_t buflen = strlen(cmd); // Unica differenza da Execute + _socket->sync(); + _socket->write(cmd, buflen); + _socket->flush(); + ok = _socket->good() != 0; + } + return ok; +} + +bool TSocket_connection::ReadLine(TString& str) +{ + bool ok = GetSocket() != NULL; + if (ok) + { + char *buf = str.get_buffer(4096); + _socket->getline(buf, str.size(), '\n'); + } + return ok; +} + +bool TSocket_connection::Read(byte* buf, size_t size) +{ + bool ok = GetSocket() != NULL; + if (ok) + { + _socket->read(buf, size); + ok = _socket->good() != 0; + } + return ok; +} + +bool TSocket_connection::connect() +{ + if (_socket != NULL) + delete _socket; + _socket = new skstream(_server, _service); + if (_socket->is_open()) + SetId((CONNID)_socket); + else + { + delete _socket; + _socket = NULL; + SetId(0); + } + + return _socket != NULL; +} + +skstream* TSocket_connection::GetSocket() +{ + if (_socket == NULL || !_socket->is_open()) + connect(); + return _socket; +} + +TSocket_connection::TSocket_connection(TLanManager* lm, + const char* service, const char* server) + : TConnection(lm, 0), _socket(NULL) +{ + _service = (skstream::service)((service && *service) ? atoi(service) : 0); + + _server = server; + int pos = _server.find("://"); + if (pos > 0) + _server.ltrim(pos+3); + + pos = _server.rfind(':'); + if (pos >= 0) + { + _service = (skstream::service)atoi(_server.mid(pos+1)); + _server.cut(pos); + } + + if (_server.blank() || stricmp(_server, "localhost") == 0) + _server = "127.0.0.1"; + + connect(); +} + +TSocket_connection::~TSocket_connection() +{ + if (_socket) + delete _socket; +} TSocketClient::TSocketClient() : m_pData(NULL), m_dwSize(0) @@ -475,95 +594,23 @@ TSocketClient::~TSocketClient() { ReleaseBuffer(); RemoveAllConnections(); - ShutDown(); } -BOOL TSocketClient::Boot() +TConnection* TSocketClient::OnQueryConnection(const char* service, const char* server) { - return TRUE; -} - -BOOL TSocketClient::ShutDown() -{ - pSocketManager = NULL; - if (cur_socket) - { - delete cur_socket; - cur_socket = NULL; - } - return TRUE; -} - - -BOOL TSocketClient::OnRemoveConnection(DWORD id) -{ - if (cur_socket) - { - delete cur_socket; - cur_socket = NULL; - } - return TRUE; -} - -TConnection* TSocketClient::OnQueryConnection(const char* service, - const char* server) -{ - if (pSocketManager == NULL) - Boot(); - - TConnection* pConnection = NULL; - - if (cur_socket == NULL) - { - int porta = service != NULL ? atoi(service) : 0; - - TString strServer = server; - int pos = strServer.find("://"); - if (pos > 0) - strServer.ltrim(pos+3); - - pos = strServer.rfind(':'); - if (pos > 0) - { - porta = atoi(strServer.mid(pos+1)); - strServer.cut(pos); - } - - if (strServer.empty() || stricmp(strServer, "localhost") == 0) - strServer = "127.0.0.1"; - - cur_socket = new skstream(strServer, (skstream::service)porta); - - if (cur_socket->is_open()) - pConnection = OnCreateConnection((DWORD)cur_socket); - else - { - delete cur_socket; - cur_socket = NULL; - } - } - + TSocket_connection* pConnection = new TSocket_connection(this, service, server); + if (pConnection->Id() == 0) + { + delete pConnection; + pConnection = NULL; + } return pConnection; } -BOOL TSocketClient::Execute(DWORD id, const char* cmd) -{ - BOOL ok = cur_socket != NULL && cur_socket->is_open(); - if (ok) - { - const int buflen = strlen(cmd)+1; - cur_socket->sync(); - cur_socket->write(cmd, buflen); - cur_socket->flush(); - ok = cur_socket->good(); - } - return ok; -} - -BOOL TSocketClient::Request(DWORD id, const char* cmd) +bool TSocketClient::Request(CONNID id, const char* cmd) { - static BOOL semaphore = FALSE; - BOOL ok = FALSE; + static bool semaphore = FALSE; + bool ok = FALSE; if (!semaphore) { @@ -573,14 +620,14 @@ BOOL TSocketClient::Request(DWORD id, const char* cmd) ok = Execute(id, cmd); if (ok) { + TSocket_connection* conn = (TSocket_connection*)GetConnection(id); m_dwSize = 0; - cur_socket->read((char*)&m_dwSize, sizeof(m_dwSize)); + conn->Read((byte*)&m_dwSize, sizeof(m_dwSize)); ok = m_dwSize > 0; if (ok) { - m_pData = new BYTE[m_dwSize]; - cur_socket->read(m_pData, (int)m_dwSize); - ok = cur_socket->good(); + m_pData = new byte[m_dwSize]; + ok = conn->Read(m_pData, m_dwSize); } } @@ -589,63 +636,61 @@ BOOL TSocketClient::Request(DWORD id, const char* cmd) return ok; } -BYTE* TSocketClient::GetBuffer(DWORD& dwSize) +byte* TSocketClient::GetBuffer(size_t& dwSize) { dwSize = m_dwSize; return m_pData; } -BOOL TSocketClient::WriteLine(DWORD, const char* str) +bool TSocketClient::WriteLine(CONNID id, const char* str) { - if (!cur_socket->is_open()) - return FALSE; + TSocket_connection* conn = (TSocket_connection*)GetConnection(id); + if (conn) + return conn->WriteLine(str); + return FALSE; +} - if (str && *str) +bool TSocketClient::ReadLine(CONNID id, TString& str) +{ + TSocket_connection* conn = (TSocket_connection*)GetConnection(id); + if (conn) + return conn->ReadLine(str); + return FALSE; +} + +void TSocketClient::ReleaseBuffer() +{ + if (m_pData) { - cur_socket->sync(); - cur_socket->write(str, strlen(str)); - cur_socket->flush(); + delete m_pData; + m_pData = NULL; + m_dwSize = 0; } - - return cur_socket->good(); } -BOOL TSocketClient::ReadLine(DWORD, TString& str) +bool TSocketClient::HttpGetFile(CONNID id, const char* remote, const char* local) { - char *buf = str.get_buffer(4096); - cur_socket->getline(buf, str.size(), '\n'); - return TRUE; -} - -BOOL TSocketClient::HttpGetFile(const char* remote, const char* local) -{ - if (cur_socket == NULL || !cur_socket->is_open()) - return FALSE; - - BOOL ok = FALSE; + bool ok = FALSE; TString buf(4096); buf << "GET " << remote << " HTTP/1.0\r\n\r\n"; - - cur_socket->sync(); - cur_socket->write(buf, buf.len()); - cur_socket->flush(); - if (cur_socket->good()) + + if (WriteLine(id, buf)) { const clock_t start = clock(); long size = 0; - for (int r = 0; !cur_socket->eof(); r++) + for (int r = 0; ; r++) { - cur_socket->getline(buf.get_buffer(), buf.size(), '\n'); + ReadLine(id, buf); if (buf.blank()) break; if (r == 0 && buf.find("404") > 0) return FALSE; // File not found if (buf.compare("Content-length:", 15, TRUE) == 0) { - const int colon = buf.find(':'); - size = atol(buf.mid(colon+1)); + const int colon = buf.find(':'); + size = atol(buf.mid(colon+1)); } } ofstream outfile(local, ios::out | ios::binary); @@ -661,6 +706,7 @@ BOOL TSocketClient::HttpGetFile(const char* remote, const char* local) TProgind pi(size, msg, TRUE, TRUE); long total = 0; + skstream* cur_socket = ((TSocket_connection*)GetConnection(id))->GetSocket(); while (!cur_socket->eof()) { cur_socket->read(buf.get_buffer(), buf.size()); @@ -700,10 +746,10 @@ BOOL TSocketClient::HttpGetFile(const char* remote, const char* local) return ok; } -BOOL TSocketClient::HttpGetDir(const char* remote, TString_array& list) +bool TSocketClient::HttpGetDir(CONNID id, const char* remote, TString_array& list) { TFilename local; local.temp(); - const BOOL ok = HttpGetFile(remote, local); + const bool ok = HttpGetFile(id, remote, local); if (ok) { ifstream s(local); @@ -733,12 +779,65 @@ BOOL TSocketClient::HttpGetDir(const char* remote, TString_array& list) return ok; } -void TSocketClient::ReleaseBuffer() +bool TSocketClient::HttpSoap(CONNID id, const char* cmd) { - if (m_pData) + bool ok = false; + + TSocket_connection* conn = (TSocket_connection*)GetConnection(id); + if (conn == NULL) + return ok; + + if (cmd == NULL || *cmd == '\0') + return ok; + + char hostname[64]; + aga_get_host_name(hostname, sizeof(hostname)); + + TString content(256); + content = cmd; + if (content.find("\n\n"); + content << "\n\r\n"; + } + + TString buf(4096); + buf << "POST / HTTP/1.1\n" + << "User-Agent: Campo\n" + << "Host: " << hostname << "\n" + << "Content-Type: text/xml; charset=utf-8\n" + << "Content-length: " << content.len() << "\n" + << "SOAPAction: \"/\"\r\n\r\n" + << content; + + if (conn->WriteLine(buf)) { - delete m_pData; - m_pData = NULL; - m_dwSize = 0; - } -} + skstream* cur_socket = conn->GetSocket(); + + unsigned long size = 0; + for (int r = 0; !cur_socket->eof(); r++) + { + conn->ReadLine(buf); + if (buf.blank()) + break; + if (buf.compare("Content-length:", 15, TRUE) == 0) + { + const int colon = buf.find(':'); + size = atol(buf.mid(colon+1)); + } + } + if (size > 0) + { + if (size >= m_dwSize) + { + ReleaseBuffer(); + m_dwSize = size+1; + m_pData = new BYTE[m_dwSize]; + } + memset(m_pData, 0, m_dwSize); + cur_socket->read(m_pData, size); + ok = true; + } + } + return ok; +} diff --git a/include/netsock.h b/include/netsock.h index f0fa8d719..d0fbc867b 100755 --- a/include/netsock.h +++ b/include/netsock.h @@ -5,28 +5,26 @@ #include "NetUtils.h" #endif -class TConnection; - class TSocketServer : public TLanServer { - BYTE* m_pData; - DWORD m_dwSize; + byte* m_pData; + unsigned int m_dwSize; protected: // TLanManager - virtual BOOL Boot(); - virtual BOOL ShutDown(); + virtual bool Boot(); + virtual bool ShutDown(); - virtual BOOL OnRemoveConnection(DWORD id); + virtual bool OnRemoveConnection(CONNID id); public: - BYTE* GetBuffer(DWORD dwSize); - const BYTE* GetData() const { return m_pData; } + byte* GetBuffer(size_t dwSize); + const byte* GetData() const { return m_pData; } - BOOL OnConnect(const CString& topic); - void OnConnectConfirm(DWORD id); + bool OnConnect(const TString& topic); + void OnConnectConfirm(CONNID id); public: - virtual BOOL IsOk() const; + virtual bool IsOk() const; TSocketServer(const char* name); virtual ~TSocketServer(); @@ -34,30 +32,24 @@ public: class TSocketClient : public TLanClient { - BYTE* m_pData; - DWORD m_dwSize; + byte* m_pData; + size_t m_dwSize; -protected: // TLanManager - virtual BOOL Boot(); - virtual BOOL ShutDown(); - virtual OnRemoveConnection(DWORD id); - protected: // TLanClient - virtual TConnection* OnQueryConnection(const char* service, - const char* server); - + virtual TConnection* OnQueryConnection(const char* service, const char* server); + public: - virtual BOOL Execute(DWORD id, const char* cmd); - virtual BOOL Request(DWORD id, const char* cmd); - virtual BYTE* GetBuffer(DWORD& dwSize); + virtual bool Request(CONNID id, const char* cmd); + virtual byte* GetBuffer(size_t& dwSize); virtual void ReleaseBuffer(); - virtual BOOL IsOk() const { return TRUE; } + virtual bool IsOk() const { return TRUE; } - BOOL WriteLine(DWORD id, const char* str); - BOOL ReadLine(DWORD id, TString& str); + bool WriteLine(CONNID id, const char* str); + bool ReadLine(CONNID id, TString& str); - BOOL HttpGetFile(const char* remote, const char* local); - BOOL HttpGetDir(const char* remote, TString_array& list); + bool HttpGetFile(CONNID id, const char* remote, const char* local); + bool HttpGetDir(CONNID id, const char* remote, TString_array& list); + bool HttpSoap(CONNID id, const char* query); TSocketClient(); virtual ~TSocketClient(); diff --git a/include/netutils.cpp b/include/netutils.cpp index b5f7fd61e..40269a5dc 100755 --- a/include/netutils.cpp +++ b/include/netutils.cpp @@ -1,4 +1,3 @@ -#define NO_MFC #include "NetUtils.h" TLanManager::TLanManager() @@ -9,72 +8,55 @@ TLanManager::~TLanManager() RemoveAllConnections(); } -TConnection* TLanManager::OnCreateConnection(DWORD id) +TConnection* TLanManager::OnCreateConnection(CONNID id) { return new TConnection(this, id); } -BOOL TLanManager::HasConnections() const +bool TLanManager::HasConnections() const { -#ifdef NO_MFC return m_mapConn.items() > 0; -#else - return m_mapConn.GetCount() > 0; -#endif } -BOOL TLanManager::Request(DWORD id, const char* cmd) +bool TLanManager::Request(CONNID id, const char* cmd) { TConnection* conn = GetConnection(id) ; return conn ? conn->Request(cmd) : FALSE; } -BOOL TLanManager::Execute(DWORD id, const char* cmd) +bool TLanManager::Execute(CONNID id, const char* cmd) { TConnection* conn = GetConnection(id) ; return conn ? conn->Execute(cmd) : FALSE; } // Physically disconnect -BOOL TLanManager::OnRemoveConnection(DWORD id) +bool TLanManager::OnRemoveConnection(CONNID id) { - return id != NULL; + return TRUE; } -DWORD TLanManager::AddConnection(TConnection* pConn) +CONNID TLanManager::AddConnection(TConnection* pConn) { - DWORD id = 0; + CONNID id = 0; if (pConn) { id = pConn->Id(); -#ifdef NO_MFC TString16 key; key.format("%lu", id); m_mapConn.add(key, pConn, TRUE); -#else - TConnection* c; - BOOL ok = m_mapConn.Lookup(id, c); - if (ok) - delete c; - m_mapConn.SetAt(id, pConn); -#endif } return id; } -BOOL TLanManager::RemoveConnection(DWORD id) +bool TLanManager::RemoveConnection(CONNID id) { - TConnection* pConn = GetConnection(id); - BOOL ok = FALSE; - if (pConn != NULL && OnRemoveConnection(id)) - { -#ifdef NO_MFC + TConnection* pConn = GetConnection(id); + bool ok = FALSE; + if (pConn != NULL && OnRemoveConnection(id)) + { TString16 key; key.format("%lu", id); m_mapConn.remove(key); -#else - delete pConn; - VERIFY(m_mapConn.RemoveKey(id)); -#endif ok = TRUE; } @@ -83,36 +65,17 @@ BOOL TLanManager::RemoveConnection(DWORD id) void TLanManager::RemoveAllConnections() { - TConnection* pConn; - -#ifdef NO_MFC m_mapConn.restart(); - for (pConn = (TConnection*)m_mapConn.get(); pConn; pConn = (TConnection*)m_mapConn.get()) + for (TConnection* pConn = (TConnection*)m_mapConn.get(); + pConn != NULL; pConn = (TConnection*)m_mapConn.get()) OnRemoveConnection(pConn->Id()); m_mapConn.destroy(); -#else - for (POSITION pos = m_mapConn.GetStartPosition(); pos != NULL;) - { - DWORD key; - m_mapConn.GetNextAssoc(pos, key, pConn); - { - OnRemoveConnection(pConn->Id()); - delete pConn; - } - } - m_mapConn.RemoveAll(); -#endif } -TConnection* TLanManager::GetConnection(DWORD id) const +TConnection* TLanManager::GetConnection(CONNID id) const { - TConnection* pConn = NULL; -#ifdef NO_MFC TString16 key; key.format("%lu", id); - pConn = (TConnection*)m_mapConn.objptr(key); -#else - m_mapConn.Lookup(id, pConn); -#endif + TConnection* pConn = (TConnection*)m_mapConn.objptr(key); return pConn; } @@ -121,20 +84,11 @@ int TLanManager::ForEachConnection(ConnectionFunction f, void* pJolly) int result = 0; TConnection* pConn; -#ifdef NO_MFC m_mapConn.restart(); for (pConn = (TConnection*)m_mapConn.get(); pConn != NULL; pConn = (TConnection*)m_mapConn.get()) result += f(*pConn, pJolly); -#else - DWORD key; - for (POSITION pos = m_mapConn.GetStartPosition(); pos != NULL; ) - { - m_mapConn.GetNextAssoc(pos, key, pConn); - result += f(*pConn, pJolly); - } -#endif return result; } @@ -143,96 +97,89 @@ int TLanManager::ForEachConnection(ConnectionFunction f, void* pJolly) // TLanServer /////////////////////////////////////////////////////////// -BYTE* TLanServer::GetBufferSetString(const char* str) +byte* TLanServer::GetBufferSetString(const char* str) { if (str == NULL) str = ""; const size_t dwSize = strlen(str)+1; - BYTE* buff = GetBuffer(dwSize); + byte* buff = GetBuffer(dwSize); memcpy(buff, str, dwSize); return buff; } -BYTE* TLanServer::GetBufferSetBool(BOOL n) +byte* TLanServer::GetBufferSetBool(bool n) { - const size_t dwSize = sizeof(DWORD); - BYTE* buff = GetBuffer(dwSize); - *(DWORD*)buff = n ? -1 : 0; + const size_t dwSize = sizeof(size_t); + byte* buff = GetBuffer(dwSize); + *(size_t*)buff = n ? -1 : 0; return buff; } -BYTE* TLanServer::GetBufferSetInteger(long n) +byte* TLanServer::GetBufferSetInteger(long n) { - const size_t dwSize = sizeof(DWORD); - BYTE* buff = GetBuffer(dwSize); - *(DWORD*)buff = n; + const size_t dwSize = sizeof(size_t); + byte* buff = GetBuffer(dwSize); + *(size_t*)buff = n; return buff; } - /////////////////////////////////////////////////////////// // TLanClient /////////////////////////////////////////////////////////// -DWORD TLanClient::QueryConnection(const char* service, - const char* server) +CONNID TLanClient::QueryConnection(const char* service, const char* server) { TConnection* pConn = OnQueryConnection(service, server); return AddConnection(pConn) ; } -BOOL TLanClient::Execute(DWORD id, const char* cmd) +bool TLanClient::Execute(CONNID id, const char* cmd) { - return FALSE; + TConnection* pConn = GetConnection(id); + return pConn ? pConn->Execute(cmd) : FALSE; } -BOOL TLanClient::Request(DWORD id, const char* cmd) +bool TLanClient::Request(CONNID id, const char* cmd) { - return FALSE; + TConnection* pConn = GetConnection(id); + return pConn ? pConn->Request(cmd) : FALSE; } -BOOL TLanClient::RequestString(DWORD id, const char* cmd, CString& res) +bool TLanClient::RequestString(CONNID id, const char* cmd, TString& res) { - BOOL valid = Request(id, cmd); + bool valid = Request(id, cmd); if (valid) { - DWORD dwSize; - BYTE* pData = GetBuffer(dwSize); -#ifdef NO_MFC + size_t dwSize; + byte* pData = GetBuffer(dwSize); char* ptr = res.get_buffer((int)dwSize); memcpy(ptr, pData, (size_t)dwSize); -#else - char* ptr = res.GetBuffer((int)dwSize); - memcpy(ptr, pData, dwSize); - res.ReleaseBuffer(); -#endif ReleaseBuffer(); } return valid; } -BOOL TLanClient::RequestInteger(DWORD id, const char* cmd, long& num) +bool TLanClient::RequestInteger(CONNID id, const char* cmd, long& num) { - BOOL valid = Request(id, cmd); + bool valid = Request(id, cmd); if (valid) { - DWORD dwSize; - BYTE* pData = GetBuffer(dwSize); + size_t dwSize; + byte* pData = GetBuffer(dwSize); num = *(long*)pData; ReleaseBuffer(); } return valid; } - -BOOL TLanClient::RequestBool(DWORD id, const char* cmd, BOOL& ok) +bool TLanClient::RequestBool(CONNID id, const char* cmd, bool& ok) { - BOOL valid = Request(id, cmd); + bool valid = Request(id, cmd); if (valid) { - DWORD dwSize; - BYTE* pData = GetBuffer(dwSize); - ok = *(DWORD*)pData != 0; + size_t dwSize; + byte* pData = GetBuffer(dwSize); + ok = *(size_t*)pData != 0; ReleaseBuffer(); } return valid; @@ -242,7 +189,7 @@ BOOL TLanClient::RequestBool(DWORD id, const char* cmd, BOOL& ok) // TConnection /////////////////////////////////////////////////////////// -TConnection::TConnection(TLanManager* pManager, DWORD id) +TConnection::TConnection(TLanManager* pManager, CONNID id) : m_pManager(pManager), m_dwId(id) { } @@ -253,25 +200,17 @@ TConnection::~TConnection() TLanServer& TConnection::Server() const { -#ifdef NO_MFC CHECK(Manager().IsServer(), "Can't cast client to server"); -#else - ASSERT(Manager().IsServer()); -#endif - return (TLanServer&)Manager(); + return (TLanServer&)Manager(); } -int TConnection::ParseCommand(const char* cmd, CStringArray& argv) +int TConnection::ParseCommand(const char* cmd, TString_array& argv) { -#ifdef NO_MFC argv.destroy(); -#else - argv.RemoveAll(); -#endif - BOOL is_quoted = FALSE; + bool is_quoted = FALSE; char end_quote = '\0'; - CString token; + TString token; const char* token_start = NULL; for (char* c = (char*)cmd; *c; c++) @@ -302,27 +241,19 @@ int TConnection::ParseCommand(const char* cmd, CStringArray& argv) *c = '\0'; token = token_start; *c = old; -#ifdef NO_MFC token.rtrim(); -#else - token.TrimRight(); -#endif } } -#ifdef NO_MFC argv.add(token); -#else - argv.Add(token); -#endif - + token_start = NULL; token = ""; is_quoted = FALSE; continue; } - if (*c == '"' || *c == '\'' || *c == '|' || BYTE(*c) >= 254) + if (*c == '"' || *c == '\'' || *c == '|' || byte(*c) >= 254) { end_quote = *c; token_start = c+1; @@ -334,22 +265,18 @@ int TConnection::ParseCommand(const char* cmd, CStringArray& argv) } } -#ifdef NO_MFC return argv.items(); -#else - return argv.GetSize(); -#endif } -BOOL TConnection::Execute(const char* cmd) +bool TConnection::Execute(const char* cmd) { - CStringArray argv; + TString_array argv; return ParseCommand(cmd, argv) > 0; } -BOOL TConnection::Request(const char* cmd) +bool TConnection::Request(const char* cmd) { - CStringArray argv; + TString_array argv; return ParseCommand(cmd, argv) > 0; } diff --git a/include/netutils.h b/include/netutils.h index 35b36d8e8..c4f351a7f 100755 --- a/include/netutils.h +++ b/include/netutils.h @@ -1,48 +1,37 @@ #ifndef __NETUTILS_H__ #define __NETUTILS_H__ -#ifdef NO_MFC -#define BOOL int -#define BYTE unsigned char -#define DWORD unsigned long -#define CObject TObject -#define CString TString -#define CStringArray TString_array #include "assoc.h" -#endif class TConnection; +typedef unsigned long CONNID; typedef int (*ConnectionFunction)(TConnection& conn, void* pJolly); -class TLanManager : public CObject +class TLanManager : public TObject { -#ifdef NO_MFC TAssoc_array m_mapConn; -#else - CMap m_mapConn; -#endif protected: - DWORD AddConnection(TConnection* pConn); + CONNID AddConnection(TConnection* pConn); - virtual TConnection* OnCreateConnection(DWORD id); - virtual BOOL OnRemoveConnection(DWORD id); + virtual TConnection* OnCreateConnection(CONNID id); + virtual bool OnRemoveConnection(CONNID id); public: - virtual BOOL IsServer() const { return FALSE; } - virtual BOOL IsClient() const { return FALSE; } - virtual BOOL IsOk() const { return FALSE; } + virtual bool IsServer() const { return FALSE; } + virtual bool IsClient() const { return FALSE; } + virtual bool IsOk() const { return FALSE; } - virtual BOOL Execute(DWORD id, const char* cmd); - virtual BOOL Request(DWORD id, const char* cmd); + virtual bool Execute(CONNID id, const char* cmd); + virtual bool Request(CONNID id, const char* cmd); int ForEachConnection(ConnectionFunction f, void* pJolly); - BOOL HasConnections() const; - TConnection* GetConnection(DWORD id) const; + bool HasConnections() const; + TConnection* GetConnection(CONNID id) const; - BOOL RemoveConnection(DWORD id); + bool RemoveConnection(CONNID id); void RemoveAllConnections(); TLanManager(); @@ -51,17 +40,17 @@ public: class TLanServer : public TLanManager { - CString m_strName; + TString m_strName; public: - const CString& Name() const { return m_strName; } + const TString& Name() const { return m_strName; } - virtual BOOL IsServer() const { return TRUE; } + virtual bool IsServer() const { return TRUE; } - virtual BYTE* GetBuffer(DWORD dwSize) = 0; - BYTE* GetBufferSetString(const char* str); - BYTE* GetBufferSetBool(BOOL ok); - BYTE* GetBufferSetInteger(long n); + virtual byte* GetBuffer(unsigned int dwSize) pure; + byte* GetBufferSetString(const char* str); + byte* GetBufferSetBool(bool ok); + byte* GetBufferSetInteger(long n); TLanServer(const char* name) : m_strName(name) { } virtual ~TLanServer() { } @@ -70,46 +59,46 @@ public: class TLanClient : public TLanManager { protected: - virtual TConnection* OnQueryConnection(const char* service, - const char* server) = 0; -public: - virtual BOOL IsClient() const { return TRUE; } - - DWORD QueryConnection(const char* service, - const char* server = NULL); + virtual TConnection* OnQueryConnection(const char* service, const char* server) pure; - virtual BOOL Execute(DWORD id, const char* cmd); - virtual BOOL Request(DWORD id, const char* cmd); - virtual BYTE* GetBuffer(DWORD& dwSize) = 0; +public: + virtual bool IsClient() const { return TRUE; } + + CONNID QueryConnection(const char* service, const char* server = NULL); + + virtual bool Execute(CONNID id, const char* cmd); + virtual bool Request(CONNID id, const char* cmd); + virtual byte* GetBuffer(unsigned int& dwSize) = 0; virtual void ReleaseBuffer() = 0; - BOOL RequestString(DWORD id, const char* cmd, CString& res); - BOOL RequestInteger(DWORD id, const char* cmd, long& num); - BOOL RequestBool(DWORD id, const char* cmd, BOOL& ok); + bool RequestString(CONNID id, const char* cmd, TString& res); + bool RequestInteger(CONNID id, const char* cmd, long& num); + bool RequestBool(CONNID id, const char* cmd, bool& ok); }; -class TConnection : public CObject +class TConnection : public TObject { TLanManager* m_pManager; - DWORD m_dwId; + CONNID m_dwId; protected: - int ParseCommand(const char* cmd, CStringArray& argv); + int ParseCommand(const char* cmd, TString_array& argv); + void SetId(CONNID id) { m_dwId = id; } // Internal use only public: - DWORD Id() const { return m_dwId; } + CONNID Id() const { return m_dwId; } TLanManager& Manager() const { return *m_pManager; } TLanServer& Server() const; - virtual BOOL Execute(const char* cmd); - virtual BOOL Request(const char* cmd); + virtual bool Execute(const char* cmd); + virtual bool Request(const char* cmd); - BOOL ReturnBool(int b) const { return Server().GetBufferSetBool(b) != NULL; } - BOOL ReturnInteger(long n) const { return Server().GetBufferSetInteger(n) != NULL; } - BOOL ReturnString(const CString& s) const { return Server().GetBufferSetString(s) != NULL; } + bool ReturnBool(bool b) const { return Server().GetBufferSetBool(b) != NULL; } + bool ReturnInteger(long n) const { return Server().GetBufferSetInteger(n) != NULL; } + bool ReturnString(const TString& s) const { return Server().GetBufferSetString(s) != NULL; } - TConnection(TLanManager* lm, DWORD id); + TConnection(TLanManager* lm, CONNID id); virtual ~TConnection(); }; diff --git a/include/printer.cpp b/include/printer.cpp index 554ffc2f3..494c6bba9 100755 --- a/include/printer.cpp +++ b/include/printer.cpp @@ -881,14 +881,9 @@ void TPrinter::init_formlen( _formwidth=(mincol+maxcol)/2; } - if (isfax()) - _horz_offset = 56; - else - { - _horz_offset = (_formwidth > 80) ? (int)(pw - w)/2 : 0; - if (_horz_offset < 0) - _horz_offset = 0; - } + _horz_offset = (_formwidth > 80) ? (int)(pw - w)/2 : 0; + if (_horz_offset < 0) + _horz_offset = 0; } else { @@ -1018,19 +1013,6 @@ TPrinter::TPrinter() _finker = _isgraphics && _fink_mode ? NULL : new TPrint_intersector(_fink, _formlen); } -bool TPrinter::isfax() const -{ - bool fax = FALSE; -#ifndef XVAGA - if (_printertype == winprinter) - { - const char* name = (const char*)((TPrinter*)this)->get_printrcd() + 4; - fax = strncmp(name, "FaxMan", 6) == 0; - } -#endif - return fax; -} - // @doc EXTERNAL // @mfunc Legge la configurazione della stampante @@ -1532,9 +1514,6 @@ bool TPrinter::open() // prepare text object for new text _txt.destroy(); _txt.interactive(FALSE); - - if (isfax()) - start_fax_server(); } } @@ -2007,39 +1986,3 @@ int TPrinter::calc_num_cols() const return numcols; } -/////////////////////////////////////////////////////////// -// Gestione fax -/////////////////////////////////////////////////////////// - -bool TPrinter::start_fax_server() const -{ - TDDE dde; - return dde.execute("EASYFAX", "FAX", "", "bafax"); -} - -void TPrinter::close_fax_server() const -{ - TDDE dde; - const bool running = dde.initiate("EASYFAX", "FAX"); - if (running) - dde.execute("[FileClose]"); -} - -bool TPrinter::send_fax(const char* tipo, const char* codice) -{ - bool ok = isopen() && isfax(); - if (ok) - { - if (tipo && codice) - { - TString cmd; - cmd << "[SetRecipient(" << tipo << ',' << codice << ")]"; - - TDDE dde; - dde.execute("EASYFAX", "FAX", cmd, "bafax"); - } - close(); // termina la stampa corrente e la spedisce - open(); // riapre la stampante - } - return ok; -} diff --git a/include/printer.h b/include/printer.h index 53691651b..b91c1e349 100755 --- a/include/printer.h +++ b/include/printer.h @@ -324,9 +324,6 @@ protected: // @cmember Salva i parametri di configurazione correnti void save_configuration(); - // @cmember Chiude il fax server - void close_fax_server() const; - // @access Public Member public: @@ -598,12 +595,6 @@ public: void set_offset(int a, int b) { _l_offset=a; _c_offset=b;} // @cmember ritorna la riga di background se si stampa in modo testo const char* background_chars(int l) const; - // @cmember Ritorna TRUE se la stampante e' un fax - bool isfax() const; - // @cmember Lancia il fax server - bool start_fax_server() const; - // @cmember Spedisce la stampa attuale via fax - bool send_fax(const char* tipo, const char* codice); // @cmember Ritorna la dimensione dei caratteri da stampare int get_char_size() const diff --git a/include/progind.cpp b/include/progind.cpp index c0524ce6b..cf81a6f90 100755 --- a/include/progind.cpp +++ b/include/progind.cpp @@ -30,7 +30,8 @@ TIndwin::TIndwin(long max, const char* txt, bool cancel, bool bar, int div) : _text(NULL), _cancel(NULL), _bar(0), _status(0L), _max(max), _flags(0x0) { - if (_max <= 0) _max = 1; + if (_max <= 0) + _max = 1; TToken_string testo(txt, '\n'); word maxlen = div; diff --git a/include/relapp.cpp b/include/relapp.cpp index b55f4da44..cff853c43 100755 --- a/include/relapp.cpp +++ b/include/relapp.cpp @@ -1654,6 +1654,7 @@ bool TRelation_application::load_transaction() error_box("Ditta inesistente: %ld", firm); + } if (_curr_transaction == TRANSACTION_RUN) @@ -1889,4 +1890,3 @@ bool TRelation_application::mask2mail(const TMask& m) } return ok; } - diff --git a/include/sheet.cpp b/include/sheet.cpp index d37bc47ca..58546ca30 100755 --- a/include/sheet.cpp +++ b/include/sheet.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -985,18 +986,18 @@ TSheet::TSheet(short x, short y, short dx, short dy, fields_array().add(qf); _sheet = qf->sheet(); - if (!(buttons & 0x10)) add_button(DLG_SELECT, "~Selezione", K_ENTER); + if (!(buttons & 0x10)) add_button(DLG_SELECT, TR("~Selezione"), K_ENTER); if (check_enabled()) { - add_button(DLG_USER, "~Tutti", 0); + add_button(DLG_USER, TR("~Tutti"), 0); set_handler(DLG_USER, tutti_handler); } - if (buttons & 0x01) add_button(DLG_LINK, "~Gestione", K_CTRL+'G'); - if (buttons & 0x02) add_button(DLG_NEWREC, "~Nuovo", K_INS, BMP_NEWREC, BMP_NEWRECDN); - if (buttons & 0x04) add_button(DLG_DELREC, "~Elimina", K_DEL, BMP_DELREC, BMP_DELRECDN); - if (buttons & 0x08) add_button(DLG_QUIT, "Fine", K_ESC); - else add_button(DLG_CANCEL, "Annulla", K_ESC); + if (buttons & 0x01) add_button(DLG_LINK, TR("~Gestione"), K_CTRL+'G'); + if (buttons & 0x02) add_button(DLG_NEWREC, TR("~Nuovo"), K_INS, BMP_NEWREC, BMP_NEWRECDN); + if (buttons & 0x04) add_button(DLG_DELREC, "", K_DEL); + if (buttons & 0x08) add_button(DLG_QUIT, "", K_ESC); + else add_button(DLG_CANCEL, "", K_ESC); } TSheet::~TSheet() @@ -1466,6 +1467,7 @@ void TBrowse_sheet::handler( MENU_ITEM* menu = xvt_res_get_menu(BROWSE_BAR); if (menu) { + dictionary_translate_menu(menu); const PNT& p = ep->v.mouse.where; RCT cr; xvt_vobj_get_client_rect(win, &cr); XVT_POPUP_ALIGNMENT pa = XVT_POPUP_CENTER; diff --git a/include/strings.cpp b/include/strings.cpp index b9bf7e5ef..b7daad043 100755 --- a/include/strings.cpp +++ b/include/strings.cpp @@ -630,6 +630,11 @@ int TString::compare( return res; } +bool TString::starts_with(const char* s, bool ignorecase) const +{ + return compare(s, strlen(s), ignorecase) == 0; +} + // Certified 100% // @doc EXTERNAL diff --git a/include/strings.h b/include/strings.h index 4ad30266f..b0383fa55 100755 --- a/include/strings.h +++ b/include/strings.h @@ -258,6 +258,8 @@ public: bool match(const char* pat) const; // @cmember Compara due stringhe (o i primi max caratteri) int compare(const char* s, int max = -1, bool ignorecase = FALSE) const; + // @cmember Controlla se la strinvga comincia per s + bool starts_with(const char* s, bool ignorecase = FALSE) const; }; // @doc EXTERNAL diff --git a/include/utility.cpp b/include/utility.cpp index e47a4e1b4..54a73dde7 100755 --- a/include/utility.cpp +++ b/include/utility.cpp @@ -334,18 +334,14 @@ const char* itor( // @func Permette di codificare i caratteri di escape // // @rdesc Ritorna il carattere codificato -const char *esc( - const char* s) // @parm Carattere da codificare - - // @comm Viene utilizzata soprattuto in UNIX. +const char* esc( + const char* s) // @parm Stringa da codificare { - const char *s1 = s; - char *s2 = __tmp_string; - int base; - - if (s1) - while (*s1) - { + const char *s1 = s == NULL ? "" : s; + char* encoded = get_tmp_string().get_buffer(strlen(s)); + char* s2 = encoded; + while (*s1) + { if (*s1 == '\\') { s1++; @@ -359,48 +355,84 @@ const char *esc( case 't' : *s2++ = '\t'; break; default : { - if (isdigit(*s1)) - { - if (*s1 == '0') - { - s1++; - if (tolower(*s1) == 'x') - { - s1++; - base = 16; - } - else base = 8; - } - else base = 10; - *s2 = 0; - char c = tolower(*s1); - while (isdigit(c) || (base == 16 && c >= 'a' && c <= 'f')) - { - *s2 *= base; - if (isdigit(*s1)) *s2 += (*s1 - 48); - else *s2 += (*s1 - 'a' + 10) & 0x0F; - s1++; - c = tolower(*s1); - } - s2++; s1--; - } - else *s2++ = *s1; - } - } - } - else - if (*s1 == '^') - { - s1++; - *s2++ = (tolower(*s1) - 'a' + 1); + if (isdigit(*s1)) + { + int base = 10; + if (*s1 == '0') + { + s1++; + if (tolower(*s1) == 'x') + { + s1++; + base = 16; + } + else + base = 8; + } + *s2 = 0; + char c = tolower(*s1); + while (isdigit(c) || (base == 16 && c >= 'a' && c <= 'f')) + { + *s2 *= base; + if (isdigit(*s1)) *s2 += (*s1 - 48); + else *s2 += (*s1 - 'a' + 10) & 0x0F; + s1++; + c = tolower(*s1); + } + s2++; s1--; + } + else *s2++ = *s1; } - else *s2++ = *s1 ; - s1++; + } } + else + if (*s1 == '^') + { + s1++; + *s2++ = (tolower(*s1) - 'a' + 1); + } + else *s2++ = *s1 ; + s1++; + } *s2 = '\0'; - return(__tmp_string); + return encoded; } +const char* unesc( + const char* s) // @parm Stringa da decodificare +{ + char *decoded = get_tmp_string().get_buffer(strlen(s)*4); + char* s2 = decoded; + for (const char *s1 = s; *s1; s1++) + { + const char& c = *s1; + if (c >= '\0' && c < ' ') + { + switch(c) + { + case '\n': + *s2++ = '\\'; *s2++ = 'n'; + break; + case '\r': + *s2++ = '\\'; *s2++ = 'r'; + break; + case '\t': + *s2++ = '\\'; *s2++ = 't'; + break; + default: + *s2++ = '\\'; *s2++ = '0'; *s2++ = 'x'; + sprintf(s2, "%02x", int(c)); s2 += 2; + break; + } + } + else + *s2++ = c; + } + *s2 = '\0'; + return decoded; +} + + HIDDEN const char * const encryption_key = "QSECOFR-"; // @doc EXTERNAL diff --git a/include/utility.h b/include/utility.h index d95be47a8..315739e51 100755 --- a/include/utility.h +++ b/include/utility.h @@ -35,7 +35,8 @@ inline bool is_not_slash( char s) // @parm Carattere da confrontare { return s != '\\' && s != '/'; } -const char* esc(const char*); +const char* esc(const char* str); // Trasforma le sequenze "\n" nel carattere '\n' +const char* unesc(const char* str); // Trasforma i caratteri '\n' nella sequenza "\n" #define ODD(x) (x & 1) #define EVEN(x) !(x & 1) diff --git a/sc/sc2100.cpp b/sc/sc2100.cpp index c6d28b4fe..5df99f742 100755 --- a/sc/sc2100.cpp +++ b/sc/sc2100.cpp @@ -1749,12 +1749,6 @@ int TStampaEC_application::print_ec(TEC_Game_list* games) { f.ultima_pagina(); printer().formfeed(); - if (printer().isfax()) - { - const char* tipo = clf.get_char(CLI_TIPOCF) == 'C' ? "Clienti" : "Fornitori"; - const char* codice = clf.get(CLI_CODCF); - printer().send_fax(tipo, codice); - } } else update_numec(clf, -1); diff --git a/sc/sc2400.cpp b/sc/sc2400.cpp index cb54d0074..d29d573b3 100755 --- a/sc/sc2400.cpp +++ b/sc/sc2400.cpp @@ -186,13 +186,7 @@ int TStampaSol_application::print_sol() if (one_printed) { f.ultima_pagina(); - printer().formfeed(); - if (printer().isfax()) - { - const char* tipo = clf.get_char(CLI_TIPOCF) ? "Clienti" : "Fornitori"; - const char* codice = clf.get(CLI_CODCF); - printer().send_fax(tipo, codice); - } + printer().formfeed(); } return one_printed ? 1 : 0; diff --git a/server/diction.cpp b/server/diction.cpp index 7004cb8dc..0d926dd85 100755 --- a/server/diction.cpp +++ b/server/diction.cpp @@ -1,12 +1,19 @@ -#include "wx/wx.h" -#include "wx/wfstream.h" -#include "wx/protocol/http.h" +#include +#include +#include + +#include +#include #include #include "Soap.h" #include "Diction.h" +////////////////////////////////////////////////////////// +// TDictionaryEntry +/////////////////////////////////////////////////////////// + class TDictionaryEntry : public wxObject { public: @@ -14,6 +21,21 @@ public: TDictionaryEntry(const wxChar* str) : m_str(str) { } }; +////////////////////////////////////////////////////////// +// Sorted array of TDictionaryEntry +/////////////////////////////////////////////////////////// + +static int CompareNodes(wxNode** n1, wxNode** n2) +{ + return strcmp((*n1)->GetKeyString(), (*n2)->GetKeyString()); +} + +WX_DEFINE_ARRAY(wxNode*, TArrayOfNodes); + +////////////////////////////////////////////////////////// +// TDictionary +/////////////////////////////////////////////////////////// + class TDictionary : public wxHashTable { bool m_bDirty; @@ -21,18 +43,27 @@ class TDictionary : public wxHashTable protected: wxString Accentuate(const wxString& str) const; const TDictionaryEntry* AddEntry(const wxString& ita, const wxChar* eng); + wxString GetFileName() const; static bool FillCallback(TXmlItem& item, long jolly); bool Load(); public: - wxString Translate(const wxString& ita); + wxString Translate(const wxString& ita, const wxString& lan); TDictionary(); ~TDictionary(); }; static TDictionary DevotoOli; +wxString TDictionary::GetFileName() const +{ + wxIniConfig ini("", "", "./server.ini"); + ini.SetPath("/Dictionary"); + wxString fname = ini.Read("FileName", "campo.dic"); + return fname; +} + wxString TDictionary::Accentuate(const wxString& str) const { const int pos = str.Find('\''); @@ -114,7 +145,7 @@ bool TDictionary::FillCallback(TXmlItem& item, long jolly) bool TDictionary::Load() { - wxFileInputStream inf("Campo.dic"); + wxFileInputStream inf(GetFileName()); if (inf.Ok()) { TXmlItem item; @@ -126,7 +157,7 @@ bool TDictionary::Load() return GetCount() > 0; } -wxString TDictionary::Translate(const wxString& ita) +wxString TDictionary::Translate(const wxString& ita, const wxString& lan) { if (GetCount() == 0) Load(); @@ -153,11 +184,18 @@ TDictionary::~TDictionary() if (m_bDirty) { - wxFileOutputStream outf("Campo.dic"); - outf << "\n"; + // Fill an array of nodes and sort them out + TArrayOfNodes arr; BeginFind(); for (wxNode* pNode = Next(); pNode != NULL; pNode = Next()) + arr.Add(pNode); + arr.Sort(CompareNodes); + + wxFileOutputStream outf(GetFileName()); + outf << "\n"; + for (size_t i = 0; i < arr.GetCount(); i++) { + const wxNode* pNode = arr[i]; outf << " \n"; outf << " " << pNode->GetKeyString() << "\n"; outf << " " << ((TDictionaryEntry*)pNode->GetData())->m_str << "\n"; @@ -170,15 +208,14 @@ TDictionary::~TDictionary() bool DoTranslate(const TXmlItem& xmlMethod, TXmlItem& xmlAnswer) { const TXmlItem* xmlSentence = xmlMethod.FindFirst("sentence"); - if (xmlSentence != NULL) + // const TXmlItem* xmlLanguage = xmlMethod.FindFirst("language"); + if (xmlSentence != NULL /* && xmlLanguage != NULL */) { - const TXmlItem* xmlItalian = xmlSentence->GetChild(0); - if (xmlItalian != NULL) - { - wxString result = DevotoOli.Translate(xmlItalian->GetText()); - xmlAnswer.AddSoapString("sentence", result); - return true; - } + const wxString ita = xmlSentence->GetEnclosedText(); + const wxString lan; // = xmlLanguage->GetEnclosedText(); + wxString result = DevotoOli.Translate(ita, lan); + xmlAnswer.AddSoapString("sentence", result); + return true; } return false; } diff --git a/server/server.cpp b/server/server.cpp index 66ed4a0d4..33ee2971f 100755 --- a/server/server.cpp +++ b/server/server.cpp @@ -16,9 +16,12 @@ // headers // -------------------------------------------------------------------------- -// For compilers that support precompilation, includes "wx/wx.h". -#include "wx/wx.h" -#include "wx/socket.h" +#include +#include + +#include +#include + #include "soap.h" @@ -36,16 +39,22 @@ public: // Define a new frame type: this is going to be our main frame class SoapFrame : public wxFrame { + clock_t m_last_text; + public: SoapFrame(); ~SoapFrame(); // event handlers (these functions should _not_ be virtual) + void OnQuit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); void OnServerEvent(wxSocketEvent& event); void OnSocketEvent(wxSocketEvent& event); + // Roba mia + void AppendText(const wxChar* str); + int GetDefaultPort() const; void ProcessSoapCommand(wxSocketBase *sock); // convenience functions @@ -118,51 +127,77 @@ bool SoapServerApp::OnInit() // main frame // -------------------------------------------------------------------------- +int SoapFrame::GetDefaultPort() const +{ + int nPort = 3883; + wxIniConfig ini("", "", "./campo.ini"); + ini.SetPath("/Server"); + const wxString str = ini.Read("Dictionary", ""); + const int colon = str.Find(':'); + if (colon > 0) + nPort = atoi(str.Mid(colon+1)); + return nPort; +} + +void SoapFrame::AppendText(const wxChar* str) +{ + const clock_t now = clock(); + if (now - m_last_text > 60000) + m_text->SetValue(str); + else + m_text->AppendText(str); + m_last_text = now; +} + // frame constructor -SoapFrame::SoapFrame() : wxFrame((wxFrame *)NULL, -1, - _("Soap Server"), - wxDefaultPosition, wxSize(300, 200)) +SoapFrame::SoapFrame() : wxFrame((wxFrame *)NULL, -1, "Soap Server", + wxDefaultPosition, wxSize(300, 300)) { // Give the frame an icon SetIcon(wxICON(mondrian)); // Make menus m_menuFile = new wxMenu(); - m_menuFile->Append(SERVER_ABOUT, _("&About...\tCtrl-A"), _("Show about dialog")); + m_menuFile->Append(SERVER_ABOUT, "&About...\tCtrl-A", "Show about dialog"); m_menuFile->AppendSeparator(); - m_menuFile->Append(SERVER_QUIT, _("E&xit\tAlt-X"), _("Quit server")); + m_menuFile->Append(SERVER_QUIT, "E&xit\tAlt-X", "Quit server"); // Append menus to the menubar m_menuBar = new wxMenuBar(); - m_menuBar->Append(m_menuFile, _("&File")); + m_menuBar->Append(m_menuFile, "&File"); SetMenuBar(m_menuBar); + // Make a textctrl for logging + m_text = new wxTextCtrl(this, -1, + "Welcome to SOAP Server\n", + wxDefaultPosition, wxDefaultSize, + wxTE_MULTILINE | wxTE_READONLY); + // Status bar CreateStatusBar(2); - // Make a textctrl for logging - m_text = new wxTextCtrl(this, -1, - _("Welcome to SOAP Server\n"), - wxDefaultPosition, wxDefaultSize, - wxTE_MULTILINE | wxTE_READONLY); - // Create the address - defaults to localhost:0 initially wxIPV4address addr; - addr.Service(3000); + addr.Service(GetDefaultPort()); // Create the socket m_server = new wxSocketServer(addr); + m_last_text = clock(); // We use Ok() here to see if the server is really listening if (! m_server->Ok()) { - m_text->AppendText(_("Could not listen at the specified port !\n\n")); + wxString str; + str << "Could not listen to port " << addr.Service() << "\n\n"; + AppendText(str); return; } else { - m_text->AppendText(_("Server listening.\n\n")); + wxString str; + str << "Server listening on port " << addr.Service() << "\n\n"; + AppendText(str); } // Setup the event handler and subscribe to connection events @@ -191,45 +226,41 @@ void SoapFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) void SoapFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) { - wxMessageBox(_("Soap Server\n(c) 2002 by Aga\n"), - _("About Soap Server"), + wxMessageBox("Soap Server\n(c) 2002 by Aga\n", + "About Soap Server", wxOK | wxICON_INFORMATION, this); } void SoapFrame::ProcessSoapCommand(wxSocketBase *sock) { - m_text->SetValue(_("Processing begins\n\n")); - sock->SetFlags(wxSOCKET_NOWAIT); // Read the data - char buf[4096]; memset(buf, 0, sizeof(buf)); + wxChar buf[4096]; memset(buf, 0, sizeof(buf)); unsigned int len = sock->Read(buf, sizeof(buf)).LastCount(); - m_text->AppendText(_(buf)); + AppendText(buf); wxString strAnswer = SoapProcessMessage(buf, len); - m_text->AppendText(_("\nSending response\n\n")); - m_text->AppendText(_(strAnswer)); + AppendText("\n\n"); + AppendText(strAnswer); // Write it back sock->Write(strAnswer, strAnswer.Length()); - - m_text->AppendText(_("\n\nProcessing ends\n\n")); } void SoapFrame::OnServerEvent(wxSocketEvent& event) { - wxString s = _("OnServerEvent: "); + wxString s = "OnServerEvent: "; wxSocketBase *sock; switch(event.GetSocketEvent()) { - case wxSOCKET_CONNECTION : s.Append(_("wxSOCKET_CONNECTION\n")); break; - default : s.Append(_("Unexpected event !\n")); break; + case wxSOCKET_CONNECTION : s.Append("wxSOCKET_CONNECTION\n"); break; + default : s.Append("Unexpected event !\n"); break; } - m_text->AppendText(s); + AppendText(s); // Accept new connection if there is one in the pending // connections queue, else exit. We use Accept(FALSE) for @@ -240,11 +271,11 @@ void SoapFrame::OnServerEvent(wxSocketEvent& event) if (sock) { - m_text->AppendText(_("New client connection accepted\n\n")); + AppendText("New client connection accepted\n\n"); } else { - m_text->AppendText(_("Error: couldn't accept a new connection\n\n")); + AppendText("Error: couldn't accept a new connection\n\n"); sock->Destroy(); return; } @@ -259,18 +290,18 @@ void SoapFrame::OnServerEvent(wxSocketEvent& event) void SoapFrame::OnSocketEvent(wxSocketEvent& event) { - wxString s = _("OnSocketEvent: "); + wxString s = "OnSocketEvent: "; wxSocketBase *sock = event.GetSocket(); // First, print a message switch(event.GetSocketEvent()) { - case wxSOCKET_INPUT : s.Append(_("wxSOCKET_INPUT\n")); break; - case wxSOCKET_LOST : s.Append(_("wxSOCKET_LOST\n")); break; - default : s.Append(_("Unexpected event !\n")); break; + case wxSOCKET_INPUT : s.Append("wxSOCKET_INPUT\n"); break; + case wxSOCKET_LOST : s.Append("wxSOCKET_LOST\n"); break; + default : s.Append("Unexpected event !\n"); break; } - m_text->AppendText(s); + AppendText(s); // Now we process the event switch(event.GetSocketEvent()) @@ -300,7 +331,7 @@ void SoapFrame::OnSocketEvent(wxSocketEvent& event) // middle of a test or something. Destroy() takes care of all // this for us. - m_text->AppendText(_("Deleting socket.\n\n")); + AppendText("Deleting socket.\n\n"); sock->Destroy(); break; } @@ -315,6 +346,6 @@ void SoapFrame::OnSocketEvent(wxSocketEvent& event) void SoapFrame::UpdateStatusBar() { wxString s; - s.Printf(_("%d clients connected"), m_numClients); + s.Printf("%d clients connected", m_numClients); SetStatusText(s, 1); } diff --git a/server/soap.cpp b/server/soap.cpp index 9a814a45a..f6bb97128 100755 --- a/server/soap.cpp +++ b/server/soap.cpp @@ -236,18 +236,20 @@ TXmlItem& TXmlItem::AddChild(const wxChar* strTagName) return i; } -TXmlItem& TXmlItem::AddSoapString(const wxChar* name, const wxChar* value) +TXmlItem& TXmlItem::AddSoapString(const wxChar* name, const wxChar* value, bool typized) { TXmlItem& xmlVar = AddChild(name); - xmlVar.SetAttr("xsi:type", "xsd:string"); + if (typized) + xmlVar.SetAttr("xsi:type", "xsd:string"); xmlVar.AddChild("").SetText(value); return xmlVar; } -TXmlItem& TXmlItem::AddSoapInt(const wxChar* name, int value) +TXmlItem& TXmlItem::AddSoapInt(const wxChar* name, int value, bool typized) { TXmlItem& xmlVar = AddChild(name); - xmlVar.SetAttr("xsi:type", "xsd:int"); + if (typized) + xmlVar.SetAttr("xsi:type", "xsd:int"); wxString str; str += value; xmlVar.AddChild("").SetText(str); return xmlVar; @@ -302,6 +304,26 @@ TXmlItem* TXmlItem::ForEach(XmlItemCallback cb, long jolly) return NULL; } +static bool GetEnclosedTextCallback(TXmlItem& item, long jolly) +{ + wxString* strText = (wxString*)jolly; + const wxString& str = item.GetText(); + if (!str.IsEmpty()) + { + if (!strText->IsEmpty()) + *strText << " "; + *strText << str; + } + return false; +} + +wxString TXmlItem::GetEnclosedText() const +{ + wxString text; + ((TXmlItem*)this)->ForEach(GetEnclosedTextCallback, (long)&text); + return text; +} + void TXmlItem::Write(wxOutputStream& outf, int tab) const { if (!GetTag().IsEmpty()) @@ -347,7 +369,6 @@ wxString TXmlItem::AsString() const char* buf = str.GetWriteBuf(nSize); memset(buf, 0, nSize); wxMemoryOutputStream outf(buf, nSize); -// outf << ""; // Non dovrebbe servire a nulla Write(outf); str.UngetWriteBuf(); if (buf[nSize-1] == '\0') @@ -357,7 +378,7 @@ wxString TXmlItem::AsString() const return str; } -bool FindFirstCallback(TXmlItem& item, long jolly) +static bool FindFirstCallback(TXmlItem& item, long jolly) { const wxChar* strTag = (const wxChar*)jolly; return item.GetTag() == strTag; @@ -417,8 +438,7 @@ wxString SoapProcessMessage(const char* buf, unsigned int len) break; if (pxmlMethod->GetTag().StartsWith("m:")) { - wxString str; - str = pxmlMethod->GetTag(); str += "Result"; + wxString str = pxmlMethod->GetTag(); str += "Result"; TXmlItem& xmlAnswer = xmlBody.AddChild(str); SoapProcessMethod(*pxmlMethod, xmlAnswer); } @@ -433,10 +453,8 @@ wxString SoapProcessMessage(const char* buf, unsigned int len) strAnswer += "Connection: close\n"; strAnswer += "Content-Length: "; strAnswer += strLength; strAnswer += "\nContent-Type: text/xml; charset=utf-8\n"; - strAnswer += "Date: "; - strAnswer += wxDateTime::Now().Format("%#c"); - strAnswer += "\nServer: "; - strAnswer += wxGetHostName(); + strAnswer += "Date: "; strAnswer += wxDateTime::Now().Format("%#c"); + strAnswer += "\nServer: "; strAnswer += wxGetHostName(); strAnswer += "\r\n\r\n"; strAnswer += strResult; diff --git a/server/soap.h b/server/soap.h index 15f1e523c..caf03fa2f 100755 --- a/server/soap.h +++ b/server/soap.h @@ -28,13 +28,14 @@ public: const wxString& GetText() const { return m_strText; } void SetText(const wxChar* str) { m_strText = str; } + wxString GetEnclosedText() const; void SetAttr(const wxChar* strAttr, const wxChar* strVal); wxString GetAttr(const wxChar* strAttr) const; TXmlItem& AddChild(const wxChar* strTag); - TXmlItem& AddSoapString(const wxChar* name, const wxChar* value); - TXmlItem& AddSoapInt(const wxChar* name, int value); + TXmlItem& AddSoapString(const wxChar* name, const wxChar* value, bool typized = false); + TXmlItem& AddSoapInt(const wxChar* name, int value, bool typized = false); int GetChildren() const; TXmlItem* GetChild(size_t n) const; diff --git a/server/soapserv.opt b/server/soapserv.opt deleted file mode 100755 index b468f115b2407e541139b87c52ef4db4d7e76155..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50688 zcmeHQO>o@Cm2Qe6Ii!9f+p;Xnaspe4EL$Qyq$o;Mvfd2mCmDx-;h*H}?9w368p6T= zQvgOJ&Xn{~3;RF2-;R%$O>m4gqdl#9&Ia1+c?DGLnMKBP*x4strs{9^Z|6u2Y?hX2n+#70J_e{K#v0-1JDG- z1Hgm8L%>PkVSxA^0X+>o3Y-BR1I_}E10M%I0T5pi^hw|x@JZlPz@qHFF155!~AP3}u0`NKD z^8oP?zJTp%Ug=n8NHxCy)fdxc^5E^RkfO=vJCF(q!LW@ylKeWqfZ~W@dzx?{bk9w%SiuDF^_rz`Ciz;Mc2#Jy` zq8vIP6;lG$#G$Z_Qro3+B(T<_!g5k$MVLbFuGm2S5?gx@C&Zy1>N`C^r}-bHY~uX$ z!W0(jN>X??;W+ZA{z`dM=p>C(#1!Y>gX>3SPx-E1^`&>`$?Wyga_Mu+FO(M2WB5y# z7UwearA0(9B6`I1tHl46)z?HXHeLt)7Vre6iSP!tzXwqGchCZOzJcvGv3=aHcRiHJnao(%H#$VKSGWctr@he^8+EN7A}??|-rJTYzLj z_%~cks^Fmb4)*Sc?6cX67ey7N)o^eV^lyQG0OxC<-IvB6k;?!Tw1Gx@ZKScT`|Dkk z21$zWgIF4=1D3`+kVJocdr`D54MVjJ%Q5VlDbZ5!Z>;Oy$a=kPGxCf%|lTokdL<#NSEcI^7>}n zK>7|?9;!U8=#i09&N2eab-L6$rjQHaOfV8pI_nl+`O$cf_=e z^Dkc>zcw*3c`Y|QKAE4wvo%{7o+^w_(6cp@PLF3t$MR#lJX=)@`DNTa4mHW+{eHHl za81qv6cmm2@UAmbqLEP7Zk03=BK$G#9X$tJ_wS-C1PY2qdqNz$e{1O0uu45Te->9? z9B}o&kGlR4pjSvmRrQaKlxT!2y**!iR4#mhZa1j>T3mbSn9?z}3YIPVQzsV}rxu1h z-L%{_cXMRD2k+F`oUFEBy5%}SEwJn)rUBpjGK!v*jBi_}^d_$)F%9U3Armtiq|%@o zNvWian&-QTrRiS}f@)G4Lw=wKHGeHJmDHLQRM1@$s@-3aPA!RH@Q!W=ax+NexrJ+H z+T|pkA=5ByOFD@OrGj+~#mvNXd>I6mQ}z>?I%zn&U(8gQn%_%FIi(OUjl@a~Ar-5l zmt|5qgLFODDv8%>u&Udrd}2BSWxbZ1Q>x;cH9I+xs_rB=^8s9iT4G^4y53pM4680&OsOeuDUK19&4yOi%Gq_DT5? z9|anTb;3uylqT!{T53aC|3^c4r5jc+F|7ZCP+BR=S^r1(6CqgthkGjP|5*PQDMHl! za|&I9!1_NLbbN>I6!q|a>pofkSJ(Uf5Ep^;fGV*54+_cMRYt7;Yp14V{U7W9b}0Bm zttadM)J>KtOMoTt!I3};D!7^H=coHcuWOr+!y2GqyRHX&znW)Azf`Dsjuq6xZ=z(A zM)tgY_=>Y?K2f(ESh+k_QnptHJ`Q@W?bA2Z-+-6wd;970hTME~N8(HPs78!mg|#sm z91j^)*WN0-&h_hOb}%pF18A5m7{ieAT(?5sGIo|a;~9o-x&|d)XW!V=eONdKj~SuC zSVN&2Vm?{*Ued)cY&z|DyN#xzBb?yk&b`@eQqf$jg)sFo>9fFrmp$iEk+ zpDE?sJ(#tjB3-fMM&D=ha|_Qk{+>`wnn6s`k0RR~KDr?NP=nkiG4eE*p610|DzVmw zQ{*snKcOdYxZZ8QsvA;!iV8(1J#}3h)vBILo(dQIr;pbQOMV-1>QRAPMs<*6qb!;V z#Qxv=?G4ZV-;FaRtf2prkuwEFqdm;4g6}3fW=dfH@206Ey6o_)gwOh4*8gG*!usE6 zM5ex^U#qj?`wB0C=`+1l`*R{WYuWZ2!4k!9o3+0_*=+|A&^r`oHbnV+vh^!2aLt z|9!yj?>ztGF0QD%tBlzHyK&IoIF~2;eiOMoTNJqalN z-@ttEHFYC=mAKbK>51q=C^=WIZ`7otTfpRG;rQV-nbG?u7`p@Cg z@c6QO{^hYu{=GU9DARdf|CzL(tp8*EAFuzMuvRy(|J+`4$M%2qhcs`n1Xu!Hkw6Y} z4z7usDC18GZ_jBy_%7x@e4cWN=U>cW-bVxZSCG3S0?dQBw{Q~kPo{7R+4+&xK__P~ z5!2aDI6LEstR14?&d%sA*L%r-C|rV@%JUe|Cwe|RNPfsz!e=;3M?;HF96hFvPI*$l ztzw{edG+C(9_YbVRcbSquiIAHsYoZF^9Z;ucTZ#tEG6V?E0$~P^m?Hpv6}eZV?{@s z*UM7Nd!Fm5n8y+GP|>z!S+}*KgZbKOM&p@ZL;S-T&(pWGDYxdBzLwuKq%@_eQus%3 zoWfd0dH_#$$Mq^mXs#+f-Kn#D9V{nf7VC~>N^NaR`;zormBv5aXDB*yQ#S$)^IF#I zdhK2Z!y{1&MduDGZ$^1E7WEt8IUe!MVb052w!5Ly|0bdyh@ut)-MFn~*QIe=#r`v5 zKNiIDf2%?Qko3s3? z>syWS-$MMUq7%q6Cg{wyl*_+><%D8suGF{b{CN*2;_6AW)zy0kEXSi7H=li_2TcOb z``WAwj7Qi=Kd+iFkAM zHF4<~D?uLA5ZeXT|FZtKp>5FT5lpsH+bS)j$MBafS-h-n$;U%otkZDL~b zT5foJGCwsuI+`sEPZh=|hSTXxCY>J7j*jKWUJ-&k1}MG@6JWSu|Tfnl>H?CdDj1i0}TFQ39tmZCV_s8*pHCfqIam})I43wXxD^( z3XWgLT#Blb&bC_B!nXW?{LH&zsL<@v+IszORi6E)wAT6ny-YRGXb-CER?=A4{q?R% zqci_+Ri6E)9|rr+{g;BuVFep%-4{hw+y`j=7gePFrymac&;6H!5a}Typjb`_2c-W? zC{fp_1hR_LD{u$)QoK02CCB_JsK0=>JrS_LD~PNa4A9 zHh#7$s&YLT`%jhoe$rQw_^9|UehCy5jrN2%Hd0d4{B&zr)tUXLD!_iySCROr;Q1eU z{>NtR%OF172XZq=Qoan*I+CVcPU0Ej`5%+S!}CA#{Ez#2gXgqa0xW^ON&v=_Z=5c= zV*Gz9dp(u;SpqBpmcU0w0@^EDWp(r1IomaKJ8SE{|7q=(XThpNGiXn{xh-z!oGEW% zJtr-Hb1A&{W{TNu#b3kvUaR-()8@47LO!#U-|LBU)A<%BMncl?CD)5LE!e!bN@Ov=P>h@3f9sC;Ke17! AKmY&$ diff --git a/server/soapserv.plg b/server/soapserv.plg deleted file mode 100755 index b2c8154e3..000000000 --- a/server/soapserv.plg +++ /dev/null @@ -1,38 +0,0 @@ - - -
-

Build Log

-

---------------------Configuration: SoapServ - Win32 Debug-------------------- -

-

Command Lines

-Creating temporary file "c:\temp\RSPA1C2.TMP" with contents -[ -/nologo /MTd /W3 /Gm /GX /ZI /Od /I "\wx229\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__WINDOWS__" /D "__WXMSW__" /D DEBUG=1 /D "__WXDEBUG__" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /FR"Debug/" /Fo"Debug/" /Fd"Debug/" /FD /c -"C:\U\GUY\R020200\SOAP\server.cpp" -] -Creating command line "cl.exe @c:\temp\RSPA1C2.TMP" -Creating temporary file "c:\temp\RSPA1C3.TMP" with contents -[ -kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib rpcrt4.lib wsock32.lib winmm.lib wxd.lib xpmd.lib pngd.lib zlibd.lib jpegd.lib tiffd.lib /nologo /subsystem:windows /incremental:yes /pdb:"Debug/server.pdb" /debug /machine:I386 /nodefaultlib:"libcd.lib" /nodefaultlib:"libcid.lib" /nodefaultlib:"msvcrt.lib" /out:"Debug/server.exe" /pdbtype:sept /libpath:"/wx229/lib" -.\Debug\Diction.obj -.\Debug\server.obj -.\Debug\soap.obj -.\Debug\server.res -] -Creating command line "link.exe @c:\temp\RSPA1C3.TMP" -

Output Window

-Compiling... -server.cpp -Linking... -Creating command line "bscmake.exe /nologo /o"Debug/SoapServ.bsc" .\Debug\Diction.sbr .\Debug\server.sbr .\Debug\soap.sbr" -Creating browse info file... -

Output Window

- - - -

Results

-server.exe - 0 error(s), 0 warning(s) -
- - diff --git a/ve/ve6400.cpp b/ve/ve6400.cpp index def34801c..fac7f939b 100755 --- a/ve/ve6400.cpp +++ b/ve/ve6400.cpp @@ -193,7 +193,7 @@ bool TScontrino_mask::save_ini(KEY k) bool TScontrino_mask::send_er400_data(bool extra) { - TSheet_field& sheet = sfield(F_SHEET); +/* TSheet_field& sheet = sfield(F_SHEET); const int rows = sheet.items(); if (rows <= 0) return FALSE; @@ -277,7 +277,7 @@ bool TScontrino_mask::send_er400_data(bool extra) cmd << m.get(101) << ']'; smart.execute(cmd); - smart.terminate(); + smart.terminate();*/ return TRUE; } diff --git a/xvaga/oswin32.cpp b/xvaga/oswin32.cpp index 00c9e0948..774dd40d5 100755 --- a/xvaga/oswin32.cpp +++ b/xvaga/oswin32.cpp @@ -220,3 +220,12 @@ void OsWin32_DrawBitmap(unsigned int hBitmap, unsigned int hDC, } } +void OsWin32_Beep(int severity) +{ + switch (severity) + { + case 0: MessageBeep(MB_OK); break; + case 1: MessageBeep(MB_ICONEXCLAMATION); break; + default: MessageBeep(MB_ICONSTOP); break; + } +} diff --git a/xvaga/oswin32.h b/xvaga/oswin32.h index f7cdc0929..5930eb43b 100755 --- a/xvaga/oswin32.h +++ b/xvaga/oswin32.h @@ -1,6 +1,9 @@ +void OsWin32_Beep(int severity); bool OsWin32_CheckPrinterInfo(const void* data, unsigned int size); void* OsWin32_ConvertFromNativePrinterInfo(void* hGlobal, unsigned int& nSize); void* OsWin32_ConvertToNativePrinterInfo(void* data, unsigned int nSize); +void OsWin32_DrawBitmap(unsigned int hBitmap, unsigned int hDC, + int xd, int yd, int wd, int hd, int xs, int ys, int ws, int hs); int OsWin32_EnumerateFamilies(unsigned int hDC, char** families, int max_count); int OsWin32_EnumerateSizes(unsigned int hDC, const char* name, long* sizes, short* scalable, int max_count); void OsWin32_SetCaptionStyle(unsigned int handle, bool set); @@ -8,7 +11,5 @@ void* OsWin32_GetPrinterInfo(int& size, const char* printer); void OsWin32_SetClippingRect(unsigned int hDC, int x, int y, int w, int h); void OsWin32_StretchBlt(unsigned int hDst, int xd, int yd, int wd, int hd, unsigned int hSrc, int xs, int ys, int ws, int hs); -void OsWin32_DrawBitmap(unsigned int hBitmap, unsigned int hDC, - int xd, int yd, int wd, int hd, int xs, int ys, int ws, int hs); void OsWin32_UpdateWindow(unsigned int handle); diff --git a/xvaga/xvaga.cpp b/xvaga/xvaga.cpp index 6c5bc4584..ea0d48554 100755 --- a/xvaga/xvaga.cpp +++ b/xvaga/xvaga.cpp @@ -674,12 +674,22 @@ void TwxWindow::DoXvtEvent(EVENT& e) void TwxWindow::OnChar(wxKeyEvent& event) { - static bool bDot2Comma = FALSE; + static bool bSkipNextDotKey = FALSE; EVENT e; memset(&e, 0, sizeof(EVENT)); e.type = E_CHAR; int k = event.GetKeyCode(); + if (bSkipNextDotKey) + { + bSkipNextDotKey = FALSE; + if (k == '.') + { + event.Skip(); + return; + } + } + switch (k) { case WXK_ALT: @@ -698,9 +708,9 @@ void TwxWindow::OnChar(wxKeyEvent& event) return; case WXK_NUMPAD_DECIMAL: // ??? Non arriva mai case WXK_DECIMAL: // ??? Arriva sia '.' sia WXK_DECIMAL=340 - event.Skip(); - bDot2Comma = TRUE; - return; + k = ','; + bSkipNextDotKey = TRUE; + break; case WXK_DOWN : k = K_DOWN; break; case WXK_LEFT : k = K_LEFT; break; case WXK_NEXT : k = K_NEXT; break; @@ -711,13 +721,6 @@ void TwxWindow::OnChar(wxKeyEvent& event) if (event.ShiftDown()) k = K_BTAB; break; - case '.': - if (bDot2Comma) - { - k = ','; - bDot2Comma = FALSE; - } - break; default: if (k >= WXK_F1 && k <= WXK_F24) k = K_F1 + k - WXK_F1; @@ -782,6 +785,7 @@ void TwxWindow::OnMouseDown(wxMouseEvent& event) e.v.mouse.button = event.RightDown() ? 1 : 0; e.v.mouse.control = event.ControlDown(); e.v.mouse.shift = event.ShiftDown(); + int x, y; event.GetPosition(&x, &y); e.v.mouse.where.h = x; e.v.mouse.where.v = y; @@ -1291,8 +1295,24 @@ void xvt_ctl_set_checked(WINDOW Win, BOOLEAN Check) // Debug functions /////////////////////////////////////////////////////////// -void xvt_debug_printf(const char* fmt, const char* str) -{ SORRY_BOX(); } +void xvt_debug_printf(const char* fmt, ...) +{ +#ifndef NDEBUG + static FILE* f = NULL; + if (f == NULL) + f = fopen("trace.log", "w"); + if (f != NULL) + { + char msg[256]; + va_list argptr; + va_start(argptr,fmt); + vsprintf(msg,fmt,argptr); + va_end(argptr); + fprintf(f, "%s\n", msg); + fflush(f); + } +#endif +} /////////////////////////////////////////////////////////// // Common dialogs @@ -1310,7 +1330,7 @@ void xvt_dm_post_error(char *fmt) void xvt_dm_post_fatal_exit(char *fmt) { wxLogFatalError(fmt); } -FL_STATUS xvt_dm_post_file_open(FILE_SPEC *fsp, char *msg) +FL_STATUS xvt_dm_post_file_open(FILE_SPEC *fsp, const char *msg) { const int flags = wxOPEN | wxHIDE_READONLY | wxFILE_MUST_EXIST; wxString path = fsp->dir.path; @@ -1327,7 +1347,7 @@ FL_STATUS xvt_dm_post_file_open(FILE_SPEC *fsp, char *msg) return FL_OK; } -FL_STATUS xvt_dm_post_file_save(FILE_SPEC *fsp, char *msg) +FL_STATUS xvt_dm_post_file_save(FILE_SPEC *fsp, const char *msg) { const int flags = wxSAVE | wxHIDE_READONLY; wxString path = fsp->dir.path; @@ -1561,7 +1581,7 @@ void xvt_dwin_draw_set_pos(WINDOW win, PNT pnt) dc._pnt.y = pnt.v; } -void xvt_dwin_draw_text(WINDOW win, int x, int y, char *s, int len) +void xvt_dwin_draw_text(WINDOW win, int x, int y, const char *s, int len) { if (s && *s && len != 0) { @@ -1622,7 +1642,7 @@ long xvt_dwin_get_font_size_mapped(WINDOW win) return height; } -int xvt_dwin_get_text_width(WINDOW win, char *s, int len) +int xvt_dwin_get_text_width(WINDOW win, const char *s, int len) { int width = 0, height; @@ -2229,7 +2249,10 @@ void xvt_image_transfer(XVT_IMAGE dstimage, XVT_IMAGE srcimage, RCT *dstrctp, RC /////////////////////////////////////////////////////////// DATA_PTR xvt_mem_alloc(size_t size) -{ return (DATA_PTR)malloc(size); } +{ + DATA_PTR ptr = (DATA_PTR)malloc(size); + return ptr; +} void xvt_mem_free(DATA_PTR p) { free(p); } @@ -2303,6 +2326,46 @@ MENU_ITEM* xvt_menu_get_tree(WINDOW win) return m; } +static TranslateMenu(wxMenu* pMenu, TRANSLATE_CALLBACK tc) +{ + wxMenuItemList& list = pMenu->GetMenuItems(); + for (unsigned i = 0; i < list.GetCount(); i++) + { + wxMenuItem* mi = list[i]; + if (!mi->IsSeparator()) + { + const char* ita = mi->GetText(); + const char* eng = tc(ita); + mi->SetText(eng); + wxMenu* pMenu = mi->GetSubMenu(); + if (pMenu != NULL) + TranslateMenu(pMenu, tc); + } + } +} + +void xvt_menu_translate_tree(WINDOW win, TRANSLATE_CALLBACK tc) +{ + if (win == TASK_WIN) + { + TTaskWin& w = *(TTaskWin*)win; + wxMenuBar* pMenuBar = w.GetMenuBar(); + if (pMenuBar != NULL) + { + for (int m = pMenuBar->GetMenuCount()-1; m >= 0; m--) + { + const char* ita = pMenuBar->GetLabelTop(m); + const char* eng = tc(ita); + pMenuBar->SetLabelTop(m, eng); + + wxMenu* pMenu = pMenuBar->GetMenu(m); + TranslateMenu(pMenu, tc); + } +// w.SetMenuBar(pMenuBar); + } + } +} + void xvt_menu_set_font_sel(WINDOW win, XVT_FNTID font_id) { /* Ignored */ } @@ -2470,8 +2533,9 @@ void xvt_res_free_menu_tree(MENU_ITEM* tree) XVT_IMAGE xvt_res_get_image(int rid) { const wxString strFileName = ::GetResourceName("Image", rid); - XVT_ASSERT(!strFileName.IsEmpty()); - return xvt_image_read(strFileName); + const bool ok = !strFileName.IsEmpty(); + XVT_ASSERT(ok); + return ok ? xvt_image_read(strFileName) : NULL; } static int SplitString(const wxString& str, wxArrayString& a) @@ -2575,7 +2639,7 @@ char* xvt_res_get_str(int rid, char *s, int sz_s) XVT_ASSERT(s != NULL && sz_s > 0); const wxString str = ::GetResourceName("String", rid); strncpy(s, str, sz_s); - s[sz_s] = '\0'; + s[sz_s-1] = '\0'; return s; } @@ -2689,7 +2753,11 @@ void xvt_sbar_set_range(WINDOW win, SCROLL_TYPE t, int min, int max) void xvt_scr_beep(void) { +#ifdef WIN32 + OsWin32_Beep(0); +#else wxBell(); +#endif } WINDOW xvt_scr_get_focus_topwin(void) diff --git a/xvaga/xvt.h b/xvaga/xvt.h index f43246154..0690df1ed 100755 --- a/xvaga/xvt.h +++ b/xvaga/xvt.h @@ -52,13 +52,13 @@ void xvt_ctl_check_radio_button(WINDOW Win, WINDOW* Wins, int NbrWindows); WINDOW xvt_ctl_create_def(WIN_DEF *win_def_p, WINDOW parent_win, long app_data); void xvt_ctl_set_checked(WINDOW Win, BOOLEAN Check); -void xvt_debug_printf(const char* fmt, const char* str); +void xvt_debug_printf(const char* fmt, ...); ASK_RESPONSE xvt_dm_post_ask(const char* Btn1, const char*Btn2, const char* Btn3, const char* xin_buffer); void xvt_dm_post_error(char *fmt); void xvt_dm_post_fatal_exit(char *fmt); -FL_STATUS xvt_dm_post_file_open(FILE_SPEC *fsp, char *msg); -FL_STATUS xvt_dm_post_file_save(FILE_SPEC *fsp, char *msg); +FL_STATUS xvt_dm_post_file_open(FILE_SPEC *fsp, const char *msg); +FL_STATUS xvt_dm_post_file_save(FILE_SPEC *fsp, const char *msg); BOOLEAN xvt_dm_post_font_sel(WINDOW win, XVT_FNTID font_id, PRINT_RCD *precp, unsigned long reserved); void xvt_dm_post_note(char *fmt); BOOLEAN xvt_dm_post_page_setup(PRINT_RCD *precp); @@ -73,13 +73,13 @@ void xvt_dwin_draw_pie(WINDOW win, RCT *rctp, int start_x, int start_y, void xvt_dwin_draw_polygon(WINDOW win, PNT *lpnts, int npnts); void xvt_dwin_draw_rect(WINDOW win, RCT *rctp); void xvt_dwin_draw_set_pos(WINDOW win, PNT pnt); -void xvt_dwin_draw_text(WINDOW win, int x, int y, char *s, int len); +void xvt_dwin_draw_text(WINDOW win, int x, int y, const char *s, int len); RCT* xvt_dwin_get_clip(WINDOW win, RCT* rct); DRAW_CTOOLS* xvt_dwin_get_draw_ctools(WINDOW win, DRAW_CTOOLS *ctoolsp); XVT_FNTID xvt_dwin_get_font(WINDOW win); void xvt_dwin_get_font_metrics(WINDOW win, int *leadingp, int *ascentp, int *descentp); long xvt_dwin_get_font_size_mapped(WINDOW win); -int xvt_dwin_get_text_width(WINDOW win, char *s, int len); +int xvt_dwin_get_text_width(WINDOW win, const char *s, int len); void xvt_dwin_invalidate_rect(WINDOW win, RCT *rctp); BOOLEAN xvt_dwin_is_update_needed(WINDOW Win, RCT* rctp); void xvt_dwin_scroll_rect(WINDOW win, RCT *rctp, int dh, int dv); @@ -156,6 +156,9 @@ void xvt_menu_set_item_enabled(WINDOW win, MENU_TAG tag, BOOLEAN enable); void xvt_menu_set_item_title(WINDOW win, MENU_TAG tag, char* text); void xvt_menu_set_tree(WINDOW win, MENU_ITEM* tree); void xvt_menu_update(WINDOW win); +// Added by Guy +typedef const char* TRANSLATE_CALLBACK(const char* ita); +void xvt_menu_translate_tree(WINDOW win, TRANSLATE_CALLBACK tc); short xvt_palet_add_colors(XVT_PALETTE palet, COLOR *colorsp, short numcolors); short xvt_palet_add_colors_from_image(XVT_PALETTE palet, XVT_IMAGE image);