* discover application executable location
  * if the directory in which "fldigi" / "fldigi.exe" resides
    contains a file named NBEMS.DIR then base all NBEMS file
    locations to that drive-folder
  * this allows a fully portble NBEMS installation
    to a thumbdrive (or other portable drive)
  * it also allows a very easy way to install multiple NBEMS suites
    for different target uses on a single hard drive
pull/1/head
David Freese 2012-10-26 21:36:36 -05:00
rodzic 0c1f37148b
commit 1d6469f4d1
5 zmienionych plików z 85 dodań i 4 usunięć

Wyświetl plik

@ -1731,16 +1731,55 @@ int main (int argc, char *argv[] )
set_terminate(diediedie);
setup_signal_handlers();
NBEMS_dir.clear();
{
string appname = argv[0];
string appdir;
char dirbuf[FL_PATH_MAX + 1];
fl_filename_expand(dirbuf, FL_PATH_MAX, appname.c_str());
appdir.assign(dirbuf);
#ifdef __WOE32__
fl_filename_expand(dirbuf, sizeof(dirbuf) - 1, "$USERPROFILE/NBEMS.files/");
NBEMS_dir = dirbuf;
size_t p = appdir.rfind("flarq.exe");
if (p != std::string::npos) {
appdir.erase(p);
string testfile;
testfile.assign(appdir).append("NBEMS.DIR");
FILE *testdir = fopen(testfile.c_str(),"r");
if (testdir) {
fclose(testdir);
NBEMS_dir = appdir;
}
}
if (NBEMS_dir.empty()) {
fl_filename_expand(dirbuf, FL_PATH_MAX, "$USERPROFILE/");
NBEMS_dir = dirbuf;
}
NBEMS_dir.append("NBEMS.files\\");
#else
fl_filename_expand(dirbuf, sizeof(dirbuf) - 1, "$HOME/.nbems/");
NBEMS_dir = dirbuf;
size_t p = appdir.rfind("flarq");
if (p != std::string::npos) {
if (appdir.find("./flarq") != std::string::npos) {
if (getcwd(dirbuf, FL_PATH_MAX))
appdir.assign(dirbuf).append("/");
} else
appdir.erase(p);
string testfile;
testfile.assign(appdir).append("NBEMS.DIR");
FILE *testdir = fopen(testfile.c_str(),"r");
if (testdir) {
fclose(testdir);
NBEMS_dir = appdir;
}
}
if (NBEMS_dir.empty()) {
fl_filename_expand(dirbuf, FL_PATH_MAX, "$HOME/");
NBEMS_dir = dirbuf;
}
NBEMS_dir.append(".nbems/");
#endif
}
checkdirectories();
Logfile = ARQ_dir;

Wyświetl plik

@ -50,6 +50,8 @@ extern Fl_Double_Window *fl_digi_main;
extern Fl_Double_Window *scopeview;
//extern Fl_Double_Window *opBrowserView;
extern bool NBEMSapps_dir;
extern FTextRX *ReceiveText;
extern FTextTX *TransmitText;
extern pskBrowser *mainViewer;

Wyświetl plik

@ -13,6 +13,7 @@
#endif
extern std::string appname;
extern std::string BaseDir;
extern std::string HomeDir;
extern std::string RigsDir;
extern std::string ScriptsDir;

Wyświetl plik

@ -318,6 +318,12 @@ void rx_extract_add(int c)
void select_flmsg_pathname()
{
if (NBEMSapps_dir) {
progdefaults.flmsg_pathname.assign(BaseDir).append("flmsg.exe");
progdefaults.changed = true;
txt_flmsg_pathname->value(progdefaults.flmsg_pathname.c_str());
return;
}
#ifdef __APPLE__
open_recv_folder("/Applications/");
return;

Wyświetl plik

@ -122,6 +122,7 @@ string appname;
string scDevice[2];
bool NBEMSapps_dir = false;
string BaseDir = "";
string HomeDir = "";
string RigsDir = "";
@ -238,6 +239,36 @@ void delayed_startup(void *)
int main(int argc, char ** argv)
{
appname = argv[0];
{
string appdir;
char apptemp[FL_PATH_MAX];
fl_filename_expand(apptemp, sizeof(apptemp), appname.c_str());
appdir.assign(apptemp);
#ifdef __WOE32__
size_t p = appdir.rfind("fldigi.exe");
appdir.erase(p);
#else
size_t p = appdir.rfind("fldigi");
if (appdir.find("./fldigi") != std::string::npos) {
if (getcwd(apptemp, sizeof(apptemp)))
appdir.assign(apptemp).append("/");
} else
appdir.erase(p);
#endif
if (p != std::string::npos) {
string testfile;
testfile.assign(appdir).append("NBEMS.DIR");
FILE *testdir = fopen(testfile.c_str(),"r");
if (testdir) {
fclose(testdir);
BaseDir = appdir;
NBEMSapps_dir = true;
}
}
}
debug_exec(argv);
CREATE_THREAD_ID(); // only call this once
SET_THREAD_ID(FLMAIN_TID);
@ -316,6 +347,8 @@ int main(int argc, char ** argv)
debug::stop();
}
LOG_INFO("appname: %s", appname.c_str());
LOG_INFO("HomeDir: %s", HomeDir.c_str());
LOG_INFO("RigsDir: %s", RigsDir.c_str());
LOG_INFO("ScriptsDir: %s", ScriptsDir.c_str());