X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?p=xscreensaver;a=blobdiff_plain;f=utils%2Fusleep.c;h=6eec9a5f46b83339ea2f3b23809099991d8ecfad;hp=ed779a4a55840c8a0094302cef41283e2d8557af;hb=96a411663168b0ba5432b407a83be55f3df0c802;hpb=258170f6204e23da06f272ffda1f4504b6ae2eaf diff --git a/utils/usleep.c b/utils/usleep.c index ed779a4a..6eec9a5f 100644 --- a/utils/usleep.c +++ b/utils/usleep.c @@ -1,4 +1,5 @@ -/* xscreensaver, Copyright (c) 1992 Jamie Zawinski +/* xscreensaver, Copyright (c) 1992, 1996, 1997, 2003 + * Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -9,93 +10,53 @@ * implied warranty. */ -#if __STDC__ -#include +#ifdef HAVE_CONFIG_H +# include "config.h" +#else /* !HAVE_CONFIG_H */ +# ifndef NO_SELECT +# define HAVE_SELECT +# endif +#endif /* !HAVE_CONFIG_H */ + +#ifdef __STDC__ +# include #endif -#ifdef SVR4 -#include +#ifdef HAVE_UNISTD_H +# include #endif -#include -#include /* lazy way out */ +#if defined(VMS) +# include +# include +# include +#elif defined(HAVE_SELECT) +# include /* for struct timeval */ +#endif -/* usleep() doesn't exist everywhere, and select() is faster anyway. - */ -#ifndef VMS +#ifdef __SCREENHACK_USLEEP_H__ +ERROR, do not include that here +#endif -#ifdef NO_SELECT - /* If you don't have select() or usleep(), I guess you lose... - Maybe you have napms() instead? Let me know. - */ void -screenhack_usleep (usecs) - unsigned long usecs; +screenhack_usleep (unsigned long usecs) { - usleep (usecs); -} - -#else /* ! NO_SELECT */ +# if defined(VMS) + float seconds = ((float) usecs)/1000000.0; + unsigned long int statvms = lib$wait(&seconds); -void -screenhack_usleep (usecs) - unsigned long usecs; -{ +#elif defined(HAVE_SELECT) + /* usleep() doesn't exist everywhere, and select() is faster anyway. */ struct timeval tv; tv.tv_sec = usecs / 1000000L; tv.tv_usec = usecs % 1000000L; (void) select (0, 0, 0, 0, &tv); -} -#endif /* ! NO_SELECT */ - -#else /* VMS */ - -#define SEC_DELTA "0000 00:00:01.00" -#define TICK_DELTA "0000 00:00:00.08" -static int bin_sec_delta[2], bin_tick_delta[2], deltas_set = 0; - -static void -set_deltas () -{ - int status; - extern int SYS$BINTIM (); - $DESCRIPTOR (str_sec_delta, SEC_DELTA); - $DESCRIPTOR (str_tick_delta, TICK_DELTA); - if (!deltas_set) - { - status = SYS$BINTIM (&str_sec_delta, &bin_sec_delta); - if (!(status & 1)) - { - fprintf (stderr, "%s: cannot convert delta time ", progname); - fprintf (stderr, SEC_DELTA); - fprintf (stderr, "; status code = %d\n", status); - exit (status); - } - status = SYS$BINTIM (&str_tick_delta, &bin_tick_delta); - if (!(status & 1)) - { - fprintf (stderr, "%s: cannot convert delta time ", progname); - fprintf (stderr, TICK_DELTA); - fprintf (stderr, "; status code = %d\n", status); - exit (status); - } - deltas_set = 1; - } -} +#else /* !VMS && !HAVE_SELECT */ + /* If you don't have select() or usleep(), I guess you lose... + Maybe you have napms() instead? Let me know. */ + usleep (usecs); -void -screenhack_usleep (usecs) - unsigned long usecs; -{ - int status, *bin_delta; - extern int SYS$SCHWDK (), SYS$HIBER (); - - if (!deltas_set) set_deltas (); - bin_delta = (usecs == TICK_INTERVAL) ? &bin_tick_delta : &bin_sec_delta; - status = SYS$SCHDWK (0, 0, bin_delta, 0); - if ((status & 1)) (void) SYS$HIBER (); +#endif /* !VMS && !HAVE_SELECT */ } - -#endif /*VMS */