aboutsummaryrefslogtreecommitdiff
path: root/utime.c
diff options
context:
space:
mode:
authorHans-Christoph Steiner <eighthave@users.sourceforge.net>2007-04-02 20:42:38 +0000
committerHans-Christoph Steiner <eighthave@users.sourceforge.net>2007-04-02 20:42:38 +0000
commit8bbda088b6be12a1c8633a05f2c3edee28c3b493 (patch)
tree11349615ec18574fddf303aabd13e65dbff492ff /utime.c
parent6b301232d846c96ba2687edd0e87e554e6167589 (diff)
cleaned up cxc so that it passes the automated test in scripts/load_every_help.sh: renamed help files to standard name; made each file named after the class; removed non-functional aliases in flatspace
svn path=/trunk/externals/cxc/; revision=7538
Diffstat (limited to 'utime.c')
-rw-r--r--utime.c75
1 files changed, 75 insertions, 0 deletions
diff --git a/utime.c b/utime.c
new file mode 100644
index 0000000..429e90d
--- /dev/null
+++ b/utime.c
@@ -0,0 +1,75 @@
+/*
+ (c) 2002:cxc@web.fm
+ microtime: seconds since epoch plus microsecs
+ */
+
+#include <m_pd.h>
+#ifdef NT
+#include <windows.h>
+#else
+#include <sys/time.h>
+#endif
+#include <time.h>
+
+/* ----------------------- utime --------------------- */
+
+static t_class *utime_class;
+
+typedef struct _utime
+{
+ t_object x_obj;
+ t_outlet *x_outlet1;
+ t_outlet *x_outlet2;
+} t_utime;
+
+static void *utime_new(t_symbol *s, int argc, t_atom *argv) {
+ t_utime *x = (t_utime *)pd_new(utime_class);
+ x->x_outlet1 = outlet_new(&x->x_obj, &s_float);
+ x->x_outlet2 = outlet_new(&x->x_obj, &s_float);
+ return (x);
+}
+
+#ifndef NT
+static void utime_bang(t_utime *x)
+{
+ struct timeval myutime;
+ struct timezone mytz;
+
+ gettimeofday(&myutime, &mytz);
+ outlet_float(x->x_outlet2, (t_float)myutime.tv_usec);
+ outlet_float(x->x_outlet1, (t_float)myutime.tv_sec);
+}
+#else
+static void utime_bang(t_utime *x)
+{
+ FILETIME myfiletime;
+ ULARGE_INTEGER ulfiletime, ulSec, uluSec;
+
+ GetSystemTimeAsFileTime(&myfiletime);
+ ulfiletime.LowPart = myfiletime.dwLowDateTime;
+ ulfiletime.HighPart = myfiletime.dwHighDateTime;
+ ulfiletime.QuadPart -= 116444736000000000; // number of 100ns ticks from 1601-01-01 to 1970-01-01
+ ulSec.QuadPart = ulfiletime.QuadPart / (10 * 1000 * 1000); // FILETIME uses 100ns ticks
+ uluSec.QuadPart = (ulfiletime.QuadPart - ulSec.QuadPart * 10 * 1000 * 1000) / 10; // FILETIME uses 100ns ticks
+
+ outlet_float(x->x_outlet2, (t_float)(__int64)ulSec.QuadPart );
+ outlet_float(x->x_outlet1, (t_float)(__int64)uluSec.QuadPart);
+}
+#endif
+
+static void help_utime(t_utime *x)
+{
+ post("\n%c utime\t\t:: get the current system time", 70);
+ post("\noutputs are\t: seconds since epoch / remaining microseconds");
+}
+
+void utime_setup(void)
+{
+ utime_class = class_new(gensym("utime"),
+ (t_newmethod)utime_new, 0,
+ sizeof(t_utime), 0, A_GIMME, 0);
+
+ class_addbang(utime_class, utime_bang);
+
+ class_addmethod(utime_class, (t_method)help_utime, gensym("help"), 0);
+}