00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 #include "OSC-timetag.h"
00042
00043
00044 #ifdef HAS8BYTEINT
00045 #define TWO_TO_THE_32_FLOAT 4294967296.0f
00046
00047 OSCTimeTag OSCTT_Immediately(void) {
00048 return (OSCTimeTag) 1;
00049 }
00050
00051 OSCTimeTag OSCTT_BiggestPossibleTimeTag(void) {
00052 return (OSCTimeTag) 0xffffffffffffffff;
00053 }
00054
00055 OSCTimeTag OSCTT_PlusSeconds(OSCTimeTag original, float secondsOffset) {
00056 int64 offset = (int64) (secondsOffset * TWO_TO_THE_32_FLOAT);
00057
00058
00059
00060
00061 return original + offset;
00062 }
00063
00064 int OSCTT_Compare(OSCTimeTag left, OSCTimeTag right) {
00065 #if 0
00066 printf("***** OSCTT_Compare(%llx, %llx): %d\n", left, right,
00067 (left<right) ? -1 : ((left == right) ? 0 : 1));
00068 #endif
00069 if (left < right) {
00070 return -1;
00071 } else if (left == right) {
00072 return 0;
00073 } else {
00074 return 1;
00075 }
00076 }
00077
00078 #ifdef __sgi
00079 #include <sys/time.h>
00080
00081 #define SECONDS_FROM_1900_to_1970 2208988800
00082 #define TWO_TO_THE_32_OVER_ONE_MILLION 4295
00083
00084
00085 OSCTimeTag OSCTT_CurrentTime(void) {
00086 uint64 result;
00087 uint32 usecOffset;
00088 struct timeval tv;
00089 struct timezone tz;
00090
00091 BSDgettimeofday(&tv, &tz);
00092
00093
00094 result = (unsigned) SECONDS_FROM_1900_to_1970 +
00095 (unsigned) tv.tv_sec -
00096 (unsigned) 60 * tz.tz_minuteswest +
00097 (unsigned) (tz.tz_dsttime ? 3600 : 0);
00098
00099 #if 0
00100
00101 result = (unsigned) SECONDS_FROM_1900_to_1970 +
00102 (unsigned) tv.tv_sec;
00103 #endif
00104
00105
00106
00107 result = result << 32;
00108
00109
00110 usecOffset = (unsigned) tv.tv_usec * (unsigned) TWO_TO_THE_32_OVER_ONE_MILLION;
00111
00112
00113 result += usecOffset;
00114
00115
00116 return result;
00117 }
00118
00119 #else
00120
00121
00122
00123
00124
00125
00126
00127 OSCTimeTag OSCTT_CurrentTime(void) {
00128 return (OSCTimeTag) 1;
00129 }
00130
00131 #endif
00132
00133
00134 #else
00135
00136 OSCTimeTag OSCTT_CurrentTime(void) {
00137 OSCTimeTag result;
00138 result.seconds = 0;
00139 result.fraction = 1;
00140 return result;
00141 }
00142
00143 OSCTimeTag OSCTT_BiggestPossibleTimeTag(void) {
00144 OSCTimeTag result;
00145 result.seconds = 0xffffffff;
00146 result.fraction = 0xffffffff;
00147 return result;
00148 }
00149
00150 OSCTimeTag OSCTT_Immediately(void) {
00151 OSCTimeTag result;
00152 result.seconds = 0;
00153 result.fraction = 1;
00154 return result;
00155 }
00156
00157 OSCTimeTag OSCTT_PlusSeconds(OSCTimeTag original, float secondsOffset) {
00158 OSCTimeTag result;
00159 result.seconds = 0;
00160 result.fraction = 1;
00161 return result;
00162 }
00163
00164 int OSCTT_Compare(OSCTimeTag left, OSCTimeTag right) {
00165
00166 int highResult = left.seconds - right.seconds;
00167
00168 if (highResult != 0) return highResult;
00169
00170 return left.fraction - right.fraction;
00171 }
00172
00173
00174 #endif
00175