Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Gabriela Bittencourt
purr-data
Commits
752294af
Commit
752294af
authored
Dec 31, 2020
by
Jonathan Wilkes
Browse files
fix incompatible pointers, sketchy string handling, indentation, warnings
parent
e8e05380
Changes
3
Hide whitespace changes
Inline
Side-by-side
pd/src/g_canvas.c
View file @
752294af
...
...
@@ -800,15 +800,14 @@ void canvas_args_to_string(char *namebuf, t_canvas *x)
{
namebuf
[
0
]
=
0
;
t_gobj
*
g
=
NULL
;
t_garray
*
a
=
NULL
;
t_symbol
*
arrayname
;
int
found
=
0
,
res
;
int
found
=
0
;
for
(
g
=
x
->
gl_list
;
g
;
g
=
g
->
g_next
)
{
if
(
pd_class
(
&
g
->
g_pd
)
==
garray_class
)
{
res
=
garray_getname
((
t_garray
*
)
g
,
&
arrayname
);
garray_getname
((
t_garray
*
)
g
,
&
arrayname
);
if
(
found
)
{
strcat
(
namebuf
,
" "
);
...
...
@@ -889,13 +888,14 @@ typedef struct _dirty_broadcast_data
int
*
res
;
/* return value */
}
t_dirty_broadcast_data
;
static
void
canvas_dirty_deliver_packed
(
t_canvas
*
x
,
t_dirty_broadcast_data
*
data
)
static
void
canvas_dirty_deliver_packed
(
t_canvas
*
x
,
void
*
z
)
{
t_dirty_broadcast_data
*
data
=
(
t_dirty_broadcast_data
*
)
z
;
*
data
->
res
+=
(
x
->
gl_dirty
>
0
);
canvas_dirty_common
(
x
,
data
->
mess
);
}
static
void
canvas_dirty_broadcast_packed
(
t_canvas
*
x
,
t_dirty_broadcast_data
*
data
);
static
void
canvas_dirty_broadcast_packed
(
t_canvas
*
x
,
void
*
z
);
static
int
canvas_dirty_broadcast
(
t_canvas
*
x
,
t_symbol
*
name
,
t_symbol
*
dir
,
int
mess
)
{
...
...
@@ -922,7 +922,7 @@ static int canvas_dirty_broadcast(t_canvas *x, t_symbol *name, t_symbol *dir, in
int
cres
=
0
;
t_dirty_broadcast_data
data
;
data
.
name
=
name
;
data
.
dir
=
dir
;
data
.
mess
=
mess
;
data
.
res
=
&
cres
;
if
(
clone_match
(
&
g
->
g_pd
,
name
,
dir
))
if
(
clone_match
(
&
g
->
g_pd
,
name
,
dir
))
{
clone_iterate
(
&
g
->
g_pd
,
canvas_dirty_deliver_packed
,
&
data
);
}
...
...
@@ -936,8 +936,9 @@ static int canvas_dirty_broadcast(t_canvas *x, t_symbol *name, t_symbol *dir, in
return
(
res
);
}
static
void
canvas_dirty_broadcast_packed
(
t_canvas
*
x
,
t_dirty_broadcast_data
*
data
)
static
void
canvas_dirty_broadcast_packed
(
t_canvas
*
x
,
void
*
z
)
{
t_dirty_broadcast_data
*
data
=
(
t_dirty_broadcast_data
*
)
z
;
*
data
->
res
=
canvas_dirty_broadcast
(
x
,
data
->
name
,
data
->
dir
,
data
->
mess
);
}
...
...
@@ -959,13 +960,14 @@ typedef struct _dirty_broadcast_ab_data
int
*
res
;
}
t_dirty_broadcast_ab_data
;
static
void
canvas_dirty_deliver_ab_packed
(
t_canvas
*
x
,
t_dirty_broadcast_ab_data
*
data
)
static
void
canvas_dirty_deliver_ab_packed
(
t_canvas
*
x
,
void
*
z
)
{
t_dirty_broadcast_ab_data
*
data
=
(
t_dirty_broadcast_ab_data
*
)
z
;
*
data
->
res
+=
(
x
->
gl_dirty
>
0
);
canvas_dirty_common
(
x
,
data
->
mess
);
}
static
void
canvas_dirty_broadcast_ab_packed
(
t_canvas
*
x
,
t_dirty_broadcast_ab_data
*
data
);
static
void
canvas_dirty_broadcast_ab_packed
(
t_canvas
*
x
,
void
*
z
);
int
canvas_dirty_broadcast_ab
(
t_canvas
*
x
,
t_ab_definition
*
abdef
,
int
mess
)
{
...
...
@@ -973,29 +975,29 @@ int canvas_dirty_broadcast_ab(t_canvas *x, t_ab_definition *abdef, int mess)
t_gobj
*
g
;
for
(
g
=
x
->
gl_list
;
g
;
g
=
g
->
g_next
)
{
if
(
pd_class
(
&
g
->
g_pd
)
==
canvas_class
)
if
(
pd_class
(
&
g
->
g_pd
)
==
canvas_class
)
{
if
(
canvas_isabstraction
((
t_canvas
*
)
g
)
&&
((
t_canvas
*
)
g
)
->
gl_isab
if
(
canvas_isabstraction
((
t_canvas
*
)
g
)
&&
((
t_canvas
*
)
g
)
->
gl_isab
&&
((
t_canvas
*
)
g
)
->
gl_absource
==
abdef
)
{
res
+=
(((
t_canvas
*
)
g
)
->
gl_dirty
>
0
);
canvas_dirty_common
((
t_canvas
*
)
g
,
mess
);
}
else
if
(
!
canvas_isabstraction
((
t_canvas
*
)
g
)
||
((
t_canvas
*
)
g
)
->
gl_isab
)
else
if
(
!
canvas_isabstraction
((
t_canvas
*
)
g
)
||
((
t_canvas
*
)
g
)
->
gl_isab
)
{
res
+=
canvas_dirty_broadcast_ab
((
t_canvas
*
)
g
,
abdef
,
mess
);
}
}
else
if
(
pd_class
(
&
g
->
g_pd
)
==
clone_class
)
else
if
(
pd_class
(
&
g
->
g_pd
)
==
clone_class
)
{
int
cres
=
0
;
t_dirty_broadcast_ab_data
data
;
data
.
abdef
=
abdef
;
data
.
mess
=
mess
;
data
.
res
=
&
cres
;
if
(
clone_matchab
(
&
g
->
g_pd
,
abdef
))
if
(
clone_matchab
(
&
g
->
g_pd
,
abdef
))
{
clone_iterate
(
&
g
->
g_pd
,
canvas_dirty_deliver_ab_packed
,
&
data
);
}
else
if
(
clone_isab
(
&
g
->
g_pd
))
else
if
(
clone_isab
(
&
g
->
g_pd
))
{
clone_iterate
(
&
g
->
g_pd
,
canvas_dirty_broadcast_ab_packed
,
&
data
);
}
...
...
@@ -1005,8 +1007,9 @@ int canvas_dirty_broadcast_ab(t_canvas *x, t_ab_definition *abdef, int mess)
return
(
res
);
}
static
void
canvas_dirty_broadcast_ab_packed
(
t_canvas
*
x
,
t_dirty_broadcast_ab_data
*
data
)
static
void
canvas_dirty_broadcast_ab_packed
(
t_canvas
*
x
,
void
*
z
)
{
t_dirty_broadcast_ab_data
*
data
=
(
t_dirty_broadcast_ab_data
*
)
z
;
*
data
->
res
=
canvas_dirty_broadcast_ab
(
x
,
data
->
abdef
,
data
->
mess
);
}
...
...
pd/src/g_editor.c
View file @
752294af
...
...
@@ -1302,7 +1302,7 @@ typedef struct _reload_data
t_gobj *e;
} t_reload_data;
static
void
glist_doreload_packed
(
t_canvas
*
x
,
t_reload_data
*
data
);
static void glist_doreload_packed(t_canvas *x,
void *z
);
/* recursively check for abstractions to reload as result of a save.
Don't reload the one we just saved ("except") though. */
...
...
@@ -1410,8 +1410,9 @@ static void glist_doreload(t_glist *gl, t_symbol *name, t_symbol *dir,
canvas_vis(glist_getcanvas(gl), 0);
}
static
void
glist_doreload_packed
(
t_canvas
*
x
,
t_reload_data
*
data
)
static void glist_doreload_packed(t_canvas *x,
void *z
)
{
t_reload_data *data = (t_reload_data *)z;
glist_doreload(x, data->n, data->d, data->e);
}
...
...
@@ -1439,7 +1440,7 @@ typedef struct _reload_ab_data
t_gobj *e;
} t_reload_ab_data;
static
void
glist_doreload_ab_packed
(
t_canvas
*
x
,
t_reload_ab_data
*
data
);
static void glist_doreload_ab_packed(t_canvas *x,
void
*data);
/* recursive ab reload method */
static void glist_doreload_ab(t_canvas *x, t_ab_definition *a, t_gobj *e)
...
...
@@ -1495,8 +1496,9 @@ static void glist_doreload_ab(t_canvas *x, t_ab_definition *a, t_gobj *e)
}
}
static
void
glist_doreload_ab_packed
(
t_canvas
*
x
,
t_reload_ab_data
*
data
)
static void glist_doreload_ab_packed(t_canvas *x,
void *z
)
{
t_reload_ab_data *data = (t_reload_ab_data *)z;
glist_doreload_ab(x, data->a, data->e);
}
...
...
@@ -2409,61 +2411,72 @@ static int do_replace_subpatches(t_canvas *x, const char* label, t_binbuf *origi
static void abstracthandler_callback(t_abstracthandler *x, t_symbol *s)
{
char
fullpath
[
MAXPDSTRING
],
label
[
MAXPDSTRING
],
*
dir
,
*
filename
,
*
o
=
s
->
s_name
;
memset
(
fullpath
,
'\0'
,
MAXPDSTRING
);
memset
(
label
,
'\0'
,
MAXPDSTRING
);
char fullpath[MAXPDSTRING], label[MAXPDSTRING], *dir, *filename;
memset(fullpath, '\0', MAXPDSTRING);
memset(label, '\0', MAXPDSTRING);
sys_unbashfilename(s->s_name, fullpath);
if
(
strlen
(
fullpath
)
<
3
||
strcmp
(
fullpath
+
strlen
(
fullpath
)
-
3
,
".pd"
))
if
(strlen(fullpath) < 3 || strcmp(fullpath+strlen(fullpath)-3, ".pd"))
strcat(fullpath, ".pd");
filename
=
strrchr
(
fullpath
,
'/'
)
+
1
;
fullpath
[
(
int
)
filename
-
(
int
)
fullpath
-
1
]
=
'\0'
;
filename = strrchr(fullpath, '/')
+
1;
fullpath[filename
-
fullpath
-
1] = '\0';
dir = fullpath;
int flag, prefix = 0;
if
(
flag
=
sys_relativizepath
(
canvas_getdir
(
canvas_getrootfor
(
x
->
tarjet
))
->
s_name
,
dir
,
label
))
if (flag =
sys_relativizepath(canvas_getdir(canvas_getrootfor(x->tarjet))->s_name,
dir, label))
{
int len = strlen(label), creator, fd = -1;
if
(
len
&&
label
[
len
-
1
]
!=
'/'
)
label
[
len
]
=
'/'
;
strncat
(
label
,
filename
,
strlen
(
filename
)
-
3
);
/* check if there is a creator with the same name or if it's one of the built-in methods */
if (len && label[len-1] != '/')
label[len] = '/';
strncat(label, filename, MAXPDSTRING - 4);
/* check if there is a creator with the same name or if it's one of
the built-in methods */
t_symbol *sym = gensym(label);
creator
=
(
sym
==
&
s_bang
||
sym
==
&
s_float
||
sym
==
&
s_symbol
||
sym
==
&
s_blob
||
sym
==
&
s_list
||
sym
==
&
s_anything
);
if
(
!
len
&&
creator
)
creator = (sym == &s_bang ||
sym == &s_float ||
sym == &s_symbol ||
sym == &s_blob ||
sym == &s_list ||
sym == &s_anything);
if (!len && creator)
{
prefix = (!len && creator);
creator = 0;
}
creator = (creator || zgetfn(&pd_objectmaker, sym));
/* check if there in an abstraction with the same name in the search path */
if
(
!
creator
)
/* check if there in an abstraction with the same name in the
search path */
if (!creator)
{
char opendir[MAXPDSTRING], *filenameptr;
fd
=
canvas_open
(
canvas_getrootfor
(
x
->
tarjet
),
label
,
".pd"
,
opendir
,
&
filenameptr
,
MAXPDSTRING
,
0
);
//high load
if
(
fd
>
0
)
fd = canvas_open(canvas_getrootfor(x->tarjet), label, ".pd",
opendir,
&filenameptr, MAXPDSTRING, 0); //high load
if
(fd > 0)
{
sys_close(fd);
/* check if we are overwriting the file */
if
(
!
strncmp
(
dir
,
opendir
,
(
int
)
filenameptr
-
(
int
)
opendir
-
1
))
fd
=
-
1
;
if
(!strncmp(dir, opendir, filenameptr
-
opendir
-
1)) fd = -1;
}
}
flag = !(creator || (fd > 0));
if
(
flag
&&
prefix
)
if
(flag && prefix)
{
strcpy(label, "./");
strncat
(
label
,
filename
,
strlen
(
filename
)
-
3
);
strncat(label, filename,
MAXPDSTRING - 4
);
}
else
if
(
!
flag
)
error
(
"warning: couldn't use relative path, there is a coincidence in the creator list or the search path"
);
else if (!flag)
error("warning: couldn't use relative path, there is a coincidence "
"in the creator list or the search path");
}
if
(
!
flag
)
/* absolute path is required */
if
(!flag) /* absolute path is required */
{
memset(label, '\0', MAXPDSTRING);
strcpy(label, dir);
strcat(label, "/");
strncat
(
label
,
filename
,
strlen
(
filename
)
-
3
);
strncat(label, filename, strlen(
label) -
3);
/* should check if 'filename' is one of the built-in special methods
in order to inform the user about the nameclash problem */
}
...
...
@@ -2472,19 +2485,29 @@ static void abstracthandler_callback(t_abstracthandler *x, t_symbol *s)
/* save the subpatch into a separated pd file */
t_atom at[3];
SETSYMBOL
(
at
,
gensym
(
filename
));
SETSYMBOL
(
at
+
1
,
gensym
(
dir
));
SETFLOAT
(
at
+
2
,
0
.
f
);
x
->
tarjet
->
gl_env
=
dummy_canvas_env
(
dir
);
/* gl_env is set to non-zero in order to save the subcanvas as a root canvas */
SETSYMBOL(at, gensym(filename));
SETSYMBOL(at+1, gensym(dir));
SETFLOAT(at+2, 0.f);
/* gl_env is set to non-zero in order to save the subcanvas as a
root canvas */
x->tarjet->gl_env = dummy_canvas_env(dir);
typedmess(&x->tarjet->gl_pd, gensym("savetofile"), 3, at);
x->tarjet->gl_env = 0;
t_binbuf *tmp = binbuf_new(), *tmps = binbuf_new();
gobj_save((t_gobj *)x->tarjet, tmp);
/* only the internals are kept, the position on
the
parent canvas may differ */
/* only the internals are kept, the position on parent canvas may differ */
int i = 0, j = binbuf_getnatom(tmp)-2, matches;
t_atom *v = binbuf_getvec(tmp);
while
(
v
[
i
].
a_type
!=
A_SEMI
)
i
++
;
while(v[i].a_type != A_SEMI)
{
i++;
}
i++;
while
(
v
[
j
].
a_type
!=
A_SEMI
)
j
--
;
while(v[j].a_type != A_SEMI)
{
j--;
}
binbuf_restore(tmps, j-i+1, v+i);
binbuf_free(tmp);
matches = do_replace_subpatches(canvas_getrootfor(x->tarjet), 0, tmps);
...
...
@@ -2499,27 +2522,29 @@ static void abstracthandler_callback(t_abstracthandler *x, t_symbol *s)
static void abstracthandler_dialog(t_abstracthandler *x, t_floatarg val)
{
if
(
x
->
tarjet
==
x
->
dialog
)
canvas_vis
(
x
->
dialog
,
0
);
if
(x->tarjet == x->dialog) canvas_vis(x->dialog, 0);
t_canvas *owner = x->tarjet->gl_owner, *root = canvas_getrootfor(x->tarjet);
int all = val;
if
(
!
all
)
if
(!all)
{
/* change the text of the subpatch object to create the abstraction,
emulating the procedure done by the user. could be simplified */
int edi = 0;
if
(
!
owner
->
gl_editor
)
{
canvas_create_editor
(
owner
);
edi
=
1
;
}
if
(!owner->gl_editor) { canvas_create_editor(owner); edi = 1; }
glist_noselect(owner);
glist_select(owner, &x->tarjet->gl_gobj);
do_rename_light(&x->tarjet->gl_gobj, owner, x->path);
glist_deselect(owner, &x->tarjet->gl_gobj);
if
(
edi
)
canvas_destroy_editor
(
owner
);
if
(edi) canvas_destroy_editor(owner);
/* select '[args]' slice
canvas_editmode(owner, 1);
t_gobj *abst = glist_nth(owner, glist_getindex(owner, 0)-1);
int len = strlen(x->path);
glist_select(owner, abst);
gobj_activate(abst, owner, (0b1 << 31) | (((len+1) & 0x7FFF) << 16) | ((len+7) & 0xFFFF)); */
gobj_activate(abst, owner, (0b1 << 31) |
(((len+1) & 0x7FFF) << 16) |
((len+7) & 0xFFFF)); */
}
else
{
...
...
@@ -2531,13 +2556,12 @@ static void abstracthandler_dialog(t_abstracthandler *x, t_floatarg val)
void abstracthandler_setup(void)
{
abstracthandler_class = class_new(gensym("abstracthandler"), 0,
(
t_method
)
abstracthandler_free
,
sizeof
(
t_abstracthandler
),
CLASS_NOINLET
,
0
);
(t_method)abstracthandler_free, sizeof(t_abstracthandler),
CLASS_NOINLET, 0);
class_addmethod(abstracthandler_class, (t_method)abstracthandler_callback,
gensym
(
"callback"
),
A_SYMBOL
,
0
);
gensym("callback"), A_SYMBOL, 0);
class_addmethod(abstracthandler_class, (t_method)abstracthandler_dialog,
gensym
(
"dialog"
),
A_FLOAT
,
0
);
gensym("dialog"), A_FLOAT, 0);
}
/* ------------------------ event handling ------------------------ */
...
...
@@ -2873,7 +2897,7 @@ void canvas_vis(t_canvas *x, t_floatarg f)
(int)(x->gl_screeny2 - x->gl_screeny1),
geobuf,
sys_snaptogrid,
sys_gridsize
,
sys_gridsize,
x->gl_zoom,
x->gl_edit,
x->gl_name->s_name,
...
...
@@ -3940,8 +3964,8 @@ void canvas_doclick(t_canvas *x, int xpos, int ypos, int which,
//int enlarged = 0;
//if (closest == last_outlet)
// enlarged = 5;
//post("xpos=%d closest=%d noutlet=%d
\
nout1
=%
d
hotspot
=%
d
IOWIDTH
=%
d
enlarged
=%
d
",
//post("xpos=%d closest=%d noutlet=%d
"
//
"
nout1=%d hotspot=%d IOWIDTH=%d enlarged=%d",
// xpos, closest, noutlet, nout1, hotspot, IOWIDTH, enlarged);
// if have found an outlet and are within its range...
if (closest < noutlet &&
...
...
@@ -4091,7 +4115,6 @@ void canvas_doclick(t_canvas *x, int xpos, int ypos, int which,
/* not in an outlet; select and move */
else if (doit)
{
t_rtext *rt;
/* check if the box is being text edited */
nooutletafterall:
/* otherwise select and drag to displace */
...
...
@@ -4449,7 +4472,7 @@ void canvas_drawconnection(t_canvas *x, int lx1, int ly1, int lx2, int ly2,
//second object is below the first
if (abs(halfx) <=10)
{
ymax = abs(halfy * pow((halfx/10.0),2));
ymax = abs(
(int)(
halfy * pow((halfx/10.0),2))
)
;
if (ymax > 10) ymax = 10;
}
else ymax = 10;
...
...
@@ -4495,7 +4518,7 @@ void canvas_updateconnection(t_canvas *x, int lx1, int ly1, int lx2, int ly2,
//second object is below the first
if (abs(halfx) <=10)
{
ymax = abs(halfy * pow((halfx/10.0),2));
ymax = abs(
(int)(
halfy * pow((halfx/10.0),2))
)
;
if (ymax > 10) ymax = 10;
}
else ymax = 10;
...
...
@@ -5642,15 +5665,17 @@ void canvas_key(t_canvas *x, t_symbol *s, int ac, t_atom *av)
if (x->gl_editor->e_grab)
{
if (x->gl_editor->e_keyfn && keynum && focus)
{
(* x->gl_editor->e_keyfn)
(x->gl_editor->e_grab, (t_float)keynum);
if (x->gl_editor->e_keynameafn && gotkeysym && focus)
{
at[0] = av[0];
SETFLOAT(at, down);
SETSYMBOL(at+1, gotkeysym);
(* x->gl_editor->e_keynameafn) (x->gl_editor->e_grab, 0, 2, at);
}
}
if (x->gl_editor->e_keynameafn && gotkeysym && focus)
{
at[0] = av[0];
SETFLOAT(at, down);
SETSYMBOL(at+1, gotkeysym);
(*x->gl_editor->e_keynameafn)(x->gl_editor->e_grab, 0, 2, at);
}
}
/* if a text editor is open send the key on, as long as
it is either "real" (has a key number) or else is an arrow key. */
...
...
@@ -5794,7 +5819,7 @@ static void snap_get_anchor_xy(t_canvas *x, int *gobj_x, int *gobj_y)
*gobj_y = y1;
return;
}
s = s->sel_next;
s = s->sel_next;
}
bug("canvas_get_snap_offset");
}
...
...
@@ -5813,7 +5838,7 @@ static void canvas_snap_to_grid(t_canvas *x, int xwas, int ywas, int xnew,
int snap_dx = 0, snap_dy = 0;
if (!snap_got_anchor)
{
int obx = xnew, oby = ynew
, xsign, ysign
;
int obx = xnew, oby = ynew;
snap_get_anchor_xy(x, &obx, &oby);
/* First, get the distance the selection should be displaced
in order to align the anchor object with a grid line. */
...
...
@@ -7051,7 +7076,6 @@ static void canvas_encapsulate(t_canvas *x)
canvas_undo_add(x, UNDO_SEQUENCE_START, "encapsulate", 0);
/* cut selected objects using special copy method, based on canvas_cut */
t_binbuf *object, *connections;
int centx, centy;
canvas_undo_add(x, UNDO_CUT, "cut", canvas_undo_set_cut(x, UCUT_CUT));
canvas_dofancycopy(x, &object, &connections);
canvas_doclear(x);
...
...
pd/src/u_pdreceive.c
View file @
752294af
...
...
@@ -225,7 +225,11 @@ static int tcpmakeoutput(t_fdpoll *x, char *inbuf, int len)
putchar
(
outbuf
[
j
]);
}
#else
write
(
1
,
outbuf
,
outlen
);
if
(
write
(
1
,
outbuf
,
outlen
)
<
0
)
{
perror
(
"write"
);
exit
(
1
);
}
#endif
}
/* if (!x->fdp_discard) */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment