1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
/* getpatchname - Returns the filename of the current patch
*
* Copyright (C) 2006 Jamie Bullock
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include "m_pd.h"
#include "g_canvas.h"
static t_class *getpatchname_class;
typedef struct _getpatchname {
t_object x_obj;
t_symbol *patch_name;
t_outlet *outlet;
t_canvas *x_canvas;
int x_level;
} t_getpatchname;
void getpatchname_bang(t_getpatchname *x)
{
/* At some point we need to be to get the new patch name if it changes, couldn't make this work though */
int i = x->x_level;
t_canvas* last = x->x_canvas;
while (i>0) {
i--;
if (last->gl_owner) last = last->gl_owner;
}
outlet_symbol(x->outlet, last->gl_name);
}
void *getpatchname_new(t_floatarg level)
{
t_getpatchname *x = (t_getpatchname *)pd_new(getpatchname_class);
x->patch_name = canvas_getcurrent()->gl_name;
x->x_canvas = canvas_getcurrent();
x->outlet = outlet_new(&x->x_obj, &s_symbol);
x->x_level = level;
return (void *)x;
}
void getpatchname_setup(void) {
getpatchname_class = class_new(gensym("getpatchname"),
(t_newmethod)getpatchname_new,
0, sizeof(t_getpatchname), 0,
A_DEFFLOAT, 0);
class_addbang(getpatchname_class, getpatchname_bang);
}
|