diff options
author | Hans-Christoph Steiner <eighthave@users.sourceforge.net> | 2004-04-07 04:15:06 +0000 |
---|---|---|
committer | Hans-Christoph Steiner <eighthave@users.sourceforge.net> | 2004-04-07 04:15:06 +0000 |
commit | 2f1970ed02845e6c954a1c5265b1b6568cbb8f1c (patch) | |
tree | 5f01f850589e1bf23d6b8ca00ab50dd5c5108506 /libOSC | |
parent | 7e494a3c035be45ee4a08ba84120ef4d8f030b26 (diff) |
added files from OSC-Kit 1.0 in order to get updated free license; added GPL to my modifications
svn path=/trunk/externals/OSCx/; revision=1556
Diffstat (limited to 'libOSC')
-rw-r--r-- | libOSC/OSC-timetag.c | 348 | ||||
-rw-r--r-- | libOSC/OSC-timetag.h | 60 |
2 files changed, 202 insertions, 206 deletions
diff --git a/libOSC/OSC-timetag.c b/libOSC/OSC-timetag.c index 639eae9..92e3735 100644 --- a/libOSC/OSC-timetag.c +++ b/libOSC/OSC-timetag.c @@ -1,175 +1,173 @@ -/*
-Copyright (c) 1998. The Regents of the University of California (Regents).
-All Rights Reserved.
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for educational, research, and not-for-profit purposes, without
-fee and without a signed licensing agreement, is hereby granted, provided that
-the above copyright notice, this paragraph and the following two paragraphs
-appear in all copies, modifications, and distributions. Contact The Office of
-Technology Licensing, UC Berkeley, 2150 Shattuck Avenue, Suite 510, Berkeley,
-CA 94720-1620, (510) 643-7201, for commercial licensing opportunities.
-
-Written by Matt Wright, The Center for New Music and Audio Technologies,
-University of California, Berkeley.
-
- IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS,
- ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
- REGENTS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE. THE SOFTWARE AND ACCOMPANYING
- DOCUMENTATION, IF ANY, PROVIDED HEREUNDER IS PROVIDED "AS IS".
- REGENTS HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
- ENHANCEMENTS, OR MODIFICATIONS.
-
-The OpenSound Control WWW page is
- http://www.cnmat.berkeley.edu/OpenSoundControl
-*/
-
-/*
-
- OSC_timeTag.c: library for manipulating OSC time tags
- Matt Wright, 5/29/97
-
- Version 0.2 (9/11/98): cleaned up so no explicit type names in the .c file.
-
-*/
-
-#include "OSC-timetag.h"
-
-
-#ifdef HAS8BYTEINT
-#define TWO_TO_THE_32_FLOAT 4294967296.0f
-
-OSCTimeTag OSCTT_Immediately(void) {
- return (OSCTimeTag) 1;
-}
-
-OSCTimeTag OSCTT_BiggestPossibleTimeTag(void) {
- return (OSCTimeTag) 0xffffffffffffffff;
-}
-
-OSCTimeTag OSCTT_PlusSeconds(OSCTimeTag original, float secondsOffset) {
- int64 offset = (int64) (secondsOffset * TWO_TO_THE_32_FLOAT);
-
-/* printf("* OSCTT_PlusSeconds %llx plus %f seconds (i.e., %lld offset) is %llx\n", original,
- secondsOffset, offset, original + offset); */
-
- return original + offset;
-}
-
-int OSCTT_Compare(OSCTimeTag left, OSCTimeTag right) {
-#if 0
- printf("***** OSCTT_Compare(%llx, %llx): %d\n", left, right,
- (left<right) ? -1 : ((left == right) ? 0 : 1));
-#endif
- if (left < right) {
- return -1;
- } else if (left == right) {
- return 0;
- } else {
- return 1;
- }
-}
-
-#ifdef __sgi
-#include <sys/time.h>
-
-#define SECONDS_FROM_1900_to_1970 2208988800 /* 17 leap years */
-#define TWO_TO_THE_32_OVER_ONE_MILLION 4295
-
-
-OSCTimeTag OSCTT_CurrentTime(void) {
- uint64 result;
- uint32 usecOffset;
- struct timeval tv;
- struct timezone tz;
-
- BSDgettimeofday(&tv, &tz);
-
- /* First get the seconds right */
- result = (unsigned) SECONDS_FROM_1900_to_1970 +
- (unsigned) tv.tv_sec -
- (unsigned) 60 * tz.tz_minuteswest +
- (unsigned) (tz.tz_dsttime ? 3600 : 0);
-
-#if 0
- /* No timezone, no DST version ... */
- result = (unsigned) SECONDS_FROM_1900_to_1970 +
- (unsigned) tv.tv_sec;
-#endif
-
-
- /* make seconds the high-order 32 bits */
- result = result << 32;
-
- /* Now get the fractional part. */
- usecOffset = (unsigned) tv.tv_usec * (unsigned) TWO_TO_THE_32_OVER_ONE_MILLION;
- /* printf("** %ld microsec is offset %x\n", tv.tv_usec, usecOffset); */
-
- result += usecOffset;
-
-/* printf("* OSCTT_CurrentTime is %llx\n", result); */
- return result;
-}
-
-#else /* __sgi */
-
-/* Instead of asking your operating system what time it is, it might be
- clever to find out the current time at the instant your application
- starts audio processing, and then keep track of the number of samples
- output to know how much time has passed. */
-
-/* Loser version for systems that have no ability to tell the current time: */
-OSCTimeTag OSCTT_CurrentTime(void) {
- return (OSCTimeTag) 1;
-}
-
-#endif /* __sgi */
-
-
-#else /* Not HAS8BYTEINT */
-
-OSCTimeTag OSCTT_CurrentTime(void) {
- OSCTimeTag result;
- result.seconds = 0;
- result.fraction = 1;
- return result;
-}
-
-OSCTimeTag OSCTT_BiggestPossibleTimeTag(void) {
- OSCTimeTag result;
- result.seconds = 0xffffffff;
- result.fraction = 0xffffffff;
- return result;
-}
-
-OSCTimeTag OSCTT_Immediately(void) {
- OSCTimeTag result;
- result.seconds = 0;
- result.fraction = 1;
- return result;
-}
-
-OSCTimeTag OSCTT_PlusSeconds(OSCTimeTag original, float secondsOffset) {
- OSCTimeTag result;
- result.seconds = 0;
- result.fraction = 1;
- return result;
-}
-
-int OSCTT_Compare(OSCTimeTag left, OSCTimeTag right) {
- /* Untested! */
- int highResult = left.seconds - right.seconds;
-
- if (highResult != 0) return highResult;
-
- return left.fraction - right.fraction;
-}
-
-
-#endif /* HAS8BYTEINT */
-
+/* +Copyright © 1998. The Regents of the University of California (Regents). +All Rights Reserved. + +Written by Matt Wright, The Center for New Music and Audio Technologies, +University of California, Berkeley. + +Permission to use, copy, modify, distribute, and distribute modified versions +of this software and its documentation without fee and without a signed +licensing agreement, is hereby granted, provided that the above copyright +notice, this paragraph and the following two paragraphs appear in all copies, +modifications, and distributions. + +IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, +SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING +OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS +BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED +HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE +MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + +The OpenSound Control WWW page is + http://www.cnmat.berkeley.edu/OpenSoundControl +*/ + + +/* + + OSC_timeTag.c: library for manipulating OSC time tags + Matt Wright, 5/29/97 + + Version 0.2 (9/11/98): cleaned up so no explicit type names in the .c file. + +*/ + +#include "OSC-timetag.h" + + +#ifdef HAS8BYTEINT +#define TWO_TO_THE_32_FLOAT 4294967296.0f + +OSCTimeTag OSCTT_Immediately(void) { + return (OSCTimeTag) 1; +} + +OSCTimeTag OSCTT_BiggestPossibleTimeTag(void) { + return (OSCTimeTag) 0xffffffffffffffff; +} + +OSCTimeTag OSCTT_PlusSeconds(OSCTimeTag original, float secondsOffset) { + int8 offset = (int8) (secondsOffset * TWO_TO_THE_32_FLOAT); + +/* printf("* OSCTT_PlusSeconds %llx plus %f seconds (i.e., %lld offset) is %llx\n", original, + secondsOffset, offset, original + offset); */ + + return original + offset; +} + +int OSCTT_Compare(OSCTimeTag left, OSCTimeTag right) { +#if 0 + printf("***** OSCTT_Compare(%llx, %llx): %d\n", left, right, + (left<right) ? -1 : ((left == right) ? 0 : 1)); +#endif + if (left < right) { + return -1; + } else if (left == right) { + return 0; + } else { + return 1; + } +} + +#ifdef __sgi +#include <sys/time.h> + +#define SECONDS_FROM_1900_to_1970 2208988800 /* 17 leap years */ +#define TWO_TO_THE_32_OVER_ONE_MILLION 4295 + + +OSCTimeTag OSCTT_CurrentTime(void) { + uint8 result; + uint4 usecOffset; + struct timeval tv; + struct timezone tz; + + BSDgettimeofday(&tv, &tz); + + /* First get the seconds right */ + result = (unsigned) SECONDS_FROM_1900_to_1970 + + (unsigned) tv.tv_sec - + (unsigned) 60 * tz.tz_minuteswest + + (unsigned) (tz.tz_dsttime ? 3600 : 0); + +#if 0 + /* No timezone, no DST version ... */ + result = (unsigned) SECONDS_FROM_1900_to_1970 + + (unsigned) tv.tv_sec; +#endif + + + /* make seconds the high-order 32 bits */ + result = result << 32; + + /* Now get the fractional part. */ + usecOffset = (unsigned) tv.tv_usec * (unsigned) TWO_TO_THE_32_OVER_ONE_MILLION; + /* printf("** %ld microsec is offset %x\n", tv.tv_usec, usecOffset); */ + + result += usecOffset; + +/* printf("* OSCTT_CurrentTime is %llx\n", result); */ + return result; +} + +#else /* __sgi */ + +/* Instead of asking your operating system what time it is, it might be + clever to find out the current time at the instant your application + starts audio processing, and then keep track of the number of samples + output to know how much time has passed. */ + +/* Loser version for systems that have no ability to tell the current time: */ +OSCTimeTag OSCTT_CurrentTime(void) { + return (OSCTimeTag) 1; +} + +#endif /* __sgi */ + + +#else /* Not HAS8BYTEINT */ + +OSCTimeTag OSCTT_CurrentTime(void) { + OSCTimeTag result; + result.seconds = 0; + result.fraction = 1; + return result; +} + +OSCTimeTag OSCTT_BiggestPossibleTimeTag(void) { + OSCTimeTag result; + result.seconds = 0xffffffff; + result.fraction = 0xffffffff; + return result; +} + +OSCTimeTag OSCTT_Immediately(void) { + OSCTimeTag result; + result.seconds = 0; + result.fraction = 1; + return result; +} + +OSCTimeTag OSCTT_PlusSeconds(OSCTimeTag original, float secondsOffset) { + OSCTimeTag result; + result.seconds = 0; + result.fraction = 1; + return result; +} + +int OSCTT_Compare(OSCTimeTag left, OSCTimeTag right) { + /* Untested! */ + int highResult = left.seconds - right.seconds; + + if (highResult != 0) return highResult; + + return left.fraction - right.fraction; +} + + +#endif /* HAS8BYTEINT */ + diff --git a/libOSC/OSC-timetag.h b/libOSC/OSC-timetag.h index 3ce693a..7e6cbe6 100644 --- a/libOSC/OSC-timetag.h +++ b/libOSC/OSC-timetag.h @@ -1,45 +1,43 @@ /* -Copyright (c) 1998. The Regents of the University of California (Regents). +Copyright © 1998. The Regents of the University of California (Regents). All Rights Reserved. -Permission to use, copy, modify, and distribute this software and its -documentation for educational, research, and not-for-profit purposes, without -fee and without a signed licensing agreement, is hereby granted, provided that -the above copyright notice, this paragraph and the following two paragraphs -appear in all copies, modifications, and distributions. Contact The Office of -Technology Licensing, UC Berkeley, 2150 Shattuck Avenue, Suite 510, Berkeley, -CA 94720-1620, (510) 643-7201, for commercial licensing opportunities. - Written by Matt Wright, The Center for New Music and Audio Technologies, University of California, Berkeley. - IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, - SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, - ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF - REGENTS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +Permission to use, copy, modify, distribute, and distribute modified versions +of this software and its documentation without fee and without a signed +licensing agreement, is hereby granted, provided that the above copyright +notice, this paragraph and the following two paragraphs appear in all copies, +modifications, and distributions. + +IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, +SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING +OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS +BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - FOR A PARTICULAR PURPOSE. THE SOFTWARE AND ACCOMPANYING - DOCUMENTATION, IF ANY, PROVIDED HEREUNDER IS PROVIDED "AS IS". - REGENTS HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, - ENHANCEMENTS, OR MODIFICATIONS. +REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED +HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE +MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. The OpenSound Control WWW page is http://www.cnmat.berkeley.edu/OpenSoundControl */ + /* OSC_timeTag.h: library for manipulating OSC time tags Matt Wright, 5/29/97 Time tags in OSC have the same format as in NTP: 64 bit fixed point, with the top 32 bits giving number of seconds sinve midnight 1/1/1900 and the bottom - 32 bits giving fractional parts of a second. We represent this by a 64-bit + 32 bits giving fractional parts of a second. We represent this by an 8-byte unsigned long if possible, or else a struct. - NB: On many architectures with 64-bit ints, it's illegal (like maybe a bus error) - to dereference a pointer to a 64-bit int that's not 64-bit aligned. + NB: On many architectures with 8-byte ints, it's illegal (like maybe a bus error) + to dereference a pointer to an 8 byte int that's not 8-byte aligned. */ #ifndef OSC_TIMETAG @@ -48,23 +46,23 @@ The OpenSound Control WWW page is #ifdef __sgi #define HAS8BYTEINT /* You may have to change this typedef if there's some other - way to specify 64 bit ints on your system */ - typedef long long int64; - typedef unsigned long long uint64; - typedef unsigned long uint32; + way to specify 8 byte ints on your system */ + typedef long long int8; + typedef unsigned long long uint8; + typedef unsigned long uint4; #else /* You may have to redefine this typedef if ints on your system - aren't 32 bits. */ - typedef unsigned int uint32; + aren't 4 bytes. */ + typedef unsigned int uint4; #endif #ifdef HAS8BYTEINT - typedef uint64 OSCTimeTag; + typedef uint8 OSCTimeTag; #else typedef struct { - uint32 seconds; - uint32 fraction; + uint4 seconds; + uint4 fraction; } OSCTimeTag; #endif |