aboutsummaryrefslogtreecommitdiff
path: root/pd/src/g_all_guis.c
diff options
context:
space:
mode:
authorGuenter Geiger <ggeiger@users.sourceforge.net>2002-07-29 17:06:19 +0000
committerGuenter Geiger <ggeiger@users.sourceforge.net>2002-07-29 17:06:19 +0000
commit57045df5fe3ec557e57dc7434ac1a07b5521bffc (patch)
tree7174058b41b73c808107c7090d9a4e93ee202341 /pd/src/g_all_guis.c
parentda38b3424229e59f956252c3d89895e43e84e278 (diff)
This commit was generated by cvs2svn to compensate for changes in r58,
which included commits to RCS files with non-trunk default branches. svn path=/trunk/; revision=59
Diffstat (limited to 'pd/src/g_all_guis.c')
-rw-r--r--pd/src/g_all_guis.c937
1 files changed, 937 insertions, 0 deletions
diff --git a/pd/src/g_all_guis.c b/pd/src/g_all_guis.c
new file mode 100644
index 00000000..5bbf2f4a
--- /dev/null
+++ b/pd/src/g_all_guis.c
@@ -0,0 +1,937 @@
+/* Copyright (c) 1997-1999 Miller Puckette.
+ * For information on usage and redistribution, and for a DISCLAIMER OF ALL
+ * WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
+
+/* g_7_guis.c written by Thomas Musil (c) IEM KUG Graz Austria 2000-2001 */
+/* thanks to Miller Puckette, Guenther Geiger and Krzystof Czaja */
+
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <ctype.h>
+#include "m_imp.h"
+#include "g_canvas.h"
+#include "t_tk.h"
+#include "g_all_guis.h"
+#include <math.h>
+
+#ifdef NT
+#include <io.h>
+#else
+#include <unistd.h>
+#endif
+
+/* #define GGEE_HSLIDER_COMPATIBLE */
+
+/*------------------ global varaibles -------------------------*/
+
+t_symbol *iemgui_key_sym=0;
+
+int iemgui_color_hex[]=
+{
+ 16579836, 10526880, 4210752, 16572640, 16572608,
+ 16579784, 14220504, 14220540, 14476540, 16308476,
+ 14737632, 8158332, 2105376, 16525352, 16559172,
+ 15263784, 1370132, 2684148, 3952892, 16003312,
+ 12369084, 6316128, 0, 9177096, 5779456,
+ 7874580, 2641940, 17488, 5256, 5767248
+};
+
+int iemgui_vu_db2i[]=
+{
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 9, 9, 9, 9, 9,10,10,10,10,10,
+ 11,11,11,11,11,12,12,12,12,12,
+ 13,13,13,13,14,14,14,14,15,15,
+ 15,15,16,16,16,16,17,17,17,18,
+ 18,18,19,19,19,20,20,20,21,21,
+ 22,22,23,23,24,24,25,26,27,28,
+ 29,30,31,32,33,33,34,34,35,35,
+ 36,36,37,37,37,38,38,38,39,39,
+ 39,39,39,39,40,40
+};
+
+int iemgui_vu_col[]=
+{
+ 0,17,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
+ 15,15,15,15,15,15,15,15,15,15,14,14,13,13,13,13,13,13,13,13,13,13,13,19,19,19
+};
+
+char *iemgui_vu_scale_str[]=
+{
+ "",
+ "<-99",
+ "",
+ "",
+ "",
+ "-50",
+ "",
+ "",
+ "",
+ "-30",
+ "",
+ "",
+ "",
+ "-20",
+ "",
+ "",
+ "",
+ "-12",
+ "",
+ "",
+ "",
+ "-6",
+ "",
+ "",
+ "",
+ "-2",
+ "",
+ "",
+ "",
+ "-0dB",
+ "",
+ "",
+ "",
+ "+2",
+ "",
+ "",
+ "",
+ "+6",
+ "",
+ "",
+ "",
+ ">+12",
+ "",
+ "",
+ "",
+ "",
+ "",
+};
+
+
+/*------------------ global functions -------------------------*/
+
+
+int iemgui_clip_size(int size)
+{
+ if(size < IEM_GUI_MINSIZE)
+ size = IEM_GUI_MINSIZE;
+ return(size);
+}
+
+int iemgui_clip_font(int size)
+{
+ if(size < IEM_FONT_MINSIZE)
+ size = IEM_FONT_MINSIZE;
+ return(size);
+}
+
+int iemgui_modulo_color(int col)
+{
+ while(col >= IEM_GUI_MAX_COLOR)
+ col -= IEM_GUI_MAX_COLOR;
+ while(col < 0)
+ col += IEM_GUI_MAX_COLOR;
+ return(col);
+}
+
+void iemgui_raute2dollar(t_symbol *s)
+{
+ if(s->s_name[0] == '#')
+ s->s_name[0] = '$';
+}
+
+void iemgui_dollar2raute(t_symbol *s)
+{
+ if(s->s_name[0] == '$')
+ s->s_name[0] = '#';
+}
+
+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", 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);
+ }
+}
+
+void iemgui_all_col2save(t_iemgui *iemgui, int *bflcol)
+{
+ bflcol[0] = -1 - (((0xfc0000 & iemgui->x_bcol) >> 6)|
+ ((0xfc00 & iemgui->x_bcol) >> 4)|((0xfc & iemgui->x_bcol) >> 2));
+ bflcol[1] = -1 - (((0xfc0000 & iemgui->x_fcol) >> 6)|
+ ((0xfc00 & iemgui->x_fcol) >> 4)|((0xfc & iemgui->x_fcol) >> 2));
+ bflcol[2] = -1 - (((0xfc0000 & iemgui->x_lcol) >> 6)|
+ ((0xfc00 & iemgui->x_lcol) >> 4)|((0xfc & iemgui->x_lcol) >> 2));
+}
+
+void iemgui_all_colfromload(t_iemgui *iemgui, int *bflcol)
+{
+ if(bflcol[0] < 0)
+ {
+ bflcol[0] = -1 - bflcol[0];
+ iemgui->x_bcol = ((bflcol[0] & 0x3f000) << 6)|((bflcol[0] & 0xfc0) << 4)|
+ ((bflcol[0] & 0x3f) << 2);
+ }
+ else
+ {
+ bflcol[0] = iemgui_modulo_color(bflcol[0]);
+ iemgui->x_bcol = iemgui_color_hex[bflcol[0]];
+ }
+ if(bflcol[1] < 0)
+ {
+ bflcol[1] = -1 - bflcol[1];
+ iemgui->x_fcol = ((bflcol[1] & 0x3f000) << 6)|((bflcol[1] & 0xfc0) << 4)|
+ ((bflcol[1] & 0x3f) << 2);
+ }
+ else
+ {
+ bflcol[1] = iemgui_modulo_color(bflcol[1]);
+ iemgui->x_fcol = iemgui_color_hex[bflcol[1]];
+ }
+ if(bflcol[2] < 0)
+ {
+ bflcol[2] = -1 - bflcol[2];
+ iemgui->x_lcol = ((bflcol[2] & 0x3f000) << 6)|((bflcol[2] & 0xfc0) << 4)|
+ ((bflcol[2] & 0x3f) << 2);
+ }
+ else
+ {
+ bflcol[2] = iemgui_modulo_color(bflcol[2]);
+ iemgui->x_lcol = iemgui_color_hex[bflcol[2]];
+ }
+}
+
+int iemgui_compatible_col(int i)
+{
+ int j;
+
+ if(i >= 0)
+ {
+ j = iemgui_modulo_color(i);
+ return(iemgui_color_hex[(j)]);
+ }
+ else
+ return((-1 -i)&0xffffff);
+}
+
+void iemgui_all_dollar2raute(t_symbol **srlsym)
+{
+ if(srlsym[0]->s_name[0] == '$')
+ srlsym[0]->s_name[0] = '#';
+ if(srlsym[1]->s_name[0] == '$')
+ srlsym[1]->s_name[0] = '#';
+ if(srlsym[2]->s_name[0] == '$')
+ srlsym[2]->s_name[0] = '#';
+}
+
+void iemgui_all_raute2dollar(t_symbol **srlsym)
+{
+ if(srlsym[0]->s_name[0] == '#')
+ srlsym[0]->s_name[0] = '$';
+ if(srlsym[1]->s_name[0] == '#')
+ srlsym[1]->s_name[0] = '$';
+ if(srlsym[2]->s_name[0] == '#')
+ srlsym[2]->s_name[0] = '$';
+}
+
+void iemgui_send(void *x, t_iemgui *iemgui, t_symbol *s)
+{
+ t_symbol *snd;
+ int pargc, tail_len, nth_arg, sndable=1, oldsndrcvable=0;
+ t_atom *pargv;
+
+ if(iemgui->x_fsf.x_rcv_able)
+ oldsndrcvable += IEM_GUI_OLD_RCV_FLAG;
+ if(iemgui->x_fsf.x_snd_able)
+ oldsndrcvable += IEM_GUI_OLD_SND_FLAG;
+
+ if(!strcmp(s->s_name, "empty")) sndable = 0;
+ iemgui_raute2dollar(s);
+ iemgui_fetch_unique(iemgui);
+ snd = 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);
+ (*iemgui->x_draw)(x, iemgui->x_glist, IEM_GUI_DRAW_MODE_IO + oldsndrcvable);
+}
+
+void iemgui_receive(void *x, t_iemgui *iemgui, t_symbol *s)
+{
+ t_symbol *rcv;
+ int pargc, tail_len, nth_arg, rcvable=1, oldsndrcvable=0;
+ t_atom *pargv;
+
+ if(iemgui->x_fsf.x_rcv_able)
+ oldsndrcvable += IEM_GUI_OLD_RCV_FLAG;
+ if(iemgui->x_fsf.x_snd_able)
+ oldsndrcvable += IEM_GUI_OLD_SND_FLAG;
+
+ if(!strcmp(s->s_name, "empty")) rcvable = 0;
+ iemgui_raute2dollar(s);
+ rcv = 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)
+ {
+ if(strcmp(rcv->s_name, iemgui->x_rcv->s_name))
+ {
+ if(iemgui->x_fsf.x_rcv_able)
+ pd_unbind(&iemgui->x_obj.ob_pd, iemgui->x_rcv);
+ iemgui->x_rcv = rcv;
+ pd_bind(&iemgui->x_obj.ob_pd, iemgui->x_rcv);
+ }
+ }
+ else if(!rcvable && iemgui->x_fsf.x_rcv_able)
+ {
+ pd_unbind(&iemgui->x_obj.ob_pd, iemgui->x_rcv);
+ iemgui->x_rcv = rcv;
+ }
+ iemgui->x_fsf.x_rcv_able = rcvable;
+ iemgui_verify_snd_ne_rcv(iemgui);
+ (*iemgui->x_draw)(x, iemgui->x_glist, IEM_GUI_DRAW_MODE_IO + oldsndrcvable);
+}
+
+void iemgui_label(void *x, t_iemgui *iemgui, t_symbol *s)
+{
+ t_symbol *lab;
+ int pargc, tail_len, nth_arg;
+ t_atom *pargv;
+
+ iemgui_raute2dollar(s);
+ lab = 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",
+ glist_getcanvas(iemgui->x_glist), x,
+ strcmp(s->s_name, "empty")?iemgui->x_lab->s_name:"");
+}
+
+void iemgui_label_pos(void *x, t_iemgui *iemgui, t_symbol *s, int ac, t_atom *av)
+{
+ iemgui->x_ldx = (int)atom_getintarg(0, ac, av);
+ iemgui->x_ldy = (int)atom_getintarg(1, ac, av);
+ if(glist_isvisible(iemgui->x_glist))
+ sys_vgui(".x%x.c coords %xLABEL %d %d\n",
+ glist_getcanvas(iemgui->x_glist), x,
+ iemgui->x_obj.te_xpix+iemgui->x_ldx,
+ iemgui->x_obj.te_ypix+iemgui->x_ldy);
+}
+
+void iemgui_label_font(void *x, t_iemgui *iemgui, t_symbol *s, int ac, t_atom *av)
+{
+ int f = (int)atom_getintarg(0, ac, av);
+
+ if(f == 1) strcpy(iemgui->x_font, "helvetica");
+ else if(f == 2) strcpy(iemgui->x_font, "times");
+ else
+ {
+ f = 0;
+ strcpy(iemgui->x_font, "courier");
+ }
+ iemgui->x_fsf.x_font_style = f;
+ f = (int)atom_getintarg(1, ac, av);
+ if(f < 4)
+ f = 4;
+ iemgui->x_fontsize = f;
+ if(glist_isvisible(iemgui->x_glist))
+ sys_vgui(".x%x.c itemconfigure %xLABEL -font {%s %d bold}\n",
+ glist_getcanvas(iemgui->x_glist), x, iemgui->x_font, iemgui->x_fontsize);
+}
+
+void iemgui_size(void *x, t_iemgui *iemgui)
+{
+ if(glist_isvisible(iemgui->x_glist))
+ {
+ (*iemgui->x_draw)(x, iemgui->x_glist, IEM_GUI_DRAW_MODE_MOVE);
+ canvas_fixlinesfor(glist_getcanvas(iemgui->x_glist), (t_text*)x);
+ }
+}
+
+void iemgui_delta(void *x, t_iemgui *iemgui, t_symbol *s, int ac, t_atom *av)
+{
+ iemgui->x_obj.te_xpix += (int)atom_getintarg(0, ac, av);
+ iemgui->x_obj.te_ypix += (int)atom_getintarg(1, ac, av);
+ if(glist_isvisible(iemgui->x_glist))
+ {
+ (*iemgui->x_draw)(x, iemgui->x_glist, IEM_GUI_DRAW_MODE_MOVE);
+ canvas_fixlinesfor(glist_getcanvas(iemgui->x_glist), (t_text*)x);
+ }
+}
+
+void iemgui_pos(void *x, t_iemgui *iemgui, t_symbol *s, int ac, t_atom *av)
+{
+ iemgui->x_obj.te_xpix = (int)atom_getintarg(0, ac, av);
+ iemgui->x_obj.te_ypix = (int)atom_getintarg(1, ac, av);
+ if(glist_isvisible(iemgui->x_glist))
+ {
+ (*iemgui->x_draw)(x, iemgui->x_glist, IEM_GUI_DRAW_MODE_MOVE);
+ canvas_fixlinesfor(glist_getcanvas(iemgui->x_glist), (t_text*)x);
+ }
+}
+
+void iemgui_color(void *x, t_iemgui *iemgui, t_symbol *s, int ac, t_atom *av)
+{
+ iemgui->x_bcol = iemgui_compatible_col(atom_getintarg(0, ac, av));
+ if(ac > 2)
+ {
+ iemgui->x_fcol = iemgui_compatible_col(atom_getintarg(1, ac, av));
+ iemgui->x_lcol = iemgui_compatible_col(atom_getintarg(2, ac, av));
+ }
+ else
+ iemgui->x_lcol = iemgui_compatible_col(atom_getintarg(1, ac, av));
+ if(glist_isvisible(iemgui->x_glist))
+ (*iemgui->x_draw)(x, iemgui->x_glist, IEM_GUI_DRAW_MODE_CONFIG);
+}
+
+int iemgui_list(void *x, t_iemgui *iemgui, t_symbol *s, int ac, t_atom *av)
+{
+ if(iemgui->x_fsf.x_selected)
+ {
+ if((ac == 2)&&IS_A_FLOAT(av,0)&&IS_A_SYMBOL(av,1))
+ {
+ t_symbol *key = atom_getsymbolarg(1, ac, av);
+ int keydown = atom_getintarg(0, ac, av);
+
+ if(keydown)
+ {
+ int refresh = 1,i,d=1;
+ static char buf[20];
+
+ buf[0] = 0;
+ if(!strcmp(key->s_name, "Shift_L")||!strcmp(key->s_name, "Shift_R"))
+ iemgui->x_fsf.x_shiftdown = 1;
+ else
+ {
+ if(iemgui->x_fsf.x_shiftdown)
+ d = 10;
+ if(!strcmp(key->s_name, "Up"))
+ iemgui->x_obj.te_ypix -= d;
+ else if(!strcmp(key->s_name, "Down"))
+ iemgui->x_obj.te_ypix += d;
+ else if(!strcmp(key->s_name, "Left"))
+ iemgui->x_obj.te_xpix -= d;
+ else if(!strcmp(key->s_name, "Right"))
+ iemgui->x_obj.te_xpix += d;
+ else
+ refresh = 0;
+ if(refresh)
+ return(1);
+ }
+ return(0);
+ }
+ else
+ {
+ if(!strcmp(key->s_name, "Shift_L")||!strcmp(key->s_name, "Shift_R"))
+ iemgui->x_fsf.x_shiftdown = 0;
+ return(0);
+ }
+ }
+ else
+ return(-1);
+ }
+ else
+ return(-1);
+}
+
+void iemgui_displace(t_gobj *z, t_glist *glist, int dx, int dy)
+{
+ t_iemguidummy *x = (t_iemguidummy *)z;
+
+ x->x_gui.x_obj.te_xpix += dx;
+ x->x_gui.x_obj.te_ypix += dy;
+ (*x->x_gui.x_draw)((void *)z, glist, IEM_GUI_DRAW_MODE_MOVE);
+ canvas_fixlinesfor(glist_getcanvas(glist), (t_text *)z);
+}
+
+void iemgui_select(t_gobj *z, t_glist *glist, int selected)
+{
+ t_iemguidummy *x = (t_iemguidummy *)z;
+
+ x->x_gui.x_fsf.x_selected = selected;
+ (*x->x_gui.x_draw)((void *)z, glist, IEM_GUI_DRAW_MODE_SELECT);
+}
+
+void iemgui_delete(t_gobj *z, t_glist *glist)
+{
+ canvas_deletelinesfor(glist, (t_text *)z);
+}
+
+void iemgui_vis(t_gobj *z, t_glist *glist, int vis)
+{
+ t_iemguidummy *x = (t_iemguidummy *)z;
+ t_rtext *y;
+
+ if(vis)
+ {
+ y = rtext_new_without_senditup(glist, (t_text *)z, glist->gl_editor->e_rtext);
+ (*x->x_gui.x_draw)((void *)z, glist, IEM_GUI_DRAW_MODE_NEW);
+ }
+ else
+ {
+ y = glist_findrtext(glist, (t_text *)z);
+ (*x->x_gui.x_draw)((void *)z, glist, IEM_GUI_DRAW_MODE_ERASE);
+ rtext_free(y);
+ }
+}
+
+void iemgui_save(t_iemgui *iemgui, t_symbol **srl, int *bflcol)
+{
+ srl[0] = iemgui->x_snd;
+ 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);
+}
+
+void iemgui_properties(t_iemgui *iemgui, t_symbol **srl)
+{
+ srl[0] = iemgui->x_snd;
+ srl[1] = iemgui->x_rcv;
+ srl[2] = iemgui->x_lab;
+ iemgui_all_unique2dollarzero(iemgui, srl);
+ iemgui_all_sym2dollararg(iemgui, srl);
+ iemgui_all_dollar2raute(srl);
+}
+
+int iemgui_dialog(t_iemgui *iemgui, t_symbol **srl, int argc, t_atom *argv)
+{
+ char str[144];
+ int init = (int)atom_getintarg(5, argc, argv);
+ int ldx = (int)atom_getintarg(10, argc, argv);
+ int ldy = (int)atom_getintarg(11, argc, argv);
+ int f = (int)atom_getintarg(12, argc, argv);
+ int fs = (int)atom_getintarg(13, argc, argv);
+ int bcol = (int)atom_getintarg(14, argc, argv);
+ int fcol = (int)atom_getintarg(15, argc, argv);
+ int lcol = (int)atom_getintarg(16, argc, argv);
+ int sndable=1, rcvable=1, oldsndrcvable=0;
+
+ if(iemgui->x_fsf.x_rcv_able)
+ oldsndrcvable += IEM_GUI_OLD_RCV_FLAG;
+ if(iemgui->x_fsf.x_snd_able)
+ oldsndrcvable += IEM_GUI_OLD_SND_FLAG;
+ if(IS_A_SYMBOL(argv,7))
+ srl[0] = atom_getsymbolarg(7, argc, argv);
+ else if(IS_A_FLOAT(argv,7))
+ {
+ sprintf(str, "%d", (int)atom_getintarg(7, argc, argv));
+ srl[0] = gensym(str);
+ }
+ if(IS_A_SYMBOL(argv,8))
+ srl[1] = atom_getsymbolarg(8, argc, argv);
+ else if(IS_A_FLOAT(argv,8))
+ {
+ sprintf(str, "%d", (int)atom_getintarg(8, argc, argv));
+ srl[1] = gensym(str);
+ }
+ if(IS_A_SYMBOL(argv,9))
+ srl[2] = atom_getsymbolarg(9, argc, argv);
+ else if(IS_A_FLOAT(argv,9))
+ {
+ sprintf(str, "%d", (int)atom_getintarg(9, argc, argv));
+ srl[2] = gensym(str);
+ }
+ if(init != 0) init = 1;
+ iemgui->x_isa.x_loadinit = init;
+ if(!strcmp(srl[0]->s_name, "empty")) sndable = 0;
+ 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)
+ {
+ if(strcmp(srl[1]->s_name, iemgui->x_rcv->s_name))
+ {
+ if(iemgui->x_fsf.x_rcv_able)
+ pd_unbind(&iemgui->x_obj.ob_pd, iemgui->x_rcv);
+ iemgui->x_rcv = srl[1];
+ pd_bind(&iemgui->x_obj.ob_pd, iemgui->x_rcv);
+ }
+ }
+ else if(!rcvable && iemgui->x_fsf.x_rcv_able)
+ {
+ pd_unbind(&iemgui->x_obj.ob_pd, iemgui->x_rcv);
+ iemgui->x_rcv = srl[1];
+ }
+ iemgui->x_snd = srl[0];
+ iemgui->x_fsf.x_snd_able = sndable;
+ iemgui->x_fsf.x_rcv_able = rcvable;
+ iemgui->x_lcol = lcol & 0xffffff;
+ iemgui->x_fcol = fcol & 0xffffff;
+ iemgui->x_bcol = bcol & 0xffffff;
+ iemgui->x_lab = srl[2];
+ iemgui->x_ldx = ldx;
+ iemgui->x_ldy = ldy;
+ if(f == 1) strcpy(iemgui->x_font, "helvetica");
+ else if(f == 2) strcpy(iemgui->x_font, "times");
+ else
+ {
+ f = 0;
+ strcpy(iemgui->x_font, "courier");
+ }
+ iemgui->x_fsf.x_font_style = f;
+ if(fs < 4)
+ fs = 4;
+ iemgui->x_fontsize = fs;
+ iemgui_verify_snd_ne_rcv(iemgui);
+ return(oldsndrcvable);
+}