aboutsummaryrefslogtreecommitdiff
path: root/pd/src
diff options
context:
space:
mode:
authorMiller Puckette <millerpuckette@users.sourceforge.net>2006-08-11 20:09:07 +0000
committerMiller Puckette <millerpuckette@users.sourceforge.net>2006-08-11 20:09:07 +0000
commit173b4e7033e4fc902d20a3cc19e9198a61924f37 (patch)
tree7c0f909a98dab4bcda225d7fa478a8c721cbe00c /pd/src
parent9cba3b8fccf2f9d680d5ef7847689fe9cda2e294 (diff)
Fixed to compile correctly on macosx 10.3, 10.4 and Windows.
svn path=/trunk/; revision=5566
Diffstat (limited to 'pd/src')
-rw-r--r--pd/src/CHANGELOG.txt8
-rw-r--r--pd/src/configure.in41
-rw-r--r--pd/src/g_all_guis.c36
-rw-r--r--pd/src/g_canvas.c41
-rw-r--r--pd/src/g_editor.c27
-rw-r--r--pd/src/g_readwrite.c92
-rw-r--r--pd/src/g_rtext.c6
-rw-r--r--pd/src/g_template.c4
-rw-r--r--pd/src/g_text.c18
-rw-r--r--pd/src/m_atom.c2
-rw-r--r--pd/src/m_binbuf.c99
-rw-r--r--pd/src/m_class.c41
-rw-r--r--pd/src/makefile.in10
-rw-r--r--pd/src/makefile.nt2
-rw-r--r--pd/src/notes.txt8
-rw-r--r--pd/src/s_audio_pablio.h2
-rw-r--r--pd/src/s_audio_paring.c2
-rw-r--r--pd/src/s_audio_paring.h2
-rw-r--r--pd/src/s_loader.c196
-rw-r--r--pd/src/s_main.c2
-rw-r--r--pd/src/s_path.c3
-rw-r--r--pd/src/s_stuff.h2
-rw-r--r--pd/src/u_main.tk18
-rw-r--r--pd/src/x_interface.c2
24 files changed, 336 insertions, 328 deletions
diff --git a/pd/src/CHANGELOG.txt b/pd/src/CHANGELOG.txt
index 39eefbef..321b0bc8 100644
--- a/pd/src/CHANGELOG.txt
+++ b/pd/src/CHANGELOG.txt
@@ -1,6 +1,14 @@
This file describes implementation and API changes; stuff more visible to the
user appears in the "release notes" instead.
+0.40.0
+
+0.39.0
+
+canvas_dspstate and signalinlet_new() exported to m_pd.h
+
+new function verbose() added to m_pd.h
+
0.38.0
finally figured out how to do "-enable-", etc., flags in the configure
diff --git a/pd/src/configure.in b/pd/src/configure.in
index 6656f493..5dfdc557 100644
--- a/pd/src/configure.in
+++ b/pd/src/configure.in
@@ -8,9 +8,9 @@ AC_SUBST(portmidi, no)
AC_SUBST(binarymode, -m755)
AC_SUBST(fftw, no)
AC_SUBST(PDLIB)
+AC_SUBST(CPPFLAGS)
AC_SUBST(MORECFLAGS)
AC_SUBST(EXT)
-AC_SUBST(OPT_CFLAGS)
AC_SUBST(USE_DEBUG_CFLAGS, no)
AC_SUBST(SYSSRC)
AC_SUBST(TCLTK_FRAMEWORKS_PATH)
@@ -171,8 +171,8 @@ dnl This should be fixed so Pd can use ALSA shared libraries where appropriate.
LDFLAGS="$LDFLAGS -static"
fi
EXT=pd_linux
- MORECFLAGS="-DDL_OPEN -DPA_USE_OSS -DUNIX -DUNISTD\
- -DUSEAPI_OSS \
+ CPPFLAGS="-DDL_OPEN -DPA_USE_OSS -DUNIX -DUNISTD\
+ -DUSEAPI_OSS \
-I../portaudio/pa_common -I../portaudio/pablio \
-I../portmidi/pm_common \
-I../portmidi/pm_linux \
@@ -181,7 +181,7 @@ dnl This should be fixed so Pd can use ALSA shared libraries where appropriate.
if test x$alsa == "xyes";
then
SYSSRC=$SYSSRC" s_audio_alsa.c s_audio_alsamm.c s_midi_alsa.c"
- MORECFLAGS=$MORECFLAGS" -DPA_USE_ALSA -DUSEAPI_ALSA"
+ CPPFLAGS=$CPPFLAGS" -DPA_USE_ALSA -DUSEAPI_ALSA"
LDFLAGS=$LDFLAGS" -lasound"
fi
@@ -190,7 +190,7 @@ dnl This should be fixed so Pd can use ALSA shared libraries where appropriate.
then
- MORECFLAGS="-DUSEAPI_PORTAUDIO -DPA19 "$MORECFLAGS
+ CPPFLAGS=$CPPFLAGS" -DUSEAPI_PORTAUDIO -DPA19"
SYSSRC="s_audio_pa.c \
s_audio_pablio.c \
s_audio_paring.c \
@@ -209,7 +209,7 @@ dnl This should be fixed so Pd can use ALSA shared libraries where appropriate.
if test x$alsa == "xyes";
then
SYSSRC=$SYSSRC" ../portaudio/pa_linux_alsa/pa_linux_alsa.c"
- MORECFLAGS=$MORECFLAGS" -Wno-error"
+ CPPFLAGS=$CPPFLAGS" -Wno-error"
fi
fi
if test x$setuid == "xyes";
@@ -220,9 +220,9 @@ dnl This should be fixed so Pd can use ALSA shared libraries where appropriate.
GUINAME="pd-gui"
if test x$USE_DEBUG_CFLAGS == "xyes";
then
- OPT_CFLAGS="-g"
+ MORECFLAGS=$MORECFLAGS" -g"
else
- OPT_CFLAGS="-O6 -funroll-loops -fomit-frame-pointer"
+ MORECFLAGS=$MORECFLAGS" -O6 -funroll-loops -fomit-frame-pointer"
fi
if test x$jack == "xyes";
then
@@ -233,7 +233,7 @@ dnl This should be fixed so Pd can use ALSA shared libraries where appropriate.
LDFLAGS=$LDFLAGS" -lrt -ljack"
fi
- echo OPT_CFLAGS --------------- $OPT_CFLAGS
+ echo MORECFLAGS --------------- $MORECFLAGS
OSNUMBER=0
fi
@@ -244,12 +244,19 @@ then
-framework AudioUnit -framework AudioToolbox \
-framework Carbon -framework CoreMIDI"
EXT=pd_darwin
- MORECFLAGS="-DDL_OPEN -DMACOSX -DUNISTD -I/usr/X11R6/include \
- -I../portaudio/pa_common -I../portaudio/pablio \
+ CPPFLAGS="-DDL_OPEN -DMACOSX -DUNISTD -I/usr/X11R6/include \
+ -I../portaudio/pa_common -I../portaudio/pablio \
-I../portmidi/pm_common -I../portmidi/pm_mac \
-I../portmidi/porttime \
- -Wno-error \
-DUSEAPI_PORTAUDIO -DPA19 -DPA_USE_COREAUDIO"
+ if test `uname -r` = 7.9.0;
+ then
+ MORECFLAGS="-Wno-error"
+ EXTERNTARGET=d_ppc
+ else
+ MORECFLAGS="-arch i386 -arch ppc -Wno-error"
+ EXTERNTARGET=d_fat
+ fi
SYSSRC="s_midi_pm.c s_audio_pa.c \
s_audio_pablio.c \
s_audio_paring.c \
@@ -292,17 +299,11 @@ then
-I$TCLTK_FRAMEWORKS_PATH/Tcl.framework/Versions/8.4/PrivateHeaders"
if test x$USE_DEBUG_CFLAGS == "xyes";
then
- OPT_CFLAGS="-g"
+ MORECFLAGS=$MORECFLAGS" -g"
else
- OPT_CFLAGS="-O2"
+ MORECFLAGS=$MORECFLAGS" -O2"
fi
OSNUMBER=2
- if test `uname -m` = i386;
- then
- EXTERNTARGET=pd_imac
- else
- EXTERNTARGET=pd_darwin
- fi
if test x$jack == "xyes";
then
LDFLAGS=$LDFLAGS" -weak_framework Jack"
diff --git a/pd/src/g_all_guis.c b/pd/src/g_all_guis.c
index 4f82bec0..2d18f480 100644
--- a/pd/src/g_all_guis.c
+++ b/pd/src/g_all_guis.c
@@ -147,30 +147,34 @@ int iemgui_modulo_color(int col)
return(col);
}
-t_symbol *iemgui_raute2dollar(t_symbol *s)
+t_symbol *iemgui_dollar2raute(t_symbol *s)
{
- if (s->s_name[0] == '#')
+ char buf[MAXPDSTRING+1], *s1, *s2;
+ if (strlen(s->s_name) >= MAXPDSTRING)
+ return (s);
+ for (s1 = s->s_name, s2 = buf; ; s1++, s2++)
{
- char buf[MAXPDSTRING];
- strncpy(buf, s->s_name, MAXPDSTRING);
- buf[MAXPDSTRING-1] = 0;
- buf[0] = '$';
- return (gensym(buf));
+ if (*s1 == '$')
+ *s2 = '#';
+ else if (!(*s2 = *s1))
+ break;
}
- else return (s);
+ return(gensym(buf));
}
-t_symbol *iemgui_dollar2raute(t_symbol *s)
+t_symbol *iemgui_raute2dollar(t_symbol *s)
{
- if (s->s_name[0] == '$')
+ char buf[MAXPDSTRING+1], *s1, *s2;
+ if (strlen(s->s_name) >= MAXPDSTRING)
+ return (s);
+ for (s1 = s->s_name, s2 = buf; ; s1++, s2++)
{
- char buf[MAXPDSTRING];
- strncpy(buf, s->s_name, MAXPDSTRING);
- buf[MAXPDSTRING-1] = 0;
- buf[0] = '#';
- return (gensym(buf));
+ if (*s1 == '#')
+ *s2 = '$';
+ else if (!(*s2 = *s1))
+ break;
}
- else return (s);
+ return(gensym(buf));
}
void iemgui_verify_snd_ne_rcv(t_iemgui *iemgui)
diff --git a/pd/src/g_canvas.c b/pd/src/g_canvas.c
index edc387a4..9a5aaeef 100644
--- a/pd/src/g_canvas.c
+++ b/pd/src/g_canvas.c
@@ -17,10 +17,11 @@ to be different but are now unified except for some fossilized names.) */
/* LATER consider adding font size to this struct (see glist_getfont()) */
struct _canvasenvironment
{
- t_symbol *ce_dir; /* directory patch lives in */
- int ce_argc; /* number of "$" arguments */
- t_atom *ce_argv; /* array of "$" arguments */
- int ce_dollarzero; /* value of "$0" */
+ t_symbol *ce_dir; /* directory patch lives in */
+ int ce_argc; /* number of "$" arguments */
+ t_atom *ce_argv; /* array of "$" arguments */
+ int ce_dollarzero; /* value of "$0" */
+ t_namelist *ce_path; /* search path */
};
#define GLIST_DEFCANVASWIDTH 450
@@ -181,12 +182,11 @@ t_symbol *canvas_realizedollar(t_canvas *x, t_symbol *s)
{
t_symbol *ret;
char *name = s->s_name;
- if (*name == '$' && name[1] >= '0' && name[1] <= '9')
+ if (strchr(name, '$'))
{
t_canvasenvironment *env = canvas_getenv(x);
canvas_setcurrent(x);
- ret = binbuf_realizedollsym(gensym(name+1),
- env->ce_argc, env->ce_argv, 1);
+ ret = binbuf_realizedollsym(s, env->ce_argc, env->ce_argv, 1);
canvas_unsetcurrent(x);
}
else ret = s;
@@ -337,8 +337,8 @@ void glist_init(t_glist *x)
}
/* make a new glist. It will either be a "root" canvas or else
- its parent will be a "text" object in another window... we don't
- know which yet. */
+ it appears as a "text" object in another window (canvas_getcurrnet()
+ tells us which.) */
t_canvas *canvas_new(void *dummy, t_symbol *sel, int argc, t_atom *argv)
{
t_canvas *x = (t_canvas *)pd_new(canvas_class);
@@ -981,35 +981,15 @@ void canvas_objfor(t_glist *gl, t_text *x, int argc, t_atom *argv);
void canvas_restore(t_canvas *x, t_symbol *s, int argc, t_atom *argv)
{
t_pd *z;
- /* this should be unnecessary, but sometimes the canvas's name gets
- out of sync with the owning box's argument; this fixes that */
if (argc > 3)
{
t_atom *ap=argv+3;
if (ap->a_type == A_SYMBOL)
{
- char *buf=ap->a_w.w_symbol->s_name, *bufp;
- if (*buf == '$' && buf[1] >= '0' && buf[1] <= '9')
- {
- for (bufp = buf+2; *bufp; bufp++)
- if (*bufp < '0' || *bufp > '9')
- {
- SETDOLLSYM(ap, gensym(buf+1));
- goto didit;
- }
- SETDOLLAR(ap, atoi(buf+1));
- didit: ;
- }
- }
-
- if (ap->a_type == A_DOLLSYM)
- {
t_canvasenvironment *e = canvas_getenv(canvas_getcurrent());
canvas_rename(x, binbuf_realizedollsym(ap->a_w.w_symbol,
- e->ce_argc, e->ce_argv, 1), 0);
+ e->ce_argc, e->ce_argv, 1), 0);
}
- else if (ap->a_type == A_SYMBOL)
- canvas_rename(x, argv[3].a_w.w_symbol, 0);
}
canvas_pop(x, x->gl_willvis);
@@ -1433,6 +1413,7 @@ void canvas_redrawallfortemplatecanvas(t_canvas *x, int action)
canvas_redrawallfortemplate(0, action);
}
+
/* ------------------------------- setup routine ------------------------ */
/* why are some of these "glist" and others "canvas"? */
diff --git a/pd/src/g_editor.c b/pd/src/g_editor.c
index 77eaf156..13346779 100644
--- a/pd/src/g_editor.c
+++ b/pd/src/g_editor.c
@@ -1960,8 +1960,12 @@ static void canvas_copy(t_canvas *x)
int bufsize;
rtext_getseltext(x->gl_editor->e_textedfor, &buf, &bufsize);
-#ifdef UNIX
- /* in X windows (i.e., UNIX) the selection already went to the
+#if defined(MSW) || defined(MACOSX)
+ /* for Mac or Windows, copy the text to the clipboard here */
+ sys_vgui("clipboard clear\n", bufsize, buf);
+ sys_vgui("clipboard append {%.*s}\n", bufsize, buf);
+#else
+ /* in X windows the selection already went to the
clipboard when it was made; here we "copy" it to our own buffer
as well, because, annoyingly, the clipboard will usually be
destroyed by the time the user asks to "paste". */
@@ -1970,11 +1974,7 @@ static void canvas_copy(t_canvas *x)
canvas_textcopybuf = (char *)getbytes(bufsize);
memcpy(canvas_textcopybuf, buf, bufsize);
canvas_textcopybufsize = bufsize;
-#else /* UNIX */
- /* otherwise just copy the text to the clipboard here */
- sys_vgui("clipboard clear\n", bufsize, buf);
- sys_vgui("clipboard append {%.*s}\n", bufsize, buf);
-#endif /* UNIX */
+#endif
}
}
@@ -2124,19 +2124,18 @@ static void canvas_paste(t_canvas *x)
if (x->gl_editor->e_textedfor)
{
/* simulate keystrokes as if the copy buffer were typed in. */
-#ifdef UNIX
- /* in UNIX we kept the text in our own copy buffer */
+#if defined(MSW) || defined(MACOSX)
+ /* for Mac or Windows, ask the GUI to send the clipboard down */
+ sys_gui("pdtk_pastetext\n");
+#else
+ /* in X windows we kept the text in our own copy buffer */
int i;
for (i = 0; i < canvas_textcopybufsize; i++)
{
pd_vmess(&x->gl_gobj.g_pd, gensym("key"), "iii",
1, canvas_textcopybuf[i]&0xff, 0);
}
-#else /* UNIX */
- /* otherwise appeal to the GUI to send the clipboard down */
- sys_gui("pdtk_pastetext\n");
-#endif /* UNIX */
-
+#endif
}
else
{
diff --git a/pd/src/g_readwrite.c b/pd/src/g_readwrite.c
index d8090b48..ae51baa9 100644
--- a/pd/src/g_readwrite.c
+++ b/pd/src/g_readwrite.c
@@ -2,10 +2,13 @@
* For information on usage and redistribution, and for a DISCLAIMER OF ALL
* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
-/* this file reads and writes the "data" portions of a canvas to a file.
-See also canvas_saveto(), etc., in g_editor.c. The data portion is a
-collection of "scalar" objects. Routines here can save collections of
-scalars into a file and reload them; also, support is included here for
+/*
+Routines to read and write canvases to files:
+canvas_savetofile() writes a root canvas to a "pd" file. (Reading "pd" files
+is done simply by passing the contents to the pd message interpreter.)
+Alternatively, the glist_read() and glist_write() routines read and write
+"data" from and to files (reading reads into an existing canvas), using a
+file format as in the dialog window for data.
*/
#include <stdlib.h>
@@ -14,6 +17,9 @@ scalars into a file and reload them; also, support is included here for
#include "g_canvas.h"
#include <string.h>
+static t_class *declare_class;
+static void canvas_savedeclarationsto(t_canvas *x, t_binbuf *b);
+
/* the following routines read "scalars" from a file into a canvas. */
static int canvas_scanbinbuf(int natoms, t_atom *vec, int *p_indexout,
@@ -566,22 +572,31 @@ static void canvas_saveto(t_canvas *x, t_binbuf *b)
/* subpatch */
if (x->gl_owner && !x->gl_env)
{
+ /* have to go to original binbuf to find out how we were named. */
+ t_binbuf *bz = binbuf_new();
+ t_symbol *patchsym;
+ binbuf_addbinbuf(bz, x->gl_obj.ob_binbuf);
+ patchsym = atom_getsymbolarg(1, binbuf_getnatom(bz), binbuf_getvec(bz));
+ binbuf_free(bz);
binbuf_addv(b, "ssiiiisi;", gensym("#N"), gensym("canvas"),
(int)(x->gl_screenx1),
(int)(x->gl_screeny1),
(int)(x->gl_screenx2 - x->gl_screenx1),
(int)(x->gl_screeny2 - x->gl_screeny1),
- (*x->gl_name->s_name ? x->gl_name: gensym("(subpatch)")),
+ (patchsym != &s_ ? patchsym: gensym("(subpatch)")),
x->gl_mapped);
}
/* root or abstraction */
- else binbuf_addv(b, "ssiiiii;", gensym("#N"), gensym("canvas"),
+ else
+ {
+ binbuf_addv(b, "ssiiiii;", gensym("#N"), gensym("canvas"),
(int)(x->gl_screenx1),
(int)(x->gl_screeny1),
(int)(x->gl_screenx2 - x->gl_screenx1),
(int)(x->gl_screeny2 - x->gl_screeny1),
(int)x->gl_font);
-
+ canvas_savedeclarationsto(x, b);
+ }
for (y = x->gl_list; y; y = y->g_next)
gobj_save(y, b);
@@ -714,6 +729,63 @@ static void canvas_menusave(t_canvas *x)
else canvas_menusaveas(x2);
}
+/* ------------------------------- declare ------------------------ */
+
+/* put "declare" objects in a patch to tell it about the environment in
+which objects should be created in this canvas. This includes directories to
+search ("-path", "-stdpath") and object libraries to load
+("-lib" and "-stdlib"). These must be set before the patch containing
+the "declare" object is filled in with its contents; so when the patch is
+saved, we throw early messages to the canvas to set the environment
+before any objects are created in it. */
+
+
+typedef struct _declare
+{
+ t_object x_obj;
+ t_canvas *x_canvas;
+ int x_useme;
+} t_declare;
+
+static void *declare_new(t_symbol *s, int argc, t_atom *argv)
+{
+ t_declare *x = (t_declare *)pd_new(declare_class);
+ x->x_useme = 1;
+ x->x_canvas = canvas_getcurrent();
+ /* LATER update environment and/or load libraries */
+ return (x);
+}
+
+static void declare_free(t_declare *x)
+{
+ x->x_useme = 0;
+ /* LATER update environment */
+}
+
+static void canvas_savedeclarationsto(t_canvas *x, t_binbuf *b)
+{
+ t_gobj *y;
+
+ for (y = x->gl_list; y; y = y->g_next)
+ {
+ if (pd_class(&y->g_pd) == declare_class)
+ {
+ binbuf_addv(b, "s", gensym("#X"));
+ binbuf_addbinbuf(b, ((t_declare *)y)->x_obj.te_binbuf);
+ binbuf_addv(b, ";");
+ }
+ else if (pd_class(&y->g_pd) == canvas_class)
+ canvas_savedeclarationsto((t_canvas *)y, b);
+ }
+}
+
+static void canvas_declare(t_canvas *x, t_symbol *s, int argc, t_atom *argv)
+{
+ startpost("declare:: %s", s->s_name);
+ postatom(argc, argv);
+ endpost();
+}
+
void g_readwrite_setup(void)
{
@@ -727,9 +799,15 @@ void g_readwrite_setup(void)
gensym("savetofile"), A_SYMBOL, A_SYMBOL, 0);
class_addmethod(canvas_class, (t_method)canvas_saveto,
gensym("saveto"), A_CANT, 0);
+ class_addmethod(canvas_class, (t_method)canvas_declare,
+ gensym("declare"), A_GIMME, 0);
/* ------------------ from the menu ------------------------- */
class_addmethod(canvas_class, (t_method)canvas_menusave,
gensym("menusave"), 0);
class_addmethod(canvas_class, (t_method)canvas_menusaveas,
gensym("menusaveas"), 0);
+/*---------------------------- declare ------------------- */
+ declare_class = class_new(gensym("declare"), (t_newmethod)declare_new,
+ (t_method)declare_free, sizeof(t_declare), CLASS_NOINLET, A_GIMME, 0);
+
}
diff --git a/pd/src/g_rtext.c b/pd/src/g_rtext.c
index a07e20a9..d65038c1 100644
--- a/pd/src/g_rtext.c
+++ b/pd/src/g_rtext.c
@@ -312,19 +312,19 @@ void rtext_retext(t_rtext *x)
for (s1 = nextchar - wantreduce, s2 = s1 + wantreduce;
s2 < ebuf; s1++, s2++)
*s1 = *s2;
- t_resizebytes(x->x_buf, bufsize, text->te_width);
+ x->x_buf = t_resizebytes(x->x_buf, bufsize, text->te_width);
bufsize = text->te_width;
goto done;
giveup:
/* give up and bash it to "+" or "-" */
x->x_buf[0] = (atomp->a_w.w_float < 0 ? '-' : '+');
- t_resizebytes(x->x_buf, bufsize, 1);
+ x->x_buf = t_resizebytes(x->x_buf, bufsize, 1);
bufsize = 1;
}
else if (bufsize > text->te_width)
{
x->x_buf[text->te_width - 1] = '>';
- t_resizebytes(x->x_buf, bufsize, text->te_width);
+ x->x_buf = t_resizebytes(x->x_buf, bufsize, text->te_width);
bufsize = text->te_width;
}
done:
diff --git a/pd/src/g_template.c b/pd/src/g_template.c
index b2b359d3..a1e8882f 100644
--- a/pd/src/g_template.c
+++ b/pd/src/g_template.c
@@ -1634,8 +1634,8 @@ static void plot_vis(t_gobj *z, t_glist *glist,
if (plot_readownertemplate(x, data, template,
&elemtemplatesym, &array, &linewidth, &xloc, &xinc, &yloc, &style,
&vis, &scalarvis, &xfielddesc, &yfielddesc, &wfielddesc) ||
- (vis == 0) ||
- array_getfields(elemtemplatesym, &elemtemplatecanvas,
+ ((vis == 0) && tovis) /* FIXME - why is 'tovis' flag necessary? */
+ || array_getfields(elemtemplatesym, &elemtemplatecanvas,
&elemtemplate, &elemsize, xfielddesc, yfielddesc, wfielddesc,
&xonset, &yonset, &wonset))
return;
diff --git a/pd/src/g_text.c b/pd/src/g_text.c
index 5b3172b1..3cca6b3a 100644
--- a/pd/src/g_text.c
+++ b/pd/src/g_text.c
@@ -30,8 +30,8 @@ t_widgetbehavior text_widgetbehavior;
/* ----------------- the "text" object. ------------------ */
- /* add a "text" object (comment) to a glist. While this one goes for any glist,
- the other 3 below are for canvases only. (why?) This is called
+ /* add a "text" object (comment) to a glist. While this one goes for any
+ glist, the other 3 below are for canvases only. (why?) This is called
without args if invoked from the GUI; otherwise at least x and y
are provided. */
@@ -566,6 +566,19 @@ static void gatom_symbol(t_gatom *x, t_symbol *s)
gatom_bang(x);
}
+ /* We need a list method because, since there's both an "inlet" and a
+ "nofirstin" flag, the standard list behavior gets confused. */
+static void gatom_list(t_gatom *x, t_symbol *s, int argc, t_atom *argv)
+{
+ if (!argc)
+ gatom_bang(x);
+ else if (argv->a_type == A_FLOAT)
+ gatom_float(x, argv->a_w.w_float);
+ else if (argv->a_type == A_SYMBOL)
+ gatom_symbol(x, argv->a_w.w_symbol);
+ else pd_error(x, "gatom_list: need float or symbol");
+}
+
static void gatom_motion(void *z, t_floatarg dx, t_floatarg dy)
{
t_gatom *x = (t_gatom *)z;
@@ -1349,6 +1362,7 @@ void g_text_setup(void)
class_addbang(gatom_class, gatom_bang);
class_addfloat(gatom_class, gatom_float);
class_addsymbol(gatom_class, gatom_symbol);
+ class_addlist(gatom_class, gatom_list);
class_addmethod(gatom_class, (t_method)gatom_set, gensym("set"),
A_GIMME, 0);
class_addmethod(gatom_class, (t_method)gatom_click, gensym("click"),
diff --git a/pd/src/m_atom.c b/pd/src/m_atom.c
index 95e2216c..f8859c6f 100644
--- a/pd/src/m_atom.c
+++ b/pd/src/m_atom.c
@@ -120,7 +120,7 @@ void atom_string(t_atom *a, char *buf, unsigned int bufsize)
sprintf(buf, "$%d", a->a_w.w_index);
break;
case A_DOLLSYM:
- snprintf(buf, bufsize-1, "%s", a->a_w.w_symbol->s_name);
+ strncpy(buf, a->a_w.w_symbol->s_name, bufsize);
buf[bufsize-1] = 0;
break;
default:
diff --git a/pd/src/m_binbuf.c b/pd/src/m_binbuf.c
index 6afbb931..9e96d68b 100644
--- a/pd/src/m_binbuf.c
+++ b/pd/src/m_binbuf.c
@@ -76,8 +76,7 @@ void binbuf_text(t_binbuf *x, char *text, size_t size)
{
/* it's an atom other than a comma or semi */
char c;
- int floatstate = 0, slash = 0, lastslash = 0,
- firstslash = (*textp == '\\');
+ int floatstate = 0, slash = 0, lastslash = 0, dollar = 0;
bufp = buf;
do
{
@@ -142,6 +141,9 @@ void binbuf_text(t_binbuf *x, char *text, size_t size)
if (!digit) floatstate = -1;
}
}
+ if (!lastslash && c == '$' && (textp != etext &&
+ textp[0] >= '0' && textp[0] <= '9'))
+ dollar = 1;
if (!slash) bufp++;
}
while (textp != etext && bufp != ebuf &&
@@ -151,24 +153,25 @@ void binbuf_text(t_binbuf *x, char *text, size_t size)
#if 0
post("binbuf_text: buf %s", buf);
#endif
- if (*buf == '$' && buf[1] >= '0' && buf[1] <= '9' && !firstslash)
+ if (floatstate == 2 || floatstate == 4 || floatstate == 5 ||
+ floatstate == 8)
+ SETFLOAT(ap, atof(buf));
+ /* LATER try to figure out how to mix "$" and "\$" correctly;
+ here, the backslashes were already stripped so we assume all
+ "$" chars are real dollars. In fact, we only know at least one
+ was. */
+ else if (dollar)
{
- for (bufp = buf+2; *bufp; bufp++)
+ if (buf[0] != '$')
+ dollar = 0;
+ for (bufp = buf+1; *bufp; bufp++)
if (*bufp < '0' || *bufp > '9')
- {
- SETDOLLSYM(ap, gensym(buf));
- goto didit;
- }
- SETDOLLAR(ap, atoi(buf+1));
- didit: ;
- }
- else
- {
- if (floatstate == 2 || floatstate == 4 || floatstate == 5 ||
- floatstate == 8)
- SETFLOAT(ap, atof(buf));
- else SETSYMBOL(ap, gensym(buf));
+ dollar = 0;
+ if (dollar)
+ SETDOLLAR(ap, atoi(buf+1));
+ else post("dollsym %s", buf), SETDOLLSYM(ap, gensym(buf));
}
+ else SETSYMBOL(ap, gensym(buf));
}
ap++;
natom++;
@@ -352,16 +355,21 @@ void binbuf_restore(t_binbuf *x, int argc, t_atom *argv)
{
if (argv->a_type == A_SYMBOL)
{
- char *str = argv->a_w.w_symbol->s_name;
+ char *str = argv->a_w.w_symbol->s_name, *str2;
if (!strcmp(str, ";")) SETSEMI(ap);
else if (!strcmp(str, ",")) SETCOMMA(ap);
- else if (str[0] == '$' && str[1] >= '0' && str[1] <= '9')
+ else if ((str2 = strchr(str, '$')) && str2[1] >= '0'
+ & str2[1] <= '9')
{
int dollsym = 0;
- char *str2;
- for (str2 = str + 2; *str2; str2++)
+ if (*str != '$')
+ dollsym = 1;
+ else for (str2 = str + 1; *str2; str2++)
if (*str2 < '0' || *str2 > '9')
- dollsym = 1;
+ {
+ dollsym = 1;
+ break;
+ }
if (dollsym)
SETDOLLSYM(ap, gensym(str));
else
@@ -482,36 +490,43 @@ t_symbol *binbuf_realizedollsym(t_symbol *s, int ac, t_atom *av, int tonew)
* whenever this happened, enable this code
*/
substr=strchr(str, '$');
- if(substr){
- strncat(buf2, str, (substr-str));
- str=substr+1;
+ if(substr)
+ {
+ strncat(buf2, str, (substr-str));
+ str=substr+1;
}
#endif
while((next=binbuf_expanddollsym(str, buf, dollarnull, ac, av, tonew))>=0)
- {
- /*
- * JMZ: i am not sure what this means, so i might have broken it
- * it seems like that if "tonew" is set and the $arg cannot be expanded (or the dollarsym is in reality a A_DOLLAR)
- * 0 is returned from binbuf_realizedollsym
- * this happens, when expanding in a message-box, but does not happen when the A_DOLLSYM is the name of a subpatch
- */
- if(!tonew&&(0==next)&&(0==*buf)){
- return 0; /* JMZ: this should mimick the original behaviour */
+ {
+ /*
+ * JMZ: i am not sure what this means, so i might have broken it
+ * it seems like that if "tonew" is set and the $arg cannot be expanded
+ * (or the dollarsym is in reality a A_DOLLAR)
+ * 0 is returned from binbuf_realizedollsym
+ * this happens, when expanding in a message-box, but does not happen
+ * when the A_DOLLSYM is the name of a subpatch
+ */
+ if(!tonew&&(0==next)&&(0==*buf))
+ {
+ return 0; /* JMZ: this should mimick the original behaviour */
}
strncat(buf2, buf, MAXPDSTRING/2-1);
str+=next;
substr=strchr(str, '$');
- if(substr){
- strncat(buf2, str, (substr-str));
- str=substr+1;
- } else {
- strcat(buf2, str);
-
- return gensym(buf2);
+ if(substr)
+ {
+ strncat(buf2, str, (substr-str));
+ str=substr+1;
+ }
+ else
+ {
+ strcat(buf2, str);
+ goto done;
}
- }
+ }
+done:
return (gensym(buf2));
}
diff --git a/pd/src/m_class.c b/pd/src/m_class.c
index 30aeb310..1ec13146 100644
--- a/pd/src/m_class.c
+++ b/pd/src/m_class.c
@@ -514,42 +514,6 @@ extern t_pd *newest;
t_symbol* pathsearch(t_symbol *s,char* ext);
int pd_setloadingabstraction(t_symbol *sym);
-
-/* replace everything but [a-zA-Z0-9_] by "0x%x" */
-static char*alternative_classname(char*classname)
-{
- char *altname=(char*)getbytes(sizeof(char)*MAXPDSTRING);
- int count=0;
- int i=0;
- for(i=0; i<MAXPDSTRING; i++)
- altname[i]=0;
- i=0;
- while(*classname)
- {
- char c=*classname;
- if((c>=48 && c<=57)|| /* [0-9] */
- (c>=65 && c<=90)|| /* [A-Z] */
- (c>=97 && c<=122)||/* [a-z] */
- (c==95)) /* [_] */
- {
- altname[i]=c;
- i++;
- }
- else /* a "bad" character */
- {
- sprintf(altname+i, "0x%02x", c);
- i+=4;
- count++;
- }
- classname++;
- }
- if(count>0)return altname;
- /* seems like the given classname is fine as can be */
- freebytes(altname, sizeof(char)*MAXPDSTRING);
- return 0;
-}
-
-
/* this routine is called when a new "object" is requested whose class Pd
doesn't know. Pd tries to load it as an extern, then as an abstraction. */
void new_anything(void *dummy, t_symbol *s, int argc, t_atom *argv)
@@ -558,11 +522,10 @@ void new_anything(void *dummy, t_symbol *s, int argc, t_atom *argv)
t_symbol *dir = canvas_getcurrentdir();
int fd;
char dirbuf[MAXPDSTRING], *nameptr;
- char *altname=alternative_classname(s->s_name);
if (tryingalready) return;
newest = 0;
class_loadsym = s;
- if (sys_load_lib(dir->s_name, s->s_name, altname))
+ if (sys_load_lib(dir->s_name, s->s_name))
{
tryingalready = 1;
typedmess(dummy, s, argc, argv);
@@ -573,8 +536,6 @@ void new_anything(void *dummy, t_symbol *s, int argc, t_atom *argv)
current = s__X.s_thing;
if ((fd = open_via_path(dir->s_name, s->s_name, ".pd",
dirbuf, &nameptr, MAXPDSTRING, 0)) >= 0 ||
- (altname && (fd = open_via_path(dir->s_name, altname, ".pd",
- dirbuf, &nameptr, MAXPDSTRING, 0)) >= 0) ||
(fd = open_via_path(dir->s_name, s->s_name, ".pat",
dirbuf, &nameptr, MAXPDSTRING, 0)) >= 0)
{
diff --git a/pd/src/makefile.in b/pd/src/makefile.in
index 6f644237..ba09f7a4 100644
--- a/pd/src/makefile.in
+++ b/pd/src/makefile.in
@@ -20,21 +20,19 @@ libpddir = $(libdir)/pd
pddocdir = $(libpddir)/doc
libpdbindir = $(libpddir)/bin
+CPPFLAGS = @CPPFLAGS@
MORECFLAGS = @MORECFLAGS@
-
-INCLUDE = -I.
-GINCLUDE = $(INCLUDE) @GUIFLAGS@
+GINCLUDE = $(CPPFLAGS) @GUIFLAGS@
GLIB = @LIBS@
LDFLAGS = @LDFLAGS@
LIB = @PDLIB@
-OPT_CFLAGS = @OPT_CFLAGS@
WARN_CFLAGS = -Wall -W -Wstrict-prototypes \
-Wno-unused -Wno-parentheses -Wno-switch
ARCH_CFLAGS = -DPD
-CFLAGS = @CFLAGS@ $(ARCH_CFLAGS) $(WARN_CFLAGS) $(OPT_CFLAGS) $(MORECFLAGS)
+CFLAGS = @CFLAGS@ $(ARCH_CFLAGS) $(WARN_CFLAGS) $(CPPFLAGS) $(MORECFLAGS)
# the sources
@@ -188,7 +186,7 @@ tags: $(SRC) $(GSRC); ctags *.[ch]
depend: makefile.dependencies
makefile.dependencies: makefile
- $(CC) $(INCLUDE) $(CFLAGS) -M $(SRC) > makefile.dependencies
+ $(CC) $(CPPFLAGS) -M $(SRC) > makefile.dependencies
uninstall:
rm -f -r $(libpddir)
diff --git a/pd/src/makefile.nt b/pd/src/makefile.nt
index 56b94a0a..fcc70aaa 100644
--- a/pd/src/makefile.nt
+++ b/pd/src/makefile.nt
@@ -31,7 +31,7 @@ SRC = g_canvas.c g_graph.c g_text.c g_rtext.c g_array.c g_template.c g_io.c \
s_main.c s_inter.c s_file.c s_print.c \
s_loader.c s_path.c s_entry.c s_audio.c s_midi.c \
d_ugen.c d_ctl.c d_arithmetic.c d_osc.c d_filter.c d_dac.c d_misc.c \
- d_math.c d_fft.c d_mayer_fft.c d_fftroutine.c d_array.c d_global.c \
+ d_math.c d_fft.c d_fft_mayer.c d_fftroutine.c d_array.c d_global.c \
d_delay.c d_resample.c \
x_arithmetic.c x_connective.c x_interface.c x_midi.c x_misc.c \
x_time.c x_acoustics.c x_net.c x_qlist.c x_gui.c x_list.c d_soundfile.c \
diff --git a/pd/src/notes.txt b/pd/src/notes.txt
index 4c3b1997..f9c6126c 100644
--- a/pd/src/notes.txt
+++ b/pd/src/notes.txt
@@ -1,11 +1,19 @@
---------------- dolist --------------------
+fix:
+look again at array vis/invis conundrum, g_template.c
+subpatches appear at top left of screen regardless
+$1-args not evaluated (z.pd)
+
test:
compile on various versions of linux
windows:
modal dialogs confuse watchdog
check the right-click-on-empty-canvas
MIDI I/O (inc. sysex)
+mac:
+ text paste broken
+ clicking on windows seems sometimes not to open them
what does OSX do when jack is compiled into Pd but not installed??
turn on paMacCore_ChangeDeviceParameters for mac (pa_mac_core.h)
diff --git a/pd/src/s_audio_pablio.h b/pd/src/s_audio_pablio.h
index 43e9a4b9..f98509ab 100644
--- a/pd/src/s_audio_pablio.h
+++ b/pd/src/s_audio_pablio.h
@@ -7,7 +7,7 @@ extern "C"
#endif /* __cplusplus */
/*
- * $Id: s_audio_pablio.h,v 1.2 2006-06-03 19:13:07 millerpuckette Exp $
+ * $Id: s_audio_pablio.h,v 1.3 2006-08-11 20:09:07 millerpuckette Exp $
* PABLIO.h
* Portable Audio Blocking read/write utility.
*
diff --git a/pd/src/s_audio_paring.c b/pd/src/s_audio_paring.c
index ca1a60a5..7bfc1170 100644
--- a/pd/src/s_audio_paring.c
+++ b/pd/src/s_audio_paring.c
@@ -1,5 +1,5 @@
/*
- * $Id: s_audio_paring.c,v 1.2 2006-06-03 19:13:07 millerpuckette Exp $
+ * $Id: s_audio_paring.c,v 1.3 2006-08-11 20:09:07 millerpuckette Exp $
* ringbuffer.c
* Ring Buffer utility..
*
diff --git a/pd/src/s_audio_paring.h b/pd/src/s_audio_paring.h
index 27edb01f..535dae76 100644
--- a/pd/src/s_audio_paring.h
+++ b/pd/src/s_audio_paring.h
@@ -6,7 +6,7 @@ extern "C"
#endif /* __cplusplus */
/*
- * $Id: s_audio_paring.h,v 1.2 2006-06-03 19:13:07 millerpuckette Exp $
+ * $Id: s_audio_paring.h,v 1.3 2006-08-11 20:09:07 millerpuckette Exp $
* ringbuffer.h
* Ring Buffer utility..
*
diff --git a/pd/src/s_loader.c b/pd/src/s_loader.c
index d985af05..a5cf38e4 100644
--- a/pd/src/s_loader.c
+++ b/pd/src/s_loader.c
@@ -23,122 +23,114 @@
typedef void (*t_xxx)(void);
-static char sys_dllextent[] =
+/* naming convention for externs. The names are kept distinct for those
+who wich to make "fat" externs compiled for many platforms. Less specific
+fallbacks are provided, primarily for back-compatibility; these suffice if
+you are building a package which will run with a single set of compiled
+objects. The specific name is the letter b, l, d, or m for BSD, linux,
+darwin, or microsoft, followed by a more specific string, either "fat" for
+a fat binary or an indication of the instruction set. */
+
#ifdef __FreeBSD__
- ".pd_freebsd";
+static char sys_dllextent[] = ".b_i386", sys_dllextent2[] = ".pd_freebsd";
#endif
-#ifdef IRIX
-#ifdef N32
- ".pd_irix6";
+#ifdef __linux__
+#ifdef __ia64__
+static char sys_dllextent[] = ".l_ia64", sys_dllextent2[] = ".pd_linux";
#else
- ".pd_irix5";
+static char sys_dllextent[] = ".l_i386", sys_dllextent2[] = ".pd_linux";
#endif
#endif
-#ifdef __linux__
- ".pd_linux";
-#endif
#ifdef MACOSX
-#ifdef __i386
- ".pd_imac";
+#ifdef __i386__
+static char sys_dllextent[] = ".d_fat", sys_dllextent2[] = ".pd_darwin";
#else
- ".pd_darwin";
+static char sys_dllextent[] = ".d_ppc", sys_dllextent2[] = ".pd_darwin";
#endif
#endif
#ifdef MSW
- ".dll";
+static char sys_dllextent[] = ".m_i386", sys_dllextent2[] = ".dll";
#endif
void class_set_extern_dir(t_symbol *s);
-static int sys_load_lib_alt(char *dirname, char *classname, char *altname)
+static int sys_do_load_lib(char *dirname, char *classname)
{
char symname[MAXPDSTRING], filename[MAXPDSTRING], dirbuf[MAXPDSTRING],
- classname2[MAXPDSTRING], *nameptr, *lastdot,
- altsymname[MAXPDSTRING];
+ *nameptr, altsymname[MAXPDSTRING];
void *dlobj;
t_xxx makeout = NULL;
- int fd;
+ int i, hexmunge = 0, fd;
#ifdef MSW
HINSTANCE ntdll;
#endif
+ for (i = 0, nameptr = classname; i < MAXPDSTRING-7 && *nameptr; nameptr++)
+ {
+ char c = *nameptr;
+ if ((c>='0' && c<='9') || (c>='A' && c<='Z')||
+ (c>='a' && c<='z' )|| c == '_')
+ {
+ symname[i] = c;
+ i++;
+ }
+ /* trailing tilde becomes "_tilde" */
+ else if (c == '~' && nameptr[1] == 0)
+ {
+ strcpy(symname+i, "_tilde");
+ i += strlen(symname+i);
+ }
+ else /* anything you can't put in a C symbol is sprintf'ed in hex */
+ {
+ sprintf(symname+i, "0x%02x", c);
+ i += strlen(symname+i);
+ hexmunge = 1;
+ }
+ }
+ symname[i] = 0;
+ if (hexmunge)
+ {
+ memmove(symname+6, symname, strlen(symname+1));
+ strncpy(symname, "setup_", 6);
+ }
+ else strcat(symname, "_setup");
+
#if 0
fprintf(stderr, "lib %s %s\n", dirname, classname);
#endif
/* try looking in the path for (classname).(sys_dllextent) ... */
if ((fd = open_via_path(dirname, classname, sys_dllextent,
- dirbuf, &nameptr, MAXPDSTRING, 1)) < 0)
- {
- /* next try (classname)/(classname).(sys_dllextent) ... */
- strncpy(classname2, classname, MAXPDSTRING);
- filename[MAXPDSTRING-2] = 0;
- strcat(classname2, "/");
- strncat(classname2, classname, MAXPDSTRING-strlen(classname2));
- filename[MAXPDSTRING-1] = 0;
- if ((fd = open_via_path(dirname, classname2, sys_dllextent,
- dirbuf, &nameptr, MAXPDSTRING, 1)) < 0)
- {
- /* next try (alternative_classname).(sys_dllextent) */
- if (altname)
- {
- if ((fd = open_via_path(dirname, altname, sys_dllextent,
- dirbuf, &nameptr, MAXPDSTRING, 1)) < 0)
- {
- /* next try
- (alt_classname)/(alt_classname).(sys_dllextent) */
- strncpy(classname2, altname, MAXPDSTRING);
- filename[MAXPDSTRING-2] = 0;
- strcat(classname2, "/");
- strncat(classname2, altname,
- MAXPDSTRING-strlen(classname2));
- filename[MAXPDSTRING-1] = 0;
- if ((fd = open_via_path(dirname, classname2,
- sys_dllextent, dirbuf, &nameptr, MAXPDSTRING, 1)) < 0)
- {
- return 0;
- }
- }
- }
- else return (0);
- }
- }
+ dirbuf, &nameptr, MAXPDSTRING, 1)) >= 0)
+ goto gotone;
+ /* same, with the more generic sys_dllextent2 */
+ if ((fd = open_via_path(dirname, classname, sys_dllextent2,
+ dirbuf, &nameptr, MAXPDSTRING, 1)) >= 0)
+ goto gotone;
+ /* next try (classname)/(classname).(sys_dllextent) ... */
+ strncpy(filename, classname, MAXPDSTRING);
+ filename[MAXPDSTRING-2] = 0;
+ strcat(filename, "/");
+ strncat(filename, classname, MAXPDSTRING-strlen(filename));
+ filename[MAXPDSTRING-1] = 0;
+ if ((fd = open_via_path(dirname, filename, sys_dllextent,
+ dirbuf, &nameptr, MAXPDSTRING, 1)) >= 0)
+ goto gotone;
+ if ((fd = open_via_path(dirname, filename, sys_dllextent2,
+ dirbuf, &nameptr, MAXPDSTRING, 1)) >= 0)
+ goto gotone;
+ return (0);
+gotone:
close(fd);
class_set_extern_dir(gensym(dirbuf));
- /* refabricate the pathname */
+ /* rebuild the absolute pathname */
strncpy(filename, dirbuf, MAXPDSTRING);
filename[MAXPDSTRING-2] = 0;
strcat(filename, "/");
strncat(filename, nameptr, MAXPDSTRING-strlen(filename));
filename[MAXPDSTRING-1] = 0;
- /* extract the setup function name */
- if (lastdot = strrchr(nameptr, '.'))
- *lastdot = 0;
-
-#ifdef DIDFORMACOSX /* no longer correct on macosx??? */
- strcpy(symname, "_");
- strcat(symname, nameptr);
- if(altname)
- {
- strcpy(altsymname, "_setup_");
- strcat(symname, altname);
- }
-#else
- strcpy(symname, nameptr);
- if(altname)
- {
- strcpy(altsymname, "setup_");
- strcat(altsymname, altname);
- }
-#endif
- /* if the last character is a tilde, replace with "_tilde" */
- if (symname[strlen(symname) - 1] == '~')
- strcpy(symname + (strlen(symname) - 1), "_tilde");
- /* and append _setup to form the C setup function name */
- strcat(symname, "_setup");
#ifdef DL_OPEN
dlobj = dlopen(filename, RTLD_NOW | RTLD_GLOBAL);
- post("opened %x", dlobj);
if (!dlobj)
{
post("%s: %s", filename, dlerror());
@@ -146,7 +138,6 @@ static int sys_load_lib_alt(char *dirname, char *classname, char *altname)
return (0);
}
makeout = (t_xxx)dlsym(dlobj, symname);
- if(!makeout)makeout = (t_xxx)dlsym(dlobj, altsymname);
#endif
#ifdef MSW
sys_bashfilename(filename, filename);
@@ -158,46 +149,11 @@ static int sys_load_lib_alt(char *dirname, char *classname, char *altname)
return (0);
}
makeout = (t_xxx)GetProcAddress(ntdll, symname);
- if(!makeout)makeout = (t_xxx)GetProcAddress(ntdll, altsymname);
-#endif
-#if defined(MACOSX) && !defined(DL_OPEN)
- {
- NSObjectFileImage image;
- void *ret;
- NSSymbol s;
- if ( NSCreateObjectFileImageFromFile( filename, &image) != NSObjectFileImageSuccess )
- {
- post("%s: couldn't load", filename);
- class_set_extern_dir(&s_);
- return 0;
- }
- ret = NSLinkModule( image, filename,
- NSLINKMODULE_OPTION_BINDNOW |
- NSLINKMODULE_OPTION_RETURN_ON_ERROR);
-
- if (ret == NULL) {
- int err;
- const char *fname, *errt;
- NSLinkEditErrors c;
- NSLinkEditError(&c, &err, &fname, &errt);
- post("link error %d %s %s", err, fname, errt);
- return 0;
- }
- s = NSLookupSymbolInModule(ret, symname);
-
- if(!s)s=NSLookupSymbolInModule(ret, altsymname);
-
- if (s)
- makeout = (t_xxx)NSAddressOfSymbol( s);
- else makeout = 0;
- }
#endif
if (!makeout)
{
post("load_object: Symbol \"%s\" not found", symname);
- if(altname)
- post("load_object: Symbol \"%s\" not found", altsymname);
class_set_extern_dir(&s_);
return 0;
}
@@ -207,7 +163,7 @@ static int sys_load_lib_alt(char *dirname, char *classname, char *altname)
}
/* callback type definition */
-typedef int (*loader_t)(char *dirname, char *classname, char *altname);
+typedef int (*loader_t)(char *dirname, char *classname);
/* linked list of loaders */
typedef struct loader_queue {
@@ -215,7 +171,7 @@ typedef struct loader_queue {
struct loader_queue *next;
} loader_queue_t;
-static loader_queue_t loaders = {sys_load_lib_alt, NULL};
+static loader_queue_t loaders = {sys_do_load_lib, NULL};
/* register class loader function */
void sys_register_loader(loader_t loader)
@@ -235,16 +191,14 @@ void sys_register_loader(loader_t loader)
}
}
-int sys_load_lib(char *dirname, char *classname, char *altname)
+int sys_load_lib(char *dirname, char *classname)
{
int dspstate = canvas_suspend_dsp();
int ok = 0;
loader_queue_t *q;
for(q = &loaders; q; q = q->next)
- if(ok = q->loader(dirname, classname, altname)) break;
+ if(ok = q->loader(dirname, classname)) break;
canvas_resume_dsp(dspstate);
return ok;
}
-
-
diff --git a/pd/src/s_main.c b/pd/src/s_main.c
index a8baa8c4..9f842fd5 100644
--- a/pd/src/s_main.c
+++ b/pd/src/s_main.c
@@ -221,7 +221,7 @@ void glob_initfromgui(void *dummy, t_symbol *s, int argc, t_atom *argv)
#endif
/* load dynamic libraries specified with "-lib" args */
for (nl = sys_externlist; nl; nl = nl->nl_next)
- if (!sys_load_lib(cwd, nl->nl_string, 0))
+ if (!sys_load_lib(cwd, nl->nl_string))
post("%s: can't load library", nl->nl_string);
/* open patches specifies with "-open" args */
for (nl = sys_openlist; nl; nl = nl->nl_next)
diff --git a/pd/src/s_path.c b/pd/src/s_path.c
index c8fb4da3..9d7e0798 100644
--- a/pd/src/s_path.c
+++ b/pd/src/s_path.c
@@ -12,7 +12,6 @@
/* #define DEBUG(x) x */
#define DEBUG(x)
-void readsf_banana( void); /* debugging */
#include <stdlib.h>
#ifdef UNISTD
@@ -84,7 +83,7 @@ static const char* strtokcpy(char *to, const char *from, int delim)
/* add a single item to a namelist. If "allowdup" is true, duplicates
may be added; othewise they're dropped. */
-
+
t_namelist *namelist_append(t_namelist *listwas, const char *s, int allowdup)
{
t_namelist *nl, *nl2;
diff --git a/pd/src/s_stuff.h b/pd/src/s_stuff.h
index 7cbe84f9..09e2cb55 100644
--- a/pd/src/s_stuff.h
+++ b/pd/src/s_stuff.h
@@ -46,7 +46,7 @@ extern int sys_defaultfont;
extern t_symbol *sys_libdir; /* library directory for auxilliary files */
/* s_loader.c */
-int sys_load_lib(char *dirname, char *filename, char *altname);
+int sys_load_lib(char *dirname, char *filename);
/* s_audio.c */
diff --git a/pd/src/u_main.tk b/pd/src/u_main.tk
index 62ddf836..177e1171 100644
--- a/pd/src/u_main.tk
+++ b/pd/src/u_main.tk
@@ -1783,13 +1783,8 @@ proc gatom_escape {sym} {
set ret [string replace $sym 0 0 "--"]
# puts stderr [concat escape $sym $ret]
} else {
- if {[string equal -length 1 $sym "$"]} {
- set ret [string replace $sym 0 0 "#"]
-# puts stderr [concat unescape $sym $ret]
- } else {
- set ret $sym
-# puts stderr [concat escape $sym "no change"]
- }
+ set ret [string map {"$" "#"} $sym]
+# puts stderr [concat unescape $sym $ret]
}
}
pdtk_unspace $ret
@@ -1800,13 +1795,8 @@ proc gatom_unescape {sym} {
set ret [string replace $sym 0 0 ""]
# puts stderr [concat unescape $sym $ret]
} else {
- if {[string equal -length 1 $sym "#"]} {
- set ret [string replace $sym 0 0 "$"]
-# puts stderr [concat unescape $sym $ret]
- } else {
- set ret $sym
-# puts stderr [concat unescape $sym "no change"]
- }
+ set ret [string map {"#" "$"} $sym]
+# puts stderr [concat unescape $sym $ret]
}
concat $ret
}
diff --git a/pd/src/x_interface.c b/pd/src/x_interface.c
index 19c44962..4effa0d9 100644
--- a/pd/src/x_interface.c
+++ b/pd/src/x_interface.c
@@ -41,7 +41,6 @@ static void print_float(t_print *x, t_float f)
static void print_list(t_print *x, t_symbol *s, int argc, t_atom *argv)
{
int i;
- char buf[80];
if (argc && argv->a_type != A_SYMBOL) startpost("%s:", x->x_sym->s_name);
else startpost("%s: %s", x->x_sym->s_name,
(argc > 1 ? s_list.s_name : (argc == 1 ? s_symbol.s_name :
@@ -53,7 +52,6 @@ static void print_list(t_print *x, t_symbol *s, int argc, t_atom *argv)
static void print_anything(t_print *x, t_symbol *s, int argc, t_atom *argv)
{
int i;
- char buf[80];
startpost("%s: %s", x->x_sym->s_name, s->s_name);
postatom(argc, argv);
endpost();