aboutsummaryrefslogtreecommitdiff
path: root/pd/src/s_path.c
diff options
context:
space:
mode:
authorMiller Puckette <millerpuckette@users.sourceforge.net>2004-11-07 04:04:18 +0000
committerMiller Puckette <millerpuckette@users.sourceforge.net>2004-11-07 04:04:18 +0000
commitc001b12ff53998fac91e9d5915a7f760579770fc (patch)
tree4309c0cfd9d4e25f7d9d64f7a0820e33bc001311 /pd/src/s_path.c
parent6b99ec44dddb17696825702fecbbf28c5c758e43 (diff)
more bug fixes. Possible to put spaces in path and startup dialog entries.
svn path=/trunk/; revision=2232
Diffstat (limited to 'pd/src/s_path.c')
-rw-r--r--pd/src/s_path.c44
1 files changed, 39 insertions, 5 deletions
diff --git a/pd/src/s_path.c b/pd/src/s_path.c
index 4b9399a6..bce151f6 100644
--- a/pd/src/s_path.c
+++ b/pd/src/s_path.c
@@ -471,6 +471,40 @@ void sys_doflags( void)
post("error parsing RC arguments");
}
+/* undo pdtl_encodedialog. This allows dialogs to send spaces, commas,
+ dollars, and semis down here. */
+t_symbol *sys_decodedialog(t_symbol *s)
+{
+ char buf[MAXPDSTRING], *sp = s->s_name;
+ int i;
+ if (*sp != '+')
+ bug("sys_decodedialog: %s", sp);
+ else sp++;
+ for (i = 0; i < MAXPDSTRING-1; i++)
+ {
+ if (!sp[0])
+ break;
+ if (sp[0] == '+')
+ {
+ if (sp[1] == '_')
+ buf[i] = ' ', sp++;
+ else if (sp[1] == '+')
+ buf[i] = '+', sp++;
+ else if (sp[1] == 'c')
+ buf[i] = ',', sp++;
+ else if (sp[1] == 's')
+ buf[i] = ';', sp++;
+ else if (sp[1] == 'd')
+ buf[i] = '$', sp++;
+ else buf[i] = sp[0];
+ sp++;
+ }
+ }
+ buf[i] = 0;
+ return (gensym(buf));
+}
+
+
/* start a search path dialog window */
void glob_start_path_dialog(t_pd *dummy)
{
@@ -495,9 +529,9 @@ void glob_path_dialog(t_pd *dummy, t_symbol *s, int argc, t_atom *argv)
sys_searchpath = 0;
sys_usestdpath = atom_getintarg(0, argc, argv);
sys_verbose = atom_getintarg(1, argc, argv);
- for (i = 0; i < argc; i++)
+ for (i = 0; i < argc-2; i++)
{
- t_symbol *s = atom_getsymbolarg(i+2, argc, argv);
+ t_symbol *s = sys_decodedialog(atom_getsymbolarg(i+2, argc, argv));
if (*s->s_name)
sys_searchpath = namelist_append_files(sys_searchpath, s->s_name);
}
@@ -527,10 +561,10 @@ void glob_startup_dialog(t_pd *dummy, t_symbol *s, int argc, t_atom *argv)
namelist_free(sys_externlist);
sys_externlist = 0;
sys_defeatrt = atom_getintarg(0, argc, argv);
- sys_flags = atom_getsymbolarg(1, argc, argv);
- for (i = 0; i < argc; i++)
+ sys_flags = sys_decodedialog(atom_getsymbolarg(1, argc, argv));
+ for (i = 0; i < argc-2; i++)
{
- t_symbol *s = atom_getsymbolarg(i+2, argc, argv);
+ t_symbol *s = sys_decodedialog(atom_getsymbolarg(i+2, argc, argv));
if (*s->s_name)
sys_externlist = namelist_append_files(sys_externlist, s->s_name);
}