aboutsummaryrefslogtreecommitdiff
path: root/composer/composer.c
diff options
context:
space:
mode:
Diffstat (limited to 'composer/composer.c')
-rw-r--r--composer/composer.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/composer/composer.c b/composer/composer.c
index dd5ccab..6d86758 100644
--- a/composer/composer.c
+++ b/composer/composer.c
@@ -34,6 +34,55 @@
ArrayListDeclare(songs, t_song*, int);
+void list_snconvf(char *buf, size_t bufsz, t_symbol* s, size_t argc, t_atom* argv) {
+ static const unsigned int tmpsz = 80;
+ char* tmp;
+ size_t i,j,len;
+ if(bufsz < 1) goto list_snconvf_szbug;
+ buf[0] = '\0';
+ len = 0;
+ if(s != gensym("")) {
+ len += strlen(s->s_name) + 1;
+ if(bufsz <= len) goto list_snconvf_szbug;
+ strncat(buf, s->s_name, bufsz);
+ strncat(buf, " ", bufsz);
+ }
+ for(i = 0; i < argc; i++) {
+ if(i > 0) {
+ len += 1;
+ if(bufsz <= len) goto list_snconvf_szbug;
+ strncat(buf, " ", bufsz);
+ }
+ if(argv[i].a_type == A_FLOAT) {
+ tmp = (char*)getbytes(tmpsz*sizeof(char));
+ if(argv[i].a_w.w_float == (t_float)(t_int)argv[i].a_w.w_float)
+ sprintf(tmp, "%ld", (t_int)argv[i].a_w.w_float);
+ else
+ sprintf(tmp, "%f", argv[i].a_w.w_float);
+ len += strlen(tmp);
+ if(bufsz <= len) goto list_snconvf_szbug;
+ strncat(buf, tmp, bufsz);
+ freebytes(tmp, tmpsz*sizeof(char));
+ } else if(argv[i].a_type == A_SYMBOL) {
+ len += strlen(argv[i].a_w.w_symbol->s_name);
+ if(bufsz <= len) goto list_snconvf_szbug;
+ strncat(buf, argv[i].a_w.w_symbol->s_name, bufsz);
+ } else {
+ len += 4;
+ if(bufsz <= len) goto list_snconvf_szbug;
+ strncat(buf, "null", bufsz);
+ }
+ }
+ if(strlen(buf) >= bufsz) {
+ goto list_snconvf_szbug;
+ }
+ return;
+
+list_snconvf_szbug:
+ debugprint("track: BUG: list_snconvf_szbug (message too long)");
+ bug("track: BUG: list_snconvf_szbug (message too long)");
+}
+
void composer_setup(void) {
debugprint("loading composer library for pd");
sys_vgui("source {window.tk}\n");