sleep_milliseconds(delay);
}
-boolean DelayReachedExt(unsigned int *counter_var, unsigned int delay,
- unsigned int actual_counter)
+boolean DelayReachedExt2(unsigned int *counter_var, unsigned int delay,
+ unsigned int actual_counter)
{
if (actual_counter >= *counter_var &&
actual_counter < *counter_var + delay)
return TRUE;
}
-boolean FrameReached(unsigned int *frame_counter_var, unsigned int frame_delay)
+boolean DelayReachedExt(DelayCounter *counter, unsigned int actual_counter)
{
- return DelayReachedExt(frame_counter_var, frame_delay, FrameCounter);
+ return DelayReachedExt2(&counter->count, counter->value, actual_counter);
}
-boolean DelayReached(unsigned int *counter_var, unsigned int delay)
+boolean FrameReached(DelayCounter *counter)
{
- return DelayReachedExt(counter_var, delay, Counter());
+ return DelayReachedExt(counter, FrameCounter);
}
-void ResetDelayCounterExt(unsigned int *counter_var,
- unsigned int actual_counter)
+boolean DelayReached(DelayCounter *counter)
{
- DelayReachedExt(counter_var, 0, actual_counter);
+ return DelayReachedExt(counter, Counter());
}
-void ResetFrameCounter(unsigned int *frame_counter_var)
+void ResetDelayCounterExt(DelayCounter *counter, unsigned int actual_counter)
{
- FrameReached(frame_counter_var, 0);
+ DelayReachedExt2(&counter->count, 0, actual_counter);
}
-void ResetDelayCounter(unsigned int *counter_var)
+void ResetFrameCounter(DelayCounter *counter)
{
- DelayReached(counter_var, 0);
+ ResetDelayCounterExt(counter, FrameCounter);
}
-int WaitUntilDelayReached(unsigned int *counter_var, unsigned int delay)
+void ResetDelayCounter(DelayCounter *counter)
{
+ ResetDelayCounterExt(counter, Counter());
+}
+
+int WaitUntilDelayReached(DelayCounter *counter)
+{
+ unsigned int *counter_var = &counter->count;
+ unsigned int delay = counter->value;
unsigned int actual_counter;
int skip_frames = 0;
return skip_frames;
}
-void SkipUntilDelayReached(unsigned int *counter_var, unsigned int delay,
+void SkipUntilDelayReached(DelayCounter *counter,
int *loop_var, int last_loop_value)
{
- int skip_frames = WaitUntilDelayReached(counter_var, delay);
+ int skip_frames = WaitUntilDelayReached(counter);
#if 0
#if DEBUG
if (skip_frames)
Debug("internal:SkipUntilDelayReached",
"%d: %d ms -> SKIP %d FRAME(S) [%d ms]",
- *loop_var, delay,
- skip_frames, skip_frames * delay);
+ *loop_var, counter->value,
+ skip_frames, skip_frames * counter->value);
else
Debug("internal:SkipUntilDelayReached",
"%d: %d ms",
- *loop_var, delay);
+ *loop_var, counter->value);
#endif
#endif
// default random seed
seed = (int)time(NULL); // seconds since the epoch
-#if !defined(PLATFORM_WIN32)
+#if !defined(PLATFORM_WINDOWS)
// add some more randomness
struct timeval current_time;
{
static char *login_name = NULL;
-#if defined(PLATFORM_WIN32)
+#if defined(PLATFORM_WINDOWS)
if (login_name == NULL)
{
unsigned long buffer_size = MAX_USERNAME_LEN + 1;
{
static char *real_name = NULL;
-#if defined(PLATFORM_WIN32)
+#if defined(PLATFORM_WINDOWS)
if (real_name == NULL)
{
static char buffer[MAX_USERNAME_LEN + 1];
return match;
}
+boolean isURL(char *s)
+{
+ while (*s && *s >= 'a' && *s <= 'z')
+ s++;
+
+ return strPrefix(s, "://");
+}
+
// ----------------------------------------------------------------------------
// command line option handling functions
options.identifier = NULL;
options.level_nr = NULL;
+ options.display_nr = 0;
+
options.mytapes = FALSE;
options.serveronly = FALSE;
options.network = FALSE;
if (option_arg == next_option)
options_left++;
}
-#if defined(PLATFORM_MACOSX)
+ else if (strncmp(option, "-display", option_len) == 0)
+ {
+ if (option_arg == NULL)
+ FailWithHelp("option '%s' requires an argument", option_str);
+
+ if (option_arg == next_option)
+ options_left++;
+
+ int display_nr = atoi(option_arg);
+
+#if 1
+ // dirty hack: SDL_GetNumVideoDisplays() seems broken on some systems
+ options.display_nr = display_nr;
+#else
+ options.display_nr =
+ MAX(0, MIN(display_nr, SDL_GetNumVideoDisplays() - 1));
+
+ if (display_nr != options.display_nr)
+ Warn("invalid display %d -- using display %d",
+ display_nr, options.display_nr);
+#endif
+ }
+#if defined(PLATFORM_MAC)
else if (strPrefix(option, "-psn"))
{
// ignore process serial number when launched via GUI on Mac OS X
void clear_mem(void *ptr, unsigned int size)
{
-#if defined(PLATFORM_WIN32)
+#if defined(PLATFORM_WINDOWS)
// for unknown reason, memset() sometimes crashes when compiled with MinGW
char *cptr = (char *)ptr;
void NotifyUserAboutErrorFile(void)
{
-#if defined(PLATFORM_WIN32)
+#if defined(PLATFORM_WINDOWS)
char *title_text = getStringCat2(program.program_title, " Error Message");
char *error_text = getStringCat2("The program was aborted due to an error; "
"for details, see the following error file:"