From 2106abbc4af813e176e21e149a9d13fcc72682fa Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Mon, 12 Jun 2006 20:01:35 +0000 Subject: created a direct Pd interface for uname and utsname.h svn path=/trunk/externals/hcs/; revision=5198 --- uname-help.pd | 16 ++++++++ uname.c | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 132 insertions(+) create mode 100644 uname-help.pd create mode 100644 uname.c diff --git a/uname-help.pd b/uname-help.pd new file mode 100644 index 0000000..4f9af8d --- /dev/null +++ b/uname-help.pd @@ -0,0 +1,16 @@ +#N canvas 293 112 750 380 10; +#X obj 109 114 uname; +#X msg 109 77 bang; +#X obj 106 175 unpack symbol symbol symbol symbol symbol; +#X symbolatom 389 203 0 0 0 0 - - -; +#X symbolatom 107 319 0 0 0 0 - - -; +#X symbolatom 176 296 0 0 0 0 - - -; +#X symbolatom 247 275 0 0 0 0 - - -; +#X symbolatom 316 229 0 0 0 0 - - -; +#X connect 0 0 2 0; +#X connect 1 0 0 0; +#X connect 2 0 4 0; +#X connect 2 1 5 0; +#X connect 2 2 6 0; +#X connect 2 3 7 0; +#X connect 2 4 3 0; diff --git a/uname.c b/uname.c new file mode 100644 index 0000000..52a50b3 --- /dev/null +++ b/uname.c @@ -0,0 +1,116 @@ +/* --------------------------------------------------------------------------*/ +/* */ +/* object for getting file listings using wildcard patterns */ +/* Written by Hans-Christoph Steiner */ +/* */ +/* Copyright (c) 2006 Hans-Christoph Steiner */ +/* */ +/* This program is free software; you can redistribute it and/or */ +/* modify it under the terms of the GNU General Public License */ +/* as published by the Free Software Foundation; either version 2 */ +/* of the License, or (at your option) any later version. */ +/* */ +/* See file LICENSE for further informations on licensing terms. */ +/* */ +/* This program is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* GNU General Public License for more details. */ +/* */ +/* You should have received a copy of the GNU General Public License */ +/* along with this program; if not, write to the Free Software Foundation, */ +/* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/* */ +/* --------------------------------------------------------------------------*/ + +#include + +#ifdef _WIN32 +#define _WIN32_WINNT 0x0400 +#include +#include +#else +#include +#include +#endif + +static char *version = "$Revision: 1.1 $"; + +t_int uname_instance_count; + +#define DEBUG(x) +//#define DEBUG(x) x + +/*------------------------------------------------------------------------------ + * CLASS DEF + */ +static t_class *uname_class; + +typedef struct _uname { + t_object x_obj; +} t_uname; + +/*------------------------------------------------------------------------------ + * IMPLEMENTATION + */ + +// TODO: regexp ~ to USERPROFILE for Windows +// TODO: make FindFirstFile display when its just a dir + +static void uname_output(t_uname* x) +{ + DEBUG(post("uname_output");); + + struct utsname *utsname_struct; + t_atom uname_data[5]; + + utsname_struct = malloc(sizeof(utsname_struct)); + + if ( uname(utsname_struct) > -1 ) + { + SETSYMBOL(uname_data, gensym(utsname_struct->sysname)); + SETSYMBOL(uname_data + 1, gensym(utsname_struct->nodename)); + SETSYMBOL(uname_data + 2, gensym(utsname_struct->release)); + SETSYMBOL(uname_data + 3, gensym(utsname_struct->version)); + SETSYMBOL(uname_data + 4, gensym(utsname_struct->machine)); + + outlet_anything(x->x_obj.ob_outlet, + atom_gensym(uname_data), + 4, + uname_data + 1); + } +} + + +static void *uname_new(t_symbol *s) +{ + DEBUG(post("uname_new");); + + t_uname *x = (t_uname *)pd_new(uname_class); + + if(!uname_instance_count) + { + post("[uname] %s",version); + post("\twritten by Hans-Christoph Steiner "); + } + uname_instance_count++; + + outlet_new(&x->x_obj, &s_symbol); + + return (x); +} + +void uname_setup(void) +{ + DEBUG(post("uname_setup");); + uname_class = class_new(gensym("uname"), + (t_newmethod)uname_new, + 0, + sizeof(t_uname), + 0, + 0); + /* add inlet datatype methods */ + class_addbang(uname_class,(t_method) uname_output); + +} + -- cgit v1.2.1