[PD-cvs] externals/control/popen Makefile,NONE,1.1 Makefilewin,NONE,1.1 popen-help.pd,NONE,1.1 popen.PNG,NONE,1.1 popen.c,NONE,1.1
carmen rocco
ix9 at users.sourceforge.net
Tue Mar 8 22:20:37 CET 2005
Update of /cvsroot/pure-data/externals/control/popen
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1381
Added Files:
Makefile Makefilewin popen-help.pd popen.PNG popen.c
Log Message:
popen()
--- NEW FILE: popen-help.pd ---
#N canvas 458 385 649 268 10;
#X msg 121 28 echo lol;
#X obj 121 48 popen;
#X symbolatom 111 85 10 0 0 0 - - -;
#X obj 168 75 bng 15 163840 50 0 empty empty empty 0 0 0 8 -62784 -237312
-237312;
#X obj 168 93 tgl 15 0 empty empty empty 0 0 0 8 -62784 -237312 -237312
0 1;
#X msg 170 29 echo roffl | sed s/fl/lmao/;
#X obj 111 114 select roflmao;
#X obj 189 88 tgl 42 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
;
#X text 16 10 popen();
#X text 41 159 so simple it should work on most any platform;
#X text 39 176 always outputs a symbol;
#X text 42 199 non-threaded to maintain right to left execution order
;
#X text 41 218 always executes in a real shell (sh on linux \, cmd
on win (add a bash -c if you want it to run in a minGW/cygwin bash))
so stuff like || and < can be used..;
#X obj 258 97 popen;
#X msg 258 117 add2 \$1;
#X msg 303 103 Linux a 2.6.11-gentoo-r1 #4 Sun Mar 6 16:43:59 GMT 2005 x86_64 AMD Athlon(tm) 64 Processor 3000+ AuthenticAMD GNU/Linux
;
#X msg 303 65 cat /proc/cpuinfo;
#X msg 303 82 set;
#X msg 253 65 uname -a;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 1 1 3 0;
#X connect 2 0 6 0;
#X connect 3 0 4 0;
#X connect 5 0 1 0;
#X connect 6 0 7 0;
#X connect 13 0 14 0;
#X connect 14 0 15 0;
#X connect 16 0 17 0;
#X connect 16 0 13 0;
#X connect 17 0 15 0;
#X connect 18 0 17 0;
#X connect 18 0 13 0;
--- NEW FILE: Makefile ---
prefix=/usr/lib/pd
EXTERNALS = popen.c
all: $(EXTERNALS:.c=.pd_linux)
.SUFFIXES: .pd_linux
CFLAGS = -g -DUNIX -Wall -W -Wshadow -Wstrict-prototypes \
-Wno-unused -Wno-parentheses -Wno-switch -fPIC
INCLUDE = -I. -I.. -I$(prefix)/src
%.pd_linux: %.c
$(CC) $(CFLAGS) $(INCLUDE) -o "$*.o" -c "$*.c"
gcc -shared -o "$*.pd_linux" "$*.o"
clean:
-rm *.pd_linux *.o
install-doc:
@test -d $(prefix)/doc/5.reference || mkdir -p $(prefix)/doc/5.reference
install *.pd $(prefix)/doc/5.reference
install: install-doc
@test -d $(prefix)/extra || mkdir -p $(prefix)/extra
install *.pd_linux $(prefix)/extra
--- NEW FILE: popen.PNG ---
(This appears to be a binary file; contents omitted.)
--- NEW FILE: popen.c ---
/* :popen: for PD - windows + linux + (probably mac) - carmen rocco */
#include <m_pd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define INBUFSIZE 1024
static t_class *popen_class;
typedef struct _popen
{
t_object x_obj;
char buffer[128];
t_symbol *x_s;
t_outlet* x_done;
} t_popen;
static void popen_out(t_popen* x)
{
int i;
int size = 0;
size = strlen(x->buffer);
for (i=0;i<size;i++)
if (x->buffer[i] == '\n' || x->buffer[i] == '\r') x->buffer[i] = '\0';
fprintf(stderr, "%s",x->buffer);
x->x_s = gensym(x->buffer);
outlet_symbol(x->x_obj.ob_outlet, x->x_s);
}
static void popen_anything(t_popen *x, t_symbol *s, int argc, t_atom *argv)
{
int i;
char arg[MAXPDSTRING];
char cmd[20] = "";
FILE *pPipe;
int size = 0;
for (i=0;i<argc;i++) {
atom_string(argv,arg+size,MAXPDSTRING - size);
argv++;
size=strlen(arg);
arg[size++] = ' ';
}
arg[size-1] = '\0';
strcat(cmd, s->s_name);
strcat(cmd, " ");
strcat(cmd, arg);
post("sending %s",cmd);
#ifdef NT
if( (pPipe = _popen( cmd, "rt" )) == NULL )
#else
if( (pPipe = popen( cmd, "r" )) == NULL )
#endif
return;
while( !feof( pPipe ) )
{
if( fgets( x->buffer, 128, pPipe ) != NULL )
popen_out(x);
}
#ifdef NT
_pclose( pPipe );
#else
pclose( pPipe );
#endif
outlet_bang(x->x_done);
}
void popen_free(t_popen* x)
{
}
static void *popen_new(void)
{
t_popen *x = (t_popen *)pd_new(popen_class);
outlet_new(&x->x_obj, &s_symbol);
x->x_done = outlet_new(&x->x_obj, &s_bang);
return (x);
}
void popen_setup(void)
{
popen_class = class_new(gensym("popen"), (t_newmethod)popen_new,
(t_method)popen_free,sizeof(t_popen), 0,0);
class_addbang(popen_class,popen_out);
class_addanything(popen_class, popen_anything);
}
--- NEW FILE: Makefilewin ---
prefix=../..
EXTERNALS = popen.c
all: $(EXTERNALS:.c=.dll)
.SUFFIXES: .dll
CFLAGS = -g -DPD -DNT -Wall -W -Wshadow -Wstrict-prototypes \
-Wno-unused -Wno-parentheses -Wno-switch
INCLUDE = -I. -I.. -I$(prefix)/src
%.dll: %.c
$(CC) $(CFLAGS) $(INCLUDE) -o "$*.o" -c "$*.c"
gcc -shared -o "$*.dll" "$*.o" $(prefix)/bin/pd.dll \
`test -f $*.libs && cat $*.libs`
clean:
-rm *.dll *.o
install-doc:
@test -d $(prefix)/doc/5.reference || mkdir -p $(prefix)/doc/5.reference
install *.pd $(prefix)/doc/5.reference
install: install-doc
@test -d $(prefix)/extra || mkdir -p $(prefix)/extra
install *.dll $(prefix)/extra
More information about the Pd-cvs
mailing list