From e0054d833930c810178c2fda8aa52e351acb8c03 Mon Sep 17 00:00:00 2001 From: Jonathan Wilkes <jancsika@yahoo.com> Date: Fri, 11 Jul 2014 16:37:43 -0400 Subject: [PATCH] added classtable method for [pdinfo] --- pd/src/m_class.c | 21 +++++++++++++++++++ pd/src/m_pd.h | 2 ++ pd/src/x_interface.c | 48 +++++++++++++++++++++++++++----------------- 3 files changed, 53 insertions(+), 18 deletions(-) diff --git a/pd/src/m_class.c b/pd/src/m_class.c index cb66d85f6..6d4a8f9c0 100644 --- a/pd/src/m_class.c +++ b/pd/src/m_class.c @@ -184,6 +184,27 @@ void classtable_register(t_class *c) ct = t; } +int classtable_size(void) { + t_classtable *t; + int i; + for(t = ct, i = 0; t; t = t->ct_next) + i++; + return i; +} + +void classtable_tovec(int size, t_atom *vec) +{ + t_classtable *t; + int i; + for(t = ct, i = 0; t && i < size; t = t->ct_next, i++) + if (!t->ct_class->c_name) + { + SETSYMBOL(vec+i, gensym("anonymous-class")); + } + else + SETSYMBOL(vec+i, t->ct_class->c_name); +} + // todo-- make accessors so m_imp.h isn't needed by x_interface.c t_class *classtable_findbyname(t_symbol *s) diff --git a/pd/src/m_pd.h b/pd/src/m_pd.h index 369a12a5b..2311a58a9 100644 --- a/pd/src/m_pd.h +++ b/pd/src/m_pd.h @@ -466,6 +466,8 @@ EXTERN void class_set_extern_dir(t_symbol *s); /* classtable functions */ EXTERN t_class *classtable_findbyname(t_symbol *s); +EXTERN int classtable_size(void); +EXTERN void classtable_tovec(int size, t_atom *vec); /* prototype for functions to save Pd's to a binbuf */ typedef void (*t_savefn)(t_gobj *x, t_binbuf *b); diff --git a/pd/src/x_interface.c b/pd/src/x_interface.c index 0188648e2..85a4fd954 100644 --- a/pd/src/x_interface.c +++ b/pd/src/x_interface.c @@ -456,14 +456,14 @@ void pdinfo_dir(t_pdinfo *x, t_symbol *s, int argc, t_atom *argv) info_out((t_text *)x, s, 1, at); } -void pdinfo_dsp(t_pdinfo *x, t_symbol *s, int argc, t_atom *arg) +void pdinfo_dsp(t_pdinfo *x, t_symbol *s, int argc, t_atom *argv) { t_atom at[1]; SETFLOAT(at, (t_float)canvas_dspstate); info_out((t_text *)x, s, 1, at); } -void pdinfo_audio_api(t_pdinfo *x, t_symbol *s, int argc, t_atom *arg) +void pdinfo_audio_api(t_pdinfo *x, t_symbol *s, int argc, t_atom *argv) { t_atom at[1]; t_symbol *api = getapiname(sys_audioapi); @@ -471,12 +471,20 @@ void pdinfo_audio_api(t_pdinfo *x, t_symbol *s, int argc, t_atom *arg) info_out((t_text *)x, s, 1, at); } +void pdinfo_classtable(t_pdinfo *x, t_symbol *s, int argc, t_atom *argv) +{ + int size = classtable_size(); + t_atom at[size]; + classtable_tovec(size, at); + info_out((t_text *)x, s, size, at); +} + void pdinfo_audioin(t_pdinfo *x, t_symbol *s, int argc, t_atom *arg) { // char i } -void pdinfo_audio_api_list_raw(t_pdinfo *x, t_symbol *s, int argc, t_atom *arg) +void pdinfo_audio_api_list_raw(t_pdinfo *x, t_symbol *s, int argc, t_atom *argv) { t_atom at[7]; int i; @@ -485,7 +493,7 @@ void pdinfo_audio_api_list_raw(t_pdinfo *x, t_symbol *s, int argc, t_atom *arg) info_out((t_text *)x, s, i, at); } -void pdinfo_audio_apilist(t_pdinfo *x, t_symbol *s, int argc, t_atom *arg) +void pdinfo_audio_apilist(t_pdinfo *x, t_symbol *s, int argc, t_atom *argv) { t_atom at[8]; int n = 0; @@ -553,10 +561,10 @@ void pdinfo_audio_listdevs(t_pdinfo *x, t_symbol *s, int argc, t_atom *argv) } } -void pdinfo_audio_dev(t_pdinfo *x, t_symbol *s, int argc, t_atom *arg) +void pdinfo_audio_dev(t_pdinfo *x, t_symbol *s, int argc, t_atom *argv) { int devno; - if (argc) devno = (int)atom_getfloatarg(0, argc, arg); + if (argc) devno = (int)atom_getfloatarg(0, argc, argv); else devno = 0; int naudioindev, audioindev[MAXAUDIOINDEV], chindev[MAXAUDIOINDEV]; int naudiooutdev, audiooutdev[MAXAUDIOOUTDEV], choutdev[MAXAUDIOOUTDEV]; @@ -579,7 +587,7 @@ void pdinfo_audio_dev(t_pdinfo *x, t_symbol *s, int argc, t_atom *arg) info_out((t_text *)x, s, 0, 0); } -void pdinfo_midi_api(t_pdinfo *x, t_symbol *s, int argc, t_atom *arg) +void pdinfo_midi_api(t_pdinfo *x, t_symbol *s, int argc, t_atom *argv) { t_atom at[1]; t_symbol *api, *def = gensym("DEFAULT"); @@ -591,7 +599,7 @@ void pdinfo_midi_api(t_pdinfo *x, t_symbol *s, int argc, t_atom *arg) info_out((t_text *)x, s, 1, at); } -void pdinfo_midi_apilist(t_pdinfo *x, t_symbol *s, int argc, t_atom *arg) +void pdinfo_midi_apilist(t_pdinfo *x, t_symbol *s, int argc, t_atom *argv) { t_atom at[8]; int n = 0; @@ -629,13 +637,13 @@ void pdinfo_midi_listdevs(t_pdinfo *x, t_symbol *s, int argc, t_atom *argv) } } -void pdinfo_midi_dev(t_pdinfo *x, t_symbol *s, int argc, t_atom *arg) +void pdinfo_midi_dev(t_pdinfo *x, t_symbol *s, int argc, t_atom *argv) { int devno, nmidiindev, midiindev[MAXMIDIINDEV], nmidioutdev, midioutdev[MAXMIDIOUTDEV]; int *dev, *chan, ndev; t_atom at[4]; - if (argc) devno = (int)atom_getfloatarg(0, argc, arg); + if (argc) devno = (int)atom_getfloatarg(0, argc, argv); else devno = 0; sys_get_midi_params(&nmidiindev, midiindev, &nmidioutdev, midioutdev); if (s == gensym("midi-indev")) @@ -652,10 +660,10 @@ void pdinfo_midi_dev(t_pdinfo *x, t_symbol *s, int argc, t_atom *arg) info_out((t_text *)x, s, 0, 0); } -void pdinfo_audio_outdev(t_pdinfo *x, t_symbol *s, int argc, t_atom *arg) +void pdinfo_audio_outdev(t_pdinfo *x, t_symbol *s, int argc, t_atom *argv) { int devno; - if (argc) devno = (int)atom_getfloatarg(0, argc, arg); + if (argc) devno = (int)atom_getfloatarg(0, argc, argv); else devno = 0; int naudioindev, audioindev[MAXAUDIOINDEV], chindev[MAXAUDIOINDEV]; int naudiooutdev, audiooutdev[MAXAUDIOOUTDEV], choutdev[MAXAUDIOOUTDEV]; @@ -673,14 +681,14 @@ void pdinfo_audio_outdev(t_pdinfo *x, t_symbol *s, int argc, t_atom *arg) info_out((t_text *)x, s, 0, 0); } -void pdinfo_audio_inchannels(t_pdinfo *x, t_symbol *s, int argc, t_atom *arg) +void pdinfo_audio_inchannels(t_pdinfo *x, t_symbol *s, int argc, t_atom *argv) { t_atom at[1]; SETFLOAT(at, (t_float)sys_get_inchannels()); info_out((t_text *)x, s, 1, at); } -void pdinfo_audio_outchannels(t_pdinfo *x, t_symbol *s, int argc, t_atom *arg) +void pdinfo_audio_outchannels(t_pdinfo *x, t_symbol *s, int argc, t_atom *argv) { t_atom at[1]; SETFLOAT(at, (t_float)sys_get_outchannels()); @@ -688,21 +696,21 @@ void pdinfo_audio_outchannels(t_pdinfo *x, t_symbol *s, int argc, t_atom *arg) } -void pdinfo_audio_samplerate(t_pdinfo *x, t_symbol *s, int argc, t_atom *arg) +void pdinfo_audio_samplerate(t_pdinfo *x, t_symbol *s, int argc, t_atom *argv) { t_atom at[1]; SETFLOAT(at, (t_float)sys_getsr()); info_out((t_text *)x, s, 1, at); } -void pdinfo_audio_blocksize(t_pdinfo *x, t_symbol *s, int argc, t_atom *arg) +void pdinfo_audio_blocksize(t_pdinfo *x, t_symbol *s, int argc, t_atom *argv) { t_atom at[1]; SETFLOAT(at, (t_float)sys_getblksize()); info_out((t_text *)x, s, 1, at); } -void pdinfo_version(t_pdinfo *x, t_symbol *s, int argc, t_atom *arg) +void pdinfo_version(t_pdinfo *x, t_symbol *s, int argc, t_atom *argv) { int major=0, minor=0, bugfix=0; sys_getversion(&major, &minor, &bugfix); @@ -713,7 +721,7 @@ void pdinfo_version(t_pdinfo *x, t_symbol *s, int argc, t_atom *arg) info_out((t_text *)x, s, 3, at); } -void pdinfo_pi(t_pdinfo *x, t_symbol *s, int argc, t_atom *arg) +void pdinfo_pi(t_pdinfo *x, t_symbol *s, int argc, t_atom *argv) { t_atom at[1]; const t_float Pi = 3.141592653589793; @@ -762,6 +770,10 @@ void pdinfo_setup(void) gensym("audio-outdevlist"), A_GIMME, 0); class_addmethod(pdinfo_class, (t_method)pdinfo_audio_blocksize, gensym("blocksize"), A_GIMME, 0); + /* this needs a better name-- the user doesn't have to know the + name used in the implementation */ + class_addmethod(pdinfo_class, (t_method)pdinfo_classtable, + gensym("classtable"), A_GIMME, 0); class_addmethod(pdinfo_class, (t_method)pdinfo_dir, gensym("dir"), A_GIMME, 0); class_addmethod(pdinfo_class, (t_method)pdinfo_dsp, -- GitLab