[PD] Filenames with spaces

Krzysztof Czaja czaja at chopin.edu.pl
Thu Nov 15 16:54:54 CET 2001


hi,

any string is processed as an atom once it gets packed into one symbol.
If you really need spaces in filenames, try [opanel], which is a crude
[openpanel] clone.

Krzysztof

pix wrote:
> 
> it appears not, but even if it could, you would not really have any luck
> processing a value that contained spaces in pd. since it would be treated
> as a list most of the time.
...
> Miha Tom <miha.tomsic at guest.arnes.si> wrote:
...
> > Is it possible for [openpanel] to return filename that includes spaces?
-------------- next part --------------
/* Copyright (c) 1997-2000 Miller Puckette.
* For information on usage and redistribution, and for a DISCLAIMER OF ALL
* WARRANTIES, see the file, "LICENSE.txt," in this distribution.  */

#include <stdio.h>
#include <string.h>
#include "m_pd.h"

static t_class *opanel_class;

typedef struct _opanel
{
    t_object x_obj;
    t_symbol *x_s;
} t_opanel;

static void *opanel_new(void)
{
    char buf[50];
    t_opanel *x = (t_opanel *)pd_new(opanel_class);
    sprintf(buf, "d%x", (t_int)x);
    x->x_s = gensym(buf);
    pd_bind(&x->x_obj.ob_pd, x->x_s);
    outlet_new(&x->x_obj, &s_symbol);
    return (x);
}

static void opanel_bang(t_opanel *x)
{
    sys_vgui("pdtk_opanel %s\n", x->x_s->s_name);
}

static void opanel_anything(t_opanel *x, t_symbol *s, int argc, t_atom *argv)
{
    char buf[MAXPDSTRING];
    *buf = '\0';
    while (argc--) if (argv->a_type == A_SYMBOL)
    {
	if (*buf) strcat(buf, " ");
	strcat(buf, argv++->a_w.w_symbol->s_name);
    }
    if (*buf)
	outlet_symbol(x->x_obj.ob_outlet, gensym(buf));
}

static void opanel_free(t_opanel *x)
{
    pd_unbind(&x->x_obj.ob_pd, x->x_s);
}

static void opanel_guidefs(void)
{
    sys_gui("proc  pdtk_opanel {target} {\n");
    sys_gui(" global pd_opendir\n");
    sys_gui(" set filename [tk_getOpenFile -initialdir $pd_opendir]\n");
    sys_gui(" if {$filename != \"\"} {\n");
    sys_gui("  set directory [string range $filename 0 \
		[expr [string last / $filename ] - 1]]\n");
    sys_gui("  set pd_opendir $directory\n");
    sys_gui("  pd [concat $target \"filename\" $filename\\;]\n");
    sys_gui(" }\n");
    sys_gui("}\n");
}

void opanel_setup(void)
{
    opanel_class = class_new(gensym("opanel"),
    	(t_newmethod)opanel_new, (t_method)opanel_free,
    	sizeof(t_opanel), 0, A_DEFFLOAT, 0);
    class_addbang(opanel_class, opanel_bang);
    class_addanything(opanel_class, (t_method)opanel_anything);
    opanel_guidefs();
}
-------------- next part --------------
#N canvas 0 0 774 308 12;
#X obj 15 53 opanel;
#X msg 15 13 bang;
#X obj 44 91 print;
#X symbolatom 44 124 80 0 0;
#X obj 15 198 soundfiler;
#X obj 15 241 table t;
#X msg 15 158 read -resize \$1 t;
#X connect 0 0 3 0;
#X connect 0 0 6 0;
#X connect 0 0 2 0;
#X connect 1 0 0 0;
#X connect 6 0 4 0;


More information about the Pd-list mailing list