diff --git a/include/execp.cpp b/include/execp.cpp index 0fc5a9628..9677aff4a 100755 --- a/include/execp.cpp +++ b/include/execp.cpp @@ -6,11 +6,12 @@ #include #include +// Il programma attuale NON e' ne' ba0 ne ba1 e si usa il menu in stile Outlook? static bool is_outlook_menu_chain() { const TFilename n = __argv[0]; const TString& app = n.name_only(); - if (app.match("*ba[0,1]*", true)) + if (app.match("ba[0,1]", true) != 0) return false; return ini_get_int(CONFIG_GUI, "Colors", "TreeView") == 3; } @@ -31,48 +32,50 @@ long TExternal_app::run( TFilename path(_path); TFilename comm_name(_path); - int p = comm_name.find(" -"); //c'e' un - nella stringa? - if (p > 0) //se c'e' tronca il nome allo spazio - comm_name.cut(p); - p = comm_name.find(" /"); //c'e' un / nella stringa? - if (p > 0) //se c'e' tronca il nome allo spazio - comm_name.cut(p); + //se c'e' - o / tronca il nome allo spazio precedente + const int pm = comm_name.find(" -"); //c'e' un - nella stringa? + const int ps = comm_name.find(" /"); //c'e' un / nella stringa? + int params = -1; + if (pm > 0 && (pm < ps || ps <= 0)) + params = pm; else + if (ps > 0) + params = ps; + if (params > 0) + comm_name.cut(params); if (*comm_name.ext() == '\0') //se non c'e' estensione ci mette .exe (sono programmi) comm_name.ext("exe"); const bool found = comm_name.custom_path(); //cerca il file in custom o in locale - - TString name(comm_name.name()); if (utente == 1) // utente puo' essere 0 = No, 1 = Si, 3 = Forzatura { + const TString& name = comm_name.name_only(); bool our_app = name.len() > 2; if (our_app && atoi(name) < 70) { our_app = isalpha(name[0]) && isalpha(name[1]) && isdigit(name[2]); } - if (!our_app) - utente = false; + if (!our_app) // Non e' un programma di campo per cui ... + utente = 0; // ... non aggiungo il codice utente al comando } - if (found && p > 0) + if (found) { path = comm_name; - path << _path.mid(p); + if (params > 0) + path << _path.mid(params); } if (utente) path << " /u" << user(); // save cwd - DIRECTORY oldir; - xvt_fsys_get_dir(&oldir); + DIRECTORY oldir; xvt_fsys_get_dir(&oldir); - if (!utente) // cambio directory se eseguo un programma estero + if (!utente && found) // cambio directory se eseguo un programma estero { - TFilename dir(comm_name.path()); - dir.lower(); - if (dir.full() && dir.find("custom") < 0) + TFilename dir(path.path()); + if (dir.full()) { DIRECTORY d; if (xvt_fsys_convert_str_to_dir(dir, &d)) @@ -83,7 +86,7 @@ long TExternal_app::run( TString256 old_title; // Vecchio titolo della finestra principale bool close_all = false; // Chiudi tutti i file in caso di manutenzione - if (!async) + if (!async && utente) { close_all = _path.starts_with("ba1 -0") && prefix_valid(); if (close_all) //se lancia la gestione archivi forza la chiusura dei files e pure dei tracciati! @@ -95,7 +98,7 @@ long TExternal_app::run( dongle().logout(); // Programma normale (non menu) che chiama "collega" - if (utente && iconize && is_outlook_menu_chain()) + if (iconize && is_outlook_menu_chain()) { xvt_vobj_get_title(TASK_WIN, old_title.get_buffer(), old_title.size()); xvt_vobj_set_title(TASK_WIN, __MAGIC_CAPTION__); @@ -120,7 +123,7 @@ long TExternal_app::run( // non ci saranno piu' posti liberi nell'HL_server: il programma comunque non // puo' interrompersi a meta'; ecco perche il valore di ritorno di HL_LOGIN viene // ignorato. - if (!async) + if (!async && utente) { if (dongle().local()) dongle().login();