lockfile into own function
This commit is contained in:
parent
5dc2a54407
commit
be05dba58f
1 changed files with 235 additions and 218 deletions
453
src/tuxpaint.c
453
src/tuxpaint.c
|
|
@ -19152,225 +19152,11 @@ static void chdir_to_binary(char *argv0)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////
|
||||||
static void setup(void)
|
|
||||||
{
|
static void setup_colors(void){
|
||||||
int i, j;
|
|
||||||
char *upstr;
|
|
||||||
SDL_Color black = { 0, 0, 0, 0 };
|
|
||||||
char *homedirdir;
|
|
||||||
FILE *fi;
|
FILE *fi;
|
||||||
SDL_Surface *tmp_surf;
|
int i, j;
|
||||||
SDL_Rect dest;
|
|
||||||
int scale;
|
|
||||||
#ifndef LOW_QUALITY_COLOR_SELECTOR
|
|
||||||
int x, y;
|
|
||||||
SDL_Surface *tmp_btn_up;
|
|
||||||
SDL_Surface *tmp_btn_down;
|
|
||||||
Uint8 r, g, b;
|
|
||||||
#endif
|
|
||||||
SDL_Surface *tmp_imgcurup, *tmp_imgcurdown;
|
|
||||||
Uint32 init_flags;
|
|
||||||
char tmp_str[128];
|
|
||||||
SDL_Surface *img1;
|
|
||||||
Uint32(*getpixel_tmp_btn_up) (SDL_Surface *, int, int);
|
|
||||||
Uint32(*getpixel_tmp_btn_down) (SDL_Surface *, int, int);
|
|
||||||
Uint32(*getpixel_img_paintwell) (SDL_Surface *, int, int);
|
|
||||||
int big_title;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
if (fullscreen)
|
|
||||||
{
|
|
||||||
InstallKeyboardHook();
|
|
||||||
SetActivationState(1);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
im_init(&im_data, get_current_language());
|
|
||||||
|
|
||||||
#ifndef NO_SDLPANGO
|
|
||||||
SDLPango_Init();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef WIN32
|
|
||||||
putenv((char *) "SDL_VIDEO_X11_WMCLASS=TuxPaint.TuxPaint");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (disable_screensaver == 0)
|
|
||||||
{
|
|
||||||
putenv((char *) "SDL_VIDEO_ALLOW_SCREENSAVER=1");
|
|
||||||
if (SDL_MAJOR_VERSION < 1 ||
|
|
||||||
(SDL_MAJOR_VERSION >= 1 && SDL_MINOR_VERSION < 2) ||
|
|
||||||
(SDL_MAJOR_VERSION >= 1 && SDL_MINOR_VERSION >= 2 && SDL_PATCHLEVEL < 12))
|
|
||||||
{
|
|
||||||
fprintf(stderr, "Note: 'allowscreensaver' requires SDL 1.2.12 or higher\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Test for lockfile, if we're using one: */
|
|
||||||
|
|
||||||
if (ok_to_use_lockfile)
|
|
||||||
{
|
|
||||||
char *lock_fname;
|
|
||||||
time_t time_lock, time_now;
|
|
||||||
char *homedirdir;
|
|
||||||
|
|
||||||
|
|
||||||
/* Get the current time: */
|
|
||||||
|
|
||||||
time_now = time(NULL);
|
|
||||||
|
|
||||||
|
|
||||||
/* Look for the lockfile... */
|
|
||||||
|
|
||||||
#ifndef WIN32
|
|
||||||
lock_fname = get_fname("lockfile.dat", DIR_SAVE);
|
|
||||||
#else
|
|
||||||
lock_fname = get_temp_fname("lockfile.dat");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
fi = fopen(lock_fname, "r");
|
|
||||||
if (fi != NULL)
|
|
||||||
{
|
|
||||||
/* If it exists, read its contents: */
|
|
||||||
|
|
||||||
if (fread(&time_lock, sizeof(time_t), 1, fi) > 0)
|
|
||||||
{
|
|
||||||
/* Has it not been 30 seconds yet? */
|
|
||||||
|
|
||||||
if (time_now < time_lock + 30)
|
|
||||||
{
|
|
||||||
/* FIXME: Wrap in gettext() */
|
|
||||||
printf
|
|
||||||
("You have already started tuxpaint less than 30 seconds ago.\n"
|
|
||||||
"To prevent multiple executions by mistake, TuxPaint will not run\n"
|
|
||||||
"before 30 seconds have elapsed since it was last started.\n"
|
|
||||||
"\n"
|
|
||||||
"You can also use the --nolockfile argument, see tuxpaint(1).\n\n");
|
|
||||||
|
|
||||||
free(lock_fname);
|
|
||||||
|
|
||||||
fclose(fi);
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fclose(fi);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Okay to run; create/update the lockfile */
|
|
||||||
|
|
||||||
/* (Make sure the directory exists, first!) */
|
|
||||||
homedirdir = get_fname("", DIR_SAVE);
|
|
||||||
mkdir(homedirdir, 0755);
|
|
||||||
free(homedirdir);
|
|
||||||
|
|
||||||
|
|
||||||
fi = fopen(lock_fname, "w");
|
|
||||||
if (fi != NULL)
|
|
||||||
{
|
|
||||||
/* If we can write to it, do so! */
|
|
||||||
|
|
||||||
fwrite(&time_now, sizeof(time_t), 1, fi);
|
|
||||||
fclose(fi);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
fprintf(stderr,
|
|
||||||
"\nWarning: I couldn't create the lockfile (%s)\n"
|
|
||||||
"The error that occurred was:\n"
|
|
||||||
"%s\n\n", lock_fname, strerror(errno));
|
|
||||||
}
|
|
||||||
|
|
||||||
free(lock_fname);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
init_flags = SDL_INIT_VIDEO | SDL_INIT_TIMER;
|
|
||||||
if (use_sound)
|
|
||||||
init_flags |= SDL_INIT_AUDIO;
|
|
||||||
if (!fullscreen)
|
|
||||||
init_flags |= SDL_INIT_NOPARACHUTE; /* allow debugger to catch crash */
|
|
||||||
|
|
||||||
/* Init SDL */
|
|
||||||
if (SDL_Init(init_flags) < 0)
|
|
||||||
{
|
|
||||||
#ifndef NOSOUND
|
|
||||||
char *olderr = strdup(SDL_GetError());
|
|
||||||
use_sound = 0;
|
|
||||||
init_flags &= ~SDL_INIT_AUDIO;
|
|
||||||
if (SDL_Init(init_flags) >= 0)
|
|
||||||
{
|
|
||||||
/* worked, w/o sound */
|
|
||||||
fprintf(stderr,
|
|
||||||
"\nWarning: I could not initialize audio!\n"
|
|
||||||
"The Simple DirectMedia Layer error that occurred was:\n"
|
|
||||||
"%s\n\n", olderr);
|
|
||||||
free(olderr);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
fprintf(stderr,
|
|
||||||
"\nError: I could not initialize video and/or the timer!\n"
|
|
||||||
"The Simple DirectMedia Layer error that occurred was:\n"
|
|
||||||
"%s\n\n", SDL_GetError());
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef NOSOUND
|
|
||||||
#ifndef WIN32
|
|
||||||
if (use_sound && Mix_OpenAudio(44100, AUDIO_S16SYS, 2, 1024) < 0)
|
|
||||||
#else
|
|
||||||
if (use_sound && Mix_OpenAudio(44100, AUDIO_S16SYS, 2, 2048) < 0)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
fprintf(stderr,
|
|
||||||
"\nWarning: I could not set up audio for 44100 Hz "
|
|
||||||
"16-bit stereo.\n"
|
|
||||||
"The Simple DirectMedia Layer error that occurred was:\n"
|
|
||||||
"%s\n\n", SDL_GetError());
|
|
||||||
use_sound = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = NUM_SOUNDS;
|
|
||||||
while (use_sound && i--)
|
|
||||||
{
|
|
||||||
sounds[i] = Mix_LoadWAV(sound_fnames[i]);
|
|
||||||
|
|
||||||
if (sounds[i] == NULL)
|
|
||||||
{
|
|
||||||
fprintf(stderr,
|
|
||||||
"\nWarning: I couldn't open a sound file:\n%s\n"
|
|
||||||
"The Simple DirectMedia Layer error that occurred was:\n"
|
|
||||||
"%s\n\n", sound_fnames[i], SDL_GetError());
|
|
||||||
use_sound = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* Set-up Key-Repeat: */
|
|
||||||
SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
|
|
||||||
|
|
||||||
/* Init TTF stuff: */
|
|
||||||
if (TTF_Init() < 0)
|
|
||||||
{
|
|
||||||
fprintf(stderr,
|
|
||||||
"\nError: I could not initialize the font (TTF) library!\n"
|
|
||||||
"The Simple DirectMedia Layer error that occurred was:\n"
|
|
||||||
"%s\n\n", SDL_GetError());
|
|
||||||
|
|
||||||
SDL_Quit();
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Load colors, or use default ones: */
|
/* Load colors, or use default ones: */
|
||||||
|
|
||||||
|
|
@ -19520,6 +19306,237 @@ static void setup(void)
|
||||||
color_picker_y = 0;
|
color_picker_y = 0;
|
||||||
NUM_COLORS++;
|
NUM_COLORS++;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
static void do_lock_file(void)
|
||||||
|
{
|
||||||
|
/* Test for lockfile, if we're using one: */
|
||||||
|
|
||||||
|
if (!ok_to_use_lockfile)
|
||||||
|
return;
|
||||||
|
|
||||||
|
char *lock_fname;
|
||||||
|
time_t time_lock, time_now;
|
||||||
|
char *homedirdir;
|
||||||
|
|
||||||
|
|
||||||
|
/* Get the current time: */
|
||||||
|
|
||||||
|
time_now = time(NULL);
|
||||||
|
|
||||||
|
|
||||||
|
/* Look for the lockfile... */
|
||||||
|
|
||||||
|
#ifndef WIN32
|
||||||
|
lock_fname = get_fname("lockfile.dat", DIR_SAVE);
|
||||||
|
#else
|
||||||
|
lock_fname = get_temp_fname("lockfile.dat");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
fi = fopen(lock_fname, "r");
|
||||||
|
if (fi != NULL)
|
||||||
|
{
|
||||||
|
/* If it exists, read its contents: */
|
||||||
|
|
||||||
|
if (fread(&time_lock, sizeof(time_t), 1, fi) > 0)
|
||||||
|
{
|
||||||
|
/* Has it not been 30 seconds yet? */
|
||||||
|
|
||||||
|
if (time_now < time_lock + 30)
|
||||||
|
{
|
||||||
|
/* FIXME: Wrap in gettext() */
|
||||||
|
printf
|
||||||
|
("You have already started tuxpaint less than 30 seconds ago.\n"
|
||||||
|
"To prevent multiple executions by mistake, TuxPaint will not run\n"
|
||||||
|
"before 30 seconds have elapsed since it was last started.\n"
|
||||||
|
"\n"
|
||||||
|
"You can also use the --nolockfile argument, see tuxpaint(1).\n\n");
|
||||||
|
|
||||||
|
free(lock_fname);
|
||||||
|
|
||||||
|
fclose(fi);
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(fi);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Okay to run; create/update the lockfile */
|
||||||
|
|
||||||
|
/* (Make sure the directory exists, first!) */
|
||||||
|
homedirdir = get_fname("", DIR_SAVE);
|
||||||
|
mkdir(homedirdir, 0755);
|
||||||
|
free(homedirdir);
|
||||||
|
|
||||||
|
|
||||||
|
fi = fopen(lock_fname, "w");
|
||||||
|
if (fi != NULL)
|
||||||
|
{
|
||||||
|
/* If we can write to it, do so! */
|
||||||
|
|
||||||
|
fwrite(&time_now, sizeof(time_t), 1, fi);
|
||||||
|
fclose(fi);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fprintf(stderr,
|
||||||
|
"\nWarning: I couldn't create the lockfile (%s)\n"
|
||||||
|
"The error that occurred was:\n"
|
||||||
|
"%s\n\n", lock_fname, strerror(errno));
|
||||||
|
}
|
||||||
|
|
||||||
|
free(lock_fname);
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
static void setup(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
char *upstr;
|
||||||
|
SDL_Color black = { 0, 0, 0, 0 };
|
||||||
|
char *homedirdir;
|
||||||
|
FILE *fi;
|
||||||
|
SDL_Surface *tmp_surf;
|
||||||
|
SDL_Rect dest;
|
||||||
|
int scale;
|
||||||
|
#ifndef LOW_QUALITY_COLOR_SELECTOR
|
||||||
|
int x, y;
|
||||||
|
SDL_Surface *tmp_btn_up;
|
||||||
|
SDL_Surface *tmp_btn_down;
|
||||||
|
Uint8 r, g, b;
|
||||||
|
#endif
|
||||||
|
SDL_Surface *tmp_imgcurup, *tmp_imgcurdown;
|
||||||
|
Uint32 init_flags;
|
||||||
|
char tmp_str[128];
|
||||||
|
SDL_Surface *img1;
|
||||||
|
Uint32(*getpixel_tmp_btn_up) (SDL_Surface *, int, int);
|
||||||
|
Uint32(*getpixel_tmp_btn_down) (SDL_Surface *, int, int);
|
||||||
|
Uint32(*getpixel_img_paintwell) (SDL_Surface *, int, int);
|
||||||
|
int big_title;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
if (fullscreen)
|
||||||
|
{
|
||||||
|
InstallKeyboardHook();
|
||||||
|
SetActivationState(1);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
im_init(&im_data, get_current_language());
|
||||||
|
|
||||||
|
#ifndef NO_SDLPANGO
|
||||||
|
SDLPango_Init();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WIN32
|
||||||
|
putenv((char *) "SDL_VIDEO_X11_WMCLASS=TuxPaint.TuxPaint");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (disable_screensaver == 0)
|
||||||
|
{
|
||||||
|
putenv((char *) "SDL_VIDEO_ALLOW_SCREENSAVER=1");
|
||||||
|
if (SDL_MAJOR_VERSION < 1 ||
|
||||||
|
(SDL_MAJOR_VERSION >= 1 && SDL_MINOR_VERSION < 2) ||
|
||||||
|
(SDL_MAJOR_VERSION >= 1 && SDL_MINOR_VERSION >= 2 && SDL_PATCHLEVEL < 12))
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Note: 'allowscreensaver' requires SDL 1.2.12 or higher\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
do_lock_file();
|
||||||
|
|
||||||
|
init_flags = SDL_INIT_VIDEO | SDL_INIT_TIMER;
|
||||||
|
if (use_sound)
|
||||||
|
init_flags |= SDL_INIT_AUDIO;
|
||||||
|
if (!fullscreen)
|
||||||
|
init_flags |= SDL_INIT_NOPARACHUTE; /* allow debugger to catch crash */
|
||||||
|
|
||||||
|
/* Init SDL */
|
||||||
|
if (SDL_Init(init_flags) < 0)
|
||||||
|
{
|
||||||
|
#ifndef NOSOUND
|
||||||
|
char *olderr = strdup(SDL_GetError());
|
||||||
|
use_sound = 0;
|
||||||
|
init_flags &= ~SDL_INIT_AUDIO;
|
||||||
|
if (SDL_Init(init_flags) >= 0)
|
||||||
|
{
|
||||||
|
/* worked, w/o sound */
|
||||||
|
fprintf(stderr,
|
||||||
|
"\nWarning: I could not initialize audio!\n"
|
||||||
|
"The Simple DirectMedia Layer error that occurred was:\n"
|
||||||
|
"%s\n\n", olderr);
|
||||||
|
free(olderr);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
fprintf(stderr,
|
||||||
|
"\nError: I could not initialize video and/or the timer!\n"
|
||||||
|
"The Simple DirectMedia Layer error that occurred was:\n"
|
||||||
|
"%s\n\n", SDL_GetError());
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef NOSOUND
|
||||||
|
#ifndef WIN32
|
||||||
|
if (use_sound && Mix_OpenAudio(44100, AUDIO_S16SYS, 2, 1024) < 0)
|
||||||
|
#else
|
||||||
|
if (use_sound && Mix_OpenAudio(44100, AUDIO_S16SYS, 2, 2048) < 0)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
fprintf(stderr,
|
||||||
|
"\nWarning: I could not set up audio for 44100 Hz "
|
||||||
|
"16-bit stereo.\n"
|
||||||
|
"The Simple DirectMedia Layer error that occurred was:\n"
|
||||||
|
"%s\n\n", SDL_GetError());
|
||||||
|
use_sound = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
i = NUM_SOUNDS;
|
||||||
|
while (use_sound && i--)
|
||||||
|
{
|
||||||
|
sounds[i] = Mix_LoadWAV(sound_fnames[i]);
|
||||||
|
|
||||||
|
if (sounds[i] == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr,
|
||||||
|
"\nWarning: I couldn't open a sound file:\n%s\n"
|
||||||
|
"The Simple DirectMedia Layer error that occurred was:\n"
|
||||||
|
"%s\n\n", sound_fnames[i], SDL_GetError());
|
||||||
|
use_sound = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Set-up Key-Repeat: */
|
||||||
|
SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
|
||||||
|
|
||||||
|
/* Init TTF stuff: */
|
||||||
|
if (TTF_Init() < 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr,
|
||||||
|
"\nError: I could not initialize the font (TTF) library!\n"
|
||||||
|
"The Simple DirectMedia Layer error that occurred was:\n"
|
||||||
|
"%s\n\n", SDL_GetError());
|
||||||
|
|
||||||
|
SDL_Quit();
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
setup_colors();
|
||||||
|
|
||||||
/* Set window icon and caption: */
|
/* Set window icon and caption: */
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue