From d2eec74a4d8c21aad495ba61539486b24d7ab8dc Mon Sep 17 00:00:00 2001 From: Guenter Geiger Date: Wed, 9 Oct 2002 10:19:04 +0000 Subject: moved from zexy/zexy to zexy svn path=/trunk/externals/zexy/; revision=169 --- src/z_datetime.c | 161 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 src/z_datetime.c (limited to 'src/z_datetime.c') diff --git a/src/z_datetime.c b/src/z_datetime.c new file mode 100644 index 0000000..af93209 --- /dev/null +++ b/src/z_datetime.c @@ -0,0 +1,161 @@ +/* + (c) 1202:forum::für::umläute:2000 + + "time" gets the current time from the system + "date" gets the current date from the system + +*/ + +#ifdef NT +#pragma warning( disable : 4244 ) +#pragma warning( disable : 4305 ) +#endif + +#include "zexy.h" +#include +#include + +/* ----------------------- time --------------------- */ + +static t_class *time_class; + +typedef struct _time +{ + t_object x_obj; + + int GMT; + + t_outlet *x_outlet1; + t_outlet *x_outlet2; + t_outlet *x_outlet3; + t_outlet *x_outlet4; +} t_time; + +static void *time_new(t_symbol *s, int argc, t_atom *argv) +{ + t_time *x = (t_time *)pd_new(time_class); + char buf[5]; + + x->GMT=0; + if (argc) { + atom_string(argv, buf, 5); + if (buf[0]=='G' && buf[1]=='M' && buf[2]=='T') + x->GMT = 1; + } + + x->x_outlet1 = outlet_new(&x->x_obj, &s_float); + x->x_outlet2 = outlet_new(&x->x_obj, &s_float); + x->x_outlet3 = outlet_new(&x->x_obj, &s_float); + x->x_outlet4 = outlet_new(&x->x_obj, &s_float); + + return (x); +} + +static void time_bang(t_time *x) +{ + struct timeb mytime; + struct tm *resolvetime; + + ftime(&mytime); + resolvetime = (x->GMT)?gmtime(&mytime.time):localtime(&mytime.time); + + outlet_float(x->x_outlet4, (t_float)(mytime.millitm)); + outlet_float(x->x_outlet3, (t_float)resolvetime->tm_sec); + outlet_float(x->x_outlet2, (t_float)resolvetime->tm_min); + outlet_float(x->x_outlet1, (t_float)resolvetime->tm_hour); +} + +static void help_time(t_time *x) +{ + post("\n%c time\t\t:: get the current system time", HEARTSYMBOL); + post("\noutputs are\t: hour / minute / sec / msec"); + post("\ncreation\t:: 'time [GMT]': show local time or GMT"); +} + +void time_setup(void) +{ + time_class = class_new(gensym("time"), + (t_newmethod)time_new, 0, + sizeof(t_time), 0, A_GIMME, 0); + + class_addbang(time_class, time_bang); + + class_addmethod(time_class, (t_method)help_time, gensym("help"), 0); + class_sethelpsymbol(time_class, gensym("zexy/time")); +} + +/* ----------------------- date --------------------- */ + +static t_class *date_class; + +typedef struct _date +{ + t_object x_obj; + + int GMT; + + t_outlet *x_outlet1; + t_outlet *x_outlet2; + t_outlet *x_outlet3; +} t_date; + +static void *date_new(t_symbol *s, int argc, t_atom *argv) +{ + t_date *x = (t_date *)pd_new(date_class); + char buf[5]; + + x->GMT=0; + if (argc) { + atom_string(argv, buf, 5); + if (buf[0]=='G' && buf[1]=='M' && buf[2]=='T') + x->GMT = 1; + } + + x->x_outlet1 = outlet_new(&x->x_obj, &s_float); + x->x_outlet2 = outlet_new(&x->x_obj, &s_float); + x->x_outlet3 = outlet_new(&x->x_obj, &s_float); + + return (x); +} + +static void date_bang(t_date *x) +{ + struct timeb mytime; + struct tm *resolvetime; + + ftime(&mytime); + resolvetime=(x->GMT)?gmtime(&mytime.time):localtime(&mytime.time); + + outlet_float(x->x_outlet3, (t_float)resolvetime->tm_mday); + outlet_float(x->x_outlet2, (t_float)resolvetime->tm_mon + 1); + outlet_float(x->x_outlet1, (t_float)resolvetime->tm_year + 1900); +} + +static void help_date(t_date *x) +{ + post("\n%c date\t\t:: get the current system date", HEARTSYMBOL); + post("\noutputs are\t: year / month / day"); + post("\ncreation\t::'date [GMT]': show local date or GMT"); +} + +void date_setup(void) +{ + date_class = class_new(gensym("date"), + (t_newmethod)date_new, 0, + sizeof(t_date), 0, A_GIMME, 0); + + class_addbang(date_class, date_bang); + + class_addmethod(date_class, (t_method)help_date, gensym("help"), 0); + class_sethelpsymbol(date_class, gensym("zexy/date")); +} + + +/* general setup */ + + +void z_datetime_setup(void) +{ + time_setup(); + date_setup(); +} -- cgit v1.2.1