[PD-cvs] pd/src d_misc.c, 1.2, 1.2.8.1 d_soundfile.c, 1.4.4.11.2.3, 1.4.4.11.2.4 d_ugen.c, 1.3.4.1, 1.3.4.1.2.1 g_all_guis.c, 1.5.4.1, 1.5.4.1.2.1 g_all_guis.h, 1.4, 1.4.8.1 g_array.c, 1.3.4.4.2.3, 1.3.4.4.2.4 g_canvas.c, 1.4.4.1.2.5, 1.4.4.1.2.6 g_canvas.h, 1.3.4.3.2.3, 1.3.4.3.2.4 g_editor.c, 1.4.4.2.2.3, 1.4.4.2.2.4 g_hdial.c, 1.4.4.1, 1.4.4.1.2.1 g_hslider.c, 1.4, 1.4.8.1 g_numbox.c, 1.4.8.2, 1.4.8.3 g_scalar.c, 1.4.8.1, 1.4.8.2 g_template.c, 1.4.8.3, 1.4.8.4 g_text.c, 1.5.4.2.2.4, 1.5.4.2.2.5 g_traversal.c, 1.2.8.3, 1.2.8.4 g_vdial.c, 1.4, 1.4.8.1 g_vslider.c, 1.4, 1.4.8.1 g_vumeter.c, 1.4, 1.4.8.1 m_glob.c, 1.4.4.2.2.1, 1.4.4.2.2.2 m_imp.h, 1.3.4.1, 1.3.4.1.2.1 m_pd.h, 1.4.4.11.2.3, 1.4.4.11.2.4 s_inter.c, 1.5.4.10.2.6, 1.5.4.10.2.7 s_main.c, 1.7.4.17.2.5, 1.7.4.17.2.6 s_midi_alsa.c, 1.1.2.2.2.2, 1.1.2.2.2.3 t_tkcmd.c, 1.2.4.1.2.3, 1.2.4.1.2.4 u_main.tk, 1.4.4.10.2.8, 1.4.4.10.2.9 x_list.c, 1.2.2.2, 1.2.2.3

Tim Blechmann timblech at users.sourceforge.net
Sun Aug 21 13:28:26 CEST 2005


Update of /cvsroot/pure-data/pd/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4800

Modified Files:
      Tag: devel_0_39
	d_misc.c d_soundfile.c d_ugen.c g_all_guis.c g_all_guis.h 
	g_array.c g_canvas.c g_canvas.h g_editor.c g_hdial.c 
	g_hslider.c g_numbox.c g_scalar.c g_template.c g_text.c 
	g_traversal.c g_vdial.c g_vslider.c g_vumeter.c m_glob.c 
	m_imp.h m_pd.h s_inter.c s_main.c s_midi_alsa.c t_tkcmd.c 
	u_main.tk x_list.c 
Log Message:
updating to miller's 0.39-test5

Index: u_main.tk
===================================================================
RCS file: /cvsroot/pure-data/pd/src/u_main.tk,v
retrieving revision 1.4.4.10.2.8
retrieving revision 1.4.4.10.2.9
diff -C2 -d -r1.4.4.10.2.8 -r1.4.4.10.2.9
*** u_main.tk	2 Aug 2005 21:25:05 -0000	1.4.4.10.2.8
--- u_main.tk	21 Aug 2005 11:28:24 -0000	1.4.4.10.2.9
***************
*** 44,48 ****
  if {$pd_nt == 2} {
  # turn on James Tittle II's fast drawing (wait until I can test this...):
! #   set tk::mac::useCGDrawing 1
      global pd_guidir
      global pd_tearoff
--- 44,48 ----
  if {$pd_nt == 2} {
  # turn on James Tittle II's fast drawing (wait until I can test this...):
! 	set tk::mac::useCGDrawing 1
      global pd_guidir
      global pd_tearoff
***************
*** 51,66 ****
      load $pd_guidir/bin/libPdTcl.dylib
      set pd_tearoff 0
! 
! 	 # tk::mac::OpenDocument is called with the filenames put into the 
! 	 # var args whenever docs are either dropped on the Pd.app icon or 
! 	 # opened from the Finder.
! 	 # It uses menu_doc_open so it can handles numerous file types.
! 	 proc tk::mac::OpenDocument {args} {
! 		  foreach file $args {
! 				pd [concat pd open [pdtk_enquote [file tail $file]] \
! 						  [pdtk_enquote  [file dirname $file]] \;]
! 				menu_doc_open [file dirname $file] [file tail $file]
! 		  }
! 	 }
  }
  
--- 51,74 ----
      load $pd_guidir/bin/libPdTcl.dylib
      set pd_tearoff 0
!     global pd_macready
!     set pd_macready 0
!     global pd_macdropped
!     set pd_macdropped ""
!     # tk::mac::OpenDocument is called with the filenames put into the 
!     # var args whenever docs are either dropped on the Pd.app icon or 
!     # opened from the Finder.
!     # It uses menu_doc_open so it can handles numerous file types.
!     proc tk::mac::OpenDocument {args} {
!         global pd_macready pd_macdropped
!         foreach file $args {
!             if {$pd_macready != 0} {
!                 pd [concat pd open [pdtk_enquote [file tail $file]] \
! 		    [pdtk_enquote  [file dirname $file]] \;]
! 		    menu_doc_open [file dirname $file] [file tail $file]
!             } else {
!                 set pd_macdropped $args
!             }
!         }
!     }
  }
  
***************
*** 228,236 ****
  }
  
! proc pdtk_check {x message} {
!     set answer [tk_messageBox \-message $x \-type yesno \-icon question]
!     switch $answer {
!     	yes {pd $message} }
! #    	no {tk_messageBox \-message "cancelled" \-type ok}
  }
  
--- 236,244 ----
  }
  
! ##### routine to ask user if OK and, if so, send a message on to Pd ######
! proc pdtk_check {x message default} {
!     set answer [tk_messageBox \-message $x \-type yesno -default $default \
!         \-icon question]
!     if {$answer == yes}  {pd $message}
  }
  
***************
*** 322,326 ****
  proc menu_really_quit {} {pd {pd quit;}}
  
! proc menu_quit {} {pdtk_check {Really quit?} {pd quit;}}
  
  ######### the "Pd" menu command, which puts the Pd window on top ########
--- 330,334 ----
  proc menu_really_quit {} {pd {pd quit;}}
  
! proc menu_quit {} {pd {pd verifyquit;}}
  
  ######### the "Pd" menu command, which puts the Pd window on top ########
***************
*** 564,568 ****
  proc menu_close {name} {
      pdtk_canvas_checkgeometry $name
!     pd [concat $name menuclose \;]
  }
  
--- 572,581 ----
  proc menu_close {name} {
      pdtk_canvas_checkgeometry $name
!     pd [concat $name menuclose 0 \;]
! }
! 
! proc menu_really_close {name} {
!     pdtk_canvas_checkgeometry $name
!     pd [concat $name menuclose 1 \;]
  }
  
***************
*** 1548,1551 ****
--- 1561,1565 ----
      if {$shift == 1} {
          if {$key == "q" || $key == "Q"} {menu_really_quit}
+         if {$key == "w" || $key == "W"} {menu_really_close $topname}
          if {$key == "s" || $key == "S"} {menu_saveas $topname}
          if {$key == "z" || $key == "Z"} {menu_redo $topname}
***************
*** 3262,3265 ****
--- 3276,3289 ----
      menu_addstd .mbar 
  
+     global pd_nt
+     if {$pd_nt == 2} {
+         global pd_macdropped pd_macready
+         set pd_macready 1
+         foreach file $pd_macdropped {
+             pd [concat pd open [pdtk_enquote [file tail $file]] \
+                 [pdtk_enquote  [file dirname $file]] \;]
+ 		menu_doc_open [file dirname $file] [file tail $file]
+         }
+     }
  }
  
***************
*** 4200,4201 ****
--- 4224,4226 ----
      focus $id.f0
  }
+ 

Index: g_canvas.h
===================================================================
RCS file: /cvsroot/pure-data/pd/src/g_canvas.h,v
retrieving revision 1.3.4.3.2.3
retrieving revision 1.3.4.3.2.4
diff -C2 -d -r1.3.4.3.2.3 -r1.3.4.3.2.4
*** g_canvas.h	12 Aug 2005 10:03:41 -0000	1.3.4.3.2.3
--- g_canvas.h	21 Aug 2005 11:28:24 -0000	1.3.4.3.2.4
***************
*** 372,376 ****
  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);
  
  /* -------------------- functions on glists --------------------- */
--- 372,375 ----
***************
*** 407,411 ****
  EXTERN float glist_dpixtody(t_glist *x, 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);
--- 406,409 ----
***************
*** 542,553 ****
  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) -------------------- */
  
--- 540,543 ----
***************
*** 574,577 ****
--- 564,568 ----
  EXTERN void word_free(t_word *wp, t_template *tmpl);
  EXTERN void scalar_getbasexy(t_scalar *x, float *basex, float *basey);
+ EXTERN void scalar_redraw(t_scalar *x, t_glist *glist);
  
  /* ------helper routines for "garrays" and "plots" -------------- */
***************
*** 612,616 ****
  EXTERN t_template *template_findbyname(t_symbol *s);
  EXTERN t_canvas *template_findcanvas(t_template *tmpl);
! EXTERN void template_notify(t_template *,
      t_symbol *s, int argc, t_atom *argv);
  
--- 603,607 ----
  EXTERN t_template *template_findbyname(t_symbol *s);
  EXTERN t_canvas *template_findcanvas(t_template *tmpl);
! EXTERN void template_notify(t_template *template,
      t_symbol *s, int argc, t_atom *argv);
  
***************
*** 623,629 ****
  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 *,
      t_word *wp, int loud);
! EXTERN void fielddesc_setcoord(t_fielddesc *f, t_template *,
      t_word *wp, float pix, int loud);
  EXTERN t_float fielddesc_cvttocoord(t_fielddesc *f, float val);
--- 614,620 ----
  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 *template,
      t_word *wp, int loud);
! EXTERN void fielddesc_setcoord(t_fielddesc *f, t_template *template,
      t_word *wp, float pix, int loud);
  EXTERN t_float fielddesc_cvttocoord(t_fielddesc *f, float val);

Index: g_canvas.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/g_canvas.c,v
retrieving revision 1.4.4.1.2.5
retrieving revision 1.4.4.1.2.6
diff -C2 -d -r1.4.4.1.2.5 -r1.4.4.1.2.6
*** g_canvas.c	25 Jul 2005 18:21:28 -0000	1.4.4.1.2.5
--- g_canvas.c	21 Aug 2005 11:28:24 -0000	1.4.4.1.2.6
***************
*** 417,420 ****
--- 417,432 ----
      x->gl_loading = 1;
      x->gl_goprect = 0;      /* no GOP rectangle unless it's turned on later */
+         /* cancel "vis" flag if we're a subpatch of an
+          abstraction inside another patch.  A separate mechanism prevents
+          the toplevel abstraction from showing up. */
+     if (vis && gensym("#X")->s_thing && 
+         ((*gensym("#X")->s_thing) == canvas_class))
+     {
+         t_canvas *zzz = (t_canvas *)(gensym("#X")->s_thing);
+         while (zzz && !zzz->gl_env)
+             zzz = zzz->gl_owner;
+         if (zzz && canvas_isabstraction(zzz) && zzz->gl_owner)
+             vis = 0;
+     }
      x->gl_willvis = vis;
      x->gl_edit = !strncmp(x->gl_name->s_name, "Untitled", 8);
***************
*** 1358,1370 ****
  }
  
-     /* LATER replace this with a queueing scheme */
- void glist_redrawitem(t_glist *owner, t_gobj *gobj)
- {
-     if (glist_isvisible(owner))
-     {
-         gobj_vis(gobj, owner, 0);
-         gobj_vis(gobj, owner, 1);
-     }
- }
  
      /* redraw all "scalars" (do this if a drawing command is changed.) 
--- 1370,1373 ----
***************
*** 1390,1394 ****
                      gobj_vis(g, gl, 0);
              }
!             else glist_redrawitem(gl, g);
          }
          else if (g->g_pd == canvas_class)
--- 1393,1397 ----
                      gobj_vis(g, gl, 0);
              }
!             else scalar_redraw((t_scalar *)g, gl);
          }
          else if (g->g_pd == canvas_class)

Index: m_imp.h
===================================================================
RCS file: /cvsroot/pure-data/pd/src/m_imp.h,v
retrieving revision 1.3.4.1
retrieving revision 1.3.4.1.2.1
diff -C2 -d -r1.3.4.1 -r1.3.4.1.2.1
*** m_imp.h	5 Nov 2004 13:57:56 -0000	1.3.4.1
--- m_imp.h	21 Aug 2005 11:28:24 -0000	1.3.4.1.2.1
***************
*** 79,83 ****
  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);
! 
  #define __m_imp_h_
  #endif /* __m_imp_h_ */
--- 79,83 ----
  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_ */

Index: g_vslider.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/g_vslider.c,v
retrieving revision 1.4
retrieving revision 1.4.8.1
diff -C2 -d -r1.4 -r1.4.8.1
*** g_vslider.c	6 Sep 2004 20:20:34 -0000	1.4
--- g_vslider.c	21 Aug 2005 11:28:24 -0000	1.4.8.1
***************
*** 31,36 ****
  /* widget helper functions */
  
! static void vslider_draw_update(t_vslider *x, t_glist *glist)
  {
      if (glist_isvisible(glist))
      {
--- 31,37 ----
  /* widget helper functions */
  
! static void vslider_draw_update(t_gobj *client, t_glist *glist)
  {
+     t_vslider *x = (t_vslider *)client;
      if (glist_isvisible(glist))
      {
***************
*** 175,179 ****
  {
      if(mode == IEM_GUI_DRAW_MODE_UPDATE)
!         vslider_draw_update(x, glist);
      else if(mode == IEM_GUI_DRAW_MODE_MOVE)
          vslider_draw_move(x, glist);
--- 176,180 ----
  {
      if(mode == IEM_GUI_DRAW_MODE_UPDATE)
!         sys_queuegui(x, glist, vslider_draw_update);
      else if(mode == IEM_GUI_DRAW_MODE_MOVE)
          vslider_draw_move(x, glist);

Index: x_list.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/x_list.c,v
retrieving revision 1.2.2.2
retrieving revision 1.2.2.3
diff -C2 -d -r1.2.2.2 -r1.2.2.3
*** x_list.c	4 Aug 2005 09:32:01 -0000	1.2.2.2
--- x_list.c	21 Aug 2005 11:28:24 -0000	1.2.2.3
***************
*** 5,9 ****
--- 5,14 ----
  #include "m_pd.h"
  /* #include <string.h> */
+ #ifdef MSW
+ #include <malloc.h>
+ #else
  #include <alloca.h>
+ #endif
+ 
  extern t_pd *newest;
  

Index: g_vumeter.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/g_vumeter.c,v
retrieving revision 1.4
retrieving revision 1.4.8.1
diff -C2 -d -r1.4 -r1.4.8.1
*** g_vumeter.c	6 Sep 2004 20:20:35 -0000	1.4
--- g_vumeter.c	21 Aug 2005 11:28:24 -0000	1.4.8.1
***************
*** 77,80 ****
--- 77,95 ----
  }
  
+ static void vu_draw_update(t_gobj *client, t_glist *glist)
+ {
+     t_vu *x = (t_vu *)client;
+     if (x->x_updaterms)
+     {
+         vu_update_rms(x, glist);
+         x->x_updaterms = 0;
+     }
+     if (x->x_updatepeak)
+     {
+         vu_update_peak(x, glist);
+         x->x_updatepeak = 0;
+     }
+ }
+     
  static void vu_draw_new(t_vu *x, t_glist *glist)
  {
***************
*** 152,155 ****
--- 167,172 ----
               x, 1);
      }
+     x->x_updaterms = x->x_updatepeak = 1;
+     sys_queuegui(x, x->x_gui.x_glist, vu_draw_update);
  }
  
***************
*** 186,191 ****
                   canvas, x, i, end, yyy+k3);
      }
!     vu_update_peak(x, glist);
!     vu_update_rms(x, glist);
      sys_vgui(".x%lx.c coords %lxLABEL %d %d\n",
               canvas, x, xpos+x->x_gui.x_ldx,
--- 203,208 ----
                   canvas, x, i, end, yyy+k3);
      }
!     x->x_updaterms = x->x_updatepeak = 1;
!     sys_queuegui(x, glist, vu_draw_update);
      sys_vgui(".x%lx.c coords %lxLABEL %d %d\n",
               canvas, x, xpos+x->x_gui.x_ldx,
***************
*** 573,577 ****
      x->x_fr = rms;
      outlet_float(x->x_out_rms, rms);
!     vu_update_rms(x, x->x_gui.x_glist);
  }
  
--- 590,595 ----
      x->x_fr = rms;
      outlet_float(x->x_out_rms, rms);
!     x->x_updaterms = 1;
!     sys_queuegui(x, x->x_gui.x_glist, vu_draw_update);
  }
  
***************
*** 592,597 ****
      peak = 0.01*(float)(i - 10000);
      x->x_fp = peak;
      outlet_float(x->x_out_peak, peak);
-     vu_update_peak(x, x->x_gui.x_glist);
  }
  
--- 610,616 ----
      peak = 0.01*(float)(i - 10000);
      x->x_fp = peak;
+     x->x_updatepeak = 1;
+     sys_queuegui(x, x->x_gui.x_glist, vu_draw_update);
      outlet_float(x->x_out_peak, peak);
  }
  
***************
*** 600,605 ****
      outlet_float(x->x_out_peak, x->x_fp);
      outlet_float(x->x_out_rms, x->x_fr);
!     vu_update_rms(x, x->x_gui.x_glist);
!     vu_update_peak(x, x->x_gui.x_glist);
  }
  
--- 619,624 ----
      outlet_float(x->x_out_peak, x->x_fp);
      outlet_float(x->x_out_rms, x->x_fr);
!     x->x_updaterms = x->x_updatepeak = 1;
!     sys_queuegui(x, x->x_gui.x_glist, vu_draw_update);
  }
  

Index: g_template.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/g_template.c,v
retrieving revision 1.4.8.3
retrieving revision 1.4.8.4
diff -C2 -d -r1.4.8.3 -r1.4.8.4
*** g_template.c	2 Aug 2005 21:25:04 -0000	1.4.8.3
--- g_template.c	21 Aug 2005 11:28:24 -0000	1.4.8.4
***************
*** 435,439 ****
          for (j = 0; j < nfrom; j++)
              if (!conformedfrom[j] &&
!                 dataslot_matches(dataslot, &tfrom->t_vec[j], 1))
          {
              conformaction[i] = j;
--- 435,439 ----
          for (j = 0; j < nfrom; j++)
              if (!conformedfrom[j] &&
!                 dataslot_matches(dataslot, &tfrom->t_vec[j], 0))
          {
              conformaction[i] = j;
***************
*** 483,486 ****
--- 483,501 ----
  }
  
+ #if 0
+     /* bash the first of (argv) with a pointer to a scalar, and send on
+     to template as a notification message */
+ static void template_notifyforscalar(t_template *template, t_glist *owner,
+     t_scalar *sc, t_symbol *s, int argc, t_atom *argv)
+ {
+     t_gpointer gp;
+     gpointer_init(&gp);
+     gpointer_setglist(&gp, owner, x);
+     SETPOINTER(argv, &gp);
+     template_notify(template, s, argc, argv);
+     gpointer_unset(&gp);
+ }
+ #endif
+ 
      /* call this when reading a patch from a file to declare what templates
      we'll need.  If there's already a template, check if it matches.
***************
*** 946,951 ****
--- 961,968 ----
      t_fielddesc x_outlinecolor;
      t_fielddesc x_width;
+     t_fielddesc x_vis;
      int x_npoints;
      t_fielddesc *x_vec;
+     t_canvas *x_canvas;
  } t_curve;
  
***************
*** 957,970 ****
      int nxy, i;
      t_fielddesc *fd;
      if (classname[0] == 'f')
      {
          classname += 6;
          flags |= CLOSED;
-         if (argc) fielddesc_setfloatarg(&x->x_fillcolor, argc--, argv++);
-         else fielddesc_setfloat_const(&x->x_outlinecolor, 0); 
      }
      else classname += 4;
      if (classname[0] == 'c') flags |= BEZ;
      x->x_flags = flags;
      if (argc) fielddesc_setfloatarg(&x->x_outlinecolor, argc--, argv++);
      else fielddesc_setfloat_const(&x->x_outlinecolor, 0);
--- 974,1000 ----
      int nxy, i;
      t_fielddesc *fd;
+     x->x_canvas = canvas_getcurrent();
      if (classname[0] == 'f')
      {
          classname += 6;
          flags |= CLOSED;
      }
      else classname += 4;
      if (classname[0] == 'c') flags |= BEZ;
      x->x_flags = flags;
+     fielddesc_setfloat_const(&x->x_vis, 1);
+     while (1)
+     {
+         t_symbol *firstarg = atom_getsymbolarg(0, argc, argv);
+         if (!strcmp(firstarg->s_name, "-v") && argc > 1)
+         {
+             fielddesc_setfloatarg(&x->x_vis, 1, argv+1);
+             argc -= 2; argv += 2;
+         }
+         else break;
+     }
+     if ((flags & CLOSED) && argc)
+         fielddesc_setfloatarg(&x->x_fillcolor, argc--, argv++);
+     else fielddesc_setfloat_const(&x->x_fillcolor, 0); 
      if (argc) fielddesc_setfloatarg(&x->x_outlinecolor, argc--, argv++);
      else fielddesc_setfloat_const(&x->x_outlinecolor, 0);
***************
*** 982,985 ****
--- 1012,1032 ----
  }
  
+ void curve_float(t_curve *x, t_floatarg f)
+ {
+     int viswas;
+     if (x->x_vis.fd_type != A_FLOAT || x->x_vis.fd_var)
+     {
+         pd_error(x, "global vis/invis for a template with variable visibility");
+         return;
+     }
+     viswas = (x->x_vis.fd_un.fd_float != 0);
+     
+     if ((f != 0 && viswas) || (f == 0 && !viswas))
+         return;
+     canvas_redrawallfortemplatecanvas(x->x_canvas, 2);
+     fielddesc_setfloat_const(&x->x_vis, (f != 0));
+     canvas_redrawallfortemplatecanvas(x->x_canvas, 1);
+ }
+ 
  /* -------------------- widget behavior for curve ------------ */
  
***************
*** 992,995 ****
--- 1039,1048 ----
      t_fielddesc *f = x->x_vec;
      int x1 = 0x7fffffff, x2 = -0x7fffffff, y1 = 0x7fffffff, y2 = -0x7fffffff;
+     if (!fielddesc_getfloat(&x->x_vis, template, data, 0))
+     {
+         *xp1 = *yp1 = 0x7fffffff;
+         *xp2 = *yp2 = -0x7fffffff;
+         return;
+     }
      for (i = 0, f = x->x_vec; i < n; i++, f += 2)
      {
***************
*** 1057,1060 ****
--- 1110,1115 ----
      t_fielddesc *f = x->x_vec;
      
+     if (!fielddesc_getfloat(&x->x_vis, template, data, 0))
+         return;
      if (vis)
      {
***************
*** 1144,1148 ****
      }
      if (curve_motion_scalar)
!         glist_redrawitem(curve_motion_glist, &curve_motion_scalar->sc_gobj);
      if (curve_motion_array)
          array_redraw(curve_motion_array, curve_motion_glist);
--- 1199,1203 ----
      }
      if (curve_motion_scalar)
!         scalar_redraw(curve_motion_scalar, curve_motion_glist);
      if (curve_motion_array)
          array_redraw(curve_motion_array, curve_motion_glist);
***************
*** 1159,1162 ****
--- 1214,1219 ----
      int besterror = 0x7fffffff;
      t_fielddesc *f;
+     if (!fielddesc_getfloat(&x->x_vis, template, data, 0))
+         return (0);
      for (i = 0, f = x->x_vec; i < n; i++, f += 2)
      {
***************
*** 1221,1225 ****
  {
      curve_class = class_new(gensym("drawpolygon"), (t_newmethod)curve_new,
!         (t_method)curve_free, sizeof(t_curve), CLASS_NOINLET, A_GIMME, 0);
      class_setdrawcommand(curve_class);
      class_addcreator((t_newmethod)curve_new, gensym("drawcurve"),
--- 1278,1282 ----
  {
      curve_class = class_new(gensym("drawpolygon"), (t_newmethod)curve_new,
!         (t_method)curve_free, sizeof(t_curve), 0, A_GIMME, 0);
      class_setdrawcommand(curve_class);
      class_addcreator((t_newmethod)curve_new, gensym("drawcurve"),
***************
*** 1230,1233 ****
--- 1287,1291 ----
          A_GIMME, 0);
      class_setparentwidget(curve_class, &curve_widgetbehavior);
+     class_addfloat(curve_class, curve_float);
  }
  
***************
*** 1257,1261 ****
  {
      t_plot *x = (t_plot *)pd_new(plot_class);
!     int defstyle = PLOTSTYLE_POLY, vis = 1, scalarvis = 1;
      x->x_canvas = canvas_getcurrent();
  
--- 1315,1319 ----
  {
      t_plot *x = (t_plot *)pd_new(plot_class);
!     int defstyle = PLOTSTYLE_POLY;
      x->x_canvas = canvas_getcurrent();
  
***************
*** 1264,1267 ****
--- 1322,1327 ----
      fielddesc_setfloat_var(&x->x_wpoints, gensym("w"));
      
+     fielddesc_setfloat_const(&x->x_vis, 1);
+     fielddesc_setfloat_const(&x->x_scalarvis, 1);
      while (1)
      {
***************
*** 1273,1285 ****
              argc--, argv++;
          }
!         else if (!strcmp(firstarg->s_name, "-n"))
          {
!             vis = 0;
!             argc--; argv++;
          }
!         else if (!strcmp(firstarg->s_name, "-noscalar"))
          {
!             scalarvis = 0;
!             argc--; argv++;
          }
          else if (!strcmp(firstarg->s_name, "-x") && argc > 1)
--- 1333,1345 ----
              argc--, argv++;
          }
!         else if (!strcmp(firstarg->s_name, "-v") && argc > 1)
          {
!             fielddesc_setfloatarg(&x->x_vis, 1, argv+1);
!             argc -= 2; argv += 2;
          }
!         else if (!strcmp(firstarg->s_name, "-vs") && argc > 1)
          {
!             fielddesc_setfloatarg(&x->x_scalarvis, 1, argv+1);
!             argc -= 2; argv += 2;
          }
          else if (!strcmp(firstarg->s_name, "-x") && argc > 1)
***************
*** 1314,1321 ****
      if (argc) fielddesc_setfloatarg(&x->x_style, argc--, argv++);
      else fielddesc_setfloat_const(&x->x_style, defstyle);
-     if (argc) fielddesc_setfloatarg(&x->x_vis, argc--, argv++);
-     else fielddesc_setfloat_const(&x->x_vis, vis);
-     if (argc) fielddesc_setfloatarg(&x->x_scalarvis, argc--, argv++);
-     else fielddesc_setfloat_const(&x->x_scalarvis, 1);
      return (x);
  }
--- 1374,1377 ----
***************
*** 1469,1473 ****
                  &xonset, &yonset, &wonset))
      {
!         for (i = 0, xsum = 0; i < array->a_n; i++)
          {
              float usexloc, useyloc;
--- 1525,1531 ----
                  &xonset, &yonset, &wonset))
      {
!             /* if it has more than 2000 points, just check 1000 of them. */
!         int incr = (array->a_n <= 2000 ? 1 : array->a_n / 1000);
!         for (i = 0, xsum = 0; i < array->a_n; i += incr)
          {
              float usexloc, useyloc;
***************
*** 1687,1692 ****
                      {
                          sys_vgui("%d %f \\\n", ixpix, glist_ytopixels(glist,
!                             basey + fielddesc_cvttocoord(yfielddesc,
!                                 yloc + yval) +
                                      fielddesc_cvttocoord(wfielddesc, wval)));
                          ndrawn++;
--- 1745,1750 ----
                      {
                          sys_vgui("%d %f \\\n", ixpix, glist_ytopixels(glist,
!                             basey + yloc + fielddesc_cvttocoord(yfielddesc,
!                                 yval) +
                                      fielddesc_cvttocoord(wfielddesc, wval)));
                          ndrawn++;
***************
*** 1700,1709 ****
                  {
                      sys_vgui("%d %f \\\n", ixpix + 10, glist_ytopixels(glist,
!                         basey + fielddesc_cvttocoord(yfielddesc,
!                             yloc + yval) +
                                  fielddesc_cvttocoord(wfielddesc, wval)));
                      sys_vgui("%d %f \\\n", ixpix + 10, glist_ytopixels(glist,
!                         basey + fielddesc_cvttocoord(yfielddesc,
!                             yloc + yval) -
                                  fielddesc_cvttocoord(wfielddesc, wval)));
                  }
--- 1758,1767 ----
                  {
                      sys_vgui("%d %f \\\n", ixpix + 10, glist_ytopixels(glist,
!                         basey + yloc + fielddesc_cvttocoord(yfielddesc,
!                             yval) +
                                  fielddesc_cvttocoord(wfielddesc, wval)));
                      sys_vgui("%d %f \\\n", ixpix + 10, glist_ytopixels(glist,
!                         basey + yloc + fielddesc_cvttocoord(yfielddesc,
!                             yval) -
                                  fielddesc_cvttocoord(wfielddesc, wval)));
                  }
***************
*** 1739,1744 ****
                          sys_vgui("%d %f \\\n", ixpix,
                              glist_ytopixels(glist,
!                                 basey + fielddesc_cvttocoord(yfielddesc,
!                                     yloc + yval)));
                          ndrawn++;
                      }
--- 1797,1802 ----
                          sys_vgui("%d %f \\\n", ixpix,
                              glist_ytopixels(glist,
!                                 basey + yloc + fielddesc_cvttocoord(yfielddesc,
!                                     yval)));
                          ndrawn++;
                      }
***************
*** 1749,1754 ****
                  if (ndrawn == 0) sys_vgui("0 0 0 0 \\\n");
                  else if (ndrawn == 1) sys_vgui("%d %f \\\n", ixpix + 10,
!                     glist_ytopixels(glist, basey +
!                         fielddesc_cvttocoord(yfielddesc, yloc + yval)));
  
                  sys_vgui("-width %f\\\n", linewidth);
--- 1807,1812 ----
                  if (ndrawn == 0) sys_vgui("0 0 0 0 \\\n");
                  else if (ndrawn == 1) sys_vgui("%d %f \\\n", ixpix + 10,
!                     glist_ytopixels(glist, basey + yloc + 
!                         fielddesc_cvttocoord(yfielddesc, yval)));
  
                  sys_vgui("-width %f\\\n", linewidth);
***************
*** 1775,1779 ****
                      yval = *(float *)((elem + elemsize * i) + yonset);
                  else yval = 0;
!                 useyloc = basey + fielddesc_cvttocoord(yfielddesc, yloc+yval);
                  for (y = elemtemplatecanvas->gl_list; y; y = y->g_next)
                  {
--- 1833,1838 ----
                      yval = *(float *)((elem + elemsize * i) + yonset);
                  else yval = 0;
!                 useyloc = basey + yloc +
!                     fielddesc_cvttocoord(yfielddesc, yval);
                  for (y = elemtemplatecanvas->gl_list; y; y = y->g_next)
                  {
***************
*** 1856,1865 ****
  }
  
! /* ---------------- drawnumber: draw a number ---------------- */
  
  /*
      drawnumbers draw numeric fields at controllable locations, with
!     controllable color and label  .
!         invocation: (drawnumber|drawsymbol) variable x y color label
  */
  
--- 1915,1924 ----
  }
  
! /* ---------------- drawnumber: draw a number (or symbol) ---------------- */
  
  /*
      drawnumbers draw numeric fields at controllable locations, with
!     controllable color and label.  invocation:
!     (drawnumber|drawsymbol) [-v <visible>] variable x y color label
  */
  
***************
*** 1871,1879 ****
  {
      t_object x_obj;
-     int x_vis;              /* LATER incorporate into flags field below? */
      t_fielddesc x_value;
      t_fielddesc x_xloc;
      t_fielddesc x_yloc;
      t_fielddesc x_color;
      t_symbol *x_label;
      int x_flags;
--- 1930,1938 ----
  {
      t_object x_obj;
      t_fielddesc x_value;
      t_fielddesc x_xloc;
      t_fielddesc x_yloc;
      t_fielddesc x_color;
+     t_fielddesc x_vis;
      t_symbol *x_label;
      int x_flags;
***************
*** 1890,1902 ****
          flags |= DRAW_SYMBOL;
      x->x_flags = flags;
!     x->x_vis = 1;
      x->x_canvas = canvas_getcurrent();
      while (1)
      {
          t_symbol *firstarg = atom_getsymbolarg(0, argc, argv);
!         if (!strcmp(firstarg->s_name, "-n"))
          {
!             x->x_vis = 0;
!             argc--; argv++;
          }
          else break;
--- 1949,1961 ----
          flags |= DRAW_SYMBOL;
      x->x_flags = flags;
!     fielddesc_setfloat_const(&x->x_vis, 1);
      x->x_canvas = canvas_getcurrent();
      while (1)
      {
          t_symbol *firstarg = atom_getsymbolarg(0, argc, argv);
!         if (!strcmp(firstarg->s_name, "-v") && argc > 1)
          {
!             fielddesc_setfloatarg(&x->x_vis, 1, argv+1);
!             argc -= 2; argv += 2;
          }
          else break;
***************
*** 1906,1910 ****
          if (argc) fielddesc_setsymbolarg(&x->x_value, argc--, argv++);
          else fielddesc_setsymbol_const(&x->x_value, &s_);
-     
      }
      else
--- 1965,1968 ----
***************
*** 1928,1935 ****
  void drawnumber_float(t_drawnumber *x, t_floatarg f)
  {
!     if ((f != 0 && x->x_vis) || (f == 0 && !x->x_vis))
          return;
      canvas_redrawallfortemplatecanvas(x->x_canvas, 2);
!     x->x_vis = (f!= 0);
      canvas_redrawallfortemplatecanvas(x->x_canvas, 1);
  }
--- 1986,2001 ----
  void drawnumber_float(t_drawnumber *x, t_floatarg f)
  {
!     int viswas;
!     if (x->x_vis.fd_type != A_FLOAT || x->x_vis.fd_var)
!     {
!         pd_error(x, "global vis/invis for a template with variable visibility");
!         return;
!     }
!     viswas = (x->x_vis.fd_un.fd_float != 0);
!     
!     if ((f != 0 && viswas) || (f == 0 && !viswas))
          return;
      canvas_redrawallfortemplatecanvas(x->x_canvas, 2);
!     fielddesc_setfloat_const(&x->x_vis, (f != 0));
      canvas_redrawallfortemplatecanvas(x->x_canvas, 1);
  }
***************
*** 1953,1957 ****
      t_drawnumber *x = (t_drawnumber *)z;
      t_atom at;
!     if (!x->x_vis)
      {
          *xp1 = *yp1 = 0x7fffffff;
--- 2019,2026 ----
      t_drawnumber *x = (t_drawnumber *)z;
      t_atom at;
!         int xloc, yloc, font, fontwidth, fontheight;
!     char buf[DRAWNUMBER_BUFSIZE];
! 
!     if (!fielddesc_getfloat(&x->x_vis, template, data, 0))
      {
          *xp1 = *yp1 = 0x7fffffff;
***************
*** 1959,1969 ****
          return;
      }
!     int xloc = glist_xtopixels(glist,
          basex + fielddesc_getfloat(&x->x_xloc, template, data, 0));
!     int yloc = glist_ytopixels(glist,
          basey + fielddesc_getfloat(&x->x_yloc, template, data, 0));
!     int font = glist_getfont(glist);
!     int fontwidth = sys_fontwidth(font), fontheight = sys_fontheight(font);
!     char buf[DRAWNUMBER_BUFSIZE];
      if (x->x_flags & DRAW_SYMBOL)
          SETSYMBOL(&at, fielddesc_getsymbol(&x->x_value, template, data, 0));
--- 2028,2038 ----
          return;
      }
!     xloc = glist_xtopixels(glist,
          basex + fielddesc_getfloat(&x->x_xloc, template, data, 0));
!     yloc = glist_ytopixels(glist,
          basey + fielddesc_getfloat(&x->x_yloc, template, data, 0));
!     font = glist_getfont(glist);
!     fontwidth = sys_fontwidth(font);
!         fontheight = sys_fontheight(font);
      if (x->x_flags & DRAW_SYMBOL)
          SETSYMBOL(&at, fielddesc_getsymbol(&x->x_value, template, data, 0));
***************
*** 2004,2008 ****
      t_drawnumber *x = (t_drawnumber *)z;
      
!     if (!x->x_vis)
          return;
      if (vis)
--- 2073,2077 ----
      t_drawnumber *x = (t_drawnumber *)z;
      
!     if (!fielddesc_getfloat(&x->x_vis, template, data, 0))
          return;
      if (vis)
***************
*** 2050,2055 ****
                  1);
      if (drawnumber_motion_scalar)
!         glist_redrawitem(drawnumber_motion_glist,
!             &drawnumber_motion_scalar->sc_gobj);
      if (drawnumber_motion_array)
          array_redraw(drawnumber_motion_array, drawnumber_motion_glist);
--- 2119,2123 ----
                  1);
      if (drawnumber_motion_scalar)
!         scalar_redraw(drawnumber_motion_scalar, drawnumber_motion_glist);
      if (drawnumber_motion_array)
          array_redraw(drawnumber_motion_array, drawnumber_motion_glist);
***************
*** 2067,2071 ****
          &x1, &y1, &x2, &y2);
      if (xpix >= x1 && xpix <= x2 && ypix >= y1 && ypix <= y2
!         && x->x_value.fd_var && x->x_vis)
      {
          if (doit)
--- 2135,2140 ----
          &x1, &y1, &x2, &y2);
      if (xpix >= x1 && xpix <= x2 && ypix >= y1 && ypix <= y2
!         && x->x_value.fd_var &&
!             fielddesc_getfloat(&x->x_vis, template, data, 0))
      {
          if (doit)

Index: g_traversal.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/g_traversal.c,v
retrieving revision 1.2.8.3
retrieving revision 1.2.8.4
diff -C2 -d -r1.2.8.3 -r1.2.8.4
*** g_traversal.c	2 Aug 2005 21:25:05 -0000	1.2.8.3
--- g_traversal.c	21 Aug 2005 11:28:24 -0000	1.2.8.4
***************
*** 274,278 ****
      ptrobj_vnext(x, 0);
  }
- 
  static void ptrobj_sendwindow(t_ptrobj *x, t_symbol *s, int argc, t_atom *argv)
  {
--- 274,277 ----
***************
*** 335,338 ****
--- 334,363 ----
  }
  
+ 
+ static void ptrobj_rewind(t_ptrobj *x)
+ {
+     t_scalar *sc;
+     t_symbol *templatesym;
+     int n;
+     t_typedout *to;
+     t_glist *glist;
+     t_pd *canvas;
+     t_gstub *gs;
+     if (!gpointer_check(&x->x_gp, 1))
+     {
+         pd_error(x, "pointer_rewind: empty pointer");
+         return;
+     }
+     gs = x->x_gp.gp_stub;
+     if (gs->gs_which != GP_GLIST)
+     {
+         pd_error(x, "pointer_rewind: sorry, unavailable for arrays");
+         return;
+     }
+     glist = gs->gs_un.gs_glist;  
+     gpointer_setglist(&x->x_gp, glist, 0);
+     ptrobj_bang(x);
+ }
+ 
  static void ptrobj_free(t_ptrobj *x)
  {
***************
*** 352,355 ****
--- 377,382 ----
      class_addmethod(ptrobj_class, (t_method)ptrobj_sendwindow,
          gensym("send-window"), A_GIMME, 0); 
+     class_addmethod(ptrobj_class, (t_method)ptrobj_rewind,
+         gensym("rewind"), 0); 
      class_addpointer(ptrobj_class, ptrobj_pointer); 
      class_addbang(ptrobj_class, ptrobj_bang); 
***************
*** 542,546 ****
          template_setfloat(template, vp->gv_sym, vec, vp->gv_w.w_float, 1);
      if (gs->gs_which == GP_GLIST)
!         glist_redrawitem(gs->gs_un.gs_glist, (t_gobj *)(gp->gp_un.gp_scalar));  
      else
      {
--- 569,573 ----
          template_setfloat(template, vp->gv_sym, vec, vp->gv_w.w_float, 1);
      if (gs->gs_which == GP_GLIST)
!         scalar_redraw(gp->gp_un.gp_scalar, gs->gs_un.gs_glist);  
      else
      {
***************
*** 548,553 ****
          while (owner_array->a_gp.gp_stub->gs_which == GP_ARRAY)
              owner_array = owner_array->a_gp.gp_stub->gs_un.gs_array;
!         glist_redrawitem(owner_array->a_gp.gp_stub->gs_un.gs_glist,
!             (t_gobj *)(owner_array->a_gp.gp_un.gp_scalar));  
      }
  }
--- 575,580 ----
          while (owner_array->a_gp.gp_stub->gs_which == GP_ARRAY)
              owner_array = owner_array->a_gp.gp_stub->gs_un.gs_array;
!         scalar_redraw(owner_array->a_gp.gp_un.gp_scalar,
!             owner_array->a_gp.gp_stub->gs_un.gs_glist);  
      }
  }
***************
*** 1021,1025 ****
      }
   
!     glist_redrawitem(glist, (t_gobj *)sc);  
  
      outlet_pointer(x->x_obj.ob_outlet, gp);
--- 1048,1052 ----
      }
   
!     scalar_redraw(sc, glist);  
  
      outlet_pointer(x->x_obj.ob_outlet, gp);

Index: g_hdial.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/g_hdial.c,v
retrieving revision 1.4.4.1
retrieving revision 1.4.4.1.2.1
diff -C2 -d -r1.4.4.1 -r1.4.4.1.2.1
*** g_hdial.c	11 Nov 2004 22:30:41 -0000	1.4.4.1
--- g_hdial.c	21 Aug 2005 11:28:24 -0000	1.4.4.1.2.1
***************
*** 32,37 ****
  /* widget helper functions */
  
! void hradio_draw_update(t_hradio *x, t_glist *glist)
  {
      if(glist_isvisible(glist))
      {
--- 32,38 ----
  /* widget helper functions */
  
! void hradio_draw_update(t_gobj *client, t_glist *glist)
  {
+     t_hradio *x = (t_hradio *)client;
      if(glist_isvisible(glist))
      {
***************
*** 39,47 ****
  
          sys_vgui(".x%lx.c itemconfigure %lxBUT%d -fill #%6.6x -outline #%6.6x\n",
!                  canvas, x, x->x_on_old,
                   x->x_gui.x_bcol, x->x_gui.x_bcol);
          sys_vgui(".x%lx.c itemconfigure %lxBUT%d -fill #%6.6x -outline #%6.6x\n",
                   canvas, x, x->x_on,
                   x->x_gui.x_fcol, x->x_gui.x_fcol);
      }
  }
--- 40,49 ----
  
          sys_vgui(".x%lx.c itemconfigure %lxBUT%d -fill #%6.6x -outline #%6.6x\n",
!                  canvas, x, x->x_drawn,
                   x->x_gui.x_bcol, x->x_gui.x_bcol);
          sys_vgui(".x%lx.c itemconfigure %lxBUT%d -fill #%6.6x -outline #%6.6x\n",
                   canvas, x, x->x_on,
                   x->x_gui.x_fcol, x->x_gui.x_fcol);
+         x->x_drawn = x->x_on;
      }
  }
***************
*** 69,72 ****
--- 71,75 ----
          xx21 += dx;
          xx22 += dx;
+         x->x_drawn = x->x_on;
      }
      sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \
***************
*** 205,209 ****
  {
      if(mode == IEM_GUI_DRAW_MODE_UPDATE)
!         hradio_draw_update(x, glist);
      else if(mode == IEM_GUI_DRAW_MODE_MOVE)
          hradio_draw_move(x, glist);
--- 208,212 ----
  {
      if(mode == IEM_GUI_DRAW_MODE_UPDATE)
!         sys_queuegui(x, glist, hradio_draw_update);
      else if(mode == IEM_GUI_DRAW_MODE_MOVE)
          hradio_draw_move(x, glist);

Index: g_all_guis.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/g_all_guis.c,v
retrieving revision 1.5.4.1
retrieving revision 1.5.4.1.2.1
diff -C2 -d -r1.5.4.1 -r1.5.4.1.2.1
*** g_all_guis.c	2 Jan 2005 14:49:24 -0000	1.5.4.1
--- g_all_guis.c	21 Aug 2005 11:28:24 -0000	1.5.4.1.2.1
***************
*** 525,529 ****
--- 525,532 ----
          (*x->x_gui.x_draw)((void *)z, glist, IEM_GUI_DRAW_MODE_NEW);
      else
+     {
          (*x->x_gui.x_draw)((void *)z, glist, IEM_GUI_DRAW_MODE_ERASE);
+         sys_unqueuegui(z);
+     }
  }
  

Index: g_all_guis.h
===================================================================
RCS file: /cvsroot/pure-data/pd/src/g_all_guis.h,v
retrieving revision 1.4
retrieving revision 1.4.8.1
diff -C2 -d -r1.4 -r1.4.8.1
*** g_all_guis.h	6 Sep 2004 20:20:33 -0000	1.4
--- g_all_guis.h	21 Aug 2005 11:28:24 -0000	1.4.8.1
***************
*** 199,205 ****
      t_iemgui x_gui;
      int      x_on;
!     int      x_on_old;
      int      x_change;
      int      x_number;
      t_atom   x_at[2];
  } t_hdial;
--- 199,206 ----
      t_iemgui x_gui;
      int      x_on;
!     int      x_on_old;  /* LATER delete this; it's used for old version */
      int      x_change;
      int      x_number;
+     int      x_drawn;
      t_atom   x_at[2];
  } t_hdial;
***************
*** 243,246 ****
--- 244,249 ----
      void     *x_out_rms;
      void     *x_out_peak;
+     unsigned int x_updaterms:1;
+     unsigned int x_updatepeak:1;
  } t_vu;
  
***************
*** 267,270 ****
--- 270,274 ----
      int      x_change;
      int      x_number;
+     int      x_drawn;
      t_atom   x_at[2];
  } t_vdial;

Index: d_soundfile.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/d_soundfile.c,v
retrieving revision 1.4.4.11.2.3
retrieving revision 1.4.4.11.2.4
diff -C2 -d -r1.4.4.11.2.3 -r1.4.4.11.2.4
*** d_soundfile.c	2 Aug 2005 21:25:03 -0000	1.4.4.11.2.3
--- d_soundfile.c	21 Aug 2005 11:28:24 -0000	1.4.4.11.2.4
***************
*** 2920,2930 ****
              x->x_fileerror = 0;
  
!                 /* if there's already a file open, close it */
              if (x->x_fd >= 0)
              {
                  pthread_mutex_unlock(&x->x_mutex);
!                 close (x->x_fd);
                  pthread_mutex_lock(&x->x_mutex);
                  x->x_fd = -1;
                  if (x->x_requestcode != REQUEST_BUSY)
                      continue;
--- 2920,2951 ----
              x->x_fileerror = 0;
  
!                 /* if there's already a file open, close it.  This
!                 should never happen since writesf_open() calls stop if
!                 needed and then waits until we're idle. */
              if (x->x_fd >= 0)
              {
+                 int bytesperframe = x->x_bytespersample * x->x_sfchannels;
+                 int bigendian = x->x_bigendian;
+                 char *filename = x->x_filename;
+                 int fd = x->x_fd;
+                 int filetype = x->x_filetype;
+                 int itemswritten = x->x_itemswritten;
+                 int swap = x->x_swap;
                  pthread_mutex_unlock(&x->x_mutex);
!                 
!                 soundfile_finishwrite(x, filename, fd,
!                     filetype, 0x7fffffff, itemswritten,
!                     bytesperframe, swap);
!                 close (fd);
! 
                  pthread_mutex_lock(&x->x_mutex);
                  x->x_fd = -1;
+ #ifdef DEBUG_SOUNDFILE
+                 {
+                     char s[1000];
+                     sprintf(s, "bug??? ditched %d\n", itemswritten);
+                     pute(s);
+                 }
+ #endif  
                  if (x->x_requestcode != REQUEST_BUSY)
                      continue;
***************
*** 3031,3037 ****
                  x->x_itemswritten +=
                      sysrtn / (x->x_bytespersample * x->x_sfchannels);
-                 sprintf(boo, "after: head %d, tail %d\n", 
-                     x->x_fifohead, x->x_fifotail);
  #ifdef DEBUG_SOUNDFILE
                  pute(boo);
  #endif
--- 3052,3058 ----
                  x->x_itemswritten +=
                      sysrtn / (x->x_bytespersample * x->x_sfchannels);
  #ifdef DEBUG_SOUNDFILE
+                 sprintf(boo, "after: head %d, tail %d written %d\n", 
+                     x->x_fifohead, x->x_fifotail, x->x_itemswritten);
                  pute(boo);
  #endif
***************
*** 3213,3216 ****
--- 3234,3241 ----
      long onset, nframes;
      float samplerate;
+     if (x->x_state != STATE_IDLE)
+     {
+         writesf_stop(x);
+     }
      if (soundfiler_writeargparse(x, &argc,
          &argv, &filesym, &filetype, &bytespersamp, &swap, &bigendian,
***************
*** 3226,3229 ****
--- 3251,3259 ----
          pd_error(x, "extra argument(s) to writesf~: ignored");
      pthread_mutex_lock(&x->x_mutex);
+     while (x->x_requestcode != REQUEST_NOTHING)
+     {
+         sfread_cond_signal(&x->x_requestcondition);
+         sfread_cond_wait(&x->x_answercondition, &x->x_mutex);
+     }
      x->x_bytespersample = bytespersamp;
      x->x_swap = swap;

Index: d_misc.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/d_misc.c,v
retrieving revision 1.2
retrieving revision 1.2.8.1
diff -C2 -d -r1.2 -r1.2.8.1
*** d_misc.c	6 Sep 2004 20:20:33 -0000	1.2
--- d_misc.c	21 Aug 2005 11:28:24 -0000	1.2.8.1
***************
*** 225,233 ****
  {
      t_object x_obj;
  } t_samplerate;
  
  static void samplerate_tilde_bang(t_samplerate *x)
  {
!     outlet_float(x->x_obj.ob_outlet, sys_getsr());
  }
  
--- 225,246 ----
  {
      t_object x_obj;
+     float x_sr;
  } t_samplerate;
  
  static void samplerate_tilde_bang(t_samplerate *x)
  {
!     if (!canvas_dspstate)
!     {
!         post(
!           "NB: samplerate~ momentarily started DSP to learn sample rate");
!         canvas_resume_dsp(1);
!         canvas_suspend_dsp();
!     }
!     outlet_float(x->x_obj.ob_outlet, x->x_sr);
! }
! 
! static void samplerate_tilde_dsp(t_samplerate *x, t_signal **sp)
! {
!     x->x_sr = sp[0]->s_sr;
  }
  
***************
*** 244,247 ****
--- 257,262 ----
          (t_newmethod)samplerate_tilde_new, 0, sizeof(t_samplerate), 0, 0);
      class_addbang(samplerate_tilde_class, samplerate_tilde_bang);
+     class_addmethod(samplerate_tilde_class, (t_method)samplerate_tilde_dsp,
+         gensym("dsp"), A_CANT, 0);
  }
  

Index: g_hslider.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/g_hslider.c,v
retrieving revision 1.4
retrieving revision 1.4.8.1
diff -C2 -d -r1.4 -r1.4.8.1
*** g_hslider.c	6 Sep 2004 20:20:33 -0000	1.4
--- g_hslider.c	21 Aug 2005 11:28:24 -0000	1.4.8.1
***************
*** 31,36 ****
  /* widget helper functions */
  
! static void hslider_draw_update(t_hslider *x, t_glist *glist)
  {
      t_canvas *canvas=glist_getcanvas(glist);
      int ypos=text_ypix(&x->x_gui.x_obj, glist);
--- 31,37 ----
  /* widget helper functions */
  
! static void hslider_draw_update(t_gobj *client, t_glist *glist)
  {
+     t_hslider *x = (t_hslider *)client;
      t_canvas *canvas=glist_getcanvas(glist);
      int ypos=text_ypix(&x->x_gui.x_obj, glist);
***************
*** 183,187 ****
  {
      if(mode == IEM_GUI_DRAW_MODE_UPDATE)
!         hslider_draw_update(x, glist);
      else if(mode == IEM_GUI_DRAW_MODE_MOVE)
          hslider_draw_move(x, glist);
--- 184,188 ----
  {
      if(mode == IEM_GUI_DRAW_MODE_UPDATE)
!         sys_queuegui(x, glist, hslider_draw_update);
      else if(mode == IEM_GUI_DRAW_MODE_MOVE)
          hslider_draw_move(x, glist);

Index: g_text.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/g_text.c,v
retrieving revision 1.5.4.2.2.4
retrieving revision 1.5.4.2.2.5
diff -C2 -d -r1.5.4.2.2.4 -r1.5.4.2.2.5
*** g_text.c	2 Aug 2005 21:25:05 -0000	1.5.4.2.2.4
--- g_text.c	21 Aug 2005 11:28:24 -0000	1.5.4.2.2.5
***************
*** 348,355 ****
  static void message_adddollar(t_message *x, t_floatarg f)
  {
      int n = f;
      if (n < 0)
          n = 0;
-     t_atom a;
      SETDOLLAR(&a, n);
      binbuf_add(x->m_text.te_binbuf, 1, &a);
--- 348,355 ----
  static void message_adddollar(t_message *x, t_floatarg f)
  {
+     t_atom a;
      int n = f;
      if (n < 0)
          n = 0;
      SETDOLLAR(&a, n);
      binbuf_add(x->m_text.te_binbuf, 1, &a);

Index: s_main.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/s_main.c,v
retrieving revision 1.7.4.17.2.5
retrieving revision 1.7.4.17.2.6
diff -C2 -d -r1.7.4.17.2.5 -r1.7.4.17.2.6
*** s_main.c	2 Aug 2005 21:25:05 -0000	1.7.4.17.2.5
--- s_main.c	21 Aug 2005 11:28:24 -0000	1.7.4.17.2.6
***************
*** 8,12 ****
   */
  
! char pd_version[] = "Pd version 0.39 TEST 4b devel\n";
  char pd_compiletime[] = __TIME__;
  char pd_compiledate[] = __DATE__;
--- 8,12 ----
   */
  
! char pd_version[] = "Pd version 0.39 TEST 5 devel\n";
  char pd_compiletime[] = __TIME__;
  char pd_compiledate[] = __DATE__;

Index: g_array.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/g_array.c,v
retrieving revision 1.3.4.4.2.3
retrieving revision 1.3.4.4.2.4
diff -C2 -d -r1.3.4.4.2.3 -r1.3.4.4.2.4
*** g_array.c	12 Aug 2005 10:03:41 -0000	1.3.4.4.2.3
--- g_array.c	21 Aug 2005 11:28:24 -0000	1.3.4.4.2.4
***************
*** 428,431 ****
--- 428,439 ----
              x->x_realname = canvas_realizedollar(x->x_glist, argname);
              pd_bind(&x->x_gobj.g_pd, x->x_realname);
+                 /* redraw the whole glist, just so the name change shows up */
+             if (x->x_glist->gl_havewindow)
+                 canvas_redraw(x->x_glist);
+             else if (glist_isvisible(x->x_glist->gl_owner))
+             {
+                 gobj_vis(&x->x_glist->gl_gobj, x->x_glist->gl_owner, 0);
+                 gobj_vis(&x->x_glist->gl_gobj, x->x_glist->gl_owner, 1);
+             }
          }
          size = fsize;
***************
*** 447,451 ****
  void garray_arrayviewlist_new(t_garray *x)
  {
!     int i, xonset, yonset, type, elemsize;
      float yval;
      char cmdbuf[200];
--- 455,459 ----
  void garray_arrayviewlist_new(t_garray *x)
  {
!     int i, xonset=0, yonset=0, type=0, elemsize=0;
      float yval;
      char cmdbuf[200];
***************
*** 479,483 ****
                                     t_float page)
  {
!     int i, xonset, yonset, type, elemsize;
      float yval;
      char cmdbuf[200];
--- 487,491 ----
                                     t_float page)
  {
!     int i, xonset=0, yonset=0, type=0, elemsize=0;
      float yval;
      char cmdbuf[200];
***************
*** 551,555 ****
      while (a->a_gp.gp_stub->gs_which == GP_ARRAY)
          a = a->a_gp.gp_stub->gs_un.gs_array;
!     gobj_redraw(&a->a_gp.gp_un.gp_scalar->sc_gobj, glist);
  }
  
--- 559,563 ----
      while (a->a_gp.gp_stub->gs_which == GP_ARRAY)
          a = a->a_gp.gp_stub->gs_un.gs_array;
!     scalar_redraw(a->a_gp.gp_un.gp_scalar, glist);
  }
  
***************
*** 614,618 ****
      if (array_motion_xfield)
      {
!             /* it's an x, y plot; can drag many points at once */
          int i;
          for (i = 0; i < array_motion_npoints; i++)
--- 622,626 ----
      if (array_motion_xfield)
      {
!             /* it's an x, y plot */
          int i;
          for (i = 0; i < array_motion_npoints; i++)
***************
*** 652,656 ****
      {
              /* a y-only plot. */
!         int thisx = array_motion_initx + array_motion_xcumulative, x2;
          int increment, i, nchange;
          float newy = array_motion_ycumulative,
--- 660,664 ----
      {
              /* a y-only plot. */
!         int thisx = array_motion_initx + array_motion_xcumulative + 0.5, x2;
          int increment, i, nchange;
          float newy = array_motion_ycumulative,
***************
*** 679,684 ****
      }
      if (array_motion_scalar)
!         sys_queuegui(&array_motion_scalar->sc_gobj,
!             array_motion_glist, gobj_redraw);
      if (array_motion_array)
          array_redraw(array_motion_array, array_motion_glist);
--- 687,691 ----
      }
      if (array_motion_scalar)
!         scalar_redraw(array_motion_scalar, array_motion_glist);
      if (array_motion_array)
          array_redraw(array_motion_array, array_motion_glist);
***************
*** 702,705 ****
--- 709,713 ----
      t_template *elemtemplate;
      int elemsize, yonset, wonset, xonset, i, incr, hit;
+     float xsum;
  
      if (elemtemplatesym == &s_float)
***************
*** 713,722 ****
          incr = 1;
      else incr = array->a_n / 300;
!     for (i = 0; i < array->a_n; i += incr)
      {
          if (hit = scalar_doclick(
              (t_word *)((char *)(array->a_vec) + i * elemsize),
              elemtemplate, 0, array,
!             glist, xloc, yloc, xpix, ypix, shift, alt, dbl, doit))
                  return (hit);
      }
--- 721,739 ----
          incr = 1;
      else incr = array->a_n / 300;
!     for (i = 0, xsum = 0; i < array->a_n; i += incr)
      {
+         float usexloc, useyloc;
+         if (xonset >= 0)
+             usexloc = xloc + fielddesc_cvttocoord(xfield, 
+                 *(float *)(((char *)(array->a_vec) + elemsize * i) + xonset));
+         else usexloc = xloc + xsum, xsum += xinc;
+         useyloc = yloc + (yonset >= 0 ? fielddesc_cvttocoord(yfield,
+             *(float *)(((char *)(array->a_vec) + elemsize * i) + yonset)) : 0);
+         
          if (hit = scalar_doclick(
              (t_word *)((char *)(array->a_vec) + i * elemsize),
              elemtemplate, 0, array,
!             glist, usexloc, useyloc,
!             xpix, ypix, shift, alt, dbl, doit))
                  return (hit);
      }
***************
*** 741,749 ****
      {
          float best = 100;
!         int incr;
!             /* if it has more than 2000 points, just check 300 of them. */
!         if (array->a_n < 2000)
!             incr = 1;
!         else incr = array->a_n / 300;
          for (i = 0; i < array->a_n; i += incr)
          {
--- 758,763 ----
      {
          float best = 100;
!             /* if it has more than 2000 points, just check 1000 of them. */
!         int incr = (array->a_n <= 2000 ? 1 : array->a_n / 1000);
          for (i = 0; i < array->a_n; i += incr)
          {
***************
*** 849,854 ****
                              fielddesc_getcoord(xfield, array_motion_template,
                                  (t_word *)(elem + i * elemsize), 1);
!                         array_motion_wp = (t_word *)(elem + i * elemsize);
!                         array_motion_npoints = array->a_n - i;
                      }
                      else
--- 863,870 ----
                              fielddesc_getcoord(xfield, array_motion_template,
                                  (t_word *)(elem + i * elemsize), 1);
!                             array_motion_wp = (t_word *)(elem + i * elemsize);
!                         if (shift)
!                             array_motion_npoints = array->a_n - i;
!                         else array_motion_npoints = 1;
                      }
                      else

Index: s_midi_alsa.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/s_midi_alsa.c,v
retrieving revision 1.1.2.2.2.2
retrieving revision 1.1.2.2.2.3
diff -C2 -d -r1.1.2.2.2.2 -r1.1.2.2.2.3
*** s_midi_alsa.c	25 Jul 2005 18:21:29 -0000	1.1.2.2.2.2
--- s_midi_alsa.c	21 Aug 2005 11:28:24 -0000	1.1.2.2.2.3
***************
*** 47,50 ****
--- 47,51 ----
      int client;
      int i;
+     snd_seq_client_info_t *alsainfo;
      alsa_nmidiin = 0;
      alsa_nmidiout = 0;
***************
*** 92,96 ****
     
      if (nmidiout == 0 && nmidiin == 0) return;
-     snd_seq_client_info_t *alsainfo;
      snd_seq_client_info_malloc(&alsainfo);
      snd_seq_get_client_info(midi_handle,alsainfo);
--- 93,96 ----
***************
*** 185,189 ****
  void sys_alsa_poll_midi(void)
  {
!    char buf[20];
     int count, alsa_source;
     int i;
--- 185,189 ----
  void sys_alsa_poll_midi(void)
  {
!    unsigned char buf[20];
     int count, alsa_source;
     int i;

Index: m_glob.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/m_glob.c,v
retrieving revision 1.4.4.2.2.1
retrieving revision 1.4.4.2.2.2
diff -C2 -d -r1.4.4.2.2.1 -r1.4.4.2.2.2
*** m_glob.c	12 Jul 2005 15:11:10 -0000	1.4.4.2.2.1
--- m_glob.c	21 Aug 2005 11:28:24 -0000	1.4.4.2.2.2
***************
*** 13,17 ****
  
  void glob_setfilename(void *dummy, t_symbol *name, t_symbol *dir);
! void glob_quit(void *dummy);
  void glob_dsp(void *dummy, t_symbol *s, int argc, t_atom *argv);
  void glob_meters(void *dummy, t_floatarg f);
--- 13,17 ----
  
  void glob_setfilename(void *dummy, t_symbol *name, t_symbol *dir);
! void glob_verifyquit(void *dummy, t_floatarg f);
  void glob_dsp(void *dummy, t_symbol *s, int argc, t_atom *argv);
  void glob_meters(void *dummy, t_floatarg f);
***************
*** 90,93 ****
--- 90,95 ----
          A_SYMBOL, A_SYMBOL, 0);
      class_addmethod(glob_pdobject, (t_method)glob_quit, gensym("quit"), 0);
+     class_addmethod(glob_pdobject, (t_method)glob_verifyquit,
+         gensym("verifyquit"), A_DEFFLOAT, 0);
      class_addmethod(glob_pdobject, (t_method)glob_foo, gensym("foo"), A_GIMME, 0);
      class_addmethod(glob_pdobject, (t_method)glob_dsp, gensym("dsp"), A_GIMME, 0);

Index: g_scalar.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/g_scalar.c,v
retrieving revision 1.4.8.1
retrieving revision 1.4.8.2
diff -C2 -d -r1.4.8.1 -r1.4.8.2
*** g_scalar.c	22 May 2005 12:48:10 -0000	1.4.8.1
--- g_scalar.c	21 Aug 2005 11:28:24 -0000	1.4.8.2
***************
*** 207,222 ****
  {
      t_scalar *x = (t_scalar *)z;
!     /* post("scalar_select %d", state); */
!     /* later */
      if (state)
      {
          int x1, y1, x2, y2;
-         t_symbol *templatesym = x->sc_template;
-         t_template *tmpl;
-         t_atom at;
-         t_gpointer gp;
-         gpointer_init(&gp);
-         gpointer_setglist(&gp, owner, x);
-         SETPOINTER(&at, &gp);
          if (tmpl = template_findbyname(templatesym))
              template_notify(tmpl, gensym("select"), 1, &at);
--- 207,220 ----
  {
      t_scalar *x = (t_scalar *)z;
!     t_symbol *templatesym = x->sc_template;
!     t_template *tmpl;
!     t_atom at;
!     t_gpointer gp;
!     gpointer_init(&gp);
!     gpointer_setglist(&gp, owner, x);
!     SETPOINTER(&at, &gp);
      if (state)
      {
          int x1, y1, x2, y2;
          if (tmpl = template_findbyname(templatesym))
              template_notify(tmpl, gensym("select"), 1, &at);
***************
*** 230,234 ****
                  x);
      }
!     else sys_vgui(".x%lx.c delete select%lx\n", glist_getcanvas(owner), x);
  }
  
--- 228,238 ----
                  x);
      }
!     else
!     {
!         sys_vgui(".x%lx.c delete select%lx\n", glist_getcanvas(owner), x);
!         if (tmpl = template_findbyname(templatesym))
!             template_notify(tmpl, gensym("deselect"), 1, &at);
!         
!     }
  }
  
***************
*** 257,261 ****
          *(t_float *)(((char *)(x->sc_vec)) + yonset) +=
              dy * (glist_pixelstoy(glist, 1) - glist_pixelstoy(glist, 0));
!     glist_redrawitem(glist, z);
      if (glist_isselected(glist, z))
      {
--- 261,265 ----
          *(t_float *)(((char *)(x->sc_vec)) + yonset) +=
              dy * (glist_pixelstoy(glist, 1) - glist_pixelstoy(glist, 0));
!     scalar_redraw(x, glist);
      if (glist_isselected(glist, z))
      {
***************
*** 304,309 ****
          (*wb->w_parentvisfn)(y, owner, x->sc_vec, template, basex, basey, vis);
      }
!     if (!vis)
!         sys_unqueuegui(x);
  }
  
--- 308,323 ----
          (*wb->w_parentvisfn)(y, owner, x->sc_vec, template, basex, basey, vis);
      }
!     sys_unqueuegui(x);
! }
! 
! static void scalar_doredraw(t_gobj *client, t_glist *glist)
! {
!     scalar_vis(client, glist, 0);
!     scalar_vis(client, glist, 1);
! }
! 
! void scalar_redraw(t_scalar *x, t_glist *glist)
! {
!     sys_queuegui(x, glist, scalar_doredraw);
  }
  

Index: t_tkcmd.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/t_tkcmd.c,v
retrieving revision 1.2.4.1.2.3
retrieving revision 1.2.4.1.2.4
diff -C2 -d -r1.2.4.1.2.3 -r1.2.4.1.2.4
*** t_tkcmd.c	2 Aug 2005 21:25:05 -0000	1.2.4.1.2.3
--- t_tkcmd.c	21 Aug 2005 11:28:24 -0000	1.2.4.1.2.4
***************
*** 433,437 ****
          fflush(debugfd);
  #endif
!         execl("/bin/sh", "sh", "-c", cmdbuf, 0);
          perror("pd: exec");
          _exit(1);
--- 433,437 ----
          fflush(debugfd);
  #endif
!         execl("/bin/sh", "sh", "-c", cmdbuf, (char*)0);
          perror("pd: exec");
          _exit(1);

Index: g_vdial.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/g_vdial.c,v
retrieving revision 1.4
retrieving revision 1.4.8.1
diff -C2 -d -r1.4 -r1.4.8.1
*** g_vdial.c	6 Sep 2004 20:20:34 -0000	1.4
--- g_vdial.c	21 Aug 2005 11:28:24 -0000	1.4.8.1
***************
*** 33,38 ****
  /* widget helper functions */
  
! void vradio_draw_update(t_vradio *x, t_glist *glist)
  {
      if(glist_isvisible(glist))
      {
--- 33,39 ----
  /* widget helper functions */
  
! void vradio_draw_update(t_gobj *client, t_glist *glist)
  {
+     t_hradio *x = (t_hradio *)client;
      if(glist_isvisible(glist))
      {
***************
*** 40,48 ****
  
          sys_vgui(".x%lx.c itemconfigure %lxBUT%d -fill #%6.6x -outline #%6.6x\n",
!                  canvas, x, x->x_on_old,
                   x->x_gui.x_bcol, x->x_gui.x_bcol);
          sys_vgui(".x%lx.c itemconfigure %lxBUT%d -fill #%6.6x -outline #%6.6x\n",
                   canvas, x, x->x_on,
                   x->x_gui.x_fcol, x->x_gui.x_fcol);
      }
  }
--- 41,50 ----
  
          sys_vgui(".x%lx.c itemconfigure %lxBUT%d -fill #%6.6x -outline #%6.6x\n",
!                  canvas, x, x->x_drawn,
                   x->x_gui.x_bcol, x->x_gui.x_bcol);
          sys_vgui(".x%lx.c itemconfigure %lxBUT%d -fill #%6.6x -outline #%6.6x\n",
                   canvas, x, x->x_on,
                   x->x_gui.x_fcol, x->x_gui.x_fcol);
+         x->x_drawn = x->x_on;
      }
  }
***************
*** 71,74 ****
--- 73,77 ----
          yy21 += dy;
          yy22 += dy;
+         x->x_drawn = x->x_on;
      }
      sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \
***************
*** 205,209 ****
  {
      if(mode == IEM_GUI_DRAW_MODE_UPDATE)
!         vradio_draw_update(x, glist);
      else if(mode == IEM_GUI_DRAW_MODE_MOVE)
          vradio_draw_move(x, glist);
--- 208,212 ----
  {
      if(mode == IEM_GUI_DRAW_MODE_UPDATE)
!         sys_queuegui(x, glist, vradio_draw_update);
      else if(mode == IEM_GUI_DRAW_MODE_MOVE)
          vradio_draw_move(x, glist);

Index: s_inter.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/s_inter.c,v
retrieving revision 1.5.4.10.2.6
retrieving revision 1.5.4.10.2.7
diff -C2 -d -r1.5.4.10.2.6 -r1.5.4.10.2.7
*** s_inter.c	2 Aug 2005 21:25:05 -0000	1.5.4.10.2.6
--- s_inter.c	21 Aug 2005 11:28:24 -0000	1.5.4.10.2.7
***************
*** 1141,1145 ****
              }
              if (sys_verbose) fprintf(stderr, "%s", sys_guicmd);
!             execl("/bin/sh", "sh", "-c", sys_guicmd, 0);
              perror("pd: exec");
              _exit(1);
--- 1141,1145 ----
              }
              if (sys_verbose) fprintf(stderr, "%s", sys_guicmd);
!             execl("/bin/sh", "sh", "-c", sys_guicmd, (char*)0);
              perror("pd: exec");
              _exit(1);
***************
*** 1226,1230 ****
              sprintf(cmdbuf, "%s/pd-watchdog\n", guidir);
              if (sys_verbose) fprintf(stderr, "%s", cmdbuf);
!             execl("/bin/sh", "sh", "-c", cmdbuf, 0);
              perror("pd: exec");
              _exit(1);
--- 1226,1230 ----
              sprintf(cmdbuf, "%s/pd-watchdog\n", guidir);
              if (sys_verbose) fprintf(stderr, "%s", cmdbuf);
!             execl("/bin/sh", "sh", "-c", cmdbuf, (char*)0);
              perror("pd: exec");
              _exit(1);

Index: m_pd.h
===================================================================
RCS file: /cvsroot/pure-data/pd/src/m_pd.h,v
retrieving revision 1.4.4.11.2.3
retrieving revision 1.4.4.11.2.4
diff -C2 -d -r1.4.4.11.2.3 -r1.4.4.11.2.4
*** m_pd.h	13 Jul 2005 22:49:39 -0000	1.4.4.11.2.3
--- m_pd.h	21 Aug 2005 11:28:24 -0000	1.4.4.11.2.4
***************
*** 609,612 ****
--- 609,613 ----
  EXTERN void canvas_resume_dsp(int oldstate);
  EXTERN void canvas_update_dsp(void);
+ EXTERN int canvas_dspstate;
  
  /* IOhannes { (up/downsampling) */

Index: g_editor.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/g_editor.c,v
retrieving revision 1.4.4.2.2.3
retrieving revision 1.4.4.2.2.4
diff -C2 -d -r1.4.4.2.2.3 -r1.4.4.2.2.4
*** g_editor.c	12 Jul 2005 15:11:07 -0000	1.4.4.2.2.3
--- g_editor.c	21 Aug 2005 11:28:24 -0000	1.4.4.2.2.4
***************
*** 96,104 ****
  }
  
- void gobj_redraw(t_gobj *gobj, t_glist *glist)
- {
-     glist_redrawitem(glist, gobj);
- }
- 
  /* ------------------------ managing the selection ----------------- */
  
--- 96,99 ----
***************
*** 698,705 ****
                  /* we're going to remake the object, so "g" will go stale.
                  Get its index here, and afterward restore g.  Also, the
!                 replacement will be at teh end of the list, so we don't
                  do g = g->g_next in this case. */
              int j = glist_getindex(gl, g);
!             if (!gl->gl_havewindow)
                  canvas_vis(glist_getcanvas(gl), 1);
              glist_noselect(gl);
--- 693,701 ----
                  /* we're going to remake the object, so "g" will go stale.
                  Get its index here, and afterward restore g.  Also, the
!                 replacement will be at the end of the list, so we don't
                  do g = g->g_next in this case. */
              int j = glist_getindex(gl, g);
!             int hadwindow = gl->gl_havewindow;
!             if (!hadwindow)
                  canvas_vis(glist_getcanvas(gl), 1);
              glist_noselect(gl);
***************
*** 711,714 ****
--- 707,712 ----
              glist_noselect(gl);
              g = glist_nth(gl, j);
+             if (!hadwindow)
+                 canvas_vis(glist_getcanvas(gl), 0);
          }
          else
***************
*** 978,982 ****
      if (x->gl_havewindow)
          canvas_redraw(x);
!     else gobj_redraw(&x->gl_gobj, x->gl_owner);
  }
  
--- 976,984 ----
      if (x->gl_havewindow)
          canvas_redraw(x);
!     else if (glist_isvisible(x->gl_owner))
!     {
!         gobj_vis(&x->gl_gobj, x->gl_owner, 0);
!         gobj_vis(&x->gl_gobj, x->gl_owner, 1);
!     }
  }
  
***************
*** 1064,1068 ****
      t_gobj *y;
      int shiftmod, runmode, altmod, doublemod = 0, rightclick;
!     int x1, y1, x2, y2, clickreturned = 0;
      
      if (!x->gl_editor)
--- 1066,1070 ----
      t_gobj *y;
      int shiftmod, runmode, altmod, doublemod = 0, rightclick;
!     int x1=0, y1=0, x2=0, y2=0, clickreturned = 0;
      
      if (!x->gl_editor)
***************
*** 1304,1310 ****
  void canvas_doconnect(t_canvas *x, int xpos, int ypos, int which, int doit)
  {
!     int x11, y11, x12, y12;
      t_gobj *y1;
!     int x21, y21, x22, y22;
      t_gobj *y2;
      int xwas = x->gl_editor->e_xwas,
--- 1306,1312 ----
  void canvas_doconnect(t_canvas *x, int xpos, int ypos, int which, int doit)
  {
!     int x11=0, y11=0, x12=0, y12=0;
      t_gobj *y1;
!     int x21=0, y21=0, x22=0, y22=0;
      t_gobj *y2;
      int xwas = x->gl_editor->e_xwas,
***************
*** 1672,1683 ****
  }
  
! void canvas_menuclose(t_canvas *x, t_floatarg force)
  {
!     if (x->gl_owner)
!         canvas_vis(x, 0);
!     else if ((force != 0) || (!x->gl_dirty))
          pd_free(&x->gl_pd);
!     else sys_vgui("pdtk_check {This window has been modified.  Close anyway?}\
!      {.x%lx menuclose 1;\n}\n", x);
  }
  
--- 1674,1751 ----
  }
  
!     /* find a dirty sub-glist, if any, of this one (including itself) */
! static t_glist *glist_finddirty(t_glist *x)
  {
!     t_gobj *g;
!     t_glist *g2;
!     if (x->gl_env && x->gl_dirty)
!         return (x);
!     for (g = x->gl_list; g; g = g->g_next)
!         if (pd_class(&g->g_pd) == canvas_class &&
!             (g2 = glist_finddirty((t_glist *)g)))
!                 return (g2);
!     return (0);
! }
! 
!     /* quit, after calling glist_finddirty() on all toplevels and verifying
!     the user really wants to discard changes  */
! void glob_verifyquit(void *dummy, t_floatarg f)
! {
!     t_glist *g, *g2;
!         /* find all root canvases */
!     for (g = canvas_list; g; g = g->gl_next)
!         if (g2 = glist_finddirty(g))
!     {
!         canvas_vis(g2, 1);
!         sys_vgui(
! "pdtk_check {Discard changes to this window??} {.x%lx menuclose 3;\n} no\n",
!                 g2);
!         return;
!     }
!     if (f == 0)
!         sys_vgui("pdtk_check {really quit?} {pd quit;\n} yes\n");
!     else glob_quit(0);
! }
! 
!     /* close a window (or possibly quit Pd), checking for dirty flags.
!     The "force" parameter is interpreted as follows:
!         0 - request from GUI to close, verifying whether clean or dirty
!         1 - request from GUI to close, no verification
!         2 - verified - mark this one clean, then continue as in 1
!         3 - verified - mark this one clean, then verify-and-quit
!     */
! void canvas_menuclose(t_canvas *x, t_floatarg fforce)
! {
!     int force = fforce;
!     t_glist *g;
!     if (x->gl_owner && (force == 0 || force == 1))
!         canvas_vis(x, 0);   /* if subpatch, just invis it */
!     else if (force == 0)    
!     {
!         g = glist_finddirty(x);
!         if (g)
!         {
!             canvas_vis(g, 1);
!             sys_vgui(
! "pdtk_check {Discard changes to this window??} {.x%lx menuclose 2;\n} no\n",
!                 g);
!             return;
!         }
!         else pd_free(&x->gl_pd);
!     }
!     else if (force == 1)
          pd_free(&x->gl_pd);
!     else if (force == 2)
!     {
!         canvas_dirty(x, 0);
!         while (x->gl_owner)
!             x = x->gl_owner;
!         canvas_menuclose(x, 0);
!     }
!     else if (force == 3)
!     {
!         canvas_dirty(x, 0);
!         glob_verifyquit(0, 1);
!     }
  }
  
***************
*** 1718,1722 ****
                          canvas_find_index2 = myindex2;
                          glist_noselect(x);
!                         canvas_vis(x, 1);
                          canvas_editmode(x, 1.);
                          glist_select(x, y);
--- 1786,1790 ----
                          canvas_find_index2 = myindex2;
                          glist_noselect(x);
!                         vmess(&x->gl_pd, gensym("menu-open"), "");
                          canvas_editmode(x, 1.);
                          glist_select(x, y);

Index: d_ugen.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/d_ugen.c,v
retrieving revision 1.3.4.1
retrieving revision 1.3.4.1.2.1
diff -C2 -d -r1.3.4.1 -r1.3.4.1.2.1
*** d_ugen.c	5 Nov 2004 13:55:58 -0000	1.3.4.1
--- d_ugen.c	21 Aug 2005 11:28:24 -0000	1.3.4.1.2.1
***************
*** 693,697 ****
      t_sigoutconnect *oc, *oc2;
      t_class *class = pd_class(&u->u_obj->ob_pd);
!     int i, n;
          /* suppress creating new signals for the outputs of signal
          inlets and subpatchs; except in the case we're an inlet and "blocking"
--- 693,697 ----
      t_sigoutconnect *oc, *oc2;
      t_class *class = pd_class(&u->u_obj->ob_pd);
!     int i, n, totnsig;
          /* suppress creating new signals for the outputs of signal
          inlets and subpatchs; except in the case we're an inlet and "blocking"
***************
*** 728,732 ****
          }
      }
!     insig = (t_signal **)getbytes((u->u_nin + u->u_nout) * sizeof(t_signal *));
      outsig = insig + u->u_nin;
      for (sig = insig, uin = u->u_in, i = u->u_nin; i--; sig++, uin++)
--- 728,733 ----
          }
      }
!     totnsig = u->u_nin + u->u_nout;
!     insig = (t_signal **)getbytes((totnsig ? totnsig : 1) * sizeof(t_signal *));
      outsig = insig + u->u_nin;
      for (sig = insig, uin = u->u_in, i = u->u_nin; i--; sig++, uin++)
***************
*** 763,766 ****
--- 764,772 ----
          (*sig)->s_refcount = uout->o_nconnect;
      }
+         /* if thre are no input or output signals, supply one fake signal so
+         the object can learn the sample rate and block size.  Used by the
+         samplerate~ object. */
+     if (!totnsig)
+         insig[0] = signal_new(dc->dc_vecsize, dc->dc_srate);
          /* now call the DSP scheduling routine for the ugen.  This
          routine must fill in "borrowed" signal outputs in case it's either
***************
*** 777,780 ****
--- 783,789 ----
              signal_makereusable(*sig);
      }
+         /* special case: no inputs or outputs: free the fake signal we made */
+     if (!totnsig)
+         signal_makereusable(insig[0]);
      if (ugen_loud)
      {

Index: g_numbox.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/g_numbox.c,v
retrieving revision 1.4.8.2
retrieving revision 1.4.8.3
diff -C2 -d -r1.4.8.2 -r1.4.8.3
*** g_numbox.c	16 Jul 2005 11:02:36 -0000	1.4.8.2
--- g_numbox.c	21 Aug 2005 11:28:24 -0000	1.4.8.3
***************
*** 27,30 ****
--- 27,31 ----
  
  static void my_numbox_key(void *z, t_floatarg fkey);
+ static void my_numbox_draw_update(t_gobj *client, t_glist *glist);
  
  /* ------------ nmx gui-my number box ----------------------- */
***************
*** 40,44 ****
      {
          x->x_gui.x_fsf.x_change = 0;
!         (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE);
      }
  }
--- 41,45 ----
      {
          x->x_gui.x_fsf.x_change = 0;
!         sys_queuegui(x, x->x_gui.x_glist, my_numbox_draw_update);
      }
  }
***************
*** 46,50 ****
  static void my_numbox_tick_wait(t_my_numbox *x)
  {
!     (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE);
  }
  
--- 47,51 ----
  static void my_numbox_tick_wait(t_my_numbox *x)
  {
!     sys_queuegui(x, x->x_gui.x_glist, my_numbox_draw_update);
  }
  
***************
*** 128,133 ****
  }
  
! static void my_numbox_draw_update(t_my_numbox *x, t_glist *glist)
  {
      if (glist_isvisible(glist))
      {
--- 129,135 ----
  }
  
! static void my_numbox_draw_update(t_gobj *client, t_glist *glist)
  {
+     t_my_numbox *x = (t_my_numbox *)client;
      if (glist_isvisible(glist))
      {
***************
*** 316,320 ****
              clock_unset(x->x_clock_reset);
              x->x_buf[0] = 0;
!             (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE);
          }
          sys_vgui(".x%lx.c itemconfigure %lxBASE1 -outline #%6.6x\n",
--- 318,322 ----
              clock_unset(x->x_clock_reset);
              x->x_buf[0] = 0;
!             sys_queuegui(x, x->x_gui.x_glist, my_numbox_draw_update);
          }
          sys_vgui(".x%lx.c itemconfigure %lxBASE1 -outline #%6.6x\n",
***************
*** 343,347 ****
  {
      if(mode == IEM_GUI_DRAW_MODE_UPDATE)
!         my_numbox_draw_update(x, glist);
      else if(mode == IEM_GUI_DRAW_MODE_MOVE)
          my_numbox_draw_move(x, glist);
--- 345,349 ----
  {
      if(mode == IEM_GUI_DRAW_MODE_UPDATE)
!         sys_queuegui(x, glist, my_numbox_draw_update);
      else if(mode == IEM_GUI_DRAW_MODE_MOVE)
          my_numbox_draw_move(x, glist);
***************
*** 383,387 ****
          x->x_gui.x_fsf.x_change = 0;
          clock_unset(x->x_clock_reset);
!         (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE);
      }
      binbuf_addv(b, "ssiisiiffiisssiiiiiiifi", gensym("#X"),gensym("obj"),
--- 385,389 ----
          x->x_gui.x_fsf.x_change = 0;
          clock_unset(x->x_clock_reset);
!         sys_queuegui(x, x->x_gui.x_glist, my_numbox_draw_update);
      }
      binbuf_addv(b, "ssiisiiffiisssiiiiiiifi", gensym("#X"),gensym("obj"),
***************
*** 447,451 ****
          x->x_gui.x_fsf.x_change = 0;
          clock_unset(x->x_clock_reset);
!         (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE);
  
      }
--- 449,453 ----
          x->x_gui.x_fsf.x_change = 0;
          clock_unset(x->x_clock_reset);
!         sys_queuegui(x, x->x_gui.x_glist, my_numbox_draw_update);
  
      }
***************
*** 523,527 ****
          x->x_val -= k2*dy;
      my_numbox_clip(x);
!     (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE);
      my_numbox_bang(x);
      clock_unset(x->x_clock_reset);
--- 525,529 ----
          x->x_val -= k2*dy;
      my_numbox_clip(x);
!     sys_queuegui(x, x->x_gui.x_glist, my_numbox_draw_update);
      my_numbox_bang(x);
      clock_unset(x->x_clock_reset);
***************
*** 561,565 ****
              clock_unset(x->x_clock_reset);
              x->x_buf[0] = 0;
!             (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE);
          }
      }
--- 563,567 ----
              clock_unset(x->x_clock_reset);
              x->x_buf[0] = 0;
!             sys_queuegui(x, x->x_gui.x_glist, my_numbox_draw_update);
          }
      }
***************
*** 571,575 ****
      x->x_val = f;
      my_numbox_clip(x);
!     (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE);
  }
  
--- 573,577 ----
      x->x_val = f;
      my_numbox_clip(x);
!     sys_queuegui(x, x->x_gui.x_glist, my_numbox_draw_update);
  }
  
***************
*** 623,627 ****
                                (double)atom_getfloatarg(1, ac, av)))
      {
!         (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE);
          /*my_numbox_bang(x);*/
      }
--- 625,629 ----
                                (double)atom_getfloatarg(1, ac, av)))
      {
!         sys_queuegui(x, x->x_gui.x_glist, my_numbox_draw_update);
          /*my_numbox_bang(x);*/
      }
***************
*** 664,668 ****
      if(my_numbox_check_minmax(x, x->x_min, x->x_max))
      {
!         (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE);
          /*my_numbox_bang(x);*/
      }
--- 666,670 ----
      if(my_numbox_check_minmax(x, x->x_min, x->x_max))
      {
!         sys_queuegui(x, x->x_gui.x_glist, my_numbox_draw_update);
          /*my_numbox_bang(x);*/
      }
***************
*** 683,687 ****
      if(!sys_noloadbang && x->x_gui.x_isa.x_loadinit)
      {
!         (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE);
          my_numbox_bang(x);
      }
--- 685,689 ----
      if(!sys_noloadbang && x->x_gui.x_isa.x_loadinit)
      {
!         sys_queuegui(x, x->x_gui.x_glist, my_numbox_draw_update);
          my_numbox_bang(x);
      }
***************
*** 699,703 ****
          x->x_gui.x_fsf.x_change = 0;
          clock_unset(x->x_clock_reset);
!         (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE);
          return;
      }
--- 701,705 ----
          x->x_gui.x_fsf.x_change = 0;
          clock_unset(x->x_clock_reset);
!         sys_queuegui(x, x->x_gui.x_glist, my_numbox_draw_update);
          return;
      }
***************
*** 709,713 ****
              buf[0] = c;
              strcat(x->x_buf, buf);
!             (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE);
          }
      }
--- 711,715 ----
              buf[0] = c;
              strcat(x->x_buf, buf);
!             sys_queuegui(x, x->x_gui.x_glist, my_numbox_draw_update);
          }
      }
***************
*** 719,723 ****
              sl = 0;
          x->x_buf[sl] = 0;
!         (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE);
      }
      else if((c=='\n')||(c==13))
--- 721,725 ----
              sl = 0;
          x->x_buf[sl] = 0;
!         sys_queuegui(x, x->x_gui.x_glist, my_numbox_draw_update);
      }
      else if((c=='\n')||(c==13))
***************
*** 729,733 ****
          my_numbox_clip(x);
          my_numbox_bang(x);
!         (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE);
      }
      clock_delay(x->x_clock_reset, 3000);
--- 731,735 ----
          my_numbox_clip(x);
          my_numbox_bang(x);
!         sys_queuegui(x, x->x_gui.x_glist, my_numbox_draw_update);
      }
      clock_delay(x->x_clock_reset, 3000);





More information about the Pd-cvs mailing list