From 1bdf5157d0707e89b1bce0a939fbcfcf33047816 Mon Sep 17 00:00:00 2001 From: mescalinum Date: Wed, 19 Aug 2009 23:51:59 +0000 Subject: [song] is born svn path=/trunk/externals/ffext/; revision=11988 --- composer/composer.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) (limited to 'composer/composer.c') 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"); -- cgit v1.2.1