Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src/tuxpaint.c
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@member.fsf.org>2010-05-10 16:24:16 (GMT)
committer Aleksey Lim <alsroot@member.fsf.org>2010-05-10 16:24:16 (GMT)
commit2ed7f9a8446d6c876743164dff86f68408bd932e (patch)
tree4719cf3807f61f5ffd859ffd86231ca14234c876 /src/tuxpaint.c
parent670a28e7ce5070fb8d4e7f72168892b7323456d2 (diff)
Make install data relocatable
Diffstat (limited to 'src/tuxpaint.c')
-rw-r--r--src/tuxpaint.c261
1 files changed, 166 insertions, 95 deletions
diff --git a/src/tuxpaint.c b/src/tuxpaint.c
index 74d991a..8ddcea3 100644
--- a/src/tuxpaint.c
+++ b/src/tuxpaint.c
@@ -57,7 +57,6 @@
/*#define PRINTMETHOD_PNG_PNM_PS*/ /* Output PNG, assuming it gets printed */
-#define MAX_PATH 256
/* Compile-time options: */
@@ -103,6 +102,10 @@
#define TPAINT_AMASK 0x000000ff
#endif
+char *DATA_PREFIX;
+char *MAGIC_PREFIX;
+char *LOCALEDIR;
+
static unsigned draw_colors(unsigned action);
/* hide all scale-related values here */
@@ -465,6 +468,7 @@ extern WrapperData macosx;
#include "compiler.h"
#include "sugar.h"
+#include "tuxpaint.h"
#if VIDEO_BPP==32
@@ -1580,7 +1584,7 @@ static SDL_Cursor *get_cursor(unsigned char *bits, unsigned char *mask_bits,
unsigned int x, unsigned int y);
static void seticon(void);
static SDL_Surface *loadimage(const char *const fname);
-static SDL_Surface *do_loadimage(const char *const fname, int abort_on_error);
+static SDL_Surface *do_loadimage(const char *fname, int abort_on_error);
static void draw_toolbar(void);
static void draw_magic(void);
static void draw_brushes(void);
@@ -5618,9 +5622,7 @@ static void show_version(int details)
printf(" Data directory (DATA_PREFIX) = %s\n", DATA_PREFIX);
printf(" Plugin directory (MAGIC_PREFIX) = %s\n", MAGIC_PREFIX);
- printf(" Doc directory (DOC_PREFIX) = %s\n", DOC_PREFIX);
printf(" Locale directory (LOCALEDIR) = %s\n", LOCALEDIR);
- printf(" Input Method directory (IMDIR) = %s\n", IMDIR);
printf(" System config directory (CONFDIR) = %s\n", CONFDIR);
@@ -5845,9 +5847,20 @@ static void loadbrush_callback(SDL_Surface * screen,
static void load_brush_dir(SDL_Surface * screen, const char *restrict const dir)
{
char buf[TP_FTW_PATHSIZE];
- unsigned dirlen = strlen(dir);
+ unsigned dirlen;
+
+ if (dir[0] != '/')
+ {
+ snprintf(buf, sizeof(buf), "%s/%s", DATA_PREFIX, dir);
+ dirlen = strlen(buf);
+ }
+ else
+ {
+ dirlen = strlen(dir);
+ memcpy(buf, dir, dirlen);
+ buf[dirlen] = '\0';
+ }
- memcpy(buf, dir, dirlen);
tp_ftw(screen, buf, dirlen, 0, loadbrush_callback, NULL);
}
@@ -6716,8 +6729,20 @@ static void loadstamp_callback(SDL_Surface * screen,
static void load_stamp_dir(SDL_Surface * screen, const char *const dir)
{
char buf[TP_FTW_PATHSIZE];
- unsigned dirlen = strlen(dir);
- memcpy(buf, dir, dirlen);
+ unsigned dirlen;
+
+ if (dir[0] != '/')
+ {
+ snprintf(buf, sizeof(buf), "%s/%s", DATA_PREFIX, dir);
+ dirlen = strlen(buf);
+ }
+ else
+ {
+ dirlen = strlen(dir);
+ memcpy(buf, dir, dirlen);
+ buf[dirlen] = '\0';
+ }
+
load_stamp_basedir = dir;
tp_ftw(screen, buf, dirlen, 0, loadstamp_callback, NULL);
}
@@ -6730,7 +6755,7 @@ static void load_stamps(SDL_Surface * screen)
default_stamp_size = compute_default_scale_factor(1.0);
load_stamp_dir(screen, homedirdir);
- load_stamp_dir(screen, DATA_PREFIX "stamps");
+ load_stamp_dir(screen, "stamps");
#ifdef __APPLE__
load_stamp_dir(screen, "/Library/Application Support/TuxPaint/stamps");
#endif
@@ -6743,8 +6768,8 @@ static void load_stamps(SDL_Surface * screen)
if (num_stamps[0] == 0)
{
fprintf(stderr,
- "\nWarning: No stamps found in " DATA_PREFIX "stamps/\n"
- "or %s\n\n", homedirdir);
+ "\nWarning: No stamps found in %s/stamps/\n"
+ "or %s\n\n", DATA_PREFIX, homedirdir);
}
num_stamp_groups = stamp_group + 1;
@@ -6894,21 +6919,23 @@ static void seticon(void)
Uint8 *mask;
#endif
SDL_Surface *icon;
+ char fname_buf[MAX_PATH];
/* Load icon into a surface: */
#ifndef WIN32
- icon = IMG_Load(DATA_PREFIX "images/icon.png");
+ snprintf(fname_buf, sizeof(fname_buf), "%s/images/icon.png", DATA_PREFIX);
#else
- icon = IMG_Load(DATA_PREFIX "images/icon32x32.png");
+ snprintf(fname_buf, sizeof(fname_buf), "%s/images/icon32x32.png", DATA_PREFIX);
#endif
+ icon = IMG_Load(fname_buf);
if (icon == NULL)
{
fprintf(stderr,
"\nWarning: I could not load the icon image: %s\n"
"The Simple DirectMedia error that occurred was:\n"
- "%s\n\n", DATA_PREFIX "images/icon.png", SDL_GetError());
+ "%s/images/icon.png", SDL_GetError(), DATA_PREFIX);
return;
}
@@ -6996,10 +7023,16 @@ static SDL_Surface *loadimage(const char *const fname)
/* Load an image: */
-static SDL_Surface *do_loadimage(const char *const fname, int abort_on_error)
+static SDL_Surface *do_loadimage(const char *fname, int abort_on_error)
{
SDL_Surface *s, *disp_fmt_s;
+ char fname_buf[MAX_PATH];
+ if (fname[0] != '/')
+ {
+ snprintf(fname_buf, sizeof(fname_buf), "%s/%s", DATA_PREFIX, fname);
+ fname = fname_buf;
+ }
/* Load the image file: */
@@ -9787,12 +9820,18 @@ static void playstampdesc(int chan)
#ifndef NOSOUND
-static Mix_Chunk *loadsound_extra(const char *const fname, const char *extra)
+static Mix_Chunk *loadsound_extra(const char *fname, const char *extra)
{
char *snd_fname;
char tmp_str[MAX_PATH], ext[5];
Mix_Chunk *tmp_snd;
+ char fname_buf[MAX_PATH];
+ if (fname[0] != '/')
+ {
+ snprintf(fname_buf, "%s/%s", DATA_PREFIX, fname);
+ fname = fname_buf;
+ }
if (strcasestr(fname, ".png") != NULL)
{
@@ -10352,13 +10391,16 @@ static void load_starter_id(char *saved_id, FILE *fil)
static void load_starter(char *img_id)
{
char *dirname;
- char fname[256];
+ char fname[MAX_PATH];
SDL_Surface *tmp_surf;
/* Determine path to starter files: */
if (starter_personal == 0)
- dirname = strdup(DATA_PREFIX "starters");
+ {
+ snprintf(fname, sizeof(fname), "%s/templates", DATA_PREFIX);
+ dirname = strdup(fname);
+ }
else
dirname = get_fname("starters", DIR_DATA);
@@ -10527,13 +10569,16 @@ static void load_starter(char *img_id)
static void load_template(char *img_id)
{
char *dirname;
- char fname[256];
+ char fname[MAX_PATH];
SDL_Surface *tmp_surf;
/* Determine path to starter files: */
if (template_personal == 0)
- dirname = strdup(DATA_PREFIX "templates");
+ {
+ snprintf(fname, sizeof(fname), "%s/templates", DATA_PREFIX);
+ dirname = strdup(fname);
+ }
else
dirname = get_fname("templates", DIR_DATA);
@@ -11393,8 +11438,11 @@ static void cleanup(void)
#ifdef LOW_QUALITY_COLOR_SELECTOR
free_surface(&img_paintcan);
#else
- free_surface_array(img_color_btns, NUM_COLORS * 2);
- free(img_color_btns);
+ if (img_color_btns)
+ {
+ free_surface_array(img_color_btns, NUM_COLORS * 2);
+ free(img_color_btns);
+ }
#endif
free_surface(&screen);
@@ -17124,8 +17172,8 @@ static int do_new_dialog(void)
{
/* Finally, check for system-wide coloring-book style
'starter' images: */
-
- dirname[places_to_look] = strdup(DATA_PREFIX "starters");
+ snprintf(fname, sizeof(fname), "%s/starters", DATA_PREFIX);
+ dirname[places_to_look] = strdup(fname);
}
else if (places_to_look == PLACE_PERSONAL_TEMPLATES_DIR)
{
@@ -17136,8 +17184,8 @@ static int do_new_dialog(void)
else if (places_to_look == PLACE_TEMPLATES_DIR)
{
/* Finally, check for system-wide 'template' images: */
-
- dirname[places_to_look] = strdup(DATA_PREFIX "templates");
+ snprintf(fname, sizeof(fname), "%s/templates", DATA_PREFIX);
+ dirname[places_to_look] = strdup(fname);
}
@@ -20273,6 +20321,8 @@ static void setup_config(char *argv[])
if(tmpcfg_cmd.savedir)
savedir = strdup(tmpcfg_cmd.savedir);
+ else if (sugar_detected())
+ savedir = sugar_get_savedir();
else
{
#ifdef _WIN32
@@ -20836,7 +20886,17 @@ static void setup(void)
i = NUM_SOUNDS;
while (use_sound && i--)
{
- sounds[i] = Mix_LoadWAV(sound_fnames[i]);
+ if (sound_fnames[i][0] != '/')
+ {
+ char fname_buf[MAX_PATH];
+ snprintf(fname_buf, sizeof(fname_buf), "%s/%s", DATA_PREFIX,
+ sound_fnames[i]);
+ sounds[i] = Mix_LoadWAV(fname_buf);
+ }
+ else
+ {
+ sounds[i] = Mix_LoadWAV(sound_fnames[i]);
+ }
if (sounds[i] == NULL)
{
@@ -20980,9 +21040,9 @@ static void setup(void)
/* quickly: title image, version, progress bar, and watch cursor */
- img_title = loadimage(DATA_PREFIX "images/title.png");
- img_title_credits = loadimage(DATA_PREFIX "images/title-credits.png");
- img_progress = loadimage(DATA_PREFIX "images/ui/progress.png");
+ img_title = loadimage("images/title.png");
+ img_title_credits = loadimage("images/title-credits.png");
+ img_progress = loadimage("images/ui/progress.png");
if (screen->w - img_title->w >= 410 && screen->h - img_progress->h - img_title_credits->h - 40) /* FIXME: Font */
big_title = 1;
@@ -20991,9 +21051,9 @@ static void setup(void)
if (big_title)
- img_title_tuxpaint = loadimage(DATA_PREFIX "images/title-tuxpaint-2x.png");
+ img_title_tuxpaint = loadimage("images/title-tuxpaint-2x.png");
else
- img_title_tuxpaint = loadimage(DATA_PREFIX "images/title-tuxpaint.png");
+ img_title_tuxpaint = loadimage("images/title-tuxpaint.png");
SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 255, 255, 255));
@@ -21091,16 +21151,16 @@ static void setup(void)
#endif
medium_font = TuxPaint_Font_OpenFont(PANGO_DEFAULT_FONT,
- DATA_PREFIX "fonts/default_font.ttf",
+ "fonts/default_font.ttf",
18 - (only_uppercase * 3));
if (medium_font == NULL)
{
fprintf(stderr,
"\nError: Can't load font file: "
- DATA_PREFIX "fonts/default_font.ttf\n"
+ "%s/fonts/default_font.ttf\n"
"The Simple DirectMedia Layer error that occurred was:\n"
- "%s\n\n", SDL_GetError());
+ "%s\n\n", DATA_PREFIX, SDL_GetError());
cleanup();
exit(1);
@@ -21271,20 +21331,20 @@ static void setup(void)
for (i = 0; i < NUM_TOOLS; i++)
img_tools[i] = loadimage(tool_img_fnames[i]);
- img_title_on = loadimage(DATA_PREFIX "images/ui/title.png");
- img_title_large_on = loadimage(DATA_PREFIX "images/ui/title_large.png");
- img_title_off = loadimage(DATA_PREFIX "images/ui/no_title.png");
- img_title_large_off = loadimage(DATA_PREFIX "images/ui/no_title_large.png");
+ img_title_on = loadimage("images/ui/title.png");
+ img_title_large_on = loadimage("images/ui/title_large.png");
+ img_title_off = loadimage("images/ui/no_title.png");
+ img_title_large_off = loadimage("images/ui/no_title_large.png");
- img_btn_up = loadimage(DATA_PREFIX "images/ui/btn_up.png");
- img_btn_down = loadimage(DATA_PREFIX "images/ui/btn_down.png");
- img_btn_off = loadimage(DATA_PREFIX "images/ui/btn_off.png");
+ img_btn_up = loadimage("images/ui/btn_up.png");
+ img_btn_down = loadimage("images/ui/btn_down.png");
+ img_btn_off = loadimage("images/ui/btn_off.png");
- img_btnsm_up = loadimage(DATA_PREFIX "images/ui/btnsm_up.png");
- img_btnsm_off = loadimage(DATA_PREFIX "images/ui/btnsm_off.png");
+ img_btnsm_up = loadimage("images/ui/btnsm_up.png");
+ img_btnsm_off = loadimage("images/ui/btnsm_off.png");
- img_sfx = loadimage(DATA_PREFIX "images/tools/sfx.png");
- img_speak = loadimage(DATA_PREFIX "images/tools/speak.png");
+ img_sfx = loadimage("images/tools/sfx.png");
+ img_speak = loadimage("images/tools/speak.png");
img_black = SDL_CreateRGBSurface(SDL_SRCALPHA | SDL_SWSURFACE,
img_btn_off->w, img_btn_off->h,
@@ -21307,54 +21367,54 @@ static void setup(void)
show_progress_bar(screen);
- img_yes = loadimage(DATA_PREFIX "images/ui/yes.png");
- img_no = loadimage(DATA_PREFIX "images/ui/no.png");
+ img_yes = loadimage("images/ui/yes.png");
+ img_no = loadimage("images/ui/no.png");
- img_prev = loadimage(DATA_PREFIX "images/ui/prev.png");
- img_next = loadimage(DATA_PREFIX "images/ui/next.png");
+ img_prev = loadimage("images/ui/prev.png");
+ img_next = loadimage("images/ui/next.png");
- img_mirror = loadimage(DATA_PREFIX "images/ui/mirror.png");
- img_flip = loadimage(DATA_PREFIX "images/ui/flip.png");
+ img_mirror = loadimage("images/ui/mirror.png");
+ img_flip = loadimage("images/ui/flip.png");
- img_open = loadimage(DATA_PREFIX "images/ui/open.png");
- img_erase = loadimage(DATA_PREFIX "images/ui/erase.png");
- img_back = loadimage(DATA_PREFIX "images/ui/back.png");
- img_trash = loadimage(DATA_PREFIX "images/ui/trash.png");
+ img_open = loadimage("images/ui/open.png");
+ img_erase = loadimage("images/ui/erase.png");
+ img_back = loadimage("images/ui/back.png");
+ img_trash = loadimage("images/ui/trash.png");
- img_slideshow = loadimage(DATA_PREFIX "images/ui/slideshow.png");
- img_play = loadimage(DATA_PREFIX "images/ui/play.png");
- img_select_digits = loadimage(DATA_PREFIX "images/ui/select_digits.png");
+ img_slideshow = loadimage("images/ui/slideshow.png");
+ img_play = loadimage("images/ui/play.png");
+ img_select_digits = loadimage("images/ui/select_digits.png");
- img_popup_arrow = loadimage(DATA_PREFIX "images/ui/popup_arrow.png");
+ img_popup_arrow = loadimage("images/ui/popup_arrow.png");
- img_dead40x40 = loadimage(DATA_PREFIX "images/ui/dead40x40.png");
+ img_dead40x40 = loadimage("images/ui/dead40x40.png");
- img_printer = loadimage(DATA_PREFIX "images/ui/printer.png");
- img_printer_wait = loadimage(DATA_PREFIX "images/ui/printer_wait.png");
+ img_printer = loadimage("images/ui/printer.png");
+ img_printer_wait = loadimage("images/ui/printer_wait.png");
- img_save_over = loadimage(DATA_PREFIX "images/ui/save_over.png");
+ img_save_over = loadimage("images/ui/save_over.png");
- img_grow = loadimage(DATA_PREFIX "images/ui/grow.png");
- img_shrink = loadimage(DATA_PREFIX "images/ui/shrink.png");
+ img_grow = loadimage("images/ui/grow.png");
+ img_shrink = loadimage("images/ui/shrink.png");
- img_magic_paint = loadimage(DATA_PREFIX "images/ui/magic_paint.png");
- img_magic_fullscreen = loadimage(DATA_PREFIX "images/ui/magic_fullscreen.png");
+ img_magic_paint = loadimage("images/ui/magic_paint.png");
+ img_magic_fullscreen = loadimage("images/ui/magic_fullscreen.png");
- img_bold = loadimage(DATA_PREFIX "images/ui/bold.png");
- img_italic = loadimage(DATA_PREFIX "images/ui/italic.png");
+ img_bold = loadimage("images/ui/bold.png");
+ img_italic = loadimage("images/ui/italic.png");
- img_label = loadimage(DATA_PREFIX "images/tools/label.png");
- img_label_select = loadimage(DATA_PREFIX "images/tools/label_select.png");
+ img_label = loadimage("images/tools/label.png");
+ img_label_select = loadimage("images/tools/label_select.png");
show_progress_bar(screen);
- tmp_imgcurup = loadimage(DATA_PREFIX "images/ui/cursor_up_large.png");
- tmp_imgcurdown = loadimage(DATA_PREFIX "images/ui/cursor_down_large.png");
+ tmp_imgcurup = loadimage("images/ui/cursor_up_large.png");
+ tmp_imgcurdown = loadimage("images/ui/cursor_down_large.png");
img_cursor_up = thumbnail(tmp_imgcurup, THUMB_W, THUMB_H, 0);
img_cursor_down = thumbnail(tmp_imgcurdown, THUMB_W, THUMB_H, 0);
- tmp_imgcurup = loadimage(DATA_PREFIX "images/ui/cursor_starter_up.png");
- tmp_imgcurdown = loadimage(DATA_PREFIX "images/ui/cursor_starter_down.png");
+ tmp_imgcurup = loadimage("images/ui/cursor_starter_up.png");
+ tmp_imgcurdown = loadimage("images/ui/cursor_starter_down.png");
img_cursor_starter_up = thumbnail(tmp_imgcurup, THUMB_W, THUMB_H, 0);
img_cursor_starter_down = thumbnail(tmp_imgcurdown, THUMB_W, THUMB_H, 0);
SDL_FreeSurface(tmp_imgcurup);
@@ -21362,22 +21422,21 @@ static void setup(void)
show_progress_bar(screen);
- img_scroll_up = loadimage(DATA_PREFIX "images/ui/scroll_up.png");
- img_scroll_down = loadimage(DATA_PREFIX "images/ui/scroll_down.png");
+ img_scroll_up = loadimage("images/ui/scroll_up.png");
+ img_scroll_down = loadimage("images/ui/scroll_down.png");
- img_scroll_up_off = loadimage(DATA_PREFIX "images/ui/scroll_up_off.png");
- img_scroll_down_off =
- loadimage(DATA_PREFIX "images/ui/scroll_down_off.png");
+ img_scroll_up_off = loadimage("images/ui/scroll_up_off.png");
+ img_scroll_down_off = loadimage("images/ui/scroll_down_off.png");
#ifdef LOW_QUALITY_COLOR_SELECTOR
- img_paintcan = loadimage(DATA_PREFIX "images/ui/paintcan.png");
+ img_paintcan = loadimage("images/ui/paintcan.png");
#endif
show_progress_bar(screen);
/* Load brushes: */
- load_brush_dir(screen, DATA_PREFIX "brushes");
+ load_brush_dir(screen, "brushes");
homedirdir = get_fname("brushes", DIR_DATA);
load_brush_dir(screen, homedirdir);
#ifdef WIN32
@@ -21389,8 +21448,8 @@ static void setup(void)
if (num_brushes == 0)
{
fprintf(stderr,
- "\nError: No brushes found in " DATA_PREFIX "brushes/\n"
- "or %s\n\n", homedirdir);
+ "\nError: No brushes found in %s/brushes/\n"
+ "or %s\n\n", DATA_PREFIX, homedirdir);
cleanup();
exit(1);
}
@@ -21401,16 +21460,16 @@ static void setup(void)
/* Load system fonts: */
large_font = TuxPaint_Font_OpenFont(PANGO_DEFAULT_FONT,
- DATA_PREFIX "fonts/default_font.ttf",
+ "fonts/default_font.ttf",
30 - (only_uppercase * 3));
if (large_font == NULL)
{
fprintf(stderr,
"\nError: Can't load font file: "
- DATA_PREFIX "fonts/default_font.ttf\n"
+ "%s/fonts/default_font.ttf\n"
"The Simple DirectMedia Layer error that occurred was:\n"
- "%s\n\n", SDL_GetError());
+ "%s\n\n", DATA_PREFIX, SDL_GetError());
cleanup();
exit(1);
@@ -21418,7 +21477,7 @@ static void setup(void)
small_font = TuxPaint_Font_OpenFont(PANGO_DEFAULT_FONT,
- DATA_PREFIX "fonts/default_font.ttf",
+ "fonts/default_font.ttf",
#ifdef __APPLE__
12 - (only_uppercase * 2));
#else
@@ -21429,9 +21488,9 @@ static void setup(void)
{
fprintf(stderr,
"\nError: Can't load font file: "
- DATA_PREFIX "fonts/default_font.ttf\n"
+ "%s/fonts/default_font.ttf\n"
"The Simple DirectMedia Layer error that occurred was:\n"
- "%s\n\n", SDL_GetError());
+ "%s\n\n", DATA_PREFIX, SDL_GetError());
cleanup();
exit(1);
@@ -21473,12 +21532,12 @@ static void setup(void)
show_progress_bar(screen);
- img_mouse = loadimage(DATA_PREFIX "images/ui/mouse.png");
- img_mouse_click = loadimage(DATA_PREFIX "images/ui/mouse_click.png");
+ img_mouse = loadimage("images/ui/mouse.png");
+ img_mouse_click = loadimage("images/ui/mouse_click.png");
show_progress_bar(screen);
- img_color_picker = loadimage(DATA_PREFIX "images/ui/color_picker.png");
+ img_color_picker = loadimage("images/ui/color_picker.png");
/* Create toolbox and selector labels: */
@@ -21512,7 +21571,7 @@ static void setup(void)
#ifndef LOW_QUALITY_COLOR_SELECTOR
/* Create appropriately-shaped buttons: */
- img1 = loadimage(DATA_PREFIX "images/ui/paintwell.png");
+ img1 = loadimage("images/ui/paintwell.png");
img_paintwell = thumbnail(img1, color_button_w, color_button_h, 0);
tmp_btn_up = thumbnail(img_btn_up, color_button_w, color_button_h, 0);
tmp_btn_down = thumbnail(img_btn_down, color_button_w, color_button_h, 0);
@@ -21774,6 +21833,18 @@ int main(int argc, char *argv[])
CLOCK_TYPE time2;
CLOCK_TYPE time3;
+ DATA_PREFIX = getenv("TUXPAINT_DATA_PREFIX");
+ if (DATA_PREFIX == NULL)
+ DATA_PREFIX = DEFAULT_DATA_PREFIX;
+
+ MAGIC_PREFIX = getenv("TUXPAINT_MAGIC_PREFIX");
+ if (MAGIC_PREFIX == NULL)
+ MAGIC_PREFIX = DEFAULT_MAGIC_PREFIX;
+
+ LOCALEDIR = getenv("TUXPAINT_LOCALEDIR");
+ if (LOCALEDIR == NULL)
+ LOCALEDIR = DEFAULT_LOCALEDIR;
+
sugar_init(&argc, &argv);
CLOCK_ASM(time1);