From 686059ae9cb5a33576ae0e91ddf88b14c90c9218 Mon Sep 17 00:00:00 2001 From: H.G. Muller Date: Sat, 4 Jan 2014 12:18:30 +0100 Subject: [PATCH] Expand ~~/ to bundle path (OSX) DATADIR is #defined in WinBoard as "~~" to make the expansion a no-op there. Same for Linux compiles. For OS X it is #defined as a variable, obtained from GTK-OSX at startup. --- args.h | 6 ++++++ gtk/xboard.c | 6 +++++- winboard/winboard.c | 1 + 3 files changed, 12 insertions(+), 1 deletions(-) diff --git a/args.h b/args.h index c7b2a83..a6a0a9b 100644 --- a/args.h +++ b/args.h @@ -1105,6 +1105,12 @@ ParseArgs(GetFunc get, void *cl) case ArgString: case ArgFilename: + if(argValue[0] == '~' && argValue[1] == '~') { + char buf[4*MSG_SIZ]; // expand ~~ + snprintf(buf, 4*MSG_SIZ, "%s%s", DATADIR, argValue+2); + ASSIGN(*(char **) ad->argLoc, buf); + break; + } ASSIGN(*(char **) ad->argLoc, argValue); break; diff --git a/gtk/xboard.c b/gtk/xboard.c index 5b018e5..16d7a9f 100644 --- a/gtk/xboard.c +++ b/gtk/xboard.c @@ -169,7 +169,7 @@ extern char *getenv(); #ifdef OSX # include "gtkmacintegration/gtkosxapplication.h" - // prevent pathname of positional file argument provided by OSx being be mistaken for option name + // prevent pathname of positional file argument provided by OS X being be mistaken for option name // (price is that we won't recognize Windows option format anymore). # define SLASH '-' // redefine some defaults @@ -177,8 +177,11 @@ extern char *getenv(); # undef SYSCONFDIR # define ICS_LOGON "Library/Preferences/XboardICS.conf" # define SYSCONFDIR "../etc" +# define DATADIR dataDir + char *dataDir; // for expanding ~~ #else # define SLASH '/' +# define DATADIR "~~" #endif #ifdef __EMX__ @@ -772,6 +775,7 @@ main (int argc, char **argv) #ifdef OSX { // prepare to catch OX OpenFile signal, which will tell us the clicked file GtkosxApplication *theApp = g_object_new(GTKOSX_TYPE_APPLICATION, NULL); + dataDir = gtkosx_application_get_bundle_path(); g_signal_connect(theApp, "NSApplicationOpenFile", G_CALLBACK(StartNewXBoard), NULL); // we must call application ready before we can get the signal, // and supply a (dummy) menu bar before that, to avoid problems with dual apples in it diff --git a/winboard/winboard.c b/winboard/winboard.c index d643a45..3819e58 100644 --- a/winboard/winboard.c +++ b/winboard/winboard.c @@ -93,6 +93,7 @@ #include "wsnap.h" #define SLASH '/' +#define DATADIR "~~" //void InitEngineUCI( const char * iniDir, ChessProgramState * cps ); -- 1.7.0.4