From b185a9da6ca58723a7e993df59baf0fd8ca13e05 Mon Sep 17 00:00:00 2001
From: Ivica Ico Bukvic <ico@vt.edu>
Date: Wed, 20 Aug 2014 16:58:00 -0400
Subject: [PATCH] *updated icludes for 3rd party externals

---
 externals/build/include/g_all_guis.h | 428 ++++++++++++---------------
 externals/build/include/g_canvas.h   | 336 ++++++++++++++++-----
 externals/build/include/m_imp.h      |   4 +-
 externals/build/include/m_pd.h       | 174 ++++++++---
 externals/build/include/s_stuff.h    | 163 ++++++++--
 5 files changed, 716 insertions(+), 389 deletions(-)

diff --git a/externals/build/include/g_all_guis.h b/externals/build/include/g_all_guis.h
index 2bc38f12d..9f8dd9659 100644
--- a/externals/build/include/g_all_guis.h
+++ b/externals/build/include/g_all_guis.h
@@ -3,245 +3,170 @@
 * WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
 /* g_7_guis.h written by Thomas Musil (c) IEM KUG Graz Austria 2000-2001 */
 
-
-#define IEM_GUI_COLNR_WHITE          0
-#define IEM_GUI_COLNR_ML_GREY        1
-#define IEM_GUI_COLNR_D_GREY         2
-#define IEM_GUI_COLNR_L_RED          3
-#define IEM_GUI_COLNR_L_ORANGE       4
-#define IEM_GUI_COLNR_L_YELLOW       5
-#define IEM_GUI_COLNR_L_GREEN        6
-#define IEM_GUI_COLNR_L_CYAN         7
-#define IEM_GUI_COLNR_L_BLUE         8
-#define IEM_GUI_COLNR_L_MAGENTA      9
-
-#define IEM_GUI_COLNR_LL_GREY        10
-#define IEM_GUI_COLNR_M_GREY         11
-#define IEM_GUI_COLNR_DD_GREY        12
-#define IEM_GUI_COLNR_RED            13
-#define IEM_GUI_COLNR_ORANGE         14
-#define IEM_GUI_COLNR_YELLOW         15
-#define IEM_GUI_COLNR_GREEN          16
-#define IEM_GUI_COLNR_CYAN           17
-#define IEM_GUI_COLNR_BLUE           18
-#define IEM_GUI_COLNR_MAGENTA        19
-
-#define IEM_GUI_COLNR_L_GREY         20
-#define IEM_GUI_COLNR_MD_GREY        21
-#define IEM_GUI_COLNR_BLACK          22
-#define IEM_GUI_COLNR_D_RED          23
-#define IEM_GUI_COLNR_D_ORANGE       24
-#define IEM_GUI_COLNR_D_YELLOW       25
-#define IEM_GUI_COLNR_D_GREEN        26
-#define IEM_GUI_COLNR_D_CYAN         27
-#define IEM_GUI_COLNR_D_BLUE         28
-#define IEM_GUI_COLNR_D_MAGENTA      29
-
-#define IEM_GUI_COLOR_SELECTED       255
-#define IEM_GUI_COLOR_NORMAL         0
-
-#define IEM_GUI_MAX_COLOR            30
-
 #define IEM_GUI_DEFAULTSIZE 15
 #define IEM_GUI_MINSIZE 8
-#define IEM_GUI_MAXSIZE 1000
 #define IEM_SL_DEFAULTSIZE 128
 #define IEM_SL_MINSIZE 2
 #define IEM_FONT_MINSIZE 4
 
-#define IEM_BNG_DEFAULTHOLDFLASHTIME 250
-#define IEM_BNG_DEFAULTBREAKFLASHTIME 50
-#define IEM_BNG_MINHOLDFLASHTIME 50
-#define IEM_BNG_MINBREAKFLASHTIME 10
-
-#define IEM_VU_DEFAULTSIZE 3
-#define IEM_VU_LARGESMALL  2
-#define IEM_VU_MINSIZE     2
-#define IEM_VU_MAXSIZE     25
-#define IEM_VU_STEPS       40
-
-#define IEM_VU_MINDB    -99.9
-#define IEM_VU_MAXDB    12.0
-#define IEM_VU_OFFSET   100.0
-
-#define IEM_RADIO_MAX   128
-
-#define IEM_SYM_UNIQUE_SND  256
-#define IEM_SYM_UNIQUE_RCV  512
-#define IEM_SYM_UNIQUE_LAB  1024
-#define IEM_SYM_UNIQUE_ALL  1792
-#define IEM_FONT_STYLE_ALL  255
-
-#define IEM_MAX_SYM_LEN      127
-
 #define IEM_GUI_DRAW_MODE_UPDATE 0
 #define IEM_GUI_DRAW_MODE_MOVE   1
 #define IEM_GUI_DRAW_MODE_NEW    2
 #define IEM_GUI_DRAW_MODE_SELECT 3
-#define IEM_GUI_DRAW_MODE_ERASE  4
 #define IEM_GUI_DRAW_MODE_CONFIG 5
-#define IEM_GUI_DRAW_MODE_IO     6
-
 
-#define IS_A_POINTER(atom,index) ((atom+index)->a_type == A_POINTER)
 #define IS_A_FLOAT(atom,index) ((atom+index)->a_type == A_FLOAT)
 #define IS_A_SYMBOL(atom,index) ((atom+index)->a_type == A_SYMBOL)
-#define IS_A_DOLLAR(atom,index) ((atom+index)->a_type == A_DOLLAR)
-#define IS_A_DOLLSYM(atom,index) ((atom+index)->a_type == A_DOLLSYM)
-
-#define IEM_FSTYLE_FLAGS_ALL 0x007fffff
-#define IEM_INIT_ARGS_ALL    0x01ffffff
 
 #define IEM_GUI_OLD_SND_FLAG 1
 #define IEM_GUI_OLD_RCV_FLAG 2
 
-#define IEM_GUI_COLOR_EDITED 16711680
 #define IEMGUI_MAX_NUM_LEN 32
 
-typedef struct _iem_fstyle_flags
-{
-    unsigned int x_font_style:6;
-    unsigned int x_rcv_able:1;
-    unsigned int x_snd_able:1;
-    unsigned int x_lab_is_unique:1;
-    unsigned int x_rcv_is_unique:1;
-    unsigned int x_snd_is_unique:1;
-    unsigned int x_lab_arg_tail_len:6;
-    unsigned int x_lab_is_arg_num:6;
-    unsigned int x_shiftdown:1;
-    unsigned int x_selected:1;
-    unsigned int x_finemoved:1;
-    unsigned int x_put_in2out:1;
-    unsigned int x_change:1;
-    unsigned int x_thick:1;
-    unsigned int x_lin0_log1:1;
-    unsigned int x_steady:1;
-    unsigned int dummy:1;
-} t_iem_fstyle_flags;
-
-typedef struct _iem_init_symargs
-{
-    unsigned int x_loadinit:1;
-    unsigned int x_rcv_arg_tail_len:6;
-    unsigned int x_snd_arg_tail_len:6;
-    unsigned int x_rcv_is_arg_num:6;
-    unsigned int x_snd_is_arg_num:6;
-    unsigned int x_scale:1;
-    unsigned int x_flashed:1;
-    unsigned int x_locked:1;
-    unsigned int x_reverse:1; /* bugfix */
-    unsigned int dummy:3;
-} t_iem_init_symargs;
+#define SCALE_NUM_MINWIDTH 1
+#define SCALE_NUM_MINHEIGHT 8
+#define SCALE_GOP_MINWIDTH 12
+#define SCALE_GOP_MINHEIGHT 12
+#define SCALEHANDLE_WIDTH   5
+#define SCALEHANDLE_HEIGHT  5
+#define LABELHANDLE_WIDTH   5
+#define LABELHANDLE_HEIGHT  5
 
 typedef void (*t_iemfunptr)(void *x, t_glist *glist, int mode);
 
-typedef struct _iemgui
+struct _scalehandle;
+typedef void (*t_clickhandlefn)(struct _scalehandle *sh, int newstate);
+typedef void (*t_motionhandlefn)(struct _scalehandle *sh, t_floatarg f1, t_floatarg f2);
+
+EXTERN t_class *scalehandle_class;
+
+typedef struct _scalehandle
 {
-    t_object           x_obj;
-    t_glist            *x_glist;
-    t_iemfunptr        x_draw;
-    int                x_h;
-    int                x_w;
-    int                x_ldx;
-    int                x_ldy;
-    char               x_font[16];
-    t_iem_fstyle_flags x_fsf;
-    int                x_fontsize;
-    t_iem_init_symargs x_isa;
-    int                x_fcol;
-    int                x_bcol;
-    int                x_lcol;
-    t_symbol           *x_snd;              /* send symbol */
-    t_symbol           *x_rcv;              /* receive */
-    t_symbol           *x_lab;              /* label */
-    t_symbol           *x_snd_unexpanded;   /* same 3, with '$' unexpanded */
-    t_symbol           *x_rcv_unexpanded;
-    t_symbol           *x_lab_unexpanded;
-    int                x_binbufindex;       /* where in binbuf to find these */
-    int                x_labelbindex;       /* where in binbuf to find label */
-} t_iemgui;
+    t_pd       h_pd;
+    t_object  *h_master;
+    t_glist   *h_glist; // this is the canvas to draw on. Note that when objects are edited, "glist" and "canvas" mean the same.
+    t_symbol  *h_bindsym;
+    int        h_scale; // bool
+    char       h_pathname[37]; // max size for ".x%lx.h%lx" = 5+4*sizeof(long)
+    char       h_outlinetag[18]; // max size for "h%lx" = 2+2*sizeof(long)
+    int        h_dragon; // bool
+    int        h_dragx;
+    int        h_dragy;
+    int        h_offset_x;
+    int        h_offset_y;
+    int        h_vis; // bool
+    t_clickhandlefn h_clickfn;
+    t_motionhandlefn h_motionfn;
+} t_scalehandle;
 
-typedef struct _iemguidummy
+typedef struct _iemgui
 {
-    t_iemgui x_gui;
-    int      x_dum1;
-    int      x_dum2;
-    int      x_dum3;
-} t_iemguidummy;
+    t_object       x_obj;
+    t_glist       *x_glist;
+    t_iemfunptr    x_draw;           //29    /* this should be static */
+    int            x_h; //unsigned   //80
+    int            x_w; //unsigned   //119
+    int            x_ldx;            //33
+    int            x_ldy;            //33
+    int            x_fontsize;//uns. //41
+    int            x_fcol;//iemcolor //35  /* foreground */
+    int            x_bcol;//iemcolor //41  /* background */
+    int            x_lcol;//iemcolor //21  /* label */
+    t_symbol      *x_snd;            //18  /* send symbol */
+    t_symbol      *x_rcv;            //33  /* receive */
+    t_symbol      *x_lab;            //15  /* label */
+    t_symbol      *x_snd_unexpanded; //7  /* same 3, with '$' unexpanded */
+    t_symbol      *x_rcv_unexpanded; //7
+    t_symbol      *x_lab_unexpanded; //6
+    int            x_binbufindex;    //4   /* where in binbuf to find these (this should be static) */
+    int            x_labelbindex;    //5   /* where in binbuf to find label (this should be static) */
+    t_scalehandle *x_handle;         //24
+    t_scalehandle *x_lhandle;        //19
+    int            x_vis;     //bool //64  /* is the object drawn? */
+    int            x_changed; //bool //30  /* has the value changed so that we need to do graphic update */
+
+                                  // grep -w "$1" *.[ch]|wc -l
+    t_glist     *x_selected;      // 24 matches
+    // from t_iem_fstyle_flags
+    unsigned int x_font_style:6;  // 33 matches
+    unsigned int x_finemoved:1;   //  7 matches (sliders and [nbx] only)
+    unsigned int x_put_in2out:1;  //  9 matches
+    unsigned int x_change:1;      // 28 matches  // what's this and why is there also a x_changed ?
+    // from t_iem_init_symargs
+    unsigned int x_loadinit:1;    // 21 matches
+    unsigned int x_locked:1;      //  7 matches ([bng] only)
+    unsigned int x_reverse:1;     //  4 matches (sliders only)
+    unsigned int dummy:20;
+} t_iemgui;
 
 typedef struct _bng
 {
     t_iemgui x_gui;
-    int      x_flashed;
-    int      x_flashtime_break;
-    int      x_flashtime_hold;
+    int      x_flashed; // bool
+    int      x_flashtime_break; // >= 0
+    int      x_flashtime_hold; // >= 0
     t_clock  *x_clock_hld;
     t_clock  *x_clock_brk;
     t_clock  *x_clock_lck;
 } t_bng;
 
-typedef struct _hslider
+typedef struct _slider
 {
     t_iemgui x_gui;
     int      x_pos;
     int      x_val;
-    int      x_center;
-    int      x_thick;
-    int      x_lin0_log1;
-    int      x_steady;
+    int      x_center; // is this necessary ?
+    int      x_thick; // bool
+    int      x_lin0_log1; // bool
+    int      x_steady; // bool
     double   x_min;
     double   x_max;
     double   x_k;
-} t_hslider;
+    double   x_last;
+    int      x_is_last_float; // bool
+    int      x_orient; // bool: 0=horizontal ([hsl]), 1=vertical ([vsl])
+} t_slider;
 
-typedef struct _hdial
+typedef struct _radio
 {
     t_iemgui x_gui;
-    int      x_on;
-    int      x_on_old;
-    int      x_change;
-    int      x_number;
-    t_atom   x_at[2];
-} t_hdial;
+    int      x_on; // unsigned < x_number
+    int      x_on_old; /* for use by [hdl] [vdl] */
+    int      x_change; // bool
+    int      x_number; // unsigned > 0
+    int      x_drawn; // unsigned < x_number
+    t_atom   x_at[2]; // tmp buffer for outlet_list
+    int      x_orient; // bool: 0=horiz, 1=vert
+} t_radio;
 
 typedef struct _toggle
 {
     t_iemgui x_gui;
-    float    x_on;
-    float    x_nonzero;
+    t_float  x_on;
+    t_float  x_nonzero;
 } t_toggle;
 
 typedef struct _my_canvas
 {
     t_iemgui x_gui;
-    t_atom   x_at[3];
-    int      x_vis_w;
-    int      x_vis_h;
+    t_atom   x_at[2]; // tmp buffer for outlet_list
+    int      x_vis_w; // unsigned
+    int      x_vis_h; // unsigned
 } t_my_canvas;
 
-typedef struct _vslider
-{
-    t_iemgui x_gui;
-    int      x_pos;
-    int      x_val;
-    int      x_lin0_log1;
-    int      x_steady;
-    double   x_min;
-    double   x_max;
-    double   x_k;
-} t_vslider;
-
 typedef struct _vu
 {
     t_iemgui x_gui;
-    int      x_led_size;
-    int      x_peak;
-    int      x_rms;
-    float    x_fp;
-    float    x_fr;
-    int      x_scale;
-    void     *x_out_rms;
-    void     *x_out_peak;
+    int      x_led_size; // unsigned
+    int      x_peak; // 1..40 if visible ; 0 if invisible
+    int      x_rms;  // 1..40 if visible ; 0 if invisible
+    t_float  x_fp; // value for outlet 1
+    t_float  x_fr; // value for outlet 0
+    int      x_scale; // bool
+    t_outlet *x_out_rms; // outlet 0
+    t_outlet *x_out_peak; // outlet 1
+    unsigned int x_updaterms:1;
+    unsigned int x_updatepeak:1;
 } t_vu;
 
 typedef struct _my_numbox
@@ -253,77 +178,106 @@ typedef struct _my_numbox
     double   x_min;
     double   x_max;
     double   x_k;
-    int      x_lin0_log1;
+    int      x_lin0_log1; // bool
     char     x_buf[IEMGUI_MAX_NUM_LEN];
-    int      x_numwidth;
+    int      x_numwidth; // unsigned
+    int      x_scalewidth;  /* temporary value for scalehandle */
+    int      x_scaleheight; /* temporary value for scalehandle */
+    int      x_tmpfontsize; /* temporary value for scalehandle */
     int      x_log_height;
+    int      x_hide_frame;  /* 0 default, 1 just arrow, 2, just frame, 3 both */
 } t_my_numbox;
 
-typedef struct _vdial
-{
-    t_iemgui x_gui;
-    int      x_on;
-    int      x_on_old;
-    int      x_change;
-    int      x_number;
-    t_atom   x_at[2];
-} t_vdial;
-
-#define t_vradio t_vdial
-#define t_hradio t_hdial
-
 extern int sys_noloadbang;
 extern int iemgui_color_hex[];
-extern int iemgui_vu_db2i[];
-extern int iemgui_vu_col[];
-extern char *iemgui_vu_scale_str[];
 
 EXTERN int iemgui_clip_size(int size);
 EXTERN int iemgui_clip_font(int size);
-EXTERN int iemgui_modulo_color(int col);
-EXTERN t_symbol *iemgui_unique2dollarzero(t_symbol *s, int unique_num, int and_unique_flag);
-EXTERN t_symbol *iemgui_sym2dollararg(t_symbol *s, int nth_arg, int tail_len);
-EXTERN t_symbol *iemgui_dollarzero2unique(t_symbol *s, int unique_num);
-EXTERN t_symbol *iemgui_dollararg2sym(t_symbol *s, int nth_arg, int tail_len, int pargc, t_atom *pargv);
-EXTERN int iemgui_is_dollarzero(t_symbol *s);
-EXTERN int iemgui_is_dollararg(t_symbol *s, int *tail_len);
-EXTERN void iemgui_fetch_unique(t_iemgui *iemgui);
-EXTERN void iemgui_fetch_parent_args(t_iemgui *iemgui, int *pargc, t_atom **pargv);
 EXTERN void iemgui_verify_snd_ne_rcv(t_iemgui *iemgui);
-EXTERN void iemgui_all_unique2dollarzero(t_iemgui *iemgui, t_symbol **srlsym);
-EXTERN void iemgui_all_sym2dollararg(t_iemgui *iemgui, t_symbol **srlsym);
-EXTERN void iemgui_all_dollarzero2unique(t_iemgui *iemgui, t_symbol **srlsym);
-EXTERN t_symbol *iemgui_new_dogetname(t_iemgui *iemgui, int indx, t_atom *argv);
+EXTERN t_symbol *iemgui_getfloatsym(t_atom *a);
+EXTERN t_symbol *iemgui_getfloatsymarg(int i, int argc, t_atom *argv);
 EXTERN void iemgui_new_getnames(t_iemgui *iemgui, int indx, t_atom *argv);
-EXTERN void iemgui_all_dollararg2sym(t_iemgui *iemgui, t_symbol **srlsym);
-EXTERN void iemgui_first_dollararg2sym(t_iemgui *iemgui, t_symbol **srlsym);
-EXTERN void iemgui_all_col2save(t_iemgui *iemgui, int *bflcol);
 EXTERN void iemgui_all_colfromload(t_iemgui *iemgui, int *bflcol);
-EXTERN int iemgui_compatible_col(int i);
-EXTERN void iemgui_all_dollar2raute(t_symbol **srlsym);
-EXTERN void iemgui_all_raute2dollar(t_symbol **srlsym);
-EXTERN void iemgui_send(void *x, t_iemgui *iemgui, t_symbol *s);
-EXTERN void iemgui_receive(void *x, t_iemgui *iemgui, t_symbol *s);
-EXTERN void iemgui_label(void *x, t_iemgui *iemgui, t_symbol *s);
-EXTERN void iemgui_label_pos(void *x, t_iemgui *iemgui, t_symbol *s, int ac, t_atom *av);
-EXTERN void iemgui_label_font(void *x, t_iemgui *iemgui, t_symbol *s, int ac, t_atom *av);
-EXTERN void iemgui_size(void *x, t_iemgui *iemgui);
-EXTERN void iemgui_delta(void *x, t_iemgui *iemgui, t_symbol *s, int ac, t_atom *av);
-EXTERN void iemgui_pos(void *x, t_iemgui *iemgui, t_symbol *s, int ac, t_atom *av);
-EXTERN void iemgui_color(void *x, t_iemgui *iemgui, t_symbol *s, int ac, t_atom *av);
-EXTERN int iemgui_list(void *x, t_iemgui *iemgui, t_symbol *s, int ac, t_atom *av);
+EXTERN void iemgui_send(t_iemgui *x, t_symbol *s);
+EXTERN void iemgui_receive(t_iemgui *x, t_symbol *s);
+EXTERN void iemgui_label(t_iemgui *x, t_symbol *s);
+EXTERN void iemgui_label_pos(t_iemgui *x, t_symbol *s, int ac, t_atom *av);
+EXTERN void iemgui_label_font(t_iemgui *x, t_symbol *s, int ac, t_atom *av);
+EXTERN void iemgui_label_getrect(t_iemgui x_gui, t_glist *x, int *xp1, int *yp1, int *xp2, int *yp2);
+EXTERN void iemgui_shouldvis(t_iemgui *x, int mode);
+EXTERN void iemgui_size(t_iemgui *x);
+EXTERN void iemgui_delta(t_iemgui *x, t_symbol *s, int ac, t_atom *av);
+EXTERN void iemgui_pos(t_iemgui *x, t_symbol *s, int ac, t_atom *av);
+EXTERN void iemgui_color(t_iemgui *x, t_symbol *s, int ac, t_atom *av);
 EXTERN void iemgui_displace(t_gobj *z, t_glist *glist, int dx, int dy);
+EXTERN void iemgui_displace_withtag(t_gobj *z, t_glist *glist, int dx, int dy);
 EXTERN void iemgui_select(t_gobj *z, t_glist *glist, int selected);
 EXTERN void iemgui_delete(t_gobj *z, t_glist *glist);
 EXTERN void iemgui_vis(t_gobj *z, t_glist *glist, int vis);
-EXTERN void iemgui_save(t_iemgui *iemgui, t_symbol **srl, int *bflcol);
-EXTERN void iemgui_properties(t_iemgui *iemgui, t_symbol **srl);
-EXTERN int iemgui_dialog(t_iemgui *iemgui, t_symbol **srl, int argc, t_atom *argv);
-
-EXTERN int canvas_getdollarzero(void);
-EXTERN void canvas_getargs(int *argcp, t_atom **argvp);
+EXTERN void iemgui_save(t_iemgui *x, t_symbol **srl, int *bflcol);
+EXTERN void iemgui_properties(t_iemgui *x, t_symbol **srl);
+EXTERN int iemgui_dialog(t_iemgui *x, int argc, t_atom *argv);
+
+EXTERN void iem_inttosymargs(t_iemgui *x, int n);
+EXTERN int iem_symargstoint(t_iemgui *x);
+EXTERN void iem_inttofstyle(t_iemgui *x, int n);
+EXTERN int iem_fstyletoint(t_iemgui *x);
+
+EXTERN void canvas_apply_setundo(t_canvas *x, t_gobj *y);
+
+// scalehandle code, as refactored by Mathieu
+EXTERN void scalehandle_bind(t_scalehandle *h);
+EXTERN void scalehandle_draw_select(t_scalehandle *h, int px, int py);
+EXTERN void scalehandle_draw_select2(t_iemgui *x);
+EXTERN void scalehandle_draw_erase(t_scalehandle *h);
+EXTERN void scalehandle_draw_erase2(t_iemgui *x);
+EXTERN void scalehandle_draw(t_iemgui *x);
+EXTERN t_scalehandle *scalehandle_new(t_object *x, t_glist *glist, int scale, t_clickhandlefn chf, t_motionhandlefn mhf);
+EXTERN void scalehandle_free(t_scalehandle *h);
+EXTERN void properties_set_field_int(long props, const char *gui_field, int value);
+EXTERN void scalehandle_dragon_label(t_scalehandle *h, float f1, float f2);
+EXTERN void scalehandle_unclick_label(t_scalehandle *h);
+EXTERN void scalehandle_click_label(t_scalehandle *h);
+EXTERN void scalehandle_click_scale(t_scalehandle *h);
+EXTERN void scalehandle_unclick_scale(t_scalehandle *h);
+EXTERN void scalehandle_drag_scale(t_scalehandle *h);
+EXTERN void iemgui__clickhook3(t_scalehandle *sh, int newstate);
+
+EXTERN int mini(int a, int b);
+EXTERN int maxi(int a, int b);
+EXTERN float minf(float a, float b);
+EXTERN float maxf(float a, float b);
+
+// other refactor by Mathieu
+EXTERN void iemgui_tag_selected(     t_iemgui *x);
+EXTERN void iemgui_label_draw_new(   t_iemgui *x);
+EXTERN void iemgui_label_draw_move(  t_iemgui *x);
+EXTERN void iemgui_label_draw_config(t_iemgui *x);
+EXTERN void iemgui_label_draw_select(t_iemgui *x);
+EXTERN void iemgui_io_draw_move(t_iemgui *x);
+EXTERN void iemgui_draw_io(t_iemgui *x, int old_sr_flags);
+EXTERN void iemgui_base_draw_new(t_iemgui *x);
+EXTERN void iemgui_base_draw_move(t_iemgui *x);
+EXTERN void iemgui_base_draw_config(t_iemgui *x);
+EXTERN void iemgui_draw_new(t_iemgui *x);
+EXTERN void iemgui_draw_config(t_iemgui *x);
+EXTERN void iemgui_draw_move(t_iemgui *x);
+EXTERN void iemgui_draw_erase(t_iemgui *x);
+EXTERN void wb_init(t_widgetbehavior *wb, t_getrectfn gr, t_clickfn cl); // rename this to iemgui_wb_init
+
+extern t_symbol *s_empty;
+EXTERN const char *selection_color;
+
+static inline int iemgui_has_snd (t_iemgui *x) {return x->x_snd!=s_empty;}
+static inline int iemgui_has_rcv (t_iemgui *x) {return x->x_rcv!=s_empty;}
+EXTERN const char *iemgui_font(t_iemgui *x);
+EXTERN const char *iemgui_typeface(t_iemgui *x);
+
+EXTERN void iemgui_class_addmethods(t_class *c);
+EXTERN void scrollbar_update(t_glist *glist);
+EXTERN void iemgui_init(t_iemgui *x, t_floatarg f);
+
+EXTERN void iemgui_out_bang(t_iemgui *x, int o, int chk_putin);
+EXTERN void iemgui_out_float(t_iemgui *x, int o, int chk_putin, t_float f);
+EXTERN void iemgui_out_list(t_iemgui *x, int o, int chk_putin, t_symbol *s, int argc, t_atom *argv);
 
-EXTERN void iem_inttosymargs(t_iem_init_symargs *symargp, int n);
-EXTERN int iem_symargstoint(t_iem_init_symargs *symargp);
-EXTERN void iem_inttofstyle(t_iem_fstyle_flags *fstylep, int n);
-EXTERN int iem_fstyletoint(t_iem_fstyle_flags *fstylep);
diff --git a/externals/build/include/g_canvas.h b/externals/build/include/g_canvas.h
index 0433f4a2a..6dde20607 100644
--- a/externals/build/include/g_canvas.h
+++ b/externals/build/include/g_canvas.h
@@ -7,8 +7,8 @@ functions.  "Glists" and "canvases" and "graphs" used to be different
 structures until being unified in version 0.35.
 
 A glist occupies its own window if the "gl_havewindow" flag is set.  Its
-appearance on its "parent" or "owner" (if it has one) is as a graph if
-"gl_isgraph" is set, and otherwise as a text box.
+appearance on its "parent", also called "owner", (if it has one) is as a graph
+if "gl_isgraph" is set, and otherwise as a text box.
 
 A glist is "root" if it has no owner, i.e., a document window.  In this
 case "gl_havewindow" is always set.
@@ -36,10 +36,13 @@ glist has its own window, even if miniaturized.
 /* NOTE: this file describes Pd implementation details which may change
 in future releases.  The public (stable) API is in m_pd.h. */  
 
+#ifndef PD_G_CANVAS_H
+#define PD_G_CANVAS_H
+
 #if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus)
 extern "C" {
 #endif
-
+  
 /* --------------------- geometry ---------------------------- */
 #define IOWIDTH 7       /* width of an inlet/outlet in pixels */
 #define IOMIDDLE ((IOWIDTH-1)/2)
@@ -73,6 +76,22 @@ EXTERN_STRUCT _tscalar;
 EXTERN_STRUCT _canvasenvironment;
 #define t_canvasenvironment struct _canvasenvironment 
 
+EXTERN_STRUCT _fielddesc;
+#define t_fielddesc struct _fielddesc
+
+// jsarlo
+EXTERN_STRUCT _magicGlass;
+#define t_magicGlass struct _magicGlass
+// end jsarlo
+
+// undo stuff
+EXTERN_STRUCT _undo_action;
+#define t_undo_action struct _undo_action
+
+// preset hub stuff
+EXTERN_STRUCT _preset_hub;
+#define t_preset_hub struct _preset_hub
+
 typedef struct _selection
 {
     t_gobj *sel_what;
@@ -105,6 +124,12 @@ typedef struct _editor
     unsigned int e_lastmoved: 1;    /* one if mouse has moved since click */
     unsigned int e_textdirty: 1;    /* one if e_textedfor has changed */
     unsigned int e_selectedline: 1; /* one if a line is selected */
+    t_magicGlass *gl_magic_glass;   /* magic glass object */
+	char canvas_cnct_inlet_tag[4096]; /* tags for currently highlighted nlets */
+	char canvas_cnct_outlet_tag[4096];
+    t_clock *e_clock;               /* clock to filter GUI move messages */
+    int e_xnew;                     /* xpos for next move event */
+    int e_ynew;                     /* ypos, similarly */
 } t_editor;
 
 #define MA_NONE    0    /* e_onmotion: do nothing on mouse motion */
@@ -113,6 +138,8 @@ typedef struct _editor
 #define MA_REGION  3    /* selection region */
 #define MA_PASSOUT 4    /* send on to e_grab */
 #define MA_DRAGTEXT 5   /* drag in text editor to alter selection */
+#define MA_RESIZE  6    /* drag to resize */
+#define MA_SCROLL  7    /* scroll with middle click onto empty canvas */
 
 /* editor structure for "garrays".  We don't bother to delete and regenerate
 this structure when the "garray" becomes invisible or visible, although we
@@ -124,12 +151,15 @@ typedef struct _arrayvis
     t_garray *av_garray;            /* owning structure */    
 } t_arrayvis;
 
+t_garray* array_garray;				/* used for sending bangs when
+									   array is changed  via gui */
+
 /* the t_tick structure describes where to draw x and y "ticks" for a glist */
 
 typedef struct _tick    /* where to put ticks on x or y axes */
 {
-    float k_point;      /* one point to draw a big tick at */
-    float k_inc;        /* x or y increment per little tick */
+    t_float k_point;      /* one point to draw a big tick at */
+    t_float k_inc;        /* x or y increment per little tick */
     int k_lperb;        /* little ticks per big; 0 if no ticks to draw */
 } t_tick;
 
@@ -138,6 +168,8 @@ area of a window.
 
 */
 
+//#include "g_undo.h"
+
 struct _glist
 {  
     t_object gl_obj;            /* header in case we're a glist */
@@ -147,22 +179,24 @@ struct _glist
     struct _glist *gl_owner;    /* parent glist, supercanvas, or 0 if none */
     int gl_pixwidth;            /* width in pixels (on parent, if a graph) */
     int gl_pixheight;
-    float gl_x1;                /* bounding rectangle in our own coordinates */
-    float gl_y1;
-    float gl_x2;
-    float gl_y2;
+    t_float gl_x1;                /* bounding rectangle in our own coordinates */
+    t_float gl_y1;
+    t_float gl_x2;
+    t_float gl_y2;
     int gl_screenx1;            /* screen coordinates when toplevel */
     int gl_screeny1;
     int gl_screenx2;
     int gl_screeny2;
+    int gl_xmargin;                /* origin for GOP rectangle */
+    int gl_ymargin;
     t_tick gl_xtick;            /* ticks marking X values */    
     int gl_nxlabels;            /* number of X coordinate labels */
     t_symbol **gl_xlabel;           /* ... an array to hold them */
-    float gl_xlabely;               /* ... and their Y coordinates */
+    t_float gl_xlabely;               /* ... and their Y coordinates */
     t_tick gl_ytick;            /* same as above for Y ticks and labels */
     int gl_nylabels;
     t_symbol **gl_ylabel;
-    float gl_ylabelx;
+    t_float gl_ylabelx;
     t_editor *gl_editor;        /* editor structure when visible */
     t_symbol *gl_name;          /* symbol bound here */
     int gl_font;                /* nominal font size in points, e.g., 10 */
@@ -175,13 +209,38 @@ struct _glist
     unsigned int gl_willvis:1;      /* make me visible after loading */ 
     unsigned int gl_edit:1;         /* edit mode */
     unsigned int gl_isdeleting:1;   /* we're inside glist_delete -- hack! */
-    unsigned int gl_stretch:1;      /* stretch contents on resize */
+    unsigned int gl_unloading:1;    /* we're inside canvas_free */
+    unsigned int gl_goprect:1;      /* draw rectangle for graph-on-parent */
     unsigned int gl_isgraph:1;      /* show as graph on parent */
+    unsigned int gl_hidetext:1;     /* hide object-name + args when doing graph on parent */
+	unsigned int gl_gop_initialized:1;     /* used for tagged moving of gop-ed objects to avoid redundant reinit */
+	//global preset array pointer
+	t_preset_hub *gl_phub;
+	//infinite undo goodies (have to stay here rather than the editor to prevent its obliteration when editor is deleted)
+	t_undo_action *u_queue;
+	t_undo_action *u_last;
+	//dpsaha@vt.edu for the gop dynamic resizing & move handle (refactored by mathieu)
+	struct _scalehandle *x_handle;
+	struct _scalehandle *x_mhandle;
+	t_pd *gl_svg;
 };
 
 #define gl_gobj gl_obj.te_g
 #define gl_pd gl_gobj.g_pd
 
+/*-------------------universal preset stuff---------------------*/
+// for the universal preset_node ability (see g_editor.c doconnect/disconnect functions)
+// this is where all the classes capable of being controlled via preset should be defined
+
+// preset objects
+t_class *preset_hub_class;
+t_class *preset_node_class;
+
+// special case objects
+extern t_class *print_class;
+extern t_class *message_class;
+/*-----------------end universal preset stuff-------------------*/
+
 /* a data structure to describe a field in a pure datum */
 
 #define DT_FLOAT 0
@@ -196,13 +255,16 @@ typedef struct _dataslot
     t_symbol *ds_arraytemplate;     /* filled in for arrays only */
 } t_dataslot;
 
-
-/* T.Grill - changed t_pd member to t_pdobj to avoid name clashed */
 typedef struct _template
 {
     t_pd t_pdobj;               /* header */
     struct _gtemplate *t_list;  /* list of "struct"/gtemplate objects */
     t_symbol *t_sym;            /* name */
+    int t_transformable;        /* counts number of arrays in template
+                                   drawn objects that depend on this
+                                   template can only be transformed
+                                   (scaled/skewed,rotated, etc.)
+                                   if this var is 0 */
     int t_n;                    /* number of dataslots (fields) */
     t_dataslot *t_vec;          /* array of dataslots */
 } t_template;
@@ -215,7 +277,7 @@ struct _array
     t_symbol *a_templatesym;    /* template for elements */
     int a_valid;        /* protection against stale pointers into array */
     t_gpointer a_gp;    /* pointer to scalar or array element we're in */
-    t_gstub *a_stub;
+    t_gstub *a_stub;    /* stub for pointing into this array */
 };
 
     /* structure for traversing all the connections in a glist */
@@ -237,6 +299,9 @@ typedef struct _linetraverser
     int tr_nextoutno;
 } t_linetraverser;
 
+EXTERN int outconnect_visible(t_outconnect *oc);
+EXTERN int outconnect_setvisible(t_outconnect *oc, int vis);
+
 /* function types used to define graphical behavior for gobjs, a bit like X
 widgets.  We don't use Pd methods because Pd's typechecking can't specify the
 types of pointer arguments.  Also it's more convenient this way, since
@@ -258,6 +323,8 @@ typedef void (*t_visfn)(t_gobj *x, struct _glist *glist, int flag);
         /* field a mouse click (when not in "edit" mode) */
 typedef int (*t_clickfn)(t_gobj *x, struct _glist *glist,
     int xpix, int ypix, int shift, int alt, int dbl, int doit);
+        /* and this to displace a gobj using tags: */
+typedef void (*t_displacefnwtag)(t_gobj *x, struct _glist *glist, int dx, int dy);
         /* ... and later, resizing; getting/setting font or color... */
 
 struct _widgetbehavior
@@ -269,6 +336,7 @@ struct _widgetbehavior
     t_deletefn w_deletefn;
     t_visfn w_visfn;
     t_clickfn w_clickfn;
+	t_displacefnwtag w_displacefnwtag;
 };
 
 /* -------- behaviors for scalars defined by objects in template --------- */
@@ -282,27 +350,29 @@ doesn't work on array elements... LATER reconsider this */
 
         /* bounding rectangle: */
 typedef void (*t_parentgetrectfn)(t_gobj *x, struct _glist *glist,
-    t_word *data, t_template *tmpl, float basex, float basey,
+    t_word *data, t_template *tmpl, t_float basex, t_float basey,
     int *x1, int *y1, int *x2, int *y2);
         /* displace it */
 typedef void (*t_parentdisplacefn)(t_gobj *x, struct _glist *glist, 
-    t_word *data, t_template *tmpl, float basex, float basey,
+    t_word *data, t_template *tmpl, t_float basex, t_float basey,
     int dx, int dy);
         /* change color to show selection */
 typedef void (*t_parentselectfn)(t_gobj *x, struct _glist *glist,
-    t_word *data, t_template *tmpl, float basex, float basey,
+    t_word *data, t_template *tmpl, t_float basex, t_float basey,
     int state);
         /* change appearance to show activation/deactivation: */
 typedef void (*t_parentactivatefn)(t_gobj *x, struct _glist *glist,
-    t_word *data, t_template *tmpl, float basex, float basey,
+    t_word *data, t_template *tmpl, t_float basex, t_float basey,
     int state);
         /*  making visible or invisible */
 typedef void (*t_parentvisfn)(t_gobj *x, struct _glist *glist,
-    t_word *data, t_template *tmpl, float basex, float basey,
+    struct _glist *parentglist, t_scalar *sc, 
+    t_word *data, t_template *tmpl, t_float basex, t_float basey,
     int flag);
         /*  field a mouse click */
 typedef int (*t_parentclickfn)(t_gobj *x, struct _glist *glist,
-    t_scalar *sc, t_template *tmpl, float basex, float basey,
+    t_word *data, t_template *tmpl, t_scalar *sc, t_array *ap,
+    t_float basex, t_float basey,
     int xpix, int ypix, int shift, int alt, int dbl, int doit);
 
 struct _parentwidgetbehavior
@@ -323,6 +393,9 @@ struct _parentwidgetbehavior
 #define CURSOR_EDITMODE_NOTHING 4
 #define CURSOR_EDITMODE_CONNECT 5
 #define CURSOR_EDITMODE_DISCONNECT 6
+#define CURSOR_EDITMODE_RESIZE 7
+#define CURSOR_EDITMODE_RESIZE_BOTTOM_RIGHT 8
+#define CURSOR_SCROLL 9
 EXTERN void canvas_setcursor(t_glist *x, unsigned int cursornum);
 
 extern t_canvas *canvas_editing;    /* last canvas to start text edting */ 
@@ -331,6 +404,11 @@ extern t_canvas *canvas_list;       /* list of all root canvases */
 extern t_class *vinlet_class, *voutlet_class;
 extern int glist_valid;         /* incremented when pointers might be stale */
 
+#define PLOTSTYLE_POINTS 0     /* plotting styles for arrays */
+#define PLOTSTYLE_POLY 1
+#define PLOTSTYLE_BEZ 2
+#define PLOTSTYLE_BARS 3
+
 /* ------------------- functions on any gobj ----------------------------- */
 EXTERN void gobj_getrect(t_gobj *x, t_glist *owner, int *x1, int *y1,
     int *x2, int *y2);
@@ -344,15 +422,12 @@ EXTERN int gobj_click(t_gobj *x, struct _glist *glist,
 EXTERN void gobj_save(t_gobj *x, t_binbuf *b);
 EXTERN void gobj_properties(t_gobj *x, struct _glist *glist);
 EXTERN void gobj_save(t_gobj *x, t_binbuf *b);
-EXTERN void gobj_redraw(t_gobj *gobj, t_glist *glist);
+EXTERN int gobj_shouldvis(t_gobj *x, struct _glist *glist);
 
 /* -------------------- functions on glists --------------------- */
 EXTERN t_glist *glist_new( void);
 EXTERN void glist_init(t_glist *x);
 EXTERN void glist_add(t_glist *x, t_gobj *g);
-EXTERN void glist_cleanup(t_glist *x);
-EXTERN void glist_free(t_glist *x);
-
 EXTERN void glist_clear(t_glist *x);
 EXTERN t_canvas *glist_getcanvas(t_glist *x);
 EXTERN int glist_isselected(t_glist *x, t_gobj *y);
@@ -372,42 +447,44 @@ EXTERN void glist_sort(t_glist *canvas);
 EXTERN void glist_read(t_glist *x, t_symbol *filename, t_symbol *format);
 EXTERN void glist_mergefile(t_glist *x, t_symbol *filename, t_symbol *format);
 
-EXTERN float glist_pixelstox(t_glist *x, float xpix);
-EXTERN float glist_pixelstoy(t_glist *x, float ypix);
-EXTERN float glist_xtopixels(t_glist *x, float xval);
-EXTERN float glist_ytopixels(t_glist *x, float yval);
-EXTERN float glist_dpixtodx(t_glist *x, float dxpix);
-EXTERN float glist_dpixtody(t_glist *x, float dypix);
+EXTERN t_float glist_pixelstox(t_glist *x, t_float xpix);
+EXTERN t_float glist_pixelstoy(t_glist *x, t_float ypix);
+EXTERN t_float glist_xtopixels(t_glist *x, t_float xval);
+EXTERN t_float glist_ytopixels(t_glist *x, t_float yval);
+EXTERN t_float glist_dpixtodx(t_glist *x, t_float dxpix);
+EXTERN t_float glist_dpixtody(t_glist *x, t_float dypix);
 
-EXTERN void glist_redrawitem(t_glist *owner, t_gobj *gobj);
 EXTERN void glist_getnextxy(t_glist *gl, int *xval, int *yval);
 EXTERN void glist_glist(t_glist *g, t_symbol *s, int argc, t_atom *argv);
 EXTERN t_glist *glist_addglist(t_glist *g, t_symbol *sym,
-    float x1, float y1, float x2, float y2,
-    float px1, float py1, float px2, float py2);
-EXTERN void glist_arraydialog(t_glist *parent, t_symbol *name,
-    t_floatarg size, t_floatarg saveit, t_floatarg newgraph);
+    t_float x1, t_float y1, t_float x2, t_float y2,
+    t_float px1, t_float py1, t_float px2, t_float py2);
+EXTERN void glist_arraydialog(t_glist *parent, t_symbol *s,
+    int argc, t_atom *argv);
 EXTERN t_binbuf *glist_writetobinbuf(t_glist *x, int wholething);
 EXTERN int glist_isgraph(t_glist *x);
 EXTERN void glist_redraw(t_glist *x);
 EXTERN void glist_drawiofor(t_glist *glist, t_object *ob, int firsttime,
     char *tag, int x1, int y1, int x2, int y2);
 EXTERN void glist_eraseiofor(t_glist *glist, t_object *ob, char *tag);
-EXTERN void canvas_create_editor(t_glist *x, int createit);
-void canvas_deletelinesforio(t_canvas *x, t_text *text,
+EXTERN void canvas_create_editor(t_glist *x);
+EXTERN void canvas_destroy_editor(t_glist *x);
+EXTERN void canvas_deletelinesforio(t_canvas *x, t_text *text,
     t_inlet *inp, t_outlet *outp);
-
+EXTERN int glist_amreloadingabstractions; /* stop GUI changes while reloading */
+EXTERN int canvas_restore_original_position(t_glist *x, t_gobj *y, const char *objtag, int dir);
 
 /* -------------------- functions on texts ------------------------- */
-EXTERN void text_setto(t_text *x, t_glist *glist, char *buf, int bufsize);
+EXTERN void text_setto(t_text *x, t_glist *glist, char *buf, int bufsize, int pos);
 EXTERN void text_drawborder(t_text *x, t_glist *glist, char *tag,
     int width, int height, int firsttime);
+EXTERN void text_drawborder_withtag(t_text *x, t_glist *glist, char *tag,
+    int width, int height, int firsttime);
 EXTERN void text_eraseborder(t_text *x, t_glist *glist, char *tag);
 EXTERN int text_xcoord(t_text *x, t_glist *glist);
 EXTERN int text_ycoord(t_text *x, t_glist *glist);
 EXTERN int text_xpix(t_text *x, t_glist *glist);
 EXTERN int text_ypix(t_text *x, t_glist *glist);
-EXTERN int text_shouldvis(t_text *x, t_glist *glist);
 
 /* -------------------- functions on rtexts ------------------------- */
 #define RTEXT_DOWN 1
@@ -415,24 +492,23 @@ EXTERN int text_shouldvis(t_text *x, t_glist *glist);
 #define RTEXT_DBL 3
 #define RTEXT_SHIFT 4
 
-EXTERN t_rtext *rtext_new(t_glist *glist, t_text *who);
-EXTERN t_rtext *glist_findrtext(t_glist *gl, t_text *who);
-EXTERN void rtext_draw(t_rtext *x);
-EXTERN void rtext_erase(t_rtext *x);
-EXTERN t_rtext *rtext_remove(t_rtext *first, t_rtext *x);
-EXTERN int rtext_height(t_rtext *x);
-EXTERN void rtext_displace(t_rtext *x, int dx, int dy);
-EXTERN void rtext_select(t_rtext *x, int state);
-EXTERN void rtext_activate(t_rtext *x, int state);
-EXTERN void rtext_free(t_rtext *x);
-EXTERN void rtext_key(t_rtext *x, int n, t_symbol *s);
-EXTERN void rtext_mouse(t_rtext *x, int xval, int yval, int flag);
-EXTERN void rtext_retext(t_rtext *x);
-EXTERN int rtext_width(t_rtext *x);
-EXTERN int rtext_height(t_rtext *x);
-EXTERN char *rtext_gettag(t_rtext *x);
-EXTERN void rtext_gettext(t_rtext *x, char **buf, int *bufsize);
-EXTERN void rtext_getseltext(t_rtext *x, char **buf, int *bufsize);
+// number in comment is the number in grep -w|wc
+EXTERN t_rtext *rtext_new(t_glist *glist, t_text *who); //5
+EXTERN t_rtext *glist_findrtext(t_glist *gl, t_text *who); //53
+EXTERN void rtext_draw(t_rtext *x); //4
+EXTERN void rtext_erase(t_rtext *x); //4
+EXTERN int rtext_width(t_rtext *x); //9
+EXTERN int rtext_height(t_rtext *x); //9
+EXTERN void rtext_displace(t_rtext *x, int dx, int dy); //3
+EXTERN void rtext_select(t_rtext *x, int state); //4
+EXTERN void rtext_activate(t_rtext *x, int state); //3
+EXTERN void rtext_free(t_rtext *x); //4
+EXTERN void rtext_key(t_rtext *x, int n, t_symbol *s); //6
+EXTERN void rtext_mouse(t_rtext *x, int xval, int yval, int flag); //5
+EXTERN void rtext_retext(t_rtext *x); //5
+EXTERN char *rtext_gettag(t_rtext *x); //47
+EXTERN void rtext_gettext(t_rtext *x, char **buf, int *bufsize); //9
+EXTERN void rtext_getseltext(t_rtext *x, char **buf, int *bufsize); //4
 
 /* -------------------- functions on canvases ------------------------ */
 EXTERN t_class *canvas_class;
@@ -442,6 +518,7 @@ EXTERN t_symbol *canvas_makebindsym(t_symbol *s);
 EXTERN void canvas_vistext(t_canvas *x, t_text *y);
 EXTERN void canvas_fixlinesfor(t_canvas *x, t_text *text);
 EXTERN void canvas_deletelinesfor(t_canvas *x, t_text *text);
+EXTERN void canvas_eraselinesfor(t_canvas *x, t_text *text);
 EXTERN void canvas_stowconnections(t_canvas *x);
 EXTERN void canvas_restoreconnections(t_canvas *x);
 EXTERN void canvas_redraw(t_canvas *x);
@@ -450,7 +527,8 @@ EXTERN t_inlet *canvas_addinlet(t_canvas *x, t_pd *who, t_symbol *sym);
 EXTERN void canvas_rminlet(t_canvas *x, t_inlet *ip);
 EXTERN t_outlet *canvas_addoutlet(t_canvas *x, t_pd *who, t_symbol *sym);
 EXTERN void canvas_rmoutlet(t_canvas *x, t_outlet *op);
-EXTERN void canvas_redrawallfortemplate(t_canvas *tmpl);
+EXTERN void canvas_redrawallfortemplate(t_template *tmpl, int action);
+EXTERN void canvas_redrawallfortemplatecanvas(t_canvas *x, int action);
 EXTERN void canvas_zapallfortemplate(t_canvas *tmpl);
 EXTERN void canvas_setusedastemplate(t_canvas *x);
 EXTERN t_canvas *canvas_getcurrent(void);
@@ -458,7 +536,7 @@ EXTERN void canvas_setcurrent(t_canvas *x);
 EXTERN void canvas_unsetcurrent(t_canvas *x);
 EXTERN t_symbol *canvas_realizedollar(t_canvas *x, t_symbol *s);
 EXTERN t_canvas *canvas_getrootfor(t_canvas *x);
-EXTERN void canvas_dirty(t_canvas *x, t_int n);
+EXTERN void canvas_dirty(t_canvas *x, t_floatarg n);
 EXTERN int canvas_getfont(t_canvas *x);
 typedef int (*t_canvasapply)(t_canvas *x, t_int x1, t_int x2, t_int x3);
 
@@ -479,7 +557,14 @@ EXTERN void canvas_rename(t_canvas *x, t_symbol *s, t_symbol *dir);
 EXTERN void canvas_loadbang(t_canvas *x);
 EXTERN int canvas_hitbox(t_canvas *x, t_gobj *y, int xpos, int ypos,
     int *x1p, int *y1p, int *x2p, int *y2p);
+EXTERN t_gobj *canvas_findhitbox(t_canvas *x, int xpos, int ypos,
+    int *x1p, int *y1p, int *x2p, int *y2p);
 EXTERN int canvas_setdeleting(t_canvas *x, int flag);
+EXTERN int canvas_hasarray(t_canvas *x);
+
+/* ---- for parsing @pd_extra and other sys paths in filenames  --------------------- */
+
+EXTERN void sys_expandpathelems(const char *name, const char *result);
 
 typedef void (*t_undofn)(t_canvas *canvas, void *buf,
     int action);        /* a function that does UNDO/REDO */
@@ -491,12 +576,10 @@ EXTERN void canvas_setundo(t_canvas *x, t_undofn undofn, void *buf,
 EXTERN void canvas_noundo(t_canvas *x);
 EXTERN int canvas_getindex(t_canvas *x, t_gobj *y);
 
-/* T.Grill - made public for dynamic object creation */
-/* in g_editor.c */
 EXTERN void canvas_connect(t_canvas *x,
     t_floatarg fwhoout, t_floatarg foutno,t_floatarg fwhoin, t_floatarg finno);
 EXTERN void canvas_disconnect(t_canvas *x,
-    float index1, float outno, float index2, float inno);
+    t_float index1, t_float outno, t_float index2, t_float inno);
 EXTERN int canvas_isconnected (t_canvas *x,
     t_text *ob1, int n1, t_text *ob2, int n2);
 EXTERN void canvas_selectinrect(t_canvas *x, int lox, int loy, int hix, int hiy);
@@ -515,29 +598,22 @@ EXTERN void linetraverser_start(t_linetraverser *t, t_canvas *x);
 EXTERN t_outconnect *linetraverser_next(t_linetraverser *t);
 EXTERN void linetraverser_skipobject(t_linetraverser *t);
 
-/* --------------------- functions on tscalars --------------------- */
-
-EXTERN void tscalar_getrect(t_tscalar *x, t_glist *owner,
-    int *xp1, int *yp1, int *xp2, int *yp2);
-EXTERN void tscalar_vis(t_tscalar *x, t_glist *owner, int flag);
-EXTERN int tscalar_click(t_tscalar *x, int xpix, int ypix, int shift,
-    int alt, int dbl, int doit);
-
 /* --------- functions on garrays (graphical arrays) -------------------- */
 
 EXTERN t_template *garray_template(t_garray *x);
 
 /* -------------------- arrays --------------------- */
-EXTERN t_garray *graph_array(t_glist *gl, t_symbol *s, t_symbol *tmpl,
-    t_floatarg f, t_floatarg saveit);
+EXTERN t_garray *graph_array(t_glist *gl, t_symbol *s, int argc, t_atom *argv);
 EXTERN t_array *array_new(t_symbol *templatesym, t_gpointer *parent);
-EXTERN void array_resize(t_array *x, t_template *tmpl, int n);
+EXTERN void array_resize(t_array *x, int n);
 EXTERN void array_free(t_array *x);
+int array_joc; /* for "jump on click" array inside a graph */
 
 /* --------------------- gpointers and stubs ---------------- */
 EXTERN t_gstub *gstub_new(t_glist *gl, t_array *a);
 EXTERN void gstub_cutoff(t_gstub *gs);
 EXTERN void gpointer_setglist(t_gpointer *gp, t_glist *glist, t_scalar *x);
+EXTERN void gpointer_setarray(t_gpointer *gp, t_array *array, t_word *w);
 
 /* --------------------- scalars ------------------------- */
 EXTERN void word_init(t_word *wp, t_template *tmpl, t_gpointer *gp);
@@ -545,22 +621,28 @@ EXTERN void word_restore(t_word *wp, t_template *tmpl,
     int argc, t_atom *argv);
 EXTERN t_scalar *scalar_new(t_glist *owner,
     t_symbol *templatesym);
-EXTERN void scalar_getbasexy(t_scalar *x, float *basex, float *basey);
+EXTERN void word_free(t_word *wp, t_template *tmpl);
+EXTERN void scalar_getbasexy(t_scalar *x, t_float *basex, t_float *basey);
+EXTERN void scalar_redraw(t_scalar *x, t_glist *glist);
+EXTERN int template_has_elemtemplate(t_template *t, t_template *tmp);
 
 /* ------helper routines for "garrays" and "plots" -------------- */
-EXTERN int array_doclick(t_array *array, t_glist *glist, t_gobj *gobj,
+EXTERN int array_doclick(t_array *array, t_glist *glist, t_scalar *sc, t_array *ap,
     t_symbol *elemtemplatesym,
-    float linewidth, float xloc, float xinc, float yloc,
+    t_float linewidth, t_float xloc, t_float xinc, t_float yloc, t_float scalarvis,
+    t_fielddesc *xfield, t_fielddesc *yfield, t_fielddesc *wfield,
     int xpix, int ypix, int shift, int alt, int dbl, int doit);
 
 EXTERN void array_getcoordinate(t_glist *glist,
     char *elem, int xonset, int yonset, int wonset, int indx,
-    float basex, float basey, float xinc,
-    float *xp, float *yp, float *wp);
+    t_float basex, t_float basey, t_float xinc,
+    t_fielddesc *xfielddesc, t_fielddesc *yfielddesc, t_fielddesc *wfielddesc,
+    t_float *xp1, t_float *xp2, t_float *yp, t_float *wp);
 
 EXTERN int array_getfields(t_symbol *elemtemplatesym,
     t_canvas **elemtemplatecanvasp,
     t_template **elemtemplatep, int *elemsizep,
+    t_fielddesc *xfielddesc, t_fielddesc *yfielddesc, t_fielddesc *wfielddesc, 
     int *xonsetp, int *yonsetp, int *wonsetp);
 
 /* --------------------- templates ------------------------- */
@@ -580,7 +662,11 @@ EXTERN void template_setsymbol(t_template *x, t_symbol *fieldname,
 
 EXTERN t_template *gtemplate_get(t_gtemplate *x);
 EXTERN t_template *template_findbyname(t_symbol *s);
+EXTERN int template_cancreate(t_template *tmp);
+EXTERN int template_hasxy(t_template *tmp);
 EXTERN t_canvas *template_findcanvas(t_template *tmpl);
+EXTERN void template_notify(t_template *tmpl,
+    t_symbol *s, int argc, t_atom *argv);
 
 EXTERN t_float template_getfloat(t_template *x, t_symbol *fieldname,
     t_word *wp, int loud);
@@ -590,6 +676,12 @@ EXTERN t_symbol *template_getsymbol(t_template *x, t_symbol *fieldname,
     t_word *wp, int loud);
 EXTERN void template_setsymbol(t_template *x, t_symbol *fieldname,
     t_word *wp, t_symbol *s, int loud);
+EXTERN t_float fielddesc_getcoord(t_fielddesc *f, t_template *tmpl,
+    t_word *wp, int loud);
+EXTERN void fielddesc_setcoord(t_fielddesc *f, t_template *tmpl,
+    t_word *wp, t_float pix, int loud);
+EXTERN t_float fielddesc_cvttocoord(t_fielddesc *f, t_float val);
+EXTERN t_float fielddesc_cvtfromcoord(t_fielddesc *f, t_float coord);
 
 /* ----------------------- guiconnects, g_guiconnect.c --------- */
 EXTERN t_guiconnect *guiconnect_new(t_pd *who, t_symbol *sym);
@@ -599,6 +691,90 @@ EXTERN void guiconnect_notarget(t_guiconnect *x, double timedelay);
 EXTERN t_symbol *iemgui_raute2dollar(t_symbol *s);
 EXTERN t_symbol *iemgui_dollar2raute(t_symbol *s);
 
+/* ---------- infinite undo/redo routines found in g_undo.c ------------ */
+
+EXTERN t_undo_action *canvas_undo_init(t_canvas *x);
+EXTERN t_undo_action *canvas_undo_add(t_canvas *x,
+	int type, const char *name, void *data);
+EXTERN void canvas_undo_undo(t_canvas *x);
+EXTERN void canvas_undo_redo(t_canvas *x);
+EXTERN void canvas_undo_rebranch(t_canvas *x);
+EXTERN void canvas_undo_check_canvas_pointers(t_canvas *x);
+EXTERN void canvas_undo_purge_abstraction_actions(t_canvas *x);
+EXTERN void canvas_undo_free(t_canvas *x);
+
+/* --------- 1. connect ---------- */
+
+EXTERN void *canvas_undo_set_connect(t_canvas *x,
+    int index1, int outno, int index2, int inno);
+EXTERN void canvas_undo_connect(t_canvas *x, void *z, int action);
+
+/* --------- 2. disconnect ------- */
+
+EXTERN void *canvas_undo_set_disconnect(t_canvas *x,
+    int index1, int outno, int index2, int inno);
+EXTERN void canvas_undo_disconnect(t_canvas *x, void *z, int action);
+
+/* --------- 3. cut -------------- */
+
+EXTERN void *canvas_undo_set_cut(t_canvas *x, int mode);
+EXTERN void canvas_undo_cut(t_canvas *x, void *z, int action);
+
+/* --------- 4. move ------------- */
+
+EXTERN void *canvas_undo_set_move(t_canvas *x, int selected);
+EXTERN void canvas_undo_move(t_canvas *x, void *z, int action);
+
+/* --------- 5. paste ------------ */
+
+EXTERN void *canvas_undo_set_paste(t_canvas *x, int offset, int duplicate, int d_offset);
+EXTERN void canvas_undo_paste(t_canvas *x, void *z, int action);
+
+/* --------- 6. apply ------------ */
+
+EXTERN void *canvas_undo_set_apply(t_canvas *x, int n);
+EXTERN void canvas_undo_apply(t_canvas *x, void *z, int action);
+
+/* --------- 7. arrange ---------- */
+
+EXTERN void *canvas_undo_set_arrange(t_canvas *x, t_gobj *obj, int newindex);
+EXTERN void canvas_undo_arrange(t_canvas *x, void *z, int action);
+
+/* --------- 8. canvas apply ----- */
+
+EXTERN void *canvas_undo_set_canvas(t_canvas *x);
+EXTERN void canvas_undo_canvas_apply(t_canvas *x, void *z, int action);
+
+/* --------- 9. create ----------- */
+
+EXTERN void canvas_undo_create(t_canvas *x, void *z, int action);
+EXTERN void *canvas_undo_set_create(t_canvas *x);
+
+/* --------- 10. recreate -------- */
+
+EXTERN void canvas_undo_recreate(t_canvas *x, void *z, int action);
+EXTERN void *canvas_undo_set_recreate(t_canvas *x, t_gobj *y, int old_pos);
+
+/* --------- 11. font ------------ */
+
+EXTERN void canvas_undo_font(t_canvas *x, void *z, int action);
+EXTERN void *canvas_undo_set_font(t_canvas *x, int font);
+
+/* ------------------------------- */
+
+
+/* ---------- interface to Qt (libQt5) with threads -------------------- */
+
+void *qt_thread_main (void *);
+
+/* ---------- other things added by Mathieu (aug.2014) ----------------- */
+
+void canvas_raise_all_cords (t_canvas *x);
+
+/* --------------------------------------------------------------------- */
+
 #if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus)
 }
 #endif
+
+#endif // PD_G_CANVAS_H
diff --git a/externals/build/include/m_imp.h b/externals/build/include/m_imp.h
index e82d103a0..8e42696bc 100644
--- a/externals/build/include/m_imp.h
+++ b/externals/build/include/m_imp.h
@@ -25,6 +25,7 @@ typedef void (*t_bangmethod)(t_pd *x);
 typedef void (*t_pointermethod)(t_pd *x, t_gpointer *gp);
 typedef void (*t_floatmethod)(t_pd *x, t_float f);
 typedef void (*t_symbolmethod)(t_pd *x, t_symbol *s);
+typedef void (*t_blobmethod)(t_pd *x, t_blob *st); /* MP20061226 blob type */
 typedef void (*t_listmethod)(t_pd *x, t_symbol *s, int argc, t_atom *argv);
 typedef void (*t_anymethod)(t_pd *x, t_symbol *s, int argc, t_atom *argv);
 
@@ -41,6 +42,7 @@ struct _class
     t_pointermethod c_pointermethod;
     t_floatmethod c_floatmethod;
     t_symbolmethod c_symbolmethod;
+    t_blobmethod c_blobmethod;  /* MP20061226 blob type */
     t_listmethod c_listmethod;
     t_anymethod c_anymethod;
     struct _widgetbehavior *c_wb;       /* "gobjs" only */
@@ -77,6 +79,6 @@ EXTERN int obj_sigoutletindex(t_object *x, int m);
 /* misc */
 EXTERN void glob_evalfile(t_pd *ignore, t_symbol *name, t_symbol *dir);
 EXTERN void glob_initfromgui(void *dummy, t_symbol *s, int argc, t_atom *argv);
-
+EXTERN void glob_quit(void *dummy);
 #define __m_imp_h_
 #endif /* __m_imp_h_ */
diff --git a/externals/build/include/m_pd.h b/externals/build/include/m_pd.h
index 8f22b765f..10acfefad 100644
--- a/externals/build/include/m_pd.h
+++ b/externals/build/include/m_pd.h
@@ -8,10 +8,13 @@
 extern "C" {
 #endif
 
+#include <stdarg.h>
+
 #define PD_MAJOR_VERSION 0
-#define PD_MINOR_VERSION 40
-#define PD_BUGFIX_VERSION 1
-#define PD_TEST_VERSION ""
+#define PD_MINOR_VERSION 42
+#define PD_BUGFIX_VERSION 7
+#define PD_TEST_VERSION "20140813"
+#define PDL2ORK
 
 /* old name for "MSW" flag -- we have to take it for the sake of many old
 "nmakefiles" for externs, which will define NT and not MSW */
@@ -25,8 +28,11 @@ extern "C" {
 #pragma warning( disable : 4305 )  /* uncast const double to float */
 #pragma warning( disable : 4244 )  /* uncast float/int conversion etc. */
 #pragma warning( disable : 4101 )  /* unused automatic variables */
+/* not using GNU C, __attribute__ means nothing */
+#  define  __attribute__(x)
 #endif /* _MSC_VER */
 
+
     /* the external storage class is "extern" in UNIX; in MSW it's ugly. */
 #ifdef MSW
 #ifdef PD_INTERNAL
@@ -51,15 +57,19 @@ extern "C" {
 #include <stddef.h>     /* just for size_t -- how lame! */
 #endif
 
-#define MAXPDSTRING 1000        /* use this for anything you want */
+#define MAXPDSTRING 1000        /* must be >= FILENAME_MAX */
 #define MAXPDARG 5              /* max number of args we can typecheck today */
 
 /* signed and unsigned integer types the size of a pointer:  */
-/* GG: long is the size of a pointer */
-typedef long t_int;
-
-typedef float t_float;  /* a floating-point number at most the same size */
-typedef float t_floatarg;  /* floating-point type for function calls */
+#if !defined(PD_LONGINTTYPE)
+#define PD_LONGINTTYPE long
+#endif
+#if !defined(PD_FLOATTYPE)
+#define PD_FLOATTYPE float
+#endif
+typedef PD_LONGINTTYPE t_int;       /* pointer-size integer */
+typedef PD_FLOATTYPE t_float;       /* a float type at most the same size */
+typedef PD_FLOATTYPE t_floatarg;    /* float type for function calls */
 
 typedef struct _symbol
 {
@@ -102,6 +112,16 @@ typedef struct _gpointer           /* pointer to a gobj in a glist */
     t_gstub *gp_stub;               /* stub which points to glist/array */
 } t_gpointer;
 
+#define PD_BLOBS 1 /* MP20070211 Use this to test for blob capability */
+/* MP20061223 blob type: */
+typedef struct _blob /* pointer to a blob */
+{
+   unsigned long s_length; /* length of blob in bytes */
+   unsigned char *s_data; /* pointer to 1st byte of blob */
+} t_blob;
+/* ...MP20061223 blob type */
+
+
 typedef union word
 {
     t_float w_float;
@@ -110,6 +130,7 @@ typedef union word
     t_array *w_array;
     struct _glist *w_list;
     int w_index;
+    t_blob *w_blob; /* MP20061223 blob type */
 } t_word;
 
 typedef enum
@@ -125,7 +146,8 @@ typedef enum
     A_DOLLAR, 
     A_DOLLSYM,
     A_GIMME,
-    A_CANT
+    A_CANT,
+    A_BLOB /* MP20061223 blob type */
 }  t_atomtype;
 
 #define A_DEFSYMBOL A_DEFSYM    /* better name for this */
@@ -170,6 +192,22 @@ typedef struct _scalar      /* a graphical object holding data */
 {
     t_gobj sc_gobj;         /* header for graphical object */
     t_symbol *sc_template;  /* template name (LATER replace with pointer) */
+    int sc_x1;              /* cached bbox... which is already in the */
+    int sc_x2;              /* GUI. Doing this right would require me */
+    int sc_y1;              /* to redesign the whole program. Instead */
+    int sc_y2;              /* please enjoy the duplication of a bbox */
+    int sc_bboxcache;       /* caching mechanism already in tkpath.   */
+    t_glist *sc_selected;   /* I'm really sorry... I can't figure out
+                               a non-stupid and non-hacky way to make
+                               scalars in a gop patch displace right.
+                               Pd Vanilla just redraws all of the gop
+                               contents-- dumb. Here I keep the owner
+                               glist handy so I can compare it to the
+                               glist in scalar_displace_withtag. Then
+                               if they don't match it's a gop, so the
+                               x/y fields do not need to get updated.
+                               That's dumb, too, but slightly less so
+                               which is another way to say "progress" */
     t_word sc_vec[1];       /* indeterminate-length array of words */
 } t_scalar;
 
@@ -183,11 +221,12 @@ typedef struct _text        /* patchable object - graphical, with text */
     short te_ypix;
     short te_width;             /* requested width in chars, 0 if auto */
     unsigned int te_type:2;     /* from defs below */
+	unsigned int te_iemgui:1;	/* if this is an iemgui (for nlets color) */
 } t_text;
 
 #define T_TEXT 0        /* just a textual comment */
 #define T_OBJECT 1      /* a MAX style patchable object */
-#define T_MESSAGE 2     /* a MAX stype message */
+#define T_MESSAGE 2     /* a MAX style message */
 #define T_ATOM 3        /* a cell to display a number or symbol */
 
 #define te_pd te_g.g_pd
@@ -212,6 +251,7 @@ EXTERN t_pd pd_canvasmaker;     /* factory for creating canvases */
 EXTERN t_symbol s_pointer;
 EXTERN t_symbol s_float;
 EXTERN t_symbol s_symbol;
+EXTERN t_symbol s_blob;
 EXTERN t_symbol s_bang;
 EXTERN t_symbol s_list;
 EXTERN t_symbol s_anything;
@@ -225,7 +265,7 @@ EXTERN t_symbol s_;
 /* --------- prototypes from the central message system ----------- */
 EXTERN void pd_typedmess(t_pd *x, t_symbol *s, int argc, t_atom *argv);
 EXTERN void pd_forwardmess(t_pd *x, int argc, t_atom *argv);
-EXTERN t_symbol *gensym(char *s);
+EXTERN t_symbol *gensym(const char *s);
 EXTERN t_gotfn getfn(t_pd *x, t_symbol *s);
 EXTERN t_gotfn zgetfn(t_pd *x, t_symbol *s);
 EXTERN void nullfn(void);
@@ -255,6 +295,7 @@ EXTERN void *resizebytes(void *x, size_t oldsize, size_t newsize);
 #define SETFLOAT(atom, f) ((atom)->a_type = A_FLOAT, (atom)->a_w.w_float = (f))
 #define SETSYMBOL(atom, s) ((atom)->a_type = A_SYMBOL, \
     (atom)->a_w.w_symbol = (s))
+#define SETBLOB(atom, st) ((atom)->a_type = A_BLOB, (atom)->a_w.w_blob = (st)) /* MP 20061226 blob type */
 #define SETDOLLAR(atom, n) ((atom)->a_type = A_DOLLAR, \
     (atom)->a_w.w_index = (n))
 #define SETDOLLSYM(atom, s) ((atom)->a_type = A_DOLLSYM, \
@@ -263,6 +304,7 @@ EXTERN void *resizebytes(void *x, size_t oldsize, size_t newsize);
 EXTERN t_float atom_getfloat(t_atom *a);
 EXTERN t_int atom_getint(t_atom *a);
 EXTERN t_symbol *atom_getsymbol(t_atom *a);
+EXTERN t_blob *atom_getblob(t_atom *a);/* MP 20070108 blob type */
 EXTERN t_symbol *atom_gensym(t_atom *a);
 EXTERN t_float atom_getfloatarg(int which, int argc, t_atom *argv);
 EXTERN t_int atom_getintarg(int which, int argc, t_atom *argv);
@@ -326,6 +368,7 @@ EXTERN void pd_bang(t_pd *x);
 EXTERN void pd_pointer(t_pd *x, t_gpointer *gp);
 EXTERN void pd_float(t_pd *x, t_float f);
 EXTERN void pd_symbol(t_pd *x, t_symbol *s);
+EXTERN void pd_blob(t_pd *x, t_blob *st); /* MP 20061226 blob type */
 EXTERN void pd_list(t_pd *x, t_symbol *s, int argc, t_atom *argv);
 EXTERN void pd_anything(t_pd *x, t_symbol *s, int argc, t_atom *argv);
 #define pd_class(x) (*(x))
@@ -350,6 +393,7 @@ EXTERN void outlet_bang(t_outlet *x);
 EXTERN void outlet_pointer(t_outlet *x, t_gpointer *gp);
 EXTERN void outlet_float(t_outlet *x, t_float f);
 EXTERN void outlet_symbol(t_outlet *x, t_symbol *s);
+EXTERN void outlet_blob(t_outlet *x, t_blob *st); /* MP 20061226 blob type */
 EXTERN void outlet_list(t_outlet *x, t_symbol *s, int argc, t_atom *argv);
 EXTERN void outlet_anything(t_outlet *x, t_symbol *s, int argc, t_atom *argv);
 EXTERN t_symbol *outlet_getsymbol(t_outlet *x);
@@ -368,6 +412,8 @@ EXTERN t_glist *canvas_getcurrent(void);
 EXTERN void canvas_makefilename(t_glist *c, char *file,
     char *result,int resultsize);
 EXTERN t_symbol *canvas_getdir(t_glist *x);
+EXTERN char sys_font[]; /* default typeface set in s_main.c */
+EXTERN char sys_fontweight[]; /* default font weight set in s_main.c */
 EXTERN int sys_fontwidth(int fontsize);
 EXTERN int sys_fontheight(int fontsize);
 EXTERN void canvas_dataproperties(t_glist *x, t_scalar *sc, t_binbuf *b);
@@ -404,6 +450,7 @@ EXTERN void class_addbang(t_class *c, t_method fn);
 EXTERN void class_addpointer(t_class *c, t_method fn);
 EXTERN void class_doaddfloat(t_class *c, t_method fn);
 EXTERN void class_addsymbol(t_class *c, t_method fn);
+EXTERN void class_addblob(t_class *c, t_method fn);/* MP 20061226 blob type */
 EXTERN void class_addlist(t_class *c, t_method fn);
 EXTERN void class_addanything(t_class *c, t_method fn);
 EXTERN void class_sethelpsymbol(t_class *c, t_symbol *s);
@@ -415,9 +462,15 @@ EXTERN char *class_gethelpname(t_class *c);
 EXTERN void class_setdrawcommand(t_class *c);
 EXTERN int class_isdrawcommand(t_class *c);
 EXTERN void class_domainsignalin(t_class *c, int onset);
+EXTERN void class_set_extern_dir(t_symbol *s);
 #define CLASS_MAINSIGNALIN(c, type, field) \
     class_domainsignalin(c, (char *)(&((type *)0)->field) - (char *)0)
 
+         /* classtable functions */
+EXTERN t_class *classtable_findbyname(t_symbol *s);
+EXTERN int classtable_size(void);
+EXTERN void classtable_tovec(int size, t_atom *vec);
+
          /* prototype for functions to save Pd's to a binbuf */
 typedef void (*t_savefn)(t_gobj *x, t_binbuf *b);
 EXTERN void class_setsavefn(t_class *c, t_savefn f);
@@ -432,6 +485,7 @@ EXTERN t_propertiesfn class_getpropertiesfn(t_class *c);
 #define class_addpointer(x, y) class_addpointer((x), (t_method)(y))
 #define class_addfloat(x, y) class_doaddfloat((x), (t_method)(y))
 #define class_addsymbol(x, y) class_addsymbol((x), (t_method)(y))
+#define class_addblob(x, y) class_addblob((x), (t_method)(y)) /* MP20061226 blob type */
 #define class_addlist(x, y) class_addlist((x), (t_method)(y))
 #define class_addanything(x, y) class_addanything((x), (t_method)(y))
 #endif
@@ -440,13 +494,13 @@ EXTERN t_propertiesfn class_getpropertiesfn(t_class *c);
 EXTERN void post(const char *fmt, ...);
 EXTERN void startpost(const char *fmt, ...);
 EXTERN void poststring(const char *s);
-EXTERN void postfloat(float f);
+EXTERN void postfloat(t_floatarg f);
 EXTERN void postatom(int argc, t_atom *argv);
 EXTERN void endpost(void);
-EXTERN void error(const char *fmt, ...);
-EXTERN void verbose(int level, const char *fmt, ...);
-EXTERN void bug(const char *fmt, ...);
-EXTERN void pd_error(void *object, const char *fmt, ...);
+EXTERN void error(const char *fmt, ...) __attribute__ ((format (printf, 1, 2)));
+EXTERN void verbose(int level, const char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
+EXTERN void bug(const char *fmt, ...) __attribute__ ((format (printf, 1, 2)));
+EXTERN void pd_error(void *object, const char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
 EXTERN void sys_logerror(const char *object, const char *s);
 EXTERN void sys_unixerror(const char *object);
 EXTERN void sys_ouch(void);
@@ -454,6 +508,7 @@ EXTERN void sys_ouch(void);
 
 /* ------------  system interface routines ------------------- */
 EXTERN int sys_isreadablefile(const char *name);
+EXTERN int sys_isabsolutepath(const char *dir);
 EXTERN void sys_bashfilename(const char *from, char *to);
 EXTERN void sys_unbashfilename(const char *from, char *to);
 EXTERN int open_via_path(const char *name, const char *ext, const char *dir,
@@ -471,7 +526,7 @@ EXTERN int sys_trylock(void);
 
 /* --------------- signals ----------------------------------- */
 
-typedef float t_sample;
+typedef PD_FLOATTYPE t_sample;
 #define MAXLOGSIG 32
 #define MAXSIGSIZE (1 << MAXLOGSIG)
 
@@ -479,7 +534,7 @@ typedef struct _signal
 {
     int s_n;            /* number of points in the array */
     t_sample *s_vec;    /* the array */
-    float s_sr;         /* sample rate */
+    t_float s_sr;         /* sample rate */
     int s_refcount;     /* number of times used */
     int s_isborrowed;   /* whether we're going to borrow our array */
     struct _signal *s_borrowedfrom;     /* signal to borrow it from */
@@ -496,24 +551,24 @@ EXTERN t_int *copy_perform(t_int *args);
 
 EXTERN void dsp_add_plus(t_sample *in1, t_sample *in2, t_sample *out, int n);
 EXTERN void dsp_add_copy(t_sample *in, t_sample *out, int n);
-EXTERN void dsp_add_scalarcopy(t_sample *in, t_sample *out, int n);
+EXTERN void dsp_add_scalarcopy(t_float *in, t_sample *out, int n);
 EXTERN void dsp_add_zero(t_sample *out, int n);
 
 EXTERN int sys_getblksize(void);
-EXTERN float sys_getsr(void);
+EXTERN t_float sys_getsr(void);
 EXTERN int sys_get_inchannels(void);
 EXTERN int sys_get_outchannels(void);
 
 EXTERN void dsp_add(t_perfroutine f, int n, ...);
 EXTERN void dsp_addv(t_perfroutine f, int n, t_int *vec);
-EXTERN void pd_fft(float *buf, int npoints, int inverse);
+EXTERN void pd_fft(t_float *buf, int npoints, int inverse);
 EXTERN int ilog2(int n);
 
-EXTERN void mayer_fht(float *fz, int n);
-EXTERN void mayer_fft(int n, float *real, float *imag);
-EXTERN void mayer_ifft(int n, float *real, float *imag);
-EXTERN void mayer_realfft(int n, float *real);
-EXTERN void mayer_realifft(int n, float *real);
+EXTERN void mayer_fht(t_sample *fz, int n);
+EXTERN void mayer_fft(int n, t_sample *real, t_sample *imag);
+EXTERN void mayer_ifft(int n, t_sample *real, t_sample *imag);
+EXTERN void mayer_realfft(int n, t_sample *real);
+EXTERN void mayer_realifft(int n, t_sample *real);
 
 EXTERN float *cos_table;
 #define LOGCOSTABSIZE 9
@@ -532,13 +587,13 @@ typedef struct _resample
   t_int downsample; /* downsampling factor */
   t_int upsample;   /* upsampling factor */
 
-  t_float *s_vec;   /* here we hold the resampled data */
+  t_sample *s_vec;   /* here we hold the resampled data */
   int      s_n;
 
-  t_float *coeffs;  /* coefficients for filtering... */
+  t_sample *coeffs;  /* coefficients for filtering... */
   int      coefsize;
 
-  t_float *buffer;  /* buffer for filtering */
+  t_sample *buffer;  /* buffer for filtering */
   int      bufsize;
 } t_resample;
 
@@ -550,18 +605,18 @@ EXTERN void resamplefrom_dsp(t_resample *x, t_sample *in, int insize, int outsiz
 EXTERN void resampleto_dsp(t_resample *x, t_sample *out, int insize, int outsize, int method);
 
 /* ----------------------- utility functions for signals -------------- */
-EXTERN float mtof(float);
-EXTERN float ftom(float);
-EXTERN float rmstodb(float);
-EXTERN float powtodb(float);
-EXTERN float dbtorms(float);
-EXTERN float dbtopow(float);
-
-EXTERN float q8_sqrt(float);
-EXTERN float q8_rsqrt(float);
+EXTERN t_float mtof(t_float);
+EXTERN t_float ftom(t_float);
+EXTERN t_float rmstodb(t_float);
+EXTERN t_float powtodb(t_float);
+EXTERN t_float dbtorms(t_float);
+EXTERN t_float dbtopow(t_float);
+
+EXTERN t_float q8_sqrt(t_float);
+EXTERN t_float q8_rsqrt(t_float);
 #ifndef N32     
-EXTERN float qsqrt(float);  /* old names kept for extern compatibility */
-EXTERN float qrsqrt(float);
+EXTERN t_float qsqrt(t_float);  /* old names kept for extern compatibility */
+EXTERN t_float qrsqrt(t_float);
 #endif
 /* --------------------- data --------------------------------- */
 
@@ -571,7 +626,8 @@ EXTERN_STRUCT _garray;
 
 EXTERN t_class *garray_class;
 EXTERN int garray_getfloatarray(t_garray *x, int *size, t_float **vec);
-EXTERN float garray_get(t_garray *x, t_symbol *s, t_int indx);
+EXTERN int garray_getfloatwords(t_garray *x, int *size, t_word **vec);
+EXTERN t_float garray_get(t_garray *x, t_symbol *s, t_int indx);
 EXTERN void garray_redraw(t_garray *x);
 EXTERN int garray_npoints(t_garray *x);
 EXTERN char *garray_vec(t_garray *x);
@@ -588,8 +644,22 @@ EXTERN int value_setfloat(t_symbol *s, t_float f);
 /* ------- GUI interface - functions to send strings to TK --------- */
 typedef void (*t_guicallbackfn)(t_gobj *client, t_glist *glist);
 
-EXTERN void sys_vgui(char *fmt, ...);
-EXTERN void sys_gui(char *s);
+#ifdef CHECK_VGUI_ARGS
+EXTERN void sys_vgui(const char *fmt, ...)
+    __attribute__((format(printf,1,2)));
+EXTERN void sys_vguid(const char *file, int line, const char *fmt, ...)
+    __attribute__((format(printf,1,2)));
+EXTERN void sys_vvguid(const char *file, int line, const char *fmt, va_list)
+    __attribute__((format(printf,3,4)));
+#else
+EXTERN void sys_vgui(const char *fmt, ...);
+EXTERN void sys_vguid(const char *file, int line, const char *fmt, ...);
+EXTERN void sys_vvguid(const char *file, int line, const char *fmt, va_list);
+#endif
+EXTERN void sys_gui(const char *s);
+#define sys_vgui(args...) sys_vguid(__FILE__,__LINE__,args)
+#define sys_gui(s)        sys_vguid(__FILE__,__LINE__,"%s",s)
+
 EXTERN void sys_pretendguibytes(int n);
 EXTERN void sys_queuegui(void *client, t_glist *glist, t_guicallbackfn f);
 EXTERN void sys_unqueuegui(void *client);
@@ -606,7 +676,7 @@ extern t_class *glob_pdobject;  /* object to send "pd" messages */
 typedef t_class *t_externclass;
 
 EXTERN void c_extern(t_externclass *cls, t_newmethod newroutine,
-    t_method freeroutine, t_symbol *name, size_t size, int tiny, \
+    t_method freeroutine, t_symbol *name, size_t size, int tiny,
     t_atomtype arg1, ...);
 EXTERN void c_addmess(t_method fn, t_symbol *sel, t_atomtype arg1, ...);
 
@@ -616,13 +686,20 @@ EXTERN void c_addmess(t_method fn, t_symbol *sel, t_atomtype arg1, ...);
 #define typedmess pd_typedmess
 #define vmess pd_vmess
 
+// jsarlo
+EXTERN char sys_signal_line_color[8];
+EXTERN char sys_control_line_color[8];
+EXTERN char sys_iolet_select_color[8];
+EXTERN int sys_iolet_select_width;
+EXTERN int sys_dropshadow;
+// end jsarlo
+
 /* A definition to help gui objects straddle 0.34-0.35 changes.  If this is
 defined, there is a "te_xpix" field in objects, not a "te_xpos" as before: */
 
 #define PD_USE_TE_XPIX
 
-
-#ifdef __i386__
+#if defined(__i386__) || defined(__x86_64__)
 /* a test for NANs and denormals.  Should only be necessary on i386. */
 #define PD_BADFLOAT(f) ((((*(unsigned int*)&(f))&0x7f800000)==0) || \
     (((*(unsigned int*)&(f))&0x7f800000)==0x7f800000))
@@ -634,6 +711,9 @@ defined, there is a "te_xpix" field in objects, not a "te_xpos" as before: */
 #define PD_BIGORSMALL(f) 0
 #endif
 
+    /* get version number at run time */
+EXTERN void sys_getversion(int *major, int *minor, int *bugfix);
+
 #if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus)
 }
 #endif
diff --git a/externals/build/include/s_stuff.h b/externals/build/include/s_stuff.h
index 87d6596b8..862b2a44c 100644
--- a/externals/build/include/s_stuff.h
+++ b/externals/build/include/s_stuff.h
@@ -7,14 +7,18 @@
 /* NOTE: this file describes Pd implementation details which may change
 in future releases.  The public (stable) API is in m_pd.h. */  
 
+#ifndef __s_stuff_h_
+#define __s_stuff_h_
+
 /* in s_path.c */
 
-typedef struct _namelist
+typedef struct _namelist    /* element in a linked list of stored strings */
 {
-    struct _namelist *nl_next;
-    char *nl_string;
+    struct _namelist *nl_next;  /* next in list */
+    char *nl_string;            /* the string */
 } t_namelist;
 
+t_namelist *pd_extrapath;
 t_namelist *namelist_append(t_namelist *listwas, const char *s, int allowdup);
 t_namelist *namelist_append_files(t_namelist *listwas, const char *s);
 void namelist_free(t_namelist *listwas);
@@ -24,6 +28,11 @@ extern int sys_usestdpath;
 extern t_namelist *sys_externlist;
 extern t_namelist *sys_searchpath;
 extern t_namelist *sys_helppath;
+int sys_open_absolute(const char *name, const char* ext,
+    char *dirresult, char **nameresult, unsigned int size, int bin, int *fdp);
+int sys_trytoopenone(const char *dir, const char *name, const char* ext,
+    char *dirresult, char **nameresult, unsigned int size, int bin);
+t_symbol *sys_decodedialog(t_symbol *s);
 
 /* s_file.c */
 
@@ -38,15 +47,21 @@ extern int sys_verbose;
 extern int sys_noloadbang;
 extern int sys_nogui;
 extern char *sys_guicmd;
+#ifdef QTGUI
+extern int sys_qtcanvas;
+#endif
 
 EXTERN int sys_nearestfontsize(int fontsize);
 EXTERN int sys_hostfontsize(int fontsize);
 
 extern int sys_defaultfont;
 extern t_symbol *sys_libdir;    /* library directory for auxilliary files */
+extern t_symbol *sys_guidir;    /* directory holding pd_gui, u_pdsend, etc */
 
 /* s_loader.c */
-int sys_load_lib(char *dirname, char *filename);
+typedef int (*loader_t)(t_canvas *canvas, char *classname); /* callback type */
+EXTERN int sys_load_lib(t_canvas *canvas, char *filename);
+EXTERN void sys_register_loader(loader_t loader);
 
 /* s_audio.c */
 
@@ -63,13 +78,13 @@ extern int sys_inchannels;
 extern int sys_outchannels;
 extern int sys_advance_samples; /* scheduler advance in samples */
 extern int sys_blocksize;       /* audio I/O block size in sample frames */
-extern float sys_dacsr;
+extern t_float sys_dacsr;
 extern int sys_schedadvance;
 extern int sys_sleepgrain;
-void sys_open_audio(int naudioindev, int *audioindev,
+void sys_set_audio_settings(int naudioindev, int *audioindev,
     int nchindev, int *chindev,
     int naudiooutdev, int *audiooutdev, int nchoutdev, int *choutdev,
-    int srate, int advance, int enable);
+    int srate, int advance, int callback);
 void sys_reopen_audio( void);
 void sys_close_audio(void);
 
@@ -78,13 +93,19 @@ int sys_send_dacs(void);
 void sys_reportidle(void);
 void sys_set_priority(int higher);
 void sys_audiobuf(int nbufs);
-void sys_getmeters(float *inmax, float *outmax);
+void sys_getmeters(t_sample *inmax, t_sample *outmax);
 void sys_listdevs(void);
 void sys_setblocksize(int n);
 
+EXTERN void sys_get_audio_devs(char *indevlist, int *nindevs,
+                          char *outdevlist, int *noutdevs, int *canmulti, int *cancallback, 
+                          int maxndev, int devdescsize);
+EXTERN void sys_get_audio_apis(char *buf);
+
 /* s_midi.c */
 #define MAXMIDIINDEV 16         /* max. number of input ports */
 #define MAXMIDIOUTDEV 16        /* max. number of output ports */
+extern int sys_midiapi;
 extern int sys_nmidiin;
 extern int sys_nmidiout;
 extern int sys_midiindevlist[];
@@ -92,9 +113,16 @@ extern int sys_midioutdevlist[];
 
 void sys_open_midi(int nmidiin, int *midiinvec,
     int nmidiout, int *midioutvec, int enable);
+
+EXTERN void sys_get_midi_apis(char *buf);
+EXTERN void sys_get_midi_devs(char *indevlist, int *nindevs,
+    char *outdevlist, int *noutdevs, 
+   int maxndev, int devdescsize);
 void sys_get_midi_params(int *pnmidiindev, int *pmidiindev,
     int *pnmidioutdev, int *pmidioutdev);
 
+void sys_get_midi_apis(char *buf);
+
 void sys_reopen_midi( void);
 void sys_close_midi( void);
 EXTERN void sys_putmidimess(int portno, int a, int b, int c);
@@ -109,6 +137,22 @@ void midi_getdevs(char *indevlist, int *nindevs,
 void sys_do_open_midi(int nmidiindev, int *midiindev,
     int nmidioutdev, int *midioutdev);
 
+#ifdef USEAPI_ALSA
+EXTERN void sys_alsa_putmidimess(int portno, int a, int b, int c);
+EXTERN void sys_alsa_putmidibyte(int portno, int a);
+EXTERN void sys_alsa_poll_midi(void);
+EXTERN void sys_alsa_setmiditimediff(double inbuftime, double outbuftime);
+EXTERN void sys_alsa_midibytein(int portno, int byte);
+EXTERN void sys_alsa_close_midi( void);
+
+
+    /* implemented in the system dependent MIDI code (s_midi_pm.c, etc. ) */
+void midi_alsa_getdevs(char *indevlist, int *nindevs,
+    char *outdevlist, int *noutdevs, int maxndev, int devdescsize);
+void sys_alsa_do_open_midi(int nmidiindev, int *midiindev,
+    int nmidioutdev, int *midioutdev);
+#endif
+
 /* m_sched.c */
 EXTERN void sys_log_error(int type);
 #define ERR_NOTHING 0
@@ -116,7 +160,11 @@ EXTERN void sys_log_error(int type);
 #define ERR_DACSLEPT 2
 #define ERR_RESYNC 3
 #define ERR_DATALATE 4
-void sched_set_using_dacs(int flag);
+
+#define SCHED_AUDIO_NONE 0
+#define SCHED_AUDIO_POLL 1 
+#define SCHED_AUDIO_CALLBACK 2
+void sched_set_using_audio(int flag);
 
 /* s_inter.c */
 
@@ -145,6 +193,7 @@ void sys_setalarm(int microsec);
 void sys_setvirtualalarm( void);
 #endif
 
+#define API_NONE 0
 #define API_ALSA 1
 #define API_OSS 2
 #define API_MMIO 3
@@ -153,14 +202,14 @@ void sys_setvirtualalarm( void);
 #define API_SGI 6
 
 #ifdef __linux__
-#define API_DEFAULT API_OSS
-#define API_DEFSTRING "OSS"
+#define API_DEFAULT API_ALSA
+#define API_DEFSTRING "ALSA"
 #endif
 #ifdef MSW
 #define API_DEFAULT API_MMIO
 #define API_DEFSTRING "MMIO"
 #endif
-#ifdef MACOSX
+#ifdef __APPLE__
 #define API_DEFAULT API_PORTAUDIO
 #define API_DEFSTRING "portaudio"
 #endif
@@ -176,15 +225,21 @@ void sys_setvirtualalarm( void);
 #define DEFMIDIDEV 0
 
 #define DEFAULTSRATE 44100
-#ifdef MSW
-#define DEFAULTADVANCE 70
-#else
+#ifdef _WIN32
+#define DEFAULTADVANCE 100
+#endif
+#ifdef __linux__
 #define DEFAULTADVANCE 50
 #endif
+#ifdef __APPLE__
+#define DEFAULTADVANCE 20
+#endif
+
+typedef void (*t_audiocallback)(void);
 
 int pa_open_audio(int inchans, int outchans, int rate, t_sample *soundin,
     t_sample *soundout, int framesperbuf, int nbuffers,
-    int indeviceno, int outdeviceno);
+    int indeviceno, int outdeviceno, t_audiocallback callback);
 void pa_close_audio(void);
 int pa_send_dacs(void);
 void sys_reportidle(void);
@@ -195,7 +250,7 @@ void pa_getdevs(char *indevlist, int *nindevs,
 
 int oss_open_audio(int naudioindev, int *audioindev, int nchindev,
     int *chindev, int naudiooutdev, int *audiooutdev, int nchoutdev,
-    int *choutdev, int rate); /* IOhannes */
+    int *choutdev, int rate);
 void oss_close_audio(void);
 int oss_send_dacs(void);
 void oss_reportidle(void);
@@ -222,7 +277,7 @@ void jack_getdevs(char *indevlist, int *nindevs,
         int maxndev, int devdescsize);
 void jack_listdevs(void);
 
-void mmio_open_audio(int naudioindev, int *audioindev,
+int mmio_open_audio(int naudioindev, int *audioindev,
     int nchindev, int *chindev, int naudiooutdev, int *audiooutdev,
     int nchoutdev, int *choutdev, int rate);
 void mmio_close_audio( void);
@@ -233,6 +288,7 @@ void mmio_getdevs(char *indevlist, int *nindevs,
         int maxndev, int devdescsize);
 
 void sys_listmididevs(void);
+void sys_set_midi_api(int whichapi);
 void sys_set_audio_api(int whichapi);
 void sys_get_audio_apis(char *buf);
 extern int sys_audioapi;
@@ -245,20 +301,18 @@ void linux_alsa_devname(char *devname);
 void sys_get_audio_params(
     int *pnaudioindev, int *paudioindev, int *chindev,
     int *pnaudiooutdev, int *paudiooutdev, int *choutdev,
-    int *prate, int *padvance);
+    int *prate, int *padvance, int *callback);
 void sys_save_audio_params(
     int naudioindev, int *audioindev, int *chindev,
     int naudiooutdev, int *audiooutdev, int *choutdev,
-    int rate, int advance);
+    int rate, int advance, int callback);
 
 /* s_file.c */
 
 typedef void (*t_printhook)(const char *s);
 extern t_printhook sys_printhook;  /* set this to override printing */
 extern int sys_printtostderr;
-#ifdef MSW
-#define vsnprintf  _vsnprintf /* jsarlo -- alias this name for msw */
-#endif
+extern int sys_k12_mode;
 
 /* jsarlo { */
 
@@ -272,7 +326,7 @@ EXTERN int* get_sys_main_advance(void ) ;
 EXTERN double* get_sys_time_per_dsp_tick(void ) ;
 EXTERN int* get_sys_schedblocksize(void ) ;
 EXTERN double* get_sys_time(void ) ;
-EXTERN float* get_sys_dacsr(void ) ;
+EXTERN t_float* get_sys_dacsr(void ) ;
 EXTERN int* get_sys_sleepgrain(void ) ;
 EXTERN int* get_sys_schedadvance(void ) ;
 
@@ -298,3 +352,64 @@ EXTERN void inmidi_polyaftertouch(int portno,
                                   int pitch,
                                   int value);
 /* } jsarlo */
+extern t_widgetbehavior text_widgetbehavior;
+
+/* in x_list.c */
+    /* List element for storage.  Keep an atom and, in case it's a pointer,
+        an associated 'gpointer' to protect against stale pointers. */
+typedef struct _listelem
+{
+    t_atom l_a;
+    t_gpointer l_p;
+} t_listelem;
+
+struct _alist
+{
+    t_pd l_pd;          /* object to point inlets to */
+    int l_n;            /* number of items */
+    int l_npointer;     /* number of pointers */
+    t_listelem *l_vec;  /* pointer to items */
+};
+
+#ifndef t_alist
+#define t_alist struct _alist
+#endif
+
+#if 0 /* probably won't use this version... */
+#ifdef HAVE_ALLOCA
+#define LIST_ALLOCA(x, n) ( \
+    (x).l_n = (n), \
+    (x).l_vec = (t_listelem *)((n) < LIST_NGETBYTE ?  \
+        alloca((n) * sizeof(t_listelem)) : getbytes((n) * sizeof(t_listelem))))     \
+#define LIST_FREEA(x) ( \
+    ((x).l_n < LIST_NGETBYTE ||
+        (freebytes((x).l_vec, (x).l_n * sizeof(t_listelem)), 0)))
+
+#else
+#define LIST_ALLOCA(x, n) ( \
+    (x).l_n = (n), \
+    (x).l_vec = (t_listelem *)getbytes((n) * sizeof(t_listelem))) 
+#define LIST_FREEA(x) (freebytes((x).l_vec, (x).l_n * sizeof(t_listelem)))
+#endif
+#endif
+
+#if HAVE_ALLOCA
+#define XL_ATOMS_ALLOCA(x, n) ((x) = (t_atom *)((n) < LIST_NGETBYTE ?  \
+        alloca((n) * sizeof(t_atom)) : getbytes((n) * sizeof(t_atom))))
+#define XL_ATOMS_FREEA(x, n) ( \
+    ((n) < LIST_NGETBYTE || (freebytes((x), (n) * sizeof(t_atom)), 0)))
+#else
+#define XL_ATOMS_ALLOCA(x, n) ((x) = (t_atom *)getbytes((n) * sizeof(t_atom)))
+#define XL_ATOMS_FREEA(x, n) (freebytes((x), (n) * sizeof(t_atom)))
+#endif
+
+EXTERN void atoms_copy(int argc, t_atom *from, t_atom *to);
+EXTERN t_class *alist_class;
+EXTERN void alist_init(t_alist *x);
+EXTERN void alist_clear(t_alist *x);
+EXTERN void alist_list(t_alist *x, t_symbol *s, int argc, t_atom *argv);
+EXTERN void alist_anything(t_alist *x, t_symbol *s, int argc, t_atom *argv);
+EXTERN void alist_toatoms(t_alist *x, t_atom *to);
+EXTERN void alist_clone(t_alist *x, t_alist *y);
+
+#endif /* __s_stuff_h_ */
-- 
GitLab