[PD-cvs] pd/src configure,1.1.1.4.2.5,1.1.1.4.2.6 configure.in,1.1.1.4.2.5,1.1.1.4.2.6 d_delay.c,1.1.1.3,1.1.1.3.2.1 d_global.c,1.1.1.2,1.1.1.2.8.1 d_osc.c,1.1.1.2,1.1.1.2.2.1 g_all_guis.c,1.1.1.4.2.2,1.1.1.4.2.3 g_all_guis.h,1.1.1.4.2.1,1.1.1.4.2.2 g_bang.c,1.1.1.3.2.1,1.1.1.3.2.2 g_hdial.c,1.1.1.4.2.1,1.1.1.4.2.2 g_hslider.c,1.1.1.3.2.1,1.1.1.3.2.2 g_mycanvas.c,1.1.1.3.2.1,1.1.1.3.2.2 g_numbox.c,1.1.1.4.2.1,1.1.1.4.2.2 g_rtext.c,1.1.1.2.2.5,1.1.1.2.2.6 g_scalar.c,1.1.1.2.2.1,1.1.1.2.2.2 g_toggle.c,1.1.1.3.2.1,1.1.1.3.2.2 g_vdial.c,1.1.1.4.2.1,1.1.1.4.2.2 g_vslider.c,1.1.1.3.2.1,1.1.1.3.2.2 g_vumeter.c,1.1.1.3.2.1,1.1.1.3.2.2 m_binbuf.c,1.1.1.4.2.3,1.1.1.4.2.4 m_pd.h,1.1.1.4.2.8,1.1.1.4.2.9 notes.txt,1.1.1.4.2.3,1.1.1.4.2.4 s_audio.c,1.1.1.1.2.5,1.1.1.1.2.6 s_audio_alsa.c,1.1.1.1.2.3,1.1.1.1.2.4 s_audio_oss.c,1.1.1.1.2.3,1.1.1.1.2.4 s_main.c,1.1.1.4.2.7,1.1.1.4.2.8 s_midi.c,1.1.1.1.2.2,1.1.1.1.2.3 s_midi_pm.c,1.1.1.1.2.2,1.1.1.1.2.3 x_midi.c,1.1.1.2,1.1.1.2.2.1

ggeiger at users.sourceforge.net ggeiger at users.sourceforge.net
Tue Nov 18 11:34:15 CET 2003


Update of /cvsroot/pure-data/pd/src
In directory sc8-pr-cvs1:/tmp/cvs-serv10649

Modified Files:
      Tag: devel_0_37
	configure configure.in d_delay.c d_global.c d_osc.c 
	g_all_guis.c g_all_guis.h g_bang.c g_hdial.c g_hslider.c 
	g_mycanvas.c g_numbox.c g_rtext.c g_scalar.c g_toggle.c 
	g_vdial.c g_vslider.c g_vumeter.c m_binbuf.c m_pd.h notes.txt 
	s_audio.c s_audio_alsa.c s_audio_oss.c s_main.c s_midi.c 
	s_midi_pm.c x_midi.c 
Log Message:
merge with millers version 0.37-1

Index: configure
===================================================================
RCS file: /cvsroot/pure-data/pd/src/configure,v
retrieving revision 1.1.1.4.2.5
retrieving revision 1.1.1.4.2.6
diff -C2 -d -r1.1.1.4.2.5 -r1.1.1.4.2.6
*** configure	6 Oct 2003 16:40:57 -0000	1.1.1.4.2.5
--- configure	18 Nov 2003 10:34:08 -0000	1.1.1.4.2.6
***************
*** 5892,5896 ****
      	 -DUSEAPI_OSS \
          -I../portaudio/pa_common \
!         -I../portaudio/pablio -I../portaudio/portmidi-macosx -Werror"
      SYSSRC="s_midi_oss.c s_audio_oss.c"
      if test x$alsa == "xyes";
--- 5892,5897 ----
      	 -DUSEAPI_OSS \
          -I../portaudio/pa_common \
!         -I../portaudio/pablio -I../portaudio/portmidi-macosx \
! 	-Werror -fno-strict-aliasing"
      SYSSRC="s_midi_oss.c s_audio_oss.c"
      if test x$alsa == "xyes";

Index: configure.in
===================================================================
RCS file: /cvsroot/pure-data/pd/src/configure.in,v
retrieving revision 1.1.1.4.2.5
retrieving revision 1.1.1.4.2.6
diff -C2 -d -r1.1.1.4.2.5 -r1.1.1.4.2.6
*** configure.in	6 Oct 2003 16:40:58 -0000	1.1.1.4.2.5
--- configure.in	18 Nov 2003 10:34:09 -0000	1.1.1.4.2.6
***************
*** 158,162 ****
      	 -DUSEAPI_OSS \
          -I../portaudio/pa_common \
!         -I../portaudio/pablio -I../portaudio/portmidi-macosx -Werror"
      SYSSRC="s_midi_oss.c s_audio_oss.c"
      if test x$alsa == "xyes";
--- 158,163 ----
      	 -DUSEAPI_OSS \
          -I../portaudio/pa_common \
!         -I../portaudio/pablio -I../portaudio/portmidi-macosx \
! 	-Werror -fno-strict-aliasing"
      SYSSRC="s_midi_oss.c s_audio_oss.c"
      if test x$alsa == "xyes";

Index: d_delay.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/d_delay.c,v
retrieving revision 1.1.1.3
retrieving revision 1.1.1.3.2.1
diff -C2 -d -r1.1.1.3 -r1.1.1.3.2.1
*** d_delay.c	9 May 2003 16:03:40 -0000	1.1.1.3
--- d_delay.c	18 Nov 2003 10:34:10 -0000	1.1.1.3.2.1
***************
*** 248,252 ****
      int nsamps = ctl->c_n;
      float limit = nsamps - n - 1;
!     float fn = n-4;
      float *vp = ctl->c_vec, *bp, *wp = vp + ctl->c_phase;
      float zerodel = x->x_zerodel;
--- 248,252 ----
      int nsamps = ctl->c_n;
      float limit = nsamps - n - 1;
!     float fn = n-1;
      float *vp = ctl->c_vec, *bp, *wp = vp + ctl->c_phase;
      float zerodel = x->x_zerodel;
***************
*** 262,266 ****
      	idelsamps = delsamps;
      	frac = delsamps - (float)idelsamps;
!     	bp = wp - (idelsamps + 3);
      	if (bp < vp + 4) bp += nsamps;
      	d = bp[-3];
--- 262,266 ----
      	idelsamps = delsamps;
      	frac = delsamps - (float)idelsamps;
!     	bp = wp - idelsamps;
      	if (bp < vp + 4) bp += nsamps;
      	d = bp[-3];

Index: d_global.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/d_global.c,v
retrieving revision 1.1.1.2
retrieving revision 1.1.1.2.8.1
diff -C2 -d -r1.1.1.2 -r1.1.1.2.8.1
*** d_global.c	25 Nov 2002 10:46:37 -0000	1.1.1.2
--- d_global.c	18 Nov 2003 10:34:10 -0000	1.1.1.2.8.1
***************
*** 41,49 ****
      while (n--)
      {
! 	float f = *in++;
!     	if (PD_BADFLOAT(f))
! 	    f = 0;
! 	
! 	*out++ = f;
      }
      return (w+4);
--- 41,47 ----
      while (n--)
      {
!     	*out = (PD_BADFLOAT(*in) ? 0 : *in);
! 	out++;
! 	in++;
      }
      return (w+4);
***************
*** 245,252 ****
      	while (n--)
  	{
! 	    float f = *in++;
!     	    if (PD_BADFLOAT(f))
! 	    	f = 0;
! 	    *out++ += f;
  	}
      }
--- 243,249 ----
      	while (n--)
  	{
!     	    *out = (PD_BADFLOAT(*in) ? 0 : *in);
! 	    out++;
! 	    in++;
  	}
      }

Index: d_osc.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/d_osc.c,v
retrieving revision 1.1.1.2
retrieving revision 1.1.1.2.2.1
diff -C2 -d -r1.1.1.2 -r1.1.1.2.2.1
*** d_osc.c	9 May 2003 16:03:41 -0000	1.1.1.2
--- d_osc.c	18 Nov 2003 10:34:10 -0000	1.1.1.2.2.1
***************
*** 449,452 ****
--- 449,456 ----
      	*out2++ = im = coefi * re2 + coefr * im;
      }
+     if (PD_BADFLOAT(re))
+ 	re = 0;
+     if (PD_BADFLOAT(im))
+ 	im = 0;
      c->c_re = re;
      c->c_im = im;

Index: g_all_guis.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/g_all_guis.c,v
retrieving revision 1.1.1.4.2.2
retrieving revision 1.1.1.4.2.3
diff -C2 -d -r1.1.1.4.2.2 -r1.1.1.4.2.3
*** g_all_guis.c	25 Sep 2003 20:09:45 -0000	1.1.1.4.2.2
--- g_all_guis.c	18 Nov 2003 10:34:10 -0000	1.1.1.4.2.3
***************
*** 174,458 ****
  }
  
! t_symbol *iemgui_unique2dollarzero(t_symbol *s, int unique_num, int and_unique_flag)
! {
!     if(and_unique_flag)
!     {
! 	int l=0;
! 	char *b, str[144];
! 
! 	sprintf(str, "%d", unique_num);
! 	while(str[l])
! 	{
! 	    if(s->s_name[l] != str[l])
! 		return(s);
! 	    else
! 		l++;
! 	}
! 	str[0] = '$';
! 	str[1] = '0';
! 	str[2] = 0;
! 	b = s->s_name + l;
! 	if(strlen(b) >= IEM_MAX_SYM_LEN)
! 	    strncat(str, b, IEM_MAX_SYM_LEN-1);
! 	else
! 	    strcat(str, b);
! 	return(gensym(str));
!     }
!     else
! 	return(s);
! }
! 
! t_symbol *iemgui_sym2dollararg(t_symbol *s, int nth_arg, int tail_len)
! {
!     if(nth_arg)
!     {
! 	char *b, str[144];
! 	int i=(int)strlen(s->s_name) - tail_len;
! 
! 	sprintf(str, "_%d", nth_arg);
! 	str[0] = '$';
! 	if(i < 0) i = 0;
! 	b = s->s_name + i;
! 	strcat(str, b);
! 	return(gensym(str));
!     }
!     else
! 	return(s);
! }
! 
! t_symbol *iemgui_dollarzero2unique(t_symbol *s, int unique_num)
! {
!     int l;
!     char *b, str[144];
! 
!     sprintf(str, "%d", unique_num);
!     l = (int)strlen(s->s_name);
!     b = s->s_name + 2;
!     if(l < 2)
! 	strcat(str, "shorty");
!     else if(l >= IEM_MAX_SYM_LEN)
! 	strncat(str, b, IEM_MAX_SYM_LEN-1);
!     else
! 	strcat(str, b);
!     return(gensym(str));
! }
! 
! t_symbol *iemgui_dollararg2sym(t_symbol *s, int nth_arg, int tail_len, int pargc, t_atom *pargv)
! {
!     int l=(int)strlen(s->s_name);
!     char *b, str[288]="0";
!     t_symbol *s2;
! 
!     if(pargc <= 0){}
!     else if(nth_arg < 1){}
!     else if(nth_arg > pargc){}
!     else if(IS_A_FLOAT(pargv, nth_arg-1))
! 	sprintf(str, "%d", (int)atom_getintarg(nth_arg-1, pargc, pargv));
!     else if(IS_A_SYMBOL(pargv, nth_arg-1))
!     {
! 	s2 = atom_getsymbolarg(nth_arg-1, pargc, pargv);
! 	strcpy(str, s2->s_name);
!     }
!     b = s->s_name + (l - tail_len);
!     if(l <= tail_len)
! 	strcat(str, "shorty");
!     else if(l >= IEM_MAX_SYM_LEN)
! 	strncat(str, b, IEM_MAX_SYM_LEN-1);
!     else
! 	strcat(str, b);
!     return(gensym(str));
! }
! 
! int iemgui_is_dollarzero(t_symbol *s)
  {
!     char *name=s->s_name;
! 
!     if((int)strlen(name) >= 2)
      {
! 	if((name[0] == '$') && (name[1] == '0') && ((name[2] < '0') || (name[2] > '9')))
! 	    return(1);
      }
-     return(0);
  }
  
! int iemgui_is_dollararg(t_symbol *s, int *tail_len)
  {
!     char *name=s->s_name;
! 
!     *tail_len = (int)strlen(name);
!     if(*tail_len >= 2)
      {
! 	if((name[0] == '$') && (name[1] >= '1') && (name[1] <= '9'))
! 	{
! 	    int i=2, arg=(int)(name[1]-'0');
! 
! 	    (*tail_len) -= 2;
! 	    while(name[i] && (name[i] >= '0') && (name[i] <= '9'))
! 	    {
! 		arg *= 10;
! 		arg += (int)(name[i]-'0');
! 		i++;
! 		(*tail_len)--;
! 	    }
! 	    return(arg);
! 	}
      }
!     return(0);
  }
  
! void iemgui_fetch_unique(t_iemgui *iemgui)
  {
!     if(!iemgui->x_unique_num)
      {
! 	pd_bind(&iemgui->x_glist->gl_gobj.g_pd, gensym("#X"));
! 	iemgui->x_unique_num = canvas_getdollarzero();
! 	pd_unbind(&iemgui->x_glist->gl_gobj.g_pd, gensym("#X"));
      }
  }
  
! void iemgui_fetch_parent_args(t_iemgui *iemgui, int *pargc, t_atom **pargv)
  {
!     t_canvas *canvas=glist_getcanvas(iemgui->x_glist);
! 
!     canvas_setcurrent(canvas);
!     canvas_getargs(pargc, pargv);
!     canvas_unsetcurrent(canvas);
  }
  
! void iemgui_verify_snd_ne_rcv(t_iemgui *iemgui)
  {
!     iemgui->x_fsf.x_put_in2out = 1;
!     if(iemgui->x_fsf.x_snd_able && iemgui->x_fsf.x_rcv_able)
      {
! 	if(!strcmp(iemgui->x_snd->s_name, iemgui->x_rcv->s_name))
! 	    iemgui->x_fsf.x_put_in2out = 0;
      }
  }
  
! void iemgui_all_unique2dollarzero(t_iemgui *iemgui, t_symbol **srlsym)
! {
!     iemgui_fetch_unique(iemgui);
!     srlsym[0] = iemgui_unique2dollarzero(srlsym[0], iemgui->x_unique_num,
! 					  iemgui->x_fsf.x_snd_is_unique);
!     srlsym[1] = iemgui_unique2dollarzero(srlsym[1], iemgui->x_unique_num,
! 					  iemgui->x_fsf.x_rcv_is_unique);
!     srlsym[2] = iemgui_unique2dollarzero(srlsym[2], iemgui->x_unique_num,
! 					  iemgui->x_fsf.x_lab_is_unique);
! }
! 
  void iemgui_all_sym2dollararg(t_iemgui *iemgui, t_symbol **srlsym)
  {
!     srlsym[0] = iemgui_sym2dollararg(srlsym[0], iemgui->x_isa.x_snd_is_arg_num,
! 				      iemgui->x_isa.x_snd_arg_tail_len);
!     srlsym[1] = iemgui_sym2dollararg(srlsym[1], iemgui->x_isa.x_rcv_is_arg_num,
! 				      iemgui->x_isa.x_rcv_arg_tail_len);
!     srlsym[2] = iemgui_sym2dollararg(srlsym[2], iemgui->x_fsf.x_lab_is_arg_num,
! 				      iemgui->x_fsf.x_lab_arg_tail_len);
! }
! 
! void iemgui_all_dollarzero2unique(t_iemgui *iemgui, t_symbol **srlsym)
! {
!     iemgui_fetch_unique(iemgui);
!     if(iemgui_is_dollarzero(srlsym[0]))
!     {
! 	iemgui->x_fsf.x_snd_is_unique = 1;
! 	iemgui->x_isa.x_snd_is_arg_num = 0;
! 	iemgui->x_isa.x_snd_arg_tail_len = 0;
! 	srlsym[0] = iemgui_dollarzero2unique(srlsym[0], iemgui->x_unique_num);
!     }
!     else
! 	iemgui->x_fsf.x_snd_is_unique = 0;
!     if(iemgui_is_dollarzero(srlsym[1]))
!     {
! 	iemgui->x_fsf.x_rcv_is_unique = 1;
! 	iemgui->x_isa.x_rcv_is_arg_num = 0;
! 	iemgui->x_isa.x_rcv_arg_tail_len = 0;
! 	srlsym[1] = iemgui_dollarzero2unique(srlsym[1], iemgui->x_unique_num);
!     }
!     else
! 	iemgui->x_fsf.x_rcv_is_unique = 0;
!     if(iemgui_is_dollarzero(srlsym[2]))
!     {
! 	iemgui->x_fsf.x_lab_is_unique = 1;
! 	iemgui->x_fsf.x_lab_is_arg_num = 0;
! 	iemgui->x_fsf.x_lab_arg_tail_len = 0;
! 	srlsym[2] = iemgui_dollarzero2unique(srlsym[2], iemgui->x_unique_num);
!     }
!     else
! 	iemgui->x_fsf.x_lab_is_unique = 0;
! }
! 
! void iemgui_all_dollararg2sym(t_iemgui *iemgui, t_symbol **srlsym)
! {
!     int pargc, tail_len, nth_arg;
!     t_atom *pargv;
! 
!     iemgui_fetch_parent_args(iemgui, &pargc, &pargv);
!     if(nth_arg = iemgui_is_dollararg(srlsym[0], &tail_len))
!     {
! 	iemgui->x_isa.x_snd_is_arg_num = nth_arg;
! 	iemgui->x_isa.x_snd_arg_tail_len = tail_len;
! 	iemgui->x_fsf.x_snd_is_unique = 0;
! 	srlsym[0] = iemgui_dollararg2sym(srlsym[0], nth_arg, tail_len, pargc, pargv);
!     }
!     else
!     {
! 	iemgui->x_isa.x_snd_is_arg_num = 0;
! 	iemgui->x_isa.x_snd_arg_tail_len = 0;
!     }
!     if(nth_arg = iemgui_is_dollararg(srlsym[1], &tail_len))
!     {
! 	iemgui->x_isa.x_rcv_is_arg_num = nth_arg;
! 	iemgui->x_isa.x_rcv_arg_tail_len = tail_len;
! 	iemgui->x_fsf.x_rcv_is_unique = 0;
! 	srlsym[1] = iemgui_dollararg2sym(srlsym[1], nth_arg, tail_len, pargc, pargv);
!     }
!     else
!     {
! 	iemgui->x_isa.x_rcv_is_arg_num = 0;
! 	iemgui->x_isa.x_rcv_arg_tail_len = 0;
!     }
!     if(nth_arg = iemgui_is_dollararg(srlsym[2], &tail_len))
!     {
! 	iemgui->x_fsf.x_lab_is_arg_num = nth_arg;
! 	iemgui->x_fsf.x_lab_arg_tail_len = tail_len;
! 	iemgui->x_fsf.x_lab_is_unique = 0;
! 	srlsym[2] = iemgui_dollararg2sym(srlsym[2], nth_arg, tail_len, pargc, pargv);
!     }
!     else
!     {
! 	iemgui->x_fsf.x_lab_is_arg_num = 0;
! 	iemgui->x_fsf.x_lab_arg_tail_len = 0;
!     }
  }
  
  void iemgui_first_dollararg2sym(t_iemgui *iemgui, t_symbol **srlsym)
  {
!     int pargc=0, tail_len, nth_arg;
!     t_atom pargv;
!     char *name;
! 
!     SETFLOAT(&pargv, 0.0);
!     name = srlsym[0]->s_name;
!     if(iemgui->x_isa.x_snd_is_arg_num && (name[0] == '$')
!        && (name[1] >= '1') && (name[1] <= '9'))
!     {
! 	srlsym[0] = iemgui_dollararg2sym(srlsym[0], iemgui->x_isa.x_snd_is_arg_num,
! 					  iemgui->x_isa.x_snd_arg_tail_len, pargc, &pargv);
!     }
!     name = srlsym[1]->s_name;
!     if(iemgui->x_isa.x_rcv_is_arg_num && (name[0] == '$')
!        && (name[1] >= '1') && (name[1] <= '9'))
!     {
! 	srlsym[1] = iemgui_dollararg2sym(srlsym[1], iemgui->x_isa.x_rcv_is_arg_num,
! 					  iemgui->x_isa.x_rcv_arg_tail_len, pargc, &pargv);
!     }
!     name = srlsym[2]->s_name;
!     if(iemgui->x_fsf.x_lab_is_arg_num && (name[0] == '$')
!        && (name[1] >= '1') && (name[1] <= '9'))
!     {
! 	srlsym[2] = iemgui_dollararg2sym(srlsym[2], iemgui->x_fsf.x_lab_is_arg_num,
! 					  iemgui->x_fsf.x_lab_arg_tail_len, pargc, &pargv);
!     }
  }
  
--- 174,261 ----
  }
  
! void iemgui_verify_snd_ne_rcv(t_iemgui *iemgui)
  {
!     iemgui->x_fsf.x_put_in2out = 1;
!     if(iemgui->x_fsf.x_snd_able && iemgui->x_fsf.x_rcv_able)
      {
! 	if(!strcmp(iemgui->x_snd->s_name, iemgui->x_rcv->s_name))
! 	    iemgui->x_fsf.x_put_in2out = 0;
      }
  }
  
! t_symbol *iemgui_new_dogetname(t_iemgui *iemgui, int indx, t_atom *argv)
  {
!     if (IS_A_SYMBOL(argv, indx))
! 	return (atom_getsymbolarg(indx, 100000, argv));
!     else if (IS_A_FLOAT(argv, indx))
      {
!     	char str[80];
! 	sprintf(str, "%d", (int)atom_getintarg(indx, 100000, argv));
! 	return (gensym(str));
      }
!     else return (gensym("empty"));
  }
  
! void iemgui_new_getnames(t_iemgui *iemgui, int indx, t_atom *argv)
  {
!     if (argv)
      {
! 	iemgui->x_snd = iemgui_new_dogetname(iemgui, indx, argv);
! 	iemgui->x_rcv = iemgui_new_dogetname(iemgui, indx+1, argv);
! 	iemgui->x_lab = iemgui_new_dogetname(iemgui, indx+2, argv);
      }
+     else iemgui->x_snd = iemgui->x_rcv = iemgui->x_lab = gensym("empty");
+     iemgui->x_snd_unexpanded = iemgui->x_rcv_unexpanded =
+     	iemgui->x_lab_unexpanded = 0;
+     iemgui->x_binbufindex = indx;
+     iemgui->x_labelbindex = indx + 2;
  }
  
!     /* convert symbols in "$" form to the expanded symbols */
! void iemgui_all_dollararg2sym(t_iemgui *iemgui, t_symbol **srlsym)
  {
!     	/* save unexpanded ones for later */
!     iemgui->x_snd_unexpanded = srlsym[0];
!     iemgui->x_rcv_unexpanded = srlsym[1];
!     iemgui->x_lab_unexpanded = srlsym[2];
!     srlsym[0] = canvas_realizedollar(iemgui->x_glist, srlsym[0]);
!     srlsym[1] = canvas_realizedollar(iemgui->x_glist, srlsym[1]);
!     srlsym[2] = canvas_realizedollar(iemgui->x_glist, srlsym[2]);
  }
  
!     /* initialize a single symbol in unexpanded form.  We reach into the
!     binbuf to grab them; if there's nothing there, set it to "empty". */
! static void iemgui_init_sym2dollararg(t_iemgui *iemgui, t_symbol **symp,
!     int indx)
  {
!     if (!*symp)
      {
!     	t_binbuf *b = iemgui->x_obj.ob_binbuf;
!     	char buf[80];
! 	if (binbuf_getnatom(b) <= indx)
! 	    strcpy(buf, "empty");
! 	else atom_string(binbuf_getvec(b) + indx, buf, 80);
! 	*symp = gensym(buf);
      }
  }
  
!     /* get the unexpanded versions of the symbols; initialize them if
!     necessary. */
  void iemgui_all_sym2dollararg(t_iemgui *iemgui, t_symbol **srlsym)
  {
!     iemgui_init_sym2dollararg(iemgui, &iemgui->x_snd_unexpanded,
!     	iemgui->x_binbufindex+1);
!     iemgui_init_sym2dollararg(iemgui, &iemgui->x_rcv_unexpanded,
!     	iemgui->x_binbufindex+2);
!     iemgui_init_sym2dollararg(iemgui, &iemgui->x_lab_unexpanded,
!     	iemgui->x_labelbindex);
!     srlsym[0] = iemgui->x_snd_unexpanded;
!     srlsym[1] = iemgui->x_rcv_unexpanded;
!     srlsym[2] = iemgui->x_lab_unexpanded;
  }
  
  void iemgui_first_dollararg2sym(t_iemgui *iemgui, t_symbol **srlsym)
  {
!     /* delete this function */
  }
  
***************
*** 543,571 ****
  
      if(!strcmp(s->s_name, "empty")) sndable = 0;
-     iemgui_fetch_unique(iemgui);
      snd = iemgui_raute2dollar(s);
!     if(iemgui_is_dollarzero(snd))
!     {
! 	iemgui->x_fsf.x_snd_is_unique = 1;
! 	iemgui->x_isa.x_snd_is_arg_num = 0;
! 	iemgui->x_isa.x_snd_arg_tail_len = 0;
! 	snd = iemgui_dollarzero2unique(snd, iemgui->x_unique_num);
!     }
!     else
! 	iemgui->x_fsf.x_snd_is_unique = 0;
!     iemgui_fetch_parent_args(iemgui, &pargc, &pargv);
!     if(nth_arg = iemgui_is_dollararg(snd, &tail_len))
!     {
! 	iemgui->x_isa.x_snd_is_arg_num = nth_arg;
! 	iemgui->x_isa.x_snd_arg_tail_len = tail_len;
! 	iemgui->x_fsf.x_snd_is_unique = 0;
! 	snd = iemgui_dollararg2sym(snd, nth_arg, tail_len, pargc, pargv);
!     }
!     else
!     {
! 	iemgui->x_isa.x_snd_is_arg_num = 0;
! 	iemgui->x_isa.x_snd_arg_tail_len = 0;
!     }
!     iemgui->x_snd = snd;
      iemgui->x_fsf.x_snd_able = sndable;
      iemgui_verify_snd_ne_rcv(iemgui);
--- 346,355 ----
  
      if(!strcmp(s->s_name, "empty")) sndable = 0;
      snd = iemgui_raute2dollar(s);
!     iemgui->x_snd_unexpanded = snd;
!     iemgui->x_snd = snd = canvas_realizedollar(iemgui->x_glist, snd);
!         post("send: before %s, after %s", iemgui->x_snd_unexpanded->s_name,
!     	    iemgui->x_snd->s_name);
! 
      iemgui->x_fsf.x_snd_able = sndable;
      iemgui_verify_snd_ne_rcv(iemgui);
***************
*** 586,612 ****
      if(!strcmp(s->s_name, "empty")) rcvable = 0;
      rcv = iemgui_raute2dollar(s);
!     iemgui_fetch_unique(iemgui);
!     if(iemgui_is_dollarzero(rcv))
!     {
! 	iemgui->x_fsf.x_rcv_is_unique = 1;
! 	iemgui->x_isa.x_rcv_is_arg_num = 0;
! 	iemgui->x_isa.x_rcv_arg_tail_len = 0;
! 	rcv = iemgui_dollarzero2unique(rcv, iemgui->x_unique_num);
!     }
!     else
! 	iemgui->x_fsf.x_rcv_is_unique = 0;
!     iemgui_fetch_parent_args(iemgui, &pargc, &pargv);
!     if(nth_arg = iemgui_is_dollararg(rcv, &tail_len))
!     {
! 	iemgui->x_isa.x_rcv_is_arg_num = nth_arg;
! 	iemgui->x_isa.x_rcv_arg_tail_len = tail_len;
! 	iemgui->x_fsf.x_rcv_is_unique = 0;
! 	rcv = iemgui_dollararg2sym(rcv, nth_arg, tail_len, pargc, pargv);
!     }
!     else
!     {
! 	iemgui->x_isa.x_rcv_is_arg_num = 0;
! 	iemgui->x_isa.x_rcv_arg_tail_len = 0;
!     }
      if(rcvable)
      {
--- 370,375 ----
      if(!strcmp(s->s_name, "empty")) rcvable = 0;
      rcv = iemgui_raute2dollar(s);
!     iemgui->x_rcv_unexpanded = rcv;
!     iemgui->x_rcv = rcv = canvas_realizedollar(iemgui->x_glist, rcv);
      if(rcvable)
      {
***************
*** 636,665 ****
  
      lab = iemgui_raute2dollar(s);
!     iemgui_fetch_unique(iemgui);
! 
!     if(iemgui_is_dollarzero(lab))
!     {
! 	iemgui->x_fsf.x_lab_is_unique = 1;
! 	iemgui->x_fsf.x_lab_is_arg_num = 0;
! 	iemgui->x_fsf.x_lab_arg_tail_len = 0;
! 	lab = iemgui_dollarzero2unique(lab, iemgui->x_unique_num);
!     }
!     else
! 	iemgui->x_fsf.x_lab_is_unique = 0;
! 
!     iemgui_fetch_parent_args(iemgui, &pargc, &pargv);
!     if(nth_arg = iemgui_is_dollararg(lab, &tail_len))
!     {
! 	iemgui->x_fsf.x_lab_is_arg_num = nth_arg;
! 	iemgui->x_fsf.x_lab_arg_tail_len = tail_len;
! 	iemgui->x_fsf.x_lab_is_unique = 0;
! 	lab = iemgui_dollararg2sym(lab, nth_arg, tail_len, pargc, pargv);
!     }
!     else
!     {
! 	iemgui->x_fsf.x_lab_is_arg_num = 0;
! 	iemgui->x_fsf.x_lab_arg_tail_len = 0;
!     }
!     iemgui->x_lab = lab;
      if(glist_isvisible(iemgui->x_glist))
  	sys_vgui(".x%x.c itemconfigure %xLABEL -text {%s} \n",
--- 399,404 ----
  
      lab = iemgui_raute2dollar(s);
!     iemgui->x_lab_unexpanded = lab;
!     iemgui->x_lab = lab = canvas_realizedollar(iemgui->x_glist, lab);
      if(glist_isvisible(iemgui->x_glist))
  	sys_vgui(".x%x.c itemconfigure %xLABEL -text {%s} \n",
***************
*** 783,787 ****
      srl[1] = iemgui->x_rcv;
      srl[2] = iemgui->x_lab;
-     iemgui_all_unique2dollarzero(iemgui, srl);
      iemgui_all_sym2dollararg(iemgui, srl);
      iemgui_all_col2save(iemgui, bflcol);
--- 522,525 ----
***************
*** 793,797 ****
      srl[1] = iemgui->x_rcv;
      srl[2] = iemgui->x_lab;
-     iemgui_all_unique2dollarzero(iemgui, srl);
      iemgui_all_sym2dollararg(iemgui, srl);
      iemgui_all_dollar2raute(srl);
--- 531,534 ----
***************
*** 841,845 ****
      if(!strcmp(srl[1]->s_name, "empty")) rcvable = 0;
      iemgui_all_raute2dollar(srl);
-     iemgui_all_dollarzero2unique(iemgui, srl);
      iemgui_all_dollararg2sym(iemgui, srl);
      if(rcvable)
--- 578,581 ----
***************
*** 886,898 ****
      memset(symargp, 0, sizeof(*symargp));
      symargp->x_loadinit = (n >>  0);
-     symargp->x_rcv_arg_tail_len = (n >>  1);
-     symargp->x_snd_arg_tail_len = (n >>  7);
-     symargp->x_rcv_is_arg_num = (n >> 13);
-     symargp->x_snd_is_arg_num = (n >> 19);
      symargp->x_scale = (n >>  20);
!     symargp->x_flashed = (n >> 21);
!     symargp->x_locked = (n >> 22);
!     symargp->x_reverse = (n >> 23);
!     symargp->dummy = (n >> 24);
  }
  
--- 622,630 ----
      memset(symargp, 0, sizeof(*symargp));
      symargp->x_loadinit = (n >>  0);
      symargp->x_scale = (n >>  20);
!     symargp->x_flashed = 0;
!     symargp->x_locked = 0;
!     symargp->x_reverse = 0;
!     symargp->dummy = 0;
  }
  
***************
*** 900,914 ****
  {
      return (
! 	((symargp->x_loadinit <<  0) |
! 	(symargp->x_rcv_arg_tail_len <<  1) |
! 	(symargp->x_snd_arg_tail_len <<  7) |
! 	(symargp->x_rcv_is_arg_num << 13) |
! 	(symargp->x_snd_is_arg_num << 19) |
! 	(symargp->x_scale <<  20) |
! 	(symargp->x_flashed << 21) |
! 	(symargp->x_locked << 22) |
! 	(symargp->x_reverse << 23) |
! 	(symargp->dummy << 24)) & IEM_INIT_ARGS_ALL
!     );
  }
  
--- 632,637 ----
  {
      return (
! 	(((symargp->x_loadinit & 1) <<  0) |
! 	((symargp->x_scale & 1) <<  20)));
  }
  
***************
*** 917,958 ****
      memset(fstylep, 0, sizeof(*fstylep));
      fstylep->x_font_style = (n >> 0);
!     fstylep->x_rcv_able = (n >> 6);
!     fstylep->x_snd_able = (n >> 7);
!     fstylep->x_lab_is_unique = (n >> 8);
!     fstylep->x_rcv_is_unique = (n >> 9);
!     fstylep->x_snd_is_unique = (n >> 10);
!     fstylep->x_lab_arg_tail_len = (n >> 11);
!     fstylep->x_lab_is_arg_num = (n >> 17);
!     fstylep->x_shiftdown = (n >> 23);
!     fstylep->x_selected = (n >> 24);
!     fstylep->x_finemoved = (n >> 25);
!     fstylep->x_put_in2out = (n >> 26);
!     fstylep->x_change = (n >> 27);
!     fstylep->x_thick = (n >> 28);
!     fstylep->x_lin0_log1 = (n >> 29);
!     fstylep->x_steady = (n >> 30);
!     fstylep->dummy = (n >> 31);
  }
  
  int iem_fstyletoint(t_iem_fstyle_flags *fstylep)
  {
!     return (
! 	((fstylep->x_font_style << 0) |
! 	(fstylep->x_rcv_able << 6) |
! 	(fstylep->x_snd_able << 7) |
! 	(fstylep->x_lab_is_unique << 8) |
! 	(fstylep->x_rcv_is_unique << 9) |
! 	(fstylep->x_snd_is_unique << 10) |
! 	(fstylep->x_lab_arg_tail_len << 11) |
! 	(fstylep->x_lab_is_arg_num << 17) |
! 	(fstylep->x_shiftdown << 23) |
! 	(fstylep->x_selected << 24) |
! 	(fstylep->x_finemoved << 25) |
! 	(fstylep->x_put_in2out << 26) |
! 	(fstylep->x_change << 27) |
! 	(fstylep->x_thick << 28) |
! 	(fstylep->x_lin0_log1 << 29) |
! 	(fstylep->x_steady << 30) |
! 	(fstylep->dummy << 31)) & IEM_FSTYLE_FLAGS_ALL
!     );
  }
--- 640,656 ----
      memset(fstylep, 0, sizeof(*fstylep));
      fstylep->x_font_style = (n >> 0);
!     fstylep->x_shiftdown = 0;
!     fstylep->x_selected = 0;
!     fstylep->x_finemoved = 0;
!     fstylep->x_put_in2out = 0;
!     fstylep->x_change = 0;
!     fstylep->x_thick = 0;
!     fstylep->x_lin0_log1 = 0;
!     fstylep->x_steady = 0;
!     fstylep->dummy = 0;
  }
  
  int iem_fstyletoint(t_iem_fstyle_flags *fstylep)
  {
!     return ((fstylep->x_font_style << 0) & 63);
  }

Index: g_all_guis.h
===================================================================
RCS file: /cvsroot/pure-data/pd/src/g_all_guis.h,v
retrieving revision 1.1.1.4.2.1
retrieving revision 1.1.1.4.2.2
diff -C2 -d -r1.1.1.4.2.1 -r1.1.1.4.2.2
*** g_all_guis.h	12 Sep 2003 20:55:31 -0000	1.1.1.4.2.1
--- g_all_guis.h	18 Nov 2003 10:34:10 -0000	1.1.1.4.2.2
***************
*** 152,159 ****
      int                x_bcol;
      int                x_lcol;
!     int                x_unique_num;
!     t_symbol           *x_snd;
!     t_symbol           *x_rcv;
!     t_symbol           *x_lab;
  } t_iemgui;
  
--- 152,163 ----
      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;
  
***************
*** 290,293 ****
--- 294,299 ----
  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 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);

Index: g_bang.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/g_bang.c,v
retrieving revision 1.1.1.3.2.1
retrieving revision 1.1.1.3.2.2
diff -C2 -d -r1.1.1.3.2.1 -r1.1.1.3.2.2
*** g_bang.c	12 Sep 2003 20:55:31 -0000	1.1.1.3.2.1
--- g_bang.c	18 Nov 2003 10:34:10 -0000	1.1.1.3.2.2
***************
*** 433,437 ****
      t_bng *x = (t_bng *)pd_new(bng_class);
      int bflcol[]={-262144, -1, -1};
-     t_symbol *srl[3];
      int a=IEM_GUI_DEFAULTSIZE;
      int ldx=0, ldy=-6;
--- 433,436 ----
***************
*** 443,449 ****
      iem_inttosymargs(&x->x_gui.x_isa, 0);
      iem_inttofstyle(&x->x_gui.x_fsf, 0);
-     srl[0] = gensym("empty");
-     srl[1] = gensym("empty");
-     srl[2] = gensym("empty");
  
      if((argc == 14)&&IS_A_FLOAT(argv,0)
--- 442,445 ----
***************
*** 462,486 ****
  	ftbreak = (int)atom_getintarg(2, argc, argv);
  	iem_inttosymargs(&x->x_gui.x_isa, atom_getintarg(3, argc, argv));
! 	if(IS_A_SYMBOL(argv,4))
! 	    srl[0] = atom_getsymbolarg(4, argc, argv);
! 	else if(IS_A_FLOAT(argv,4))
! 	{
! 	    sprintf(str, "%d", (int)atom_getintarg(4, argc, argv));
! 	    srl[0] = gensym(str);
! 	}
! 	if(IS_A_SYMBOL(argv,5))
! 	    srl[1] = atom_getsymbolarg(5, argc, argv);
! 	else if(IS_A_FLOAT(argv,5))
! 	{
! 	    sprintf(str, "%d", (int)atom_getintarg(5, argc, argv));
! 	    srl[1] = gensym(str);
! 	}
! 	if(IS_A_SYMBOL(argv,6))
! 	    srl[2] = atom_getsymbolarg(6, argc, argv);
! 	else if(IS_A_FLOAT(argv,6))
! 	{
! 	    sprintf(str, "%d", (int)atom_getintarg(6, argc, argv));
! 	    srl[2] = gensym(str);
! 	}
  	ldx = (int)atom_getintarg(7, argc, argv);
  	ldy = (int)atom_getintarg(8, argc, argv);
--- 458,462 ----
  	ftbreak = (int)atom_getintarg(2, argc, argv);
  	iem_inttosymargs(&x->x_gui.x_isa, atom_getintarg(3, argc, argv));
! 	iemgui_new_getnames(&x->x_gui, 4, argv);
  	ldx = (int)atom_getintarg(7, argc, argv);
  	ldy = (int)atom_getintarg(8, argc, argv);
***************
*** 491,494 ****
--- 467,471 ----
  	bflcol[2] = (int)atom_getintarg(13, argc, argv);
      }
+     else iemgui_new_getnames(&x->x_gui, 4, 0);
  
      x->x_gui.x_draw = (t_iemfunptr)bng_draw;
***************
*** 498,514 ****
      x->x_flashed = 0;
      x->x_gui.x_glist = (t_glist *)canvas_getcurrent();
!     if(!strcmp(srl[0]->s_name, "empty")) x->x_gui.x_fsf.x_snd_able = 0;
!     if(!strcmp(srl[1]->s_name, "empty")) x->x_gui.x_fsf.x_rcv_able = 0;
!     x->x_gui.x_unique_num = 0;
      if(x->x_gui.x_fsf.x_font_style == 1) strcpy(x->x_gui.x_font, "helvetica");
      else if(x->x_gui.x_fsf.x_font_style == 2) strcpy(x->x_gui.x_font, "times");
      else { x->x_gui.x_fsf.x_font_style = 0;
  	strcpy(x->x_gui.x_font, "courier"); }
-     iemgui_first_dollararg2sym(&x->x_gui, srl);
  
!     if(x->x_gui.x_fsf.x_rcv_able) pd_bind(&x->x_gui.x_obj.ob_pd, srl[1]);
!     x->x_gui.x_snd = srl[0];
!     x->x_gui.x_rcv = srl[1];
!     x->x_gui.x_lab = srl[2];
      x->x_gui.x_ldx = ldx;
      x->x_gui.x_ldy = ldy;
--- 475,489 ----
      x->x_flashed = 0;
      x->x_gui.x_glist = (t_glist *)canvas_getcurrent();
!     if (!strcmp(x->x_gui.x_snd->s_name, "empty"))
!     	x->x_gui.x_fsf.x_snd_able = 0;
!     if (!strcmp(x->x_gui.x_rcv->s_name, "empty"))
!     	x->x_gui.x_fsf.x_rcv_able = 0;
      if(x->x_gui.x_fsf.x_font_style == 1) strcpy(x->x_gui.x_font, "helvetica");
      else if(x->x_gui.x_fsf.x_font_style == 2) strcpy(x->x_gui.x_font, "times");
      else { x->x_gui.x_fsf.x_font_style = 0;
  	strcpy(x->x_gui.x_font, "courier"); }
  
!     if (x->x_gui.x_fsf.x_rcv_able)
!     	pd_bind(&x->x_gui.x_obj.ob_pd, x->x_gui.x_rcv);
      x->x_gui.x_ldx = ldx;
      x->x_gui.x_ldy = ldy;

Index: g_hdial.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/g_hdial.c,v
retrieving revision 1.1.1.4.2.1
retrieving revision 1.1.1.4.2.2
diff -C2 -d -r1.1.1.4.2.1 -r1.1.1.4.2.2
*** g_hdial.c	12 Sep 2003 20:55:31 -0000	1.1.1.4.2.1
--- g_hdial.c	18 Nov 2003 10:34:10 -0000	1.1.1.4.2.2
***************
*** 540,544 ****
      t_hradio *x = (t_hradio *)pd_new(old? hradio_old_class : hradio_class);
      int bflcol[]={-262144, -1, -1};
-     t_symbol *srl[3];
      int a=IEM_GUI_DEFAULTSIZE, on=0, f=0;
      int ldx=0, ldy=-6, chg=1, num=8;
--- 540,543 ----
***************
*** 549,555 ****
      iem_inttosymargs(&x->x_gui.x_isa, 0);
      iem_inttofstyle(&x->x_gui.x_fsf, 0);
-     srl[0] = gensym("empty");
-     srl[1] = gensym("empty");
-     srl[2] = gensym("empty");
  
      if((argc == 15)&&IS_A_FLOAT(argv,0)&&IS_A_FLOAT(argv,1)&&IS_A_FLOAT(argv,2)
--- 548,551 ----
***************
*** 566,590 ****
  	iem_inttosymargs(&x->x_gui.x_isa, atom_getintarg(2, argc, argv));
  	num = (int)atom_getintarg(3, argc, argv);
! 	if(IS_A_SYMBOL(argv,4))
! 	    srl[0] = atom_getsymbolarg(4, argc, argv);
! 	else if(IS_A_FLOAT(argv,4))
! 	{
! 	    sprintf(str, "%d", (int)atom_getintarg(4, argc, argv));
! 	    srl[0] = gensym(str);
! 	}
! 	if(IS_A_SYMBOL(argv,5))
! 	    srl[1] = atom_getsymbolarg(5, argc, argv);
! 	else if(IS_A_FLOAT(argv,5))
! 	{
! 	    sprintf(str, "%d", (int)atom_getintarg(5, argc, argv));
! 	    srl[1] = gensym(str);
! 	}
! 	if(IS_A_SYMBOL(argv,6))
! 	    srl[2] = atom_getsymbolarg(6, argc, argv);
! 	else if(IS_A_FLOAT(argv,6))
! 	{
! 	    sprintf(str, "%d", (int)atom_getintarg(6, argc, argv));
! 	    srl[2] = gensym(str);
! 	}
  	ldx = (int)atom_getintarg(7, argc, argv);
  	ldy = (int)atom_getintarg(8, argc, argv);
--- 562,566 ----
  	iem_inttosymargs(&x->x_gui.x_isa, atom_getintarg(2, argc, argv));
  	num = (int)atom_getintarg(3, argc, argv);
! 	iemgui_new_getnames(&x->x_gui, 4, argv);
  	ldx = (int)atom_getintarg(7, argc, argv);
  	ldy = (int)atom_getintarg(8, argc, argv);
***************
*** 596,610 ****
  	on = (int)atom_getintarg(14, argc, argv);
      }
      x->x_gui.x_draw = (t_iemfunptr)hradio_draw;
      x->x_gui.x_fsf.x_snd_able = 1;
      x->x_gui.x_fsf.x_rcv_able = 1;
      x->x_gui.x_glist = (t_glist *)canvas_getcurrent();
!     if(!strcmp(srl[0]->s_name, "empty")) x->x_gui.x_fsf.x_snd_able = 0;
!     if(!strcmp(srl[1]->s_name, "empty")) x->x_gui.x_fsf.x_rcv_able = 0;
      if(x->x_gui.x_fsf.x_font_style == 1) strcpy(x->x_gui.x_font, "helvetica");
      else if(x->x_gui.x_fsf.x_font_style == 2) strcpy(x->x_gui.x_font, "times");
      else { x->x_gui.x_fsf.x_font_style = 0;
  	strcpy(x->x_gui.x_font, "courier"); }
-     x->x_gui.x_unique_num = 0;
      if(num < 1)
  	num = 1;
--- 572,588 ----
  	on = (int)atom_getintarg(14, argc, argv);
      }
+     else iemgui_new_getnames(&x->x_gui, 4, 0);
      x->x_gui.x_draw = (t_iemfunptr)hradio_draw;
      x->x_gui.x_fsf.x_snd_able = 1;
      x->x_gui.x_fsf.x_rcv_able = 1;
      x->x_gui.x_glist = (t_glist *)canvas_getcurrent();
!     if (!strcmp(x->x_gui.x_snd->s_name, "empty"))
!     	x->x_gui.x_fsf.x_snd_able = 0;
!     if (!strcmp(x->x_gui.x_rcv->s_name, "empty"))
!     	x->x_gui.x_fsf.x_rcv_able = 0;
      if(x->x_gui.x_fsf.x_font_style == 1) strcpy(x->x_gui.x_font, "helvetica");
      else if(x->x_gui.x_fsf.x_font_style == 2) strcpy(x->x_gui.x_font, "times");
      else { x->x_gui.x_fsf.x_font_style = 0;
  	strcpy(x->x_gui.x_font, "courier"); }
      if(num < 1)
  	num = 1;
***************
*** 622,630 ****
      x->x_on_old = x->x_on;
      x->x_change = (chg==0)?0:1;
!     iemgui_first_dollararg2sym(&x->x_gui, srl);
!     if(x->x_gui.x_fsf.x_rcv_able) pd_bind(&x->x_gui.x_obj.ob_pd, srl[1]);
!     x->x_gui.x_snd = srl[0];
!     x->x_gui.x_rcv = srl[1];
!     x->x_gui.x_lab = srl[2];
      x->x_gui.x_ldx = ldx;
      x->x_gui.x_ldy = ldy;
--- 600,605 ----
      x->x_on_old = x->x_on;
      x->x_change = (chg==0)?0:1;
!     if (x->x_gui.x_fsf.x_rcv_able)
!     	pd_bind(&x->x_gui.x_obj.ob_pd, x->x_gui.x_rcv);
      x->x_gui.x_ldx = ldx;
      x->x_gui.x_ldy = ldy;

Index: g_hslider.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/g_hslider.c,v
retrieving revision 1.1.1.3.2.1
retrieving revision 1.1.1.3.2.2
diff -C2 -d -r1.1.1.3.2.1 -r1.1.1.3.2.2
*** g_hslider.c	12 Sep 2003 20:55:31 -0000	1.1.1.3.2.1
--- g_hslider.c	18 Nov 2003 10:34:10 -0000	1.1.1.3.2.2
***************
*** 525,529 ****
      t_hslider *x = (t_hslider *)pd_new(hslider_class);
      int bflcol[]={-262144, -1, -1};
-     t_symbol *srl[3];
      int w=IEM_SL_DEFAULTSIZE, h=IEM_GUI_DEFAULTSIZE;
      int lilo=0, ldx=-2, ldy=-6, f=0, v=0, steady=1;
--- 525,528 ----
***************
*** 534,540 ****
      iem_inttosymargs(&x->x_gui.x_isa, 0);
      iem_inttofstyle(&x->x_gui.x_fsf, 0);
-     srl[0] = gensym("empty");
-     srl[1] = gensym("empty");
-     srl[2] = gensym("empty");
  
      if(((argc == 17)||(argc == 18))&&IS_A_FLOAT(argv,0)&&IS_A_FLOAT(argv,1)
--- 533,536 ----
***************
*** 554,578 ****
  	lilo = (int)atom_getintarg(4, argc, argv);
  	iem_inttosymargs(&x->x_gui.x_isa, atom_getintarg(5, argc, argv));
! 	if(IS_A_SYMBOL(argv,6))
! 	    srl[0] = atom_getsymbolarg(6, argc, argv);
! 	else if(IS_A_FLOAT(argv,6))
! 	{
! 	    sprintf(str, "%d", (int)atom_getintarg(6, argc, argv));
! 	    srl[0] = gensym(str);
! 	}
! 	if(IS_A_SYMBOL(argv,7))
! 	    srl[1] = atom_getsymbolarg(7, argc, argv);
! 	else if(IS_A_FLOAT(argv,7))
! 	{
! 	    sprintf(str, "%d", (int)atom_getintarg(7, argc, argv));
! 	    srl[1] = gensym(str);
! 	}
! 	if(IS_A_SYMBOL(argv,8))
! 	    srl[2] = atom_getsymbolarg(8, argc, argv);
! 	else if(IS_A_FLOAT(argv,8))
! 	{
! 	    sprintf(str, "%d", (int)atom_getintarg(8, argc, argv));
! 	    srl[2] = gensym(str);
! 	}
  	ldx = (int)atom_getintarg(9, argc, argv);
  	ldy = (int)atom_getintarg(10, argc, argv);
--- 550,554 ----
  	lilo = (int)atom_getintarg(4, argc, argv);
  	iem_inttosymargs(&x->x_gui.x_isa, atom_getintarg(5, argc, argv));
! 	iemgui_new_getnames(&x->x_gui, 6, argv);
  	ldx = (int)atom_getintarg(9, argc, argv);
  	ldy = (int)atom_getintarg(10, argc, argv);
***************
*** 584,587 ****
--- 560,564 ----
  	v = (int)atom_getintarg(16, argc, argv);
      }
+     else iemgui_new_getnames(&x->x_gui, 6, 0);
      if((argc == 18)&&IS_A_FLOAT(argv,17))
  	steady = (int)atom_getintarg(17, argc, argv);
***************
*** 602,617 ****
      if(steady != 0) steady = 1;
      x->x_steady = steady;
!     if(!strcmp(srl[0]->s_name, "empty")) x->x_gui.x_fsf.x_snd_able = 0;
!     if(!strcmp(srl[1]->s_name, "empty")) x->x_gui.x_fsf.x_rcv_able = 0;
!     x->x_gui.x_unique_num = 0;
      if(x->x_gui.x_fsf.x_font_style == 1) strcpy(x->x_gui.x_font, "helvetica");
      else if(x->x_gui.x_fsf.x_font_style == 2) strcpy(x->x_gui.x_font, "times");
      else { x->x_gui.x_fsf.x_font_style = 0;
  	strcpy(x->x_gui.x_font, "courier"); }
!     iemgui_first_dollararg2sym(&x->x_gui, srl);
!     if(x->x_gui.x_fsf.x_rcv_able) pd_bind(&x->x_gui.x_obj.ob_pd, srl[1]);
!     x->x_gui.x_snd = srl[0];
!     x->x_gui.x_rcv = srl[1];
!     x->x_gui.x_lab = srl[2];
      x->x_gui.x_ldx = ldx;
      x->x_gui.x_ldy = ldy;
--- 579,592 ----
      if(steady != 0) steady = 1;
      x->x_steady = steady;
!     if (!strcmp(x->x_gui.x_snd->s_name, "empty"))
!     	x->x_gui.x_fsf.x_snd_able = 0;
!     if (!strcmp(x->x_gui.x_rcv->s_name, "empty"))
!     	x->x_gui.x_fsf.x_rcv_able = 0;
      if(x->x_gui.x_fsf.x_font_style == 1) strcpy(x->x_gui.x_font, "helvetica");
      else if(x->x_gui.x_fsf.x_font_style == 2) strcpy(x->x_gui.x_font, "times");
      else { x->x_gui.x_fsf.x_font_style = 0;
  	strcpy(x->x_gui.x_font, "courier"); }
!     if(x->x_gui.x_fsf.x_rcv_able)
!     	pd_bind(&x->x_gui.x_obj.ob_pd, x->x_gui.x_rcv);
      x->x_gui.x_ldx = ldx;
      x->x_gui.x_ldy = ldy;

Index: g_mycanvas.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/g_mycanvas.c,v
retrieving revision 1.1.1.3.2.1
retrieving revision 1.1.1.3.2.2
diff -C2 -d -r1.1.1.3.2.1 -r1.1.1.3.2.2
*** g_mycanvas.c	12 Sep 2003 20:55:31 -0000	1.1.1.3.2.1
--- g_mycanvas.c	18 Nov 2003 10:34:10 -0000	1.1.1.3.2.2
***************
*** 262,266 ****
      t_my_canvas *x = (t_my_canvas *)pd_new(my_canvas_class);
      int bflcol[]={-233017, -1, -66577};
-     t_symbol *srl[3];
      int a=IEM_GUI_DEFAULTSIZE, w=100, h=60;
      int ldx=20, ldy=12, f=2, i=0;
--- 262,265 ----
***************
*** 270,276 ****
      iem_inttosymargs(&x->x_gui.x_isa, 0);
      iem_inttofstyle(&x->x_gui.x_fsf, 0);
-     srl[0] = gensym("empty");
-     srl[1] = gensym("empty");
-     srl[2] = gensym("empty");
  
      if(((argc >= 10)&&(argc <= 13))
--- 269,272 ----
***************
*** 284,313 ****
      {
  	i = 2;
! 	if(IS_A_SYMBOL(argv,3))
! 	    srl[0] = atom_getsymbolarg(3, argc, argv);
! 	else if(IS_A_FLOAT(argv,3))
! 	{
! 	    sprintf(str, "%d", (int)atom_getintarg(3, argc, argv));
! 	    srl[0] = gensym(str);
! 	}
! 	if(IS_A_SYMBOL(argv,4))
! 	    srl[1] = atom_getsymbolarg(4, argc, argv);
! 	else if(IS_A_FLOAT(argv,4))
! 	{
! 	    sprintf(str, "%d", (int)atom_getintarg(4, argc, argv));
! 	    srl[1] = gensym(str);
! 	}
      }
      else if((argc == 11)&&(IS_A_SYMBOL(argv,3)||IS_A_FLOAT(argv,3)))
      {
  	i = 1;
! 	if(IS_A_SYMBOL(argv,3))
! 	    srl[1] = atom_getsymbolarg(3, argc, argv);
! 	else if(IS_A_FLOAT(argv,3))
! 	{
! 	    sprintf(str, "%d", (int)atom_getintarg(3, argc, argv));
! 	    srl[1] = gensym(str);
! 	}
      }
  
      if(((argc >= 10)&&(argc <= 13))
--- 280,291 ----
      {
  	i = 2;
! 	iemgui_new_getnames(&x->x_gui, 3, argv);
      }
      else if((argc == 11)&&(IS_A_SYMBOL(argv,3)||IS_A_FLOAT(argv,3)))
      {
  	i = 1;
! 	iemgui_new_getnames(&x->x_gui, 3, argv);
      }
+     else iemgui_new_getnames(&x->x_gui, 3, 0);
  
      if(((argc >= 10)&&(argc <= 13))
***************
*** 317,327 ****
         &&IS_A_FLOAT(argv,i+9))
      {
! 	if(IS_A_SYMBOL(argv,i+3))
! 	    srl[2] = atom_getsymbolarg(i+3, argc, argv);
! 	else if(IS_A_FLOAT(argv,i+3))
! 	{
! 	    sprintf(str, "%d", (int)atom_getintarg(i+3, argc, argv));
! 	    srl[2] = gensym(str);
! 	}
  	ldx = (int)atom_getintarg(i+4, argc, argv);
  	ldy = (int)atom_getintarg(i+5, argc, argv);
--- 295,303 ----
         &&IS_A_FLOAT(argv,i+9))
      {
!     	    /* disastrously, the "label" sits in a different part of the
! 	    message.  So we have to track its location separately (in
! 	    the slot x_labelbindex) and initialize it specially here. */
!     	iemgui_new_dogetname(&x->x_gui, i+3, argv);
! 	x->x_gui.x_labelbindex = i+3;
  	ldx = (int)atom_getintarg(i+4, argc, argv);
  	ldy = (int)atom_getintarg(i+5, argc, argv);
***************
*** 339,345 ****
      x->x_gui.x_fsf.x_rcv_able = 1;
      x->x_gui.x_glist = (t_glist *)canvas_getcurrent();
!     if(!strcmp(srl[0]->s_name, "empty")) x->x_gui.x_fsf.x_snd_able = 0;
!     if(!strcmp(srl[1]->s_name, "empty")) x->x_gui.x_fsf.x_rcv_able = 0;
!     x->x_gui.x_unique_num = 0;
      if(a < 1)
  	a = 1;
--- 315,322 ----
      x->x_gui.x_fsf.x_rcv_able = 1;
      x->x_gui.x_glist = (t_glist *)canvas_getcurrent();
!     if (!strcmp(x->x_gui.x_snd->s_name, "empty"))
!     	x->x_gui.x_fsf.x_snd_able = 0;
!     if (!strcmp(x->x_gui.x_rcv->s_name, "empty"))
!     	x->x_gui.x_fsf.x_rcv_able = 0;
      if(a < 1)
  	a = 1;
***************
*** 356,364 ****
      else { x->x_gui.x_fsf.x_font_style = 0;
  	strcpy(x->x_gui.x_font, "courier"); }
!     iemgui_first_dollararg2sym(&x->x_gui, srl);
!     if(x->x_gui.x_fsf.x_rcv_able) pd_bind(&x->x_gui.x_obj.ob_pd, srl[1]);
!     x->x_gui.x_snd = srl[0];
!     x->x_gui.x_rcv = srl[1];
!     x->x_gui.x_lab = srl[2];
      x->x_gui.x_ldx = ldx;
      x->x_gui.x_ldy = ldy;
--- 333,338 ----
      else { x->x_gui.x_fsf.x_font_style = 0;
  	strcpy(x->x_gui.x_font, "courier"); }
!     if (x->x_gui.x_fsf.x_rcv_able)
!     	pd_bind(&x->x_gui.x_obj.ob_pd, x->x_gui.x_rcv);
      x->x_gui.x_ldx = ldx;
      x->x_gui.x_ldy = ldy;

Index: g_numbox.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/g_numbox.c,v
retrieving revision 1.1.1.4.2.1
retrieving revision 1.1.1.4.2.2
diff -C2 -d -r1.1.1.4.2.1 -r1.1.1.4.2.2
*** g_numbox.c	12 Sep 2003 20:55:31 -0000	1.1.1.4.2.1
--- g_numbox.c	18 Nov 2003 10:34:10 -0000	1.1.1.4.2.2
***************
*** 754,758 ****
      t_my_numbox *x = (t_my_numbox *)pd_new(my_numbox_class);
      int bflcol[]={-262144, -1, -1};
-     t_symbol *srl[3];
      int w=5, h=14;
      int lilo=0, f=0, ldx=0, ldy=-6;
--- 754,757 ----
***************
*** 762,770 ****
      char str[144];
  
-     srl[0] = gensym("empty");
-     srl[1] = gensym("empty");
-     srl[2] = gensym("empty");
- 
- 
      if((argc >= 17)&&IS_A_FLOAT(argv,0)&&IS_A_FLOAT(argv,1)
         &&IS_A_FLOAT(argv,2)&&IS_A_FLOAT(argv,3)
--- 761,764 ----
***************
*** 783,810 ****
  	lilo = (int)atom_getintarg(4, argc, argv);
  	iem_inttosymargs(&x->x_gui.x_isa, atom_getintarg(5, argc, argv));
! 	srl[0] = atom_getsymbolarg(6, argc, argv);
! 	srl[1] = atom_getsymbolarg(7, argc, argv);
! 	srl[2] = atom_getsymbolarg(8, argc, argv);
! 	if(IS_A_SYMBOL(argv,6))
! 	    srl[0] = atom_getsymbolarg(6, argc, argv);
! 	else if(IS_A_FLOAT(argv,6))
! 	{
! 	    sprintf(str, "%d", (int)atom_getintarg(6, argc, argv));
! 	    srl[0] = gensym(str);
! 	}
! 	if(IS_A_SYMBOL(argv,7))
! 	    srl[1] = atom_getsymbolarg(7, argc, argv);
! 	else if(IS_A_FLOAT(argv,7))
! 	{
! 	    sprintf(str, "%d", (int)atom_getintarg(7, argc, argv));
! 	    srl[1] = gensym(str);
! 	}
! 	if(IS_A_SYMBOL(argv,8))
! 	    srl[2] = atom_getsymbolarg(8, argc, argv);
! 	else if(IS_A_FLOAT(argv,8))
! 	{
! 	    sprintf(str, "%d", (int)atom_getintarg(8, argc, argv));
! 	    srl[2] = gensym(str);
! 	}
  	ldx = (int)atom_getintarg(9, argc, argv);
  	ldy = (int)atom_getintarg(10, argc, argv);
--- 777,781 ----
  	lilo = (int)atom_getintarg(4, argc, argv);
  	iem_inttosymargs(&x->x_gui.x_isa, atom_getintarg(5, argc, argv));
! 	iemgui_new_getnames(&x->x_gui, 6, argv);
  	ldx = (int)atom_getintarg(9, argc, argv);
  	ldy = (int)atom_getintarg(10, argc, argv);
***************
*** 816,819 ****
--- 787,791 ----
  	v = atom_getfloatarg(16, argc, argv);
      }
+     else iemgui_new_getnames(&x->x_gui, 6, 0);
      if((argc == 18)&&IS_A_FLOAT(argv,17))
      {
***************
*** 833,848 ****
          log_height = 10;
      x->x_log_height = log_height;
!     if(!strcmp(srl[0]->s_name, "empty")) x->x_gui.x_fsf.x_snd_able = 0;
!     if(!strcmp(srl[1]->s_name, "empty")) x->x_gui.x_fsf.x_rcv_able = 0;
!     x->x_gui.x_unique_num = 0;
      if(x->x_gui.x_fsf.x_font_style == 1) strcpy(x->x_gui.x_font, "helvetica");
      else if(x->x_gui.x_fsf.x_font_style == 2) strcpy(x->x_gui.x_font, "times");
      else { x->x_gui.x_fsf.x_font_style = 0;
  	strcpy(x->x_gui.x_font, "courier"); }
!     iemgui_first_dollararg2sym(&x->x_gui, srl);
!     if(x->x_gui.x_fsf.x_rcv_able) pd_bind(&x->x_gui.x_obj.ob_pd, srl[1]);
!     x->x_gui.x_snd = srl[0];
!     x->x_gui.x_rcv = srl[1];
!     x->x_gui.x_lab = srl[2];
      x->x_gui.x_ldx = ldx;
      x->x_gui.x_ldy = ldy;
--- 805,818 ----
          log_height = 10;
      x->x_log_height = log_height;
!     if (!strcmp(x->x_gui.x_snd->s_name, "empty"))
!     	x->x_gui.x_fsf.x_snd_able = 0;
!     if (!strcmp(x->x_gui.x_rcv->s_name, "empty"))
!     	x->x_gui.x_fsf.x_rcv_able = 0;
      if(x->x_gui.x_fsf.x_font_style == 1) strcpy(x->x_gui.x_font, "helvetica");
      else if(x->x_gui.x_fsf.x_font_style == 2) strcpy(x->x_gui.x_font, "times");
      else { x->x_gui.x_fsf.x_font_style = 0;
  	strcpy(x->x_gui.x_font, "courier"); }
!     if (x->x_gui.x_fsf.x_rcv_able)
!     	pd_bind(&x->x_gui.x_obj.ob_pd, x->x_gui.x_rcv);
      x->x_gui.x_ldx = ldx;
      x->x_gui.x_ldy = ldy;

Index: g_rtext.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/g_rtext.c,v
retrieving revision 1.1.1.2.2.5
retrieving revision 1.1.1.2.2.6
diff -C2 -d -r1.1.1.2.2.5 -r1.1.1.2.2.6
*** g_rtext.c	29 Oct 2003 12:57:42 -0000	1.1.1.2.2.5
--- g_rtext.c	18 Nov 2003 10:34:10 -0000	1.1.1.2.2.6
***************
*** 138,141 ****
--- 138,146 ----
  #define BOXWIDTH 60
  
+ /* Older (pre-8.3.4) TCL versions handle text selection differently; this
+ flag is set from the GUI if this happens.  LATER take this out: early 2006? */
+ 
+ extern int sys_oldtclversion;	    	
+ 
  static void rtext_senditup(t_rtext *x, int action, int *widthp, int *heightp,
      int *indexp)
***************
*** 230,240 ****
      	    	    x->x_tag, x->x_selstart);
      		sys_vgui(".x%x.c select to %s %d\n", canvas, 
!     	    	    x->x_tag, x->x_selend
! #if defined (MSW) || defined(MACOSX)
!     	    /* Why is linux selecting text differently from MSW and OSX???
! 	    	Just adjust it here... LATER revisit this one */
! 			-1
! #endif
! 			);
  	    	sys_vgui(".x%x.c focus \"\"\n", canvas);	
      	    }
--- 235,239 ----
      	    	    x->x_tag, x->x_selstart);
      		sys_vgui(".x%x.c select to %s %d\n", canvas, 
!     	    	    x->x_tag, x->x_selend + (sys_oldtclversion ? 0 : -1));
  	    	sys_vgui(".x%x.c focus \"\"\n", canvas);	
      	    }

Index: g_scalar.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/g_scalar.c,v
retrieving revision 1.1.1.2.2.1
retrieving revision 1.1.1.2.2.2
diff -C2 -d -r1.1.1.2.2.1 -r1.1.1.2.2.2
*** g_scalar.c	12 Sep 2003 20:55:31 -0000	1.1.1.2.2.1
--- g_scalar.c	18 Nov 2003 10:34:10 -0000	1.1.1.2.2.2
***************
*** 175,196 ****
      float basex, basey;
      scalar_getbasexy(x, &basex, &basey);
!     for (y = templatecanvas->gl_list; y; y = y->g_next)
      {
! 	t_parentwidgetbehavior *wb = pd_getparentwidget(&y->g_pd);
!     	int nx1, ny1, nx2, ny2;
! 	if (!wb) continue;
! 	(*wb->w_parentgetrectfn)(y, owner,
! 	    x->sc_vec, template, basex, basey,
! 	    &nx1, &ny1, &nx2, &ny2);
! 	if (hit)
  	{
! 	    if (nx1 < x1) x1 = nx1;
! 	    if (ny1 < y1) y1 = ny1;
! 	    if (nx2 > x2) x2 = nx2;
! 	    if (ny2 > y2) y2 = ny2;
  	}
! 	else x1 = nx1, y1 = ny1, x2 = nx2, y2 = ny2, hit = 1;
      }
-     if (!hit) x1 = y1 = x2 = y2 = 0;
      /* post("scalar x1 %d y1 %d x2 %d y2 %d", x1, y1, x2, y2); */
      *xp1 = x1;
--- 175,208 ----
      float basex, basey;
      scalar_getbasexy(x, &basex, &basey);
!     	/* if someone deleted the template canvas, we're just a point */
!     if (!templatecanvas)
      {
!     	x1 = x2 = glist_xtopixels(owner, basex);
!     	y1 = y2 = glist_ytopixels(owner, basey);
!     }
!     else
!     {
!     	int hit = 0;
!     	x1 = y1 = 0x7fffffff;
! 	x2 = y2 = -0x7fffffff;
!     	for (y = templatecanvas->gl_list; y; y = y->g_next)
  	{
! 	    t_parentwidgetbehavior *wb = pd_getparentwidget(&y->g_pd);
!     	    int nx1, ny1, nx2, ny2;
! 	    if (!wb) continue;
! 	    (*wb->w_parentgetrectfn)(y, owner,
! 		x->sc_vec, template, basex, basey,
! 		&nx1, &ny1, &nx2, &ny2);
! 	    if (hit)
! 	    {
! 		if (nx1 < x1) x1 = nx1;
! 		if (ny1 < y1) y1 = ny1;
! 		if (nx2 > x2) x2 = nx2;
! 		if (ny2 > y2) y2 = ny2;
! 	    }
! 	    else x1 = nx1, y1 = ny1, x2 = nx2, y2 = ny2, hit = 1;
  	}
! 	if (!hit) x1 = y1 = x2 = y2 = 0;
      }
      /* post("scalar x1 %d y1 %d x2 %d y2 %d", x1, y1, x2, y2); */
      *xp1 = x1;
***************
*** 209,212 ****
--- 221,225 ----
      	int x1, y1, x2, y2;
      	scalar_getrect(z, owner, &x1, &y1, &x2, &y2);
+ 	x1--; x2++; y1--; y2++;
      	sys_vgui(".x%x.c create line %d %d %d %d %d %d %d %d %d %d \
  	    -width 0 -fill blue -tags select%x\n",
***************
*** 267,276 ****
      t_gobj *y;
      float basex, basey;
      if (!templatecanvas)
      {
!     	bug("scalar_vis");  /* it's still a bug, have to fix this for real... */
!     	return; /* proposed by Krzysztof Czaja to avoid crashing */
      }
-     scalar_getbasexy(x, &basex, &basey);
  
      for (y = templatecanvas->gl_list; y; y = y->g_next)
--- 280,297 ----
      t_gobj *y;
      float basex, basey;
+     scalar_getbasexy(x, &basex, &basey);
+     	/* if we don't know how to draw it, make a small rectangle */
      if (!templatecanvas)
      {
!     	if (vis)
! 	{
! 	    int x1 = glist_xtopixels(owner, basex);
! 	    int y1 = glist_ytopixels(owner, basey);
!     	    sys_vgui(".x%x.c create rectangle %d %d %d %d -tags scalar%x\n",
!     	    	glist_getcanvas(owner), x1-1, y1-1, x1+1, y1+1, x);
!     	}
! 	else sys_vgui(".x%x.c delete scalar%x\n", glist_getcanvas(owner), x);
!     	return;
      }
  
      for (y = templatecanvas->gl_list; y; y = y->g_next)
***************
*** 331,335 ****
      binbuf_gettext(b, &buf, &bufsize);
      binbuf_free(b);
!     t_resizebytes(buf, bufsize, bufsize+1);
      buf[bufsize] = 0;
      sprintf(buf2, "pdtk_data_dialog %%s {");
--- 352,356 ----
      binbuf_gettext(b, &buf, &bufsize);
      binbuf_free(b);
!     buf = t_resizebytes(buf, bufsize, bufsize+1);
      buf[bufsize] = 0;
      sprintf(buf2, "pdtk_data_dialog %%s {");

Index: g_toggle.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/g_toggle.c,v
retrieving revision 1.1.1.3.2.1
retrieving revision 1.1.1.3.2.2
diff -C2 -d -r1.1.1.3.2.1 -r1.1.1.3.2.2
*** g_toggle.c	12 Sep 2003 20:55:31 -0000	1.1.1.3.2.1
--- g_toggle.c	18 Nov 2003 10:34:10 -0000	1.1.1.3.2.2
***************
*** 363,367 ****
      t_toggle *x = (t_toggle *)pd_new(toggle_class);
      int bflcol[]={-262144, -1, -1};
-     t_symbol *srl[3];
      int a=IEM_GUI_DEFAULTSIZE, f=0;
      int ldx=0, ldy=-6;
--- 363,366 ----
***************
*** 372,378 ****
      iem_inttosymargs(&x->x_gui.x_isa, 0);
      iem_inttofstyle(&x->x_gui.x_fsf, 0);
-     srl[0] = gensym("empty");
-     srl[1] = gensym("empty");
-     srl[2] = gensym("empty");
  
      if(((argc == 13)||(argc == 14))&&IS_A_FLOAT(argv,0)
--- 371,374 ----
***************
*** 387,411 ****
  	a = (int)atom_getintarg(0, argc, argv);
  	iem_inttosymargs(&x->x_gui.x_isa, atom_getintarg(1, argc, argv));
! 	if(IS_A_SYMBOL(argv,2))
! 	    srl[0] = atom_getsymbolarg(2, argc, argv);
! 	else if(IS_A_FLOAT(argv,2))
! 	{
! 	    sprintf(str, "%d", (int)atom_getintarg(2, argc, argv));
! 	    srl[0] = gensym(str);
! 	}
! 	if(IS_A_SYMBOL(argv,3))
! 	    srl[1] = atom_getsymbolarg(3, argc, argv);
! 	else if(IS_A_FLOAT(argv,3))
! 	{
! 	    sprintf(str, "%d", (int)atom_getintarg(3, argc, argv));
! 	    srl[1] = gensym(str);
! 	}
! 	if(IS_A_SYMBOL(argv,4))
! 	    srl[2] = atom_getsymbolarg(4, argc, argv);
! 	else if(IS_A_FLOAT(argv,4))
! 	{
! 	    sprintf(str, "%d", (int)atom_getintarg(4, argc, argv));
! 	    srl[2] = gensym(str);
! 	}
  	ldx = (int)atom_getintarg(5, argc, argv);
  	ldy = (int)atom_getintarg(6, argc, argv);
--- 383,387 ----
  	a = (int)atom_getintarg(0, argc, argv);
  	iem_inttosymargs(&x->x_gui.x_isa, atom_getintarg(1, argc, argv));
! 	iemgui_new_getnames(&x->x_gui, 2, argv);
  	ldx = (int)atom_getintarg(5, argc, argv);
  	ldy = (int)atom_getintarg(6, argc, argv);
***************
*** 417,420 ****
--- 393,397 ----
  	on = (float)atom_getfloatarg(12, argc, argv);
      }
+     else iemgui_new_getnames(&x->x_gui, 2, 0);
      if((argc == 14)&&IS_A_FLOAT(argv,13))
  	nonzero = (float)atom_getfloatarg(13, argc, argv);
***************
*** 424,430 ****
      x->x_gui.x_fsf.x_rcv_able = 1;
      x->x_gui.x_glist = (t_glist *)canvas_getcurrent();
!     if(!strcmp(srl[0]->s_name, "empty")) x->x_gui.x_fsf.x_snd_able = 0;
!     if(!strcmp(srl[1]->s_name, "empty")) x->x_gui.x_fsf.x_rcv_able = 0;
!     x->x_gui.x_unique_num = 0;
      if(x->x_gui.x_fsf.x_font_style == 1) strcpy(x->x_gui.x_font, "helvetica");
      else if(x->x_gui.x_fsf.x_font_style == 2) strcpy(x->x_gui.x_font, "times");
--- 401,408 ----
      x->x_gui.x_fsf.x_rcv_able = 1;
      x->x_gui.x_glist = (t_glist *)canvas_getcurrent();
!     if (!strcmp(x->x_gui.x_snd->s_name, "empty"))
!     	x->x_gui.x_fsf.x_snd_able = 0;
!     if (!strcmp(x->x_gui.x_rcv->s_name, "empty"))
!     	x->x_gui.x_fsf.x_rcv_able = 0;
      if(x->x_gui.x_fsf.x_font_style == 1) strcpy(x->x_gui.x_font, "helvetica");
      else if(x->x_gui.x_fsf.x_font_style == 2) strcpy(x->x_gui.x_font, "times");
***************
*** 436,444 ****
      else
  	x->x_on = 0.0;
!     iemgui_first_dollararg2sym(&x->x_gui, srl);
!     if(x->x_gui.x_fsf.x_rcv_able) pd_bind(&x->x_gui.x_obj.ob_pd, srl[1]);
!     x->x_gui.x_snd = srl[0];
!     x->x_gui.x_rcv = srl[1];
!     x->x_gui.x_lab = srl[2];
      x->x_gui.x_ldx = ldx;
      x->x_gui.x_ldy = ldy;
--- 414,419 ----
      else
  	x->x_on = 0.0;
!     if (x->x_gui.x_fsf.x_rcv_able)
!     	pd_bind(&x->x_gui.x_obj.ob_pd, x->x_gui.x_rcv);
      x->x_gui.x_ldx = ldx;
      x->x_gui.x_ldy = ldy;

Index: g_vdial.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/g_vdial.c,v
retrieving revision 1.1.1.4.2.1
retrieving revision 1.1.1.4.2.2
diff -C2 -d -r1.1.1.4.2.1 -r1.1.1.4.2.2
*** g_vdial.c	12 Sep 2003 20:55:31 -0000	1.1.1.4.2.1
--- g_vdial.c	18 Nov 2003 10:34:10 -0000	1.1.1.4.2.2
***************
*** 543,547 ****
      t_vradio *x = (t_vradio *)pd_new(old? vradio_old_class : vradio_class);
      int bflcol[]={-262144, -1, -1};
-     t_symbol *srl[3];
      int a=IEM_GUI_DEFAULTSIZE, on=0, f=0;
      int ldx=0, ldy=-6, chg=1, num=8;
--- 543,546 ----
***************
*** 550,558 ****
      char str[144];
  
-     /* post("new %s %d", s->s_name, old); */
-     srl[0] = gensym("empty");
-     srl[1] = gensym("empty");
-     srl[2] = gensym("empty");
- 
      if((argc == 15)&&IS_A_FLOAT(argv,0)&&IS_A_FLOAT(argv,1)&&IS_A_FLOAT(argv,2)
         &&IS_A_FLOAT(argv,3)
--- 549,552 ----
***************
*** 568,592 ****
  	iem_inttosymargs(&x->x_gui.x_isa, atom_getintarg(2, argc, argv));
  	num = (int)atom_getintarg(3, argc, argv);
! 	if(IS_A_SYMBOL(argv,4))
! 	    srl[0] = atom_getsymbolarg(4, argc, argv);
! 	else if(IS_A_FLOAT(argv,4))
! 	{
! 	    sprintf(str, "%d", (int)atom_getintarg(4, argc, argv));
! 	    srl[0] = gensym(str);
! 	}
! 	if(IS_A_SYMBOL(argv,5))
! 	    srl[1] = atom_getsymbolarg(5, argc, argv);
! 	else if(IS_A_FLOAT(argv,5))
! 	{
! 	    sprintf(str, "%d", (int)atom_getintarg(5, argc, argv));
! 	    srl[1] = gensym(str);
! 	}
! 	if(IS_A_SYMBOL(argv,6))
! 	    srl[2] = atom_getsymbolarg(6, argc, argv);
! 	else if(IS_A_FLOAT(argv,6))
! 	{
! 	    sprintf(str, "%d", (int)atom_getintarg(6, argc, argv));
! 	    srl[2] = gensym(str);
! 	}
  	ldx = (int)atom_getintarg(7, argc, argv);
  	ldy = (int)atom_getintarg(8, argc, argv);
--- 562,566 ----
  	iem_inttosymargs(&x->x_gui.x_isa, atom_getintarg(2, argc, argv));
  	num = (int)atom_getintarg(3, argc, argv);
! 	iemgui_new_getnames(&x->x_gui, 4, argv);
  	ldx = (int)atom_getintarg(7, argc, argv);
  	ldy = (int)atom_getintarg(8, argc, argv);
***************
*** 598,612 ****
  	on = (int)atom_getintarg(14, argc, argv);
      }
      x->x_gui.x_draw = (t_iemfunptr)vradio_draw;
      x->x_gui.x_fsf.x_snd_able = 1;
      x->x_gui.x_fsf.x_rcv_able = 1;
      x->x_gui.x_glist = (t_glist *)canvas_getcurrent();
!     if(!strcmp(srl[0]->s_name, "empty")) x->x_gui.x_fsf.x_snd_able = 0;
!     if(!strcmp(srl[1]->s_name, "empty")) x->x_gui.x_fsf.x_rcv_able = 0;
      if(x->x_gui.x_fsf.x_font_style == 1) strcpy(x->x_gui.x_font, "helvetica");
      else if(x->x_gui.x_fsf.x_font_style == 2) strcpy(x->x_gui.x_font, "times");
      else { x->x_gui.x_fsf.x_font_style = 0;
  	strcpy(x->x_gui.x_font, "courier"); }
-     x->x_gui.x_unique_num = 0;
      if(num < 1)
  	num = 1;
--- 572,588 ----
  	on = (int)atom_getintarg(14, argc, argv);
      }
+     else iemgui_new_getnames(&x->x_gui, 4, 0);
      x->x_gui.x_draw = (t_iemfunptr)vradio_draw;
      x->x_gui.x_fsf.x_snd_able = 1;
      x->x_gui.x_fsf.x_rcv_able = 1;
      x->x_gui.x_glist = (t_glist *)canvas_getcurrent();
!     if (!strcmp(x->x_gui.x_snd->s_name, "empty"))
!     	x->x_gui.x_fsf.x_snd_able = 0;
!     if (!strcmp(x->x_gui.x_rcv->s_name, "empty"))
!     	x->x_gui.x_fsf.x_rcv_able = 0;
      if(x->x_gui.x_fsf.x_font_style == 1) strcpy(x->x_gui.x_font, "helvetica");
      else if(x->x_gui.x_fsf.x_font_style == 2) strcpy(x->x_gui.x_font, "times");
      else { x->x_gui.x_fsf.x_font_style = 0;
  	strcpy(x->x_gui.x_font, "courier"); }
      if(num < 1)
  	num = 1;
***************
*** 624,632 ****
      x->x_on_old = x->x_on;
      x->x_change = (chg==0)?0:1;
!     iemgui_first_dollararg2sym(&x->x_gui, srl);
!     if(x->x_gui.x_fsf.x_rcv_able) pd_bind(&x->x_gui.x_obj.ob_pd, srl[1]);
!     x->x_gui.x_snd = srl[0];
!     x->x_gui.x_rcv = srl[1];
!     x->x_gui.x_lab = srl[2];
      x->x_gui.x_ldx = ldx;
      x->x_gui.x_ldy = ldy;
--- 600,605 ----
      x->x_on_old = x->x_on;
      x->x_change = (chg==0)?0:1;
!     if (x->x_gui.x_fsf.x_rcv_able)
!     	pd_bind(&x->x_gui.x_obj.ob_pd, x->x_gui.x_rcv);
      x->x_gui.x_ldx = ldx;
      x->x_gui.x_ldy = ldy;

Index: g_vslider.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/g_vslider.c,v
retrieving revision 1.1.1.3.2.1
retrieving revision 1.1.1.3.2.2
diff -C2 -d -r1.1.1.3.2.1 -r1.1.1.3.2.2
*** g_vslider.c	12 Sep 2003 20:55:31 -0000	1.1.1.3.2.1
--- g_vslider.c	18 Nov 2003 10:34:10 -0000	1.1.1.3.2.2
***************
*** 506,510 ****
      t_vslider *x = (t_vslider *)pd_new(vslider_class);
      int bflcol[]={-262144, -1, -1};
-     t_symbol *srl[3];
      int w=IEM_GUI_DEFAULTSIZE, h=IEM_SL_DEFAULTSIZE;
      int lilo=0, f=0, ldx=0, ldy=-8;
--- 506,509 ----
***************
*** 515,522 ****
      iem_inttosymargs(&x->x_gui.x_isa, 0);
      iem_inttofstyle(&x->x_gui.x_fsf, 0);
-     srl[0] = gensym("empty");
-     srl[1] = gensym("empty");
-     srl[2] = gensym("empty");
- 
  
      if(((argc == 17)||(argc == 18))&&IS_A_FLOAT(argv,0)&&IS_A_FLOAT(argv,1)
--- 514,517 ----
***************
*** 536,563 ****
  	lilo = (int)atom_getintarg(4, argc, argv);
  	iem_inttosymargs(&x->x_gui.x_isa, atom_getintarg(5, argc, argv));
! 	srl[0] = atom_getsymbolarg(6, argc, argv);
! 	srl[1] = atom_getsymbolarg(7, argc, argv);
! 	srl[2] = atom_getsymbolarg(8, argc, argv);
! 	if(IS_A_SYMBOL(argv,6))
! 	    srl[0] = atom_getsymbolarg(6, argc, argv);
! 	else if(IS_A_FLOAT(argv,6))
! 	{
! 	    sprintf(str, "%d", (int)atom_getintarg(6, argc, argv));
! 	    srl[0] = gensym(str);
! 	}
! 	if(IS_A_SYMBOL(argv,7))
! 	    srl[1] = atom_getsymbolarg(7, argc, argv);
! 	else if(IS_A_FLOAT(argv,7))
! 	{
! 	    sprintf(str, "%d", (int)atom_getintarg(7, argc, argv));
! 	    srl[1] = gensym(str);
! 	}
! 	if(IS_A_SYMBOL(argv,8))
! 	    srl[2] = atom_getsymbolarg(8, argc, argv);
! 	else if(IS_A_FLOAT(argv,8))
! 	{
! 	    sprintf(str, "%d", (int)atom_getintarg(8, argc, argv));
! 	    srl[2] = gensym(str);
! 	}
  	ldx = (int)atom_getintarg(9, argc, argv);
  	ldy = (int)atom_getintarg(10, argc, argv);
--- 531,535 ----
  	lilo = (int)atom_getintarg(4, argc, argv);
  	iem_inttosymargs(&x->x_gui.x_isa, atom_getintarg(5, argc, argv));
! 	iemgui_new_getnames(&x->x_gui, 6, argv);
  	ldx = (int)atom_getintarg(9, argc, argv);
  	ldy = (int)atom_getintarg(10, argc, argv);
***************
*** 569,572 ****
--- 541,545 ----
  	v = (int)atom_getintarg(16, argc, argv);
      }
+     else iemgui_new_getnames(&x->x_gui, 6, 0);
      if((argc == 18)&&IS_A_FLOAT(argv,17))
  	steady = (int)atom_getintarg(17, argc, argv);
***************
*** 584,599 ****
      if(steady != 0) steady = 1;
      x->x_steady = steady;
!     if(!strcmp(srl[0]->s_name, "empty")) x->x_gui.x_fsf.x_snd_able = 0;
!     if(!strcmp(srl[1]->s_name, "empty")) x->x_gui.x_fsf.x_rcv_able = 0;
!     x->x_gui.x_unique_num = 0;
      if(x->x_gui.x_fsf.x_font_style == 1) strcpy(x->x_gui.x_font, "helvetica");
      else if(x->x_gui.x_fsf.x_font_style == 2) strcpy(x->x_gui.x_font, "times");
      else { x->x_gui.x_fsf.x_font_style = 0;
  	strcpy(x->x_gui.x_font, "courier"); }
!     iemgui_first_dollararg2sym(&x->x_gui, srl);
!     if(x->x_gui.x_fsf.x_rcv_able) pd_bind(&x->x_gui.x_obj.ob_pd, srl[1]);
!     x->x_gui.x_snd = srl[0];
!     x->x_gui.x_rcv = srl[1];
!     x->x_gui.x_lab = srl[2];
      x->x_gui.x_ldx = ldx;
      x->x_gui.x_ldy = ldy;
--- 557,567 ----
      if(steady != 0) steady = 1;
      x->x_steady = steady;
!     if(!strcmp(x->x_gui.x_snd->s_name, "empty")) x->x_gui.x_fsf.x_snd_able = 0;
!     if(!strcmp(x->x_gui.x_rcv->s_name, "empty")) x->x_gui.x_fsf.x_rcv_able = 0;
      if(x->x_gui.x_fsf.x_font_style == 1) strcpy(x->x_gui.x_font, "helvetica");
      else if(x->x_gui.x_fsf.x_font_style == 2) strcpy(x->x_gui.x_font, "times");
      else { x->x_gui.x_fsf.x_font_style = 0;
  	strcpy(x->x_gui.x_font, "courier"); }
!     if(x->x_gui.x_fsf.x_rcv_able) pd_bind(&x->x_gui.x_obj.ob_pd, x->x_gui.x_rcv);
      x->x_gui.x_ldx = ldx;
      x->x_gui.x_ldy = ldy;

Index: g_vumeter.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/g_vumeter.c,v
retrieving revision 1.1.1.3.2.1
retrieving revision 1.1.1.3.2.2
diff -C2 -d -r1.1.1.3.2.1 -r1.1.1.3.2.2
*** g_vumeter.c	12 Sep 2003 20:55:31 -0000	1.1.1.3.2.1
--- g_vumeter.c	18 Nov 2003 10:34:10 -0000	1.1.1.3.2.2
***************
*** 608,612 ****
      t_vu *x = (t_vu *)pd_new(vu_class);
      int bflcol[]={-66577, -1, -1};
-     t_symbol *srl[3];
      int w=IEM_GUI_DEFAULTSIZE, h=IEM_VU_STEPS*IEM_VU_DEFAULTSIZE;
      int ldx=-1, ldy=-8, f=0, fs=8, scale=1;
--- 608,611 ----
***************
*** 616,622 ****
      iem_inttosymargs(&x->x_gui.x_isa, 0);
      iem_inttofstyle(&x->x_gui.x_fsf, 0);
-     srl[0] = gensym("empty");
-     srl[1] = gensym("empty");
-     srl[2] = gensym("empty");
  
      if((argc >= 11)&&IS_A_FLOAT(argv,0)&&IS_A_FLOAT(argv,1)
--- 615,618 ----
***************
*** 629,646 ****
  	w = (int)atom_getintarg(0, argc, argv);
  	h = (int)atom_getintarg(1, argc, argv);
! 	if(IS_A_SYMBOL(argv,2))
! 	    srl[1] = atom_getsymbolarg(2, argc, argv);
! 	else if(IS_A_FLOAT(argv,2))
! 	{
! 	    sprintf(str, "%d", (int)atom_getintarg(2, argc, argv));
! 	    srl[1] = gensym(str);
! 	}
! 	if(IS_A_SYMBOL(argv,3))
! 	    srl[2] = atom_getsymbolarg(3, argc, argv);
! 	else if(IS_A_FLOAT(argv,3))
! 	{
! 	    sprintf(str, "%d", (int)atom_getintarg(3, argc, argv));
! 	    srl[2] = gensym(str);
! 	}
  	ldx = (int)atom_getintarg(4, argc, argv);
  	ldy = (int)atom_getintarg(5, argc, argv);
--- 625,629 ----
  	w = (int)atom_getintarg(0, argc, argv);
  	h = (int)atom_getintarg(1, argc, argv);
! 	iemgui_new_getnames(&x->x_gui, 1, argv);
  	ldx = (int)atom_getintarg(4, argc, argv);
  	ldy = (int)atom_getintarg(5, argc, argv);
***************
*** 651,654 ****
--- 634,638 ----
  	scale = (int)atom_getintarg(10, argc, argv);
      }
+     else iemgui_new_getnames(&x->x_gui, 1, 0);
      if((argc == 12)&&IS_A_FLOAT(argv,11))
  	iem_inttosymargs(&x->x_gui.x_isa, atom_getintarg(11, argc, argv));
***************
*** 658,672 ****
      x->x_gui.x_fsf.x_rcv_able = 1;
      x->x_gui.x_glist = (t_glist *)canvas_getcurrent();
!     if(!strcmp(srl[1]->s_name, "empty")) x->x_gui.x_fsf.x_rcv_able = 0;
!     x->x_gui.x_unique_num = 0;
!     if(x->x_gui.x_fsf.x_font_style == 1) strcpy(x->x_gui.x_font, "helvetica");
!     else if(x->x_gui.x_fsf.x_font_style == 2) strcpy(x->x_gui.x_font, "times");
      else { x->x_gui.x_fsf.x_font_style = 0;
  	strcpy(x->x_gui.x_font, "courier"); }
!     iemgui_first_dollararg2sym(&x->x_gui, srl);
!     if(x->x_gui.x_fsf.x_rcv_able) pd_bind(&x->x_gui.x_obj.ob_pd, srl[1]);
!     x->x_gui.x_snd = srl[0];
!     x->x_gui.x_rcv = srl[1];
!     x->x_gui.x_lab = srl[2];
      x->x_gui.x_ldx = ldx;
      x->x_gui.x_ldy = ldy;
--- 642,655 ----
      x->x_gui.x_fsf.x_rcv_able = 1;
      x->x_gui.x_glist = (t_glist *)canvas_getcurrent();
!     if (!strcmp(x->x_gui.x_rcv->s_name, "empty"))
!     	x->x_gui.x_fsf.x_rcv_able = 0;
!     if (x->x_gui.x_fsf.x_font_style == 1)
!     	strcpy(x->x_gui.x_font, "helvetica");
!     else if(x->x_gui.x_fsf.x_font_style == 2)
!     	strcpy(x->x_gui.x_font, "times");
      else { x->x_gui.x_fsf.x_font_style = 0;
  	strcpy(x->x_gui.x_font, "courier"); }
!     if(x->x_gui.x_fsf.x_rcv_able)
!     	pd_bind(&x->x_gui.x_obj.ob_pd, x->x_gui.x_rcv);
      x->x_gui.x_ldx = ldx;
      x->x_gui.x_ldy = ldy;

Index: m_binbuf.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/m_binbuf.c,v
retrieving revision 1.1.1.4.2.3
retrieving revision 1.1.1.4.2.4
diff -C2 -d -r1.1.1.4.2.3 -r1.1.1.4.2.4
*** m_binbuf.c	12 Sep 2003 21:34:17 -0000	1.1.1.4.2.3
--- m_binbuf.c	18 Nov 2003 10:34:10 -0000	1.1.1.4.2.4
***************
*** 456,460 ****
      int ac = x->b_n;
      int nargs;
-     
      while (1)
      {
--- 456,459 ----

Index: m_pd.h
===================================================================
RCS file: /cvsroot/pure-data/pd/src/m_pd.h,v
retrieving revision 1.1.1.4.2.8
retrieving revision 1.1.1.4.2.9
diff -C2 -d -r1.1.1.4.2.8 -r1.1.1.4.2.9
*** m_pd.h	14 Oct 2003 12:32:16 -0000	1.1.1.4.2.8
--- m_pd.h	18 Nov 2003 10:34:10 -0000	1.1.1.4.2.9
***************
*** 637,645 ****
  #define PD_USE_TE_XPIX
  
! /* a test for NANs and denormals.  Shouldn't be necessary on Mac but can't
! test this just now. */
  
  #define PD_BADFLOAT(f) ((((*(unsigned int*)&(f))&0x7f800000)==0) || \
      (((*(unsigned int*)&(f))&0x7f800000)==0x7f800000))
  
  #if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus)
--- 637,648 ----
  #define PD_USE_TE_XPIX
  
! /* a test for NANs and denormals.  Should only be necessary on i386. */
  
+ #ifdef __i386__
  #define PD_BADFLOAT(f) ((((*(unsigned int*)&(f))&0x7f800000)==0) || \
      (((*(unsigned int*)&(f))&0x7f800000)==0x7f800000))
+ #else
+ #define PD_BADFLOAT(f) 0
+ #endif
  
  #if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus)

Index: notes.txt
===================================================================
RCS file: /cvsroot/pure-data/pd/src/notes.txt,v
retrieving revision 1.1.1.4.2.3
retrieving revision 1.1.1.4.2.4
diff -C2 -d -r1.1.1.4.2.3 -r1.1.1.4.2.4
*** notes.txt	23 Sep 2003 00:50:02 -0000	1.1.1.4.2.3
--- notes.txt	18 Nov 2003 10:34:10 -0000	1.1.1.4.2.4
***************
*** 28,37 ****
  
  fix for 0.37:
! don't prepend help- if sethalpname is called
! Tom schouten: $HOME undefined crashes Pd
! update 'getting pd to run' to start in with dialog panels
! MIDI on windows?
  
  0.38:
  message dialog not to disappear
  sprout inlets/outlets on objects whose creation failed.
--- 28,41 ----
  
  fix for 0.37:
! ALSA readn - doesn't work yet.
! test MIDI I/O on all platforms, inc. sysex...
! canvas grows by 2 pixels? (what platform?)
  
  0.38:
+ 
+ makefile to set SETUID bit on install?
+ loading e-mailed patches without removing headers crashes pd
+ investigate gcc 3.3 warnings; try to reinstate -fstrict-aliasing
+ configure script to drop -Werror unless in the caller's environment
  message dialog not to disappear
  sprout inlets/outlets on objects whose creation failed.
***************
*** 99,103 ****
  command line flag to defeat loading objects
  signal inlets with initialized values...
- Pd to open html help on windows/mac
  flag to hide array names 
  ??? have a way to disambiguate externs from different libs???
--- 103,106 ----

Index: s_audio.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/s_audio.c,v
retrieving revision 1.1.1.1.2.5
retrieving revision 1.1.1.1.2.6
diff -C2 -d -r1.1.1.1.2.5 -r1.1.1.1.2.6
*** s_audio.c	7 Oct 2003 14:31:45 -0000	1.1.1.1.2.5
--- s_audio.c	18 Nov 2003 10:34:10 -0000	1.1.1.1.2.6
***************
*** 184,188 ****
  	{
  	    for (i = 0; i < MAXAUDIOINDEV; i++)
!       	        audioindev[i] = i+1;
  	    naudioindev = nchindev;
  	}
--- 184,188 ----
  	{
  	    for (i = 0; i < MAXAUDIOINDEV; i++)
!       	        audioindev[i] = i;
  	    naudioindev = nchindev;
  	}
***************
*** 230,234 ****
  	{
  	    for (i = 0; i < MAXAUDIOOUTDEV; i++)
!       	        audiooutdev[i] = i+1;
  	    naudiooutdev = nchoutdev;
  	}
--- 230,234 ----
  	{
  	    for (i = 0; i < MAXAUDIOOUTDEV; i++)
!       	        audiooutdev[i] = i;
  	    naudiooutdev = nchoutdev;
  	}

Index: s_audio_alsa.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/s_audio_alsa.c,v
retrieving revision 1.1.1.1.2.3
retrieving revision 1.1.1.1.2.4
diff -C2 -d -r1.1.1.1.2.3 -r1.1.1.1.2.4
*** s_audio_alsa.c	12 Sep 2003 21:02:15 -0000	1.1.1.1.2.3
--- s_audio_alsa.c	18 Nov 2003 10:34:10 -0000	1.1.1.1.2.4
***************
*** 43,50 ****
      snd_pcm_t *inhandle;
      snd_pcm_t *outhandle;
  } t_alsa_dev;
  
  t_alsa_dev alsa_device;
! static short *alsa_buf = 0;
  static int alsa_samplewidth;
  static snd_pcm_status_t* in_status;
--- 43,53 ----
      snd_pcm_t *inhandle;
      snd_pcm_t *outhandle;
+     int innoninterleave;    /* true if we're set for noninterleaved read */
+     int outnoninterleave;   /* same for write */
  } t_alsa_dev;
  
  t_alsa_dev alsa_device;
! static void *alsa_snd_buf = 0;
! static void **alsa_buf_ptrs;
  static int alsa_samplewidth;
  static snd_pcm_status_t* in_status;
***************
*** 122,126 ****
      	post("audio buffer set to %d", (int)(0.001 * sys_schedadvance));
      
!     
      if (wantinchans)
      {
--- 125,129 ----
      	post("audio buffer set to %d", (int)(0.001 * sys_schedadvance));
      
!     alsa_device.innoninterleave = alsa_device.outnoninterleave = 0;
      if (wantinchans)
      {
***************
*** 161,167 ****
  	err = snd_pcm_hw_params_any(alsa_device.inhandle, hw_params);
  	check_error(err, "snd_pcm_hw_params_any (input)");
! 	// set interleaved access - FIXME deal with other access types
! 	err = snd_pcm_hw_params_set_access(alsa_device.inhandle, hw_params,
! 					   SND_PCM_ACCESS_RW_INTERLEAVED);
  	check_error(err, "snd_pcm_hw_params_set_access (input)");
  	// Try to set 32 bit format first
--- 164,182 ----
  	err = snd_pcm_hw_params_any(alsa_device.inhandle, hw_params);
  	check_error(err, "snd_pcm_hw_params_any (input)");
! 
! 	/* try to set interleaved access */
! 	err = snd_pcm_hw_params_set_access(alsa_device.inhandle,
! 	    hw_params, SND_PCM_ACCESS_RW_INTERLEAVED);
! 	if (err < 0)
! 	{
! 	    	/* OK, so try non-interleaved */
! 	    err = snd_pcm_hw_params_set_access(alsa_device.inhandle,
! 	    	hw_params, SND_PCM_ACCESS_RW_NONINTERLEAVED);
! 	    if (err >= 0)
! 	    {
! 	    	post("using non-interleaved audio input");
! 	    	alsa_device.innoninterleave = 1;
! 	    }
! 	}
  	check_error(err, "snd_pcm_hw_params_set_access (input)");
  	// Try to set 32 bit format first
***************
*** 277,280 ****
--- 292,313 ----
  					   SND_PCM_ACCESS_RW_INTERLEAVED);
  	check_error(err, "snd_pcm_hw_params_set_access (output)");
+ 
+ 	    /* try to set interleaved access */
+ 	err = snd_pcm_hw_params_set_access(alsa_device.outhandle,
+ 	    hw_params, SND_PCM_ACCESS_RW_INTERLEAVED);
+ 	if (err < 0)
+ 	{
+ 	    	/* OK, so try non-interleaved */
+ 	    err = snd_pcm_hw_params_set_access(alsa_device.outhandle,
+ 	    	hw_params, SND_PCM_ACCESS_RW_NONINTERLEAVED);
+ 	    if (err >= 0)
+ 	    {
+ 	    	post("using non-interleaved audio");
+ 	    	alsa_device.outnoninterleave = 1;
+ 	    }
+ 	}
+ 	check_error(err, "snd_pcm_hw_params_set_access (output)");
+ 
+ 
  	// Try to set 32 bit format first
  	err = snd_pcm_hw_params_set_format(alsa_device.outhandle, hw_params,
***************
*** 385,395 ****
  
      // set up the buffer
!     if (alsa_buf)
!     	free(alsa_buf);
!     alsa_buf = (short *)malloc(
  	sizeof(char) * alsa_samplewidth * DEFDACBLKSIZE *
  	    (outchans > inchans ? outchans : inchans));
!     memset(alsa_buf, 0, sizeof(char) * alsa_samplewidth * DEFDACBLKSIZE *
  	    (outchans > inchans ? outchans : inchans));
      // fill the buffer with silence
      if (outchans)
--- 418,436 ----
  
      // set up the buffer
!     if (alsa_snd_buf)
!     	free(alsa_snd_buf);
!     alsa_snd_buf = (void *)malloc(
  	sizeof(char) * alsa_samplewidth * DEFDACBLKSIZE *
  	    (outchans > inchans ? outchans : inchans));
!     memset(alsa_snd_buf, 0, sizeof(char) * alsa_samplewidth * DEFDACBLKSIZE *
  	    (outchans > inchans ? outchans : inchans));
+     	/* make an array of pointers too in case we need them */
+     if (alsa_buf_ptrs)
+     	free(alsa_buf_ptrs);
+     alsa_buf_ptrs = (void **)malloc(
+ 	sizeof(void *) * (outchans > inchans ? outchans : inchans));
+     for (i = 0; i < (outchans > inchans ? outchans : inchans); i++)
+     	alsa_buf_ptrs[i] = (t_alsa_sample32 *)alsa_snd_buf + i * DEFDACBLKSIZE;
+ 
      // fill the buffer with silence
      if (outchans)
***************
*** 397,403 ****
  	i = (frag_size * nfrags)/DEFDACBLKSIZE + 1;
  	while (i--)
! 	    snd_pcm_writei(alsa_device.outhandle, alsa_buf, DEFDACBLKSIZE);
! 	    	/* apparently we're not suppposed to start it in this case,
! 	    	but can (and must) if there's only ADC open (below). */
  	/* if ((err = snd_pcm_start(alsa_device.outhandle) < 0))
  	    check_error(err, "output start failed\n"); */
--- 438,449 ----
  	i = (frag_size * nfrags)/DEFDACBLKSIZE + 1;
  	while (i--)
! 	{
! 	    if (alsa_device.outnoninterleave)
! 	    	snd_pcm_writen(alsa_device.outhandle, alsa_buf_ptrs,
! 		    DEFDACBLKSIZE);
! 	    else snd_pcm_writei(alsa_device.outhandle, alsa_snd_buf,
! 		    DEFDACBLKSIZE);
!     	}
! 	    	/* confused about this: */
  	/* if ((err = snd_pcm_start(alsa_device.outhandle) < 0))
  	    check_error(err, "output start failed\n"); */
***************
*** 485,496 ****
  	if (alsa_samplewidth == 4)
  	{
! 	    for (i = 0, fp1 = fp; i < outchannels; i++, fp1 += DEFDACBLKSIZE)
  	    {
! 		for (j = i, k = DEFDACBLKSIZE, fp2 = fp1; k--;
! 		     j += alsa_outchannels, fp2++)
  		{
! 		    float s1 = *fp2 * INT32_MAX;
! 		    ((t_alsa_sample32 *)alsa_buf)[j] = CLIP32(s1);
! 		} 
  	    }
  	}
--- 531,558 ----
  	if (alsa_samplewidth == 4)
  	{
! 	    if (alsa_device.outnoninterleave)
  	    {
! 	    	int n = outchannels * DEFDACBLKSIZE;
! 		for (i = 0, fp1 = fp; i < n; i++)
  		{
! 		    float s1 = *fp1 * INT32_MAX;
! 		    ((t_alsa_sample32 *)alsa_snd_buf)[i] = CLIP32(s1);
! 		}
! 		n = alsa_outchannels * DEFDACBLKSIZE;
! 		for (; i < n; i++)
! 		    ((t_alsa_sample32 *)alsa_snd_buf)[i] = 0;
! 	    }
! 	    else
! 	    {
! 		for (i = 0, fp1 = fp; i < outchannels; i++,
! 		    fp1 += DEFDACBLKSIZE)
! 		{
! 		    for (j = i, k = DEFDACBLKSIZE, fp2 = fp1; k--;
! 			 j += alsa_outchannels, fp2++)
! 		    {
! 			float s1 = *fp2 * INT32_MAX;
! 			((t_alsa_sample32 *)alsa_snd_buf)[j] = CLIP32(s1);
! 		    } 
! 		}
  	    }
  	}
***************
*** 507,517 ****
  		    else if (s < -32767)
  			s = -32767;
! 		    ((t_alsa_sample16 *)alsa_buf)[j] = s;
  		}
  	    }
  	}
  
! 	result = snd_pcm_writei(alsa_device.outhandle, alsa_buf,
! 				outtransfersize);
  	if (result != (int)outtransfersize)
  	{
--- 569,583 ----
  		    else if (s < -32767)
  			s = -32767;
! 		    ((t_alsa_sample16 *)alsa_snd_buf)[j] = s;
  		}
  	    }
  	}
  
! 	if (alsa_device.outnoninterleave)
! 	    result = snd_pcm_writen(alsa_device.outhandle, alsa_buf_ptrs,
! 		outtransfersize);
! 	else result = snd_pcm_writei(alsa_device.outhandle, alsa_snd_buf,
! 		outtransfersize);
! 
  	if (result != (int)outtransfersize)
  	{
***************
*** 548,552 ****
      if (alsa_inchannels)
      {
! 	result = snd_pcm_readi(alsa_device.inhandle, alsa_buf, intransfersize);
  	if (result < (int)intransfersize)
  	{
--- 614,622 ----
      if (alsa_inchannels)
      {
!     	if (alsa_device.innoninterleave)
! 	    result = snd_pcm_readn(alsa_device.inhandle, alsa_buf_ptrs,
! 	    	intransfersize);
! 	else result = snd_pcm_readi(alsa_device.inhandle, alsa_snd_buf,
! 	    	intransfersize);
  	if (result < (int)intransfersize)
  	{
***************
*** 571,580 ****
  	if (alsa_samplewidth == 4)
  	{
! 	    for (i = 0, fp1 = fp; i < inchannels; i++, fp1 += DEFDACBLKSIZE)
  	    {
! 		for (j = i, k = DEFDACBLKSIZE, fp2 = fp1; k--;
! 		     j += alsa_inchannels, fp2++)
! 	    	    *fp2 = (float) ((t_alsa_sample32 *)alsa_buf)[j]
! 		    	* (1./ INT32_MAX);
  	    }
  	}
--- 641,661 ----
  	if (alsa_samplewidth == 4)
  	{
! 	    if (alsa_device.innoninterleave)
  	    {
! 	    	int n = inchannels * DEFDACBLKSIZE;
! 		for (i = 0, fp1 = fp; i < n; i++)
! 	    	    *fp1 = (float) ((t_alsa_sample32 *)alsa_snd_buf)[i]
! 		    	    * (1./ INT32_MAX);
! 	    }
! 	    else
! 	    {
! 		for (i = 0, fp1 = fp; i < inchannels;
! 		    i++, fp1 += DEFDACBLKSIZE)
! 		{
! 		    for (j = i, k = DEFDACBLKSIZE, fp2 = fp1; k--;
! 			 j += alsa_inchannels, fp2++)
! 	    		*fp2 = (float) ((t_alsa_sample32 *)alsa_snd_buf)[j]
! 		    	    * (1./ INT32_MAX);
! 	    	}
  	    }
  	}
***************
*** 585,589 ****
  		for (j = i, k = DEFDACBLKSIZE, fp2 = fp1; k--;
  		    j += alsa_inchannels, fp2++)
! 	    	    	*fp2 = (float) ((t_alsa_sample16 *)alsa_buf)[j]
  		    	    * 3.051850e-05;
  	    }
--- 666,670 ----
  		for (j = i, k = DEFDACBLKSIZE, fp2 = fp1; k--;
  		    j += alsa_inchannels, fp2++)
! 	    	    	*fp2 = (float) ((t_alsa_sample16 *)alsa_snd_buf)[j]
  		    	    * 3.051850e-05;
  	    }
***************
*** 639,648 ****
  	return;
      }
!     memset(alsa_buf, 0,
      	sizeof(char) * alsa_samplewidth * DEFDACBLKSIZE * sys_outchannels);
      for (i = 0; i < 1000000; i++)
      {
! 	result = snd_pcm_writei(alsa_device.outhandle, alsa_buf,
! 	    DEFDACBLKSIZE);
  	if (result != (int)DEFDACBLKSIZE)
  	    break;
--- 720,732 ----
  	return;
      }
!     memset(alsa_snd_buf, 0,
      	sizeof(char) * alsa_samplewidth * DEFDACBLKSIZE * sys_outchannels);
      for (i = 0; i < 1000000; i++)
      {
! 	if (alsa_device.outnoninterleave)
! 	    result = snd_pcm_writen(alsa_device.outhandle, alsa_buf_ptrs,
! 		DEFDACBLKSIZE);
! 	else result = snd_pcm_writei(alsa_device.outhandle, alsa_snd_buf,
! 		DEFDACBLKSIZE);
  	if (result != (int)DEFDACBLKSIZE)
  	    break;
***************
*** 654,662 ****
  {
      int i, result;
!     memset(alsa_buf, 0,
      	sizeof(char) * alsa_samplewidth * DEFDACBLKSIZE * alsa_outchannels);
      for (i = 0; i < n; i++)
      {
! 	result = snd_pcm_writei(alsa_device.outhandle, alsa_buf, DEFDACBLKSIZE);
  #if 0
  	if (result != DEFDACBLKSIZE)
--- 738,750 ----
  {
      int i, result;
!     memset(alsa_snd_buf, 0,
      	sizeof(char) * alsa_samplewidth * DEFDACBLKSIZE * alsa_outchannels);
      for (i = 0; i < n; i++)
      {
! 	if (alsa_device.outnoninterleave)
! 	    result = snd_pcm_writen(alsa_device.outhandle, alsa_buf_ptrs,
! 		DEFDACBLKSIZE);
! 	else result = snd_pcm_writei(alsa_device.outhandle, alsa_snd_buf,
! 		DEFDACBLKSIZE);
  #if 0
  	if (result != DEFDACBLKSIZE)
***************
*** 671,675 ****
      for (i = 0; i < n; i++)
      {
! 	result = snd_pcm_readi(alsa_device.inhandle, alsa_buf, DEFDACBLKSIZE);
  #if 0
  	if (result != DEFDACBLKSIZE)
--- 759,764 ----
      for (i = 0; i < n; i++)
      {
! 	result = snd_pcm_readi(alsa_device.inhandle, alsa_snd_buf,
! 	    DEFDACBLKSIZE);
  #if 0
  	if (result != DEFDACBLKSIZE)

Index: s_audio_oss.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/s_audio_oss.c,v
retrieving revision 1.1.1.1.2.3
retrieving revision 1.1.1.1.2.4
diff -C2 -d -r1.1.1.1.2.3 -r1.1.1.1.2.4
*** s_audio_oss.c	12 Sep 2003 21:02:15 -0000	1.1.1.1.2.3
--- s_audio_oss.c	18 Nov 2003 10:34:10 -0000	1.1.1.1.2.4
***************
*** 266,270 ****
  }
  
! #define O_AUDIOFLAG 0 /* O_NDELAY */
  
  int oss_open_audio(int nindev,  int *indev,  int nchin,  int *chin,
--- 266,270 ----
  }
  
! #define O_AUDIOFLAG O_NDELAY
  
  int oss_open_audio(int nindev,  int *indev,  int nchin,  int *chin,
***************
*** 274,278 ****
      int inchannels = 0, outchannels = 0;
      char devname[20];
!     int n, i, fd;
      char buf[OSS_MAXSAMPLEWIDTH * DEFDACBLKSIZE * OSS_MAXCHPERDEV];
      int num_devs = 0;
--- 274,278 ----
      int inchannels = 0, outchannels = 0;
      char devname[20];
!     int n, i, fd, flags;
      char buf[OSS_MAXSAMPLEWIDTH * DEFDACBLKSIZE * OSS_MAXCHPERDEV];
      int num_devs = 0;
***************
*** 321,324 ****
--- 321,330 ----
  	    else
  	    {
+ 	    	if (fcntl(fd, F_SETFD, 1) < 0)
+ 		    post("couldn't set close-on-exec flag on audio");
+ 	    	if ((flags = fcntl(fd, F_GETFL)) < 0)
+ 		    post("couldn't get audio device flags");
+ 		else if (fcntl(fd, F_SETFL, flags & (!O_NDELAY)) < 0)
+ 		    post("couldn't set audio device flags");
  	    	if (sys_verbose)
  	    	    post("opened %s for reading and writing\n", devname);
***************
*** 336,339 ****
--- 342,351 ----
  		break;
  	    }
+ 	    if (fcntl(fd, F_SETFD, 1) < 0)
+ 		post("couldn't set close-on-exec flag on audio");
+ 	    if ((flags = fcntl(fd, F_GETFL)) < 0)
+ 		post("couldn't get audio device flags");
+ 	    else if (fcntl(fd, F_SETFL, flags & (!O_NDELAY)) < 0)
+ 		post("couldn't set audio device flags");
  	    if (sys_verbose)
  	    	post("opened %s for writing only\n", devname);
***************
*** 406,409 ****
--- 418,427 ----
  		goto end_in_loop;
  	    }
+ 	    if (fcntl(fd, F_SETFD, 1) < 0)
+ 		post("couldn't set close-on-exec flag on audio");
+ 	    if ((flags = fcntl(fd, F_GETFL)) < 0)
+ 		post("couldn't get audio device flags");
+ 	    else if (fcntl(fd, F_SETFL, flags & (!O_NDELAY)) < 0)
+ 		post("couldn't set audio device flags");
  	    if (sys_verbose)
  	    	post("opened %s for reading only\n", devname);

Index: s_main.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/s_main.c,v
retrieving revision 1.1.1.4.2.7
retrieving revision 1.1.1.4.2.8
diff -C2 -d -r1.1.1.4.2.7 -r1.1.1.4.2.8
*** s_main.c	23 Sep 2003 00:55:28 -0000	1.1.1.4.2.7
--- s_main.c	18 Nov 2003 10:34:10 -0000	1.1.1.4.2.8
***************
*** 8,12 ****
   */
  
! char pd_version[] = "Pd version 0.37.0 devel\n";
  char pd_compiletime[] = __TIME__;
  char pd_compiledate[] = __DATE__;
--- 8,12 ----
   */
  
! char pd_version[] = "Pd version 0.37.1 devel\n";
  char pd_compiletime[] = __TIME__;
  char pd_compiledate[] = __DATE__;
***************
*** 51,54 ****
--- 51,55 ----
  static t_namelist *sys_messagelist;
  static int sys_version;
+ int sys_oldtclversion;	    /* hack to warn g_rtext.c about old text sel */
  
  int sys_nmidiout = 1;
***************
*** 182,186 ****
      t_namelist *nl;
      unsigned int i, j;
!     if (argc != 1 + 3 * NHOSTFONT) bug("glob_initfromgui");
      for (i = 0; i < NFONT; i++)
      {
--- 183,187 ----
      t_namelist *nl;
      unsigned int i, j;
!     if (argc != 2 + 3 * NHOSTFONT) bug("glob_initfromgui");
      for (i = 0; i < NFONT; i++)
      {
***************
*** 226,229 ****
--- 227,231 ----
      namelist_free(sys_messagelist);
      sys_messagelist = 0;
+     sys_oldtclversion = atom_getfloatarg(1 + 3 * NHOSTFONT, argc, argv);
  }
  

Index: s_midi.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/s_midi.c,v
retrieving revision 1.1.1.1.2.2
retrieving revision 1.1.1.1.2.3
diff -C2 -d -r1.1.1.1.2.2 -r1.1.1.1.2.3
*** s_midi.c	12 Sep 2003 21:07:02 -0000	1.1.1.1.2.2
--- s_midi.c	18 Nov 2003 10:34:10 -0000	1.1.1.1.2.3
***************
*** 226,241 ****
  {
      int mp_status;
-     int mp_sysex;
      int mp_gotbyte1;
      int mp_byte1;
  } t_midiparser;
  
! #define MIDINOTEOFF       0x80
! #define MIDINOTEON        0x90
! #define MIDIPOLYTOUCH     0xa0
! #define MIDICONTROLCHANGE 0xb0
! #define MIDIPROGRAMCHANGE 0xc0
! #define MIDICHANNELTOUCH  0xd0
! #define MIDIPITCHBEND     0xe0
      /* functions in x_midi.c */
  void inmidi_realtimein(int portno, int cmd);
--- 226,256 ----
  {
      int mp_status;
      int mp_gotbyte1;
      int mp_byte1;
  } t_midiparser;
  
! #define MIDINOTEOFF       0x80	/* 2 following 'data bytes' */
! #define MIDINOTEON        0x90	/* 2 */
! #define MIDIPOLYTOUCH     0xa0	/* 2 */
! #define MIDICONTROLCHANGE 0xb0	/* 2 */
! #define MIDIPROGRAMCHANGE 0xc0	/* 1 */
! #define MIDICHANNELTOUCH  0xd0	/* 1 */
! #define MIDIPITCHBEND     0xe0	/* 2 */
! #define MIDISTARTSYSEX    0xf0	/* (until F7) */
! #define MIDITIMECODE      0xf1	/* 1 */
! #define MIDISONGPOS       0xf2	/* 2 */
! #define MIDISONGSELECT    0xf3	/* 1 */
! #define MIDIRESERVED1     0xf4	/* ? */
! #define MIDIRESERVED2     0xf5	/* ? */
! #define MIDITUNEREQUEST   0xf6	/* 0 */
! #define MIDIENDSYSEX      0xf7	/* 0 */
! #define MIDICLOCK         0xf8	/* 0 */
! #define MIDITICK          0xf9	/* 0 */
! #define MIDISTART         0xfa	/* 0 */
! #define MIDICONT          0xfb	/* 0 */
! #define MIDISTOP          0xfc	/* 0 */
! #define MIDIACTIVESENSE   0xfe	/* 0 */
! #define MIDIRESET         0xff	/* 0 */
! 
      /* functions in x_midi.c */
  void inmidi_realtimein(int portno, int cmd);
***************
*** 266,322 ****
      {
      	inmidi_byte(portno, byte);
! 	if (byte < 0xf0)
  	{
! 	    if (byte & 0x80)
  	    {
  	    	parserp->mp_status = byte;
! 		parserp->mp_gotbyte1 = 0;
  	    }
  	    else
  	    {
! 	    	int cmd = (parserp->mp_status & 0xf0);
! 		int chan = (parserp->mp_status & 0xf);
! 		int byte1 = parserp->mp_byte1, gotbyte1 = parserp->mp_gotbyte1;
! 		switch (cmd)
! 		{
! 		case MIDINOTEOFF:
! 		    if (gotbyte1)
! 		    	inmidi_noteon(portno, chan, byte1, 0),
! 			    parserp->mp_gotbyte1 = 0;
! 		    else parserp->mp_byte1 = byte, parserp->mp_gotbyte1 = 1;
! 		    break;
! 		case MIDINOTEON:
! 		    if (gotbyte1)
! 		    	inmidi_noteon(portno, chan, byte1, byte),
! 			    parserp->mp_gotbyte1 = 0;
! 		    else parserp->mp_byte1 = byte, parserp->mp_gotbyte1 = 1;
! 		    break;
! 		case MIDIPOLYTOUCH:
! 		    if (gotbyte1)
! 		    	inmidi_polyaftertouch(portno, chan, byte1, byte),
! 			    parserp->mp_gotbyte1 = 0;
! 		    else parserp->mp_byte1 = byte, parserp->mp_gotbyte1 = 1;
! 		    break;
! 		case MIDICONTROLCHANGE:
! 		    if (gotbyte1)
! 		    	inmidi_controlchange(portno, chan, byte1, byte),
! 			    parserp->mp_gotbyte1 = 0;
! 		    else parserp->mp_byte1 = byte, parserp->mp_gotbyte1 = 1;
! 		    break;
! 		case MIDIPROGRAMCHANGE:
! 		    inmidi_programchange(portno, chan, byte);
! 		    break;
! 		case MIDICHANNELTOUCH:
! 		    inmidi_aftertouch(portno, chan, byte);
! 		    break;
! 		case MIDIPITCHBEND:
! 		    if (gotbyte1)
! 		    	inmidi_pitchbend(portno, chan, ((byte << 7) + byte1)),
! 			    parserp->mp_gotbyte1 = 0;
! 		    else parserp->mp_byte1 = byte, parserp->mp_gotbyte1 = 1;
! 		    break;
! 		}
  	    }
! 	 }
      }  
      midi_intail  = (midi_intail + 1 == MIDIQSIZE ? 0 : midi_intail + 1);
--- 281,364 ----
      {
      	inmidi_byte(portno, byte);
! 	if (byte & 0x80)
  	{
! 	    if (byte == MIDITUNEREQUEST || byte == MIDIRESERVED1 ||
! 	    	byte == MIDIRESERVED2)
! 	    	    parserp->mp_status = 0;
! 	    else if (byte == MIDISTARTSYSEX)
  	    {
+ 	    	inmidi_sysex(portno, byte);
  	    	parserp->mp_status = byte;
! 	    }
! 	    else if (byte == MIDIENDSYSEX)
! 	    {
! 	    	inmidi_sysex(portno, byte);
! 	    	parserp->mp_status = 0;
  	    }
  	    else
  	    {
! 	    	parserp->mp_status = byte;
  	    }
! 	    parserp->mp_gotbyte1 = 0;
! 	}
! 	else
! 	{
! 	    int cmd = (parserp->mp_status >= 0xf0 ? parserp->mp_status :
! 	    	(parserp->mp_status & 0xf0));
! 	    int chan = (parserp->mp_status & 0xf);
! 	    int byte1 = parserp->mp_byte1, gotbyte1 = parserp->mp_gotbyte1;
! 	    switch (cmd)
! 	    {
! 	    case MIDINOTEOFF:
! 		if (gotbyte1)
! 		    inmidi_noteon(portno, chan, byte1, 0),
! 			parserp->mp_gotbyte1 = 0;
! 		else parserp->mp_byte1 = byte, parserp->mp_gotbyte1 = 1;
! 		break;
! 	    case MIDINOTEON:
! 		if (gotbyte1)
! 		    inmidi_noteon(portno, chan, byte1, byte),
! 			parserp->mp_gotbyte1 = 0;
! 		else parserp->mp_byte1 = byte, parserp->mp_gotbyte1 = 1;
! 		break;
! 	    case MIDIPOLYTOUCH:
! 		if (gotbyte1)
! 		    inmidi_polyaftertouch(portno, chan, byte1, byte),
! 			parserp->mp_gotbyte1 = 0;
! 		else parserp->mp_byte1 = byte, parserp->mp_gotbyte1 = 1;
! 		break;
! 	    case MIDICONTROLCHANGE:
! 		if (gotbyte1)
! 		    inmidi_controlchange(portno, chan, byte1, byte),
! 			parserp->mp_gotbyte1 = 0;
! 		else parserp->mp_byte1 = byte, parserp->mp_gotbyte1 = 1;
! 		break;
! 	    case MIDIPROGRAMCHANGE:
! 		inmidi_programchange(portno, chan, byte);
! 		break;
! 	    case MIDICHANNELTOUCH:
! 		inmidi_aftertouch(portno, chan, byte);
! 		break;
! 	    case MIDIPITCHBEND:
! 		if (gotbyte1)
! 		    inmidi_pitchbend(portno, chan, ((byte << 7) + byte1)),
! 			parserp->mp_gotbyte1 = 0;
! 		else parserp->mp_byte1 = byte, parserp->mp_gotbyte1 = 1;
! 		break;
!     	    case MIDISTARTSYSEX:
! 	    	inmidi_sysex(portno, byte);
! 		break;
! 		
! 		/* other kinds of messages are just dropped here.  We'll
! 		need another status byte before we start letting MIDI in
! 		again (no running status across "system" messages). */
! 	    case MIDITIMECODE:     /* 1 data byte*/
! 	    	break;
! 	    case MIDISONGPOS:       /* 2 */
! 	    	break;
! 	    case MIDISONGSELECT:    /* 1 */
! 	    	break;
! 	    }
! 	}
      }  
      midi_intail  = (midi_intail + 1 == MIDIQSIZE ? 0 : midi_intail + 1);

Index: s_midi_pm.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/s_midi_pm.c,v
retrieving revision 1.1.1.1.2.2
retrieving revision 1.1.1.1.2.3
diff -C2 -d -r1.1.1.1.2.2 -r1.1.1.1.2.3
*** s_midi_pm.c	2 Aug 2003 15:37:49 -0000	1.1.1.1.2.2
--- s_midi_pm.c	18 Nov 2003 10:34:10 -0000	1.1.1.1.2.3
***************
*** 133,139 ****
  }
  
  void sys_putmidibyte(int portno, int byte)
  {
!     post("sorry, no byte-by-byte MIDI output implemented in MAC OSX");
  }
  
--- 133,223 ----
  }
  
+ static int writemidi4(PortMidiStream* stream, int a, int b, int c, int d)
+ {
+     PmEvent buffer;
+     buffer.timestamp = 0;
+     buffer.message = ((a & 0xff) | ((b & 0xff) << 8)
+     	| ((c & 0xff) << 16) | ((d & 0xff) << 24));
+     Pm_Write(stream, &buffer, 1);
+ }
+ 
+ 
  void sys_putmidibyte(int portno, int byte)
  {
!     	/* try to parse the bytes into MIDI messages so they can
! 	fit into PortMidi buffers. */
!     static int mess[4];
!     static int nbytes = 0, sysex = 0, i;
!     if (byte >= 0xf8)	/* MIDI real time */
!         writemidi4(mac_midioutdevlist[portno], byte, 0, 0, 0);
!     else if (byte == 0xf0)
!     {
!     	mess[0] = 0xf7;
! 	nbytes = 1;
! 	sysex = 1;
!     }
!     else if (byte == 0xf7)
!     {
!     	mess[nbytes] = byte;
! 	for (i = nbytes+1; i < 4; i++)
! 	    mess[i] = 0;
!     	writemidi4(mac_midioutdevlist[portno],
! 	    mess[0], mess[1], mess[2], mess[3]);
! 	sysex = 0;
! 	nbytes = 0;
!     }
!     else if (byte >= 0x80)
!     {
! 	sysex = 0;
!     	if (byte == 0xf4 || byte == 0xf5 || byte == 0xf6)
! 	{
! 	    writemidi4(mac_midioutdevlist[portno], byte, 0, 0, 0);
! 	    nbytes = 0;
! 	}
! 	else
! 	{
! 	    mess[0] = byte;
! 	    nbytes = 1;
! 	}
!     }
!     else if (sysex)
!     {
!     	mess[nbytes] = byte;
! 	nbytes++;
! 	if (nbytes == 4)
! 	{
!     	    writemidi4(mac_midioutdevlist[portno],
! 		mess[0], mess[1], mess[2], mess[3]);
! 	    nbytes = 0;
! 	}
!     }
!     else if (nbytes)
!     {
!     	int status = mess[0];
!     	if (status < 0xf0)
! 	    status &= 0xf0;
! 	    	/* 2 byte messages: */
!     	if (status == 0xc0 || status == 0xd0 ||
! 	    status == 0xf1 || status == 0xf3)
! 	{
!     	    writemidi4(mac_midioutdevlist[portno],
! 		mess[0], byte, 0, 0);
! 	    nbytes = (status < 0xf0 ? 1 : 0);
! 	}
!     	else
! 	{
! 	    if (nbytes == 1)
! 	    {
! 	    	mess[1] = byte;
! 		nbytes = 2;
! 	    }
! 	    else
! 	    {
!     	    	writemidi4(mac_midioutdevlist[portno],
! 		    mess[0], mess[1], byte, 0);
! 	    	nbytes = (status < 0xf0 ? 1 : 0);
! 	    }
! 	}
!     }
  }
  

Index: x_midi.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/x_midi.c,v
retrieving revision 1.1.1.2
retrieving revision 1.1.1.2.2.1
diff -C2 -d -r1.1.1.2 -r1.1.1.2.2.1
*** x_midi.c	9 May 2003 16:03:45 -0000	1.1.1.2
--- x_midi.c	18 Nov 2003 10:34:10 -0000	1.1.1.2.2.1
***************
*** 86,107 ****
  void inmidi_byte(int portno, int byte)
  {
-     static int sysex;
      t_atom at[2];
!     if (byte == 0xf0)
!     	sysex |= (1 << portno);
!     if (sysexin_sym->s_thing && (sysex & (1 << portno)))
      {
      	SETFLOAT(at, byte);
      	SETFLOAT(at+1, portno + 1);
!     	pd_list(sysexin_sym->s_thing, 0, 2, at);
      }
!     if (byte == 0xf7)
!     	sysex &= (~(1 << portno));
  
!     if (midiin_sym->s_thing)
      {
      	SETFLOAT(at, byte);
      	SETFLOAT(at+1, portno + 1);
!     	pd_list(midiin_sym->s_thing, 0, 2, at);
      }
  }
--- 86,106 ----
  void inmidi_byte(int portno, int byte)
  {
      t_atom at[2];
!     if (midiin_sym->s_thing)
      {
      	SETFLOAT(at, byte);
      	SETFLOAT(at+1, portno + 1);
!     	pd_list(midiin_sym->s_thing, 0, 2, at);
      }
! }
  
! void inmidi_sysex(int portno, int byte)
! {
!     t_atom at[2];
!     if (sysexin_sym->s_thing)
      {
      	SETFLOAT(at, byte);
      	SETFLOAT(at+1, portno + 1);
!     	pd_list(sysexin_sym->s_thing, 0, 2, at);
      }
  }






More information about the Pd-cvs mailing list