aboutsummaryrefslogtreecommitdiff
path: root/OSC-timetag.h
diff options
context:
space:
mode:
Diffstat (limited to 'OSC-timetag.h')
-rw-r--r--OSC-timetag.h88
1 files changed, 88 insertions, 0 deletions
diff --git a/OSC-timetag.h b/OSC-timetag.h
new file mode 100644
index 0000000..1de1c45
--- /dev/null
+++ b/OSC-timetag.h
@@ -0,0 +1,88 @@
+/*
+Written by Matt Wright, The Center for New Music and Audio Technologies,
+University of California, Berkeley. Copyright (c) 1998,99,2000,01,02,03,04
+The Regents of the University of California (Regents).
+
+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.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 an 8-byte
+ unsigned long if possible, or else a struct.
+
+ 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
+#define OSC_TIMETAG
+
+#ifdef __sgi
+ #define HAS8BYTEINT
+ /* You may have to change this typedef if there's some other
+ 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 4 bytes. */
+ typedef unsigned int uint4;
+#endif
+
+
+#ifdef HAS8BYTEINT
+ typedef uint8 OSCTimeTag;
+#else
+ typedef struct {
+ uint4 seconds;
+ uint4 fraction;
+ } OSCTimeTag;
+#endif
+
+
+
+/* Return a time tag representing the current time (as of when this
+ procedure is called). */
+OSCTimeTag OSCTT_CurrentTime(void);
+
+/* Return the time tag 0x0000000000000001, indicating to the receiving device
+ that it should process the message immediately. */
+OSCTimeTag OSCTT_Immediately(void);
+
+/* Return the time tag 0xffffffffffffffff, a time so far in the future that
+ it's effectively infinity. */
+OSCTimeTag OSCTT_BiggestPossibleTimeTag(void);
+
+/* Given a time tag and a number of seconds to add to the time tag, return
+ the new time tag */
+OSCTimeTag OSCTT_PlusSeconds(OSCTimeTag original, float secondsOffset);
+
+/* Compare two time tags. Return negative if first is < second, 0 if
+ they're equal, and positive if first > second. */
+int OSCTT_Compare(OSCTimeTag left, OSCTimeTag right);
+
+#endif /* OSC_TIMETAG */