diff options
-rw-r--r-- | Makefile | 5 | ||||
-rw-r--r-- | Makefile.common | 8 | ||||
-rw-r--r-- | ViCious/cyclone/snapfiles | 7 | ||||
-rw-r--r-- | bin/Append-help.pd | 4 | ||||
-rw-r--r-- | bin/Clip-help.pd | 3 | ||||
-rw-r--r-- | bin/Clip~-help.pd | 3 | ||||
-rw-r--r-- | bin/Line~-help.pd | 10 | ||||
-rw-r--r-- | bin/Scope~-help.pd | 4 | ||||
-rw-r--r-- | bin/Snapshot~-help.pd | 8 | ||||
-rw-r--r-- | bin/Table-help.pd | 11 | ||||
-rw-r--r-- | bin/keepme | 1 | ||||
-rw-r--r-- | bin/notes.txt | 14 | ||||
-rw-r--r-- | cyclone/build_counter | 4 | ||||
-rw-r--r-- | cyclone/cyclone-help.include | 7 | ||||
-rw-r--r-- | cyclone/hammer/Table.c | 57 | ||||
-rw-r--r-- | cyclone/hammer/capture.c | 8 | ||||
-rw-r--r-- | cyclone/hammer/coll.c | 111 | ||||
-rw-r--r-- | cyclone/hammer/prob.c | 3 | ||||
-rw-r--r-- | cyclone/hammer/seq.c | 72 | ||||
-rw-r--r-- | cyclone/notes.txt | 10 | ||||
-rw-r--r-- | cyclone/sickle/capture.c | 7 | ||||
-rw-r--r-- | cyclone/sickle/matrix.c | 30 | ||||
-rw-r--r-- | shared/common/binport.c | 10 | ||||
-rw-r--r-- | shared/hammer/file.c | 71 | ||||
-rw-r--r-- | shared/hammer/file.h | 3 | ||||
-rw-r--r-- | shared/notes.txt | 8 | ||||
-rw-r--r-- | test/cyclone/matrix-test.pd | 10 | ||||
-rw-r--r-- | toxy/tot.c | 2 | ||||
-rw-r--r-- | toxy/toxy-help.include | 1 | ||||
-rw-r--r-- | toxy/widget.c | 2 |
30 files changed, 375 insertions, 119 deletions
@@ -32,9 +32,12 @@ rootsnap: do ( if [ -d $$i ] ; then tar -X $$i/$$i-test.exclude -rf \ $(ALLSRC_TAR) test/$$i/* ; fi ) ; done @for i in $(RELEASE_DIRS) ; \ + do ( if [ -d $$i ] ; then tar -T $$i/$$i-help.include -rf \ + $(ALLSRC_TAR) ; fi ) ; done + @for i in $(RELEASE_DIRS) ; \ do ( if [ -d $$i ] ; then tar -X $$i/$$i-vicious.exclude -rf \ $(ALLSRC_TAR) ViCious/$$i/* ; fi ) ; done - tar -rf $(ALLSRC_TAR) bin/keepme + tar -rf $(ALLSRC_TAR) bin/notes.txt gzip -f $(ALLSRC_TAR) fullsnap: snap rootsnap diff --git a/Makefile.common b/Makefile.common index 018a5ef..d106e40 100644 --- a/Makefile.common +++ b/Makefile.common @@ -308,9 +308,11 @@ stestrelease: emptydeps define_build $(SRC_TAR) cd $(ROOT_DIR); tar -X $(BASE_DIR)/$(BASE_NAME)-test.exclude -rf \ $(SRC_TAR) test/$(BASE_NAME)/* + cd $(ROOT_DIR); tar -T $(BASE_DIR)/$(BASE_NAME)-help.include -rf \ + $(SRC_TAR) + cd $(ROOT_DIR); tar -rf $(SRC_TAR) bin/notes.txt cd $(ROOT_DIR); tar -X $(BASE_DIR)/$(BASE_NAME)-vicious.exclude -rf \ $(SRC_TAR) ViCious/$(BASE_DIR)/* - cd $(ROOT_DIR); tar -rf $(SRC_TAR) bin/keepme cd $(ROOT_DIR); gzip -f $(SRC_TAR) brelease: define_build @@ -321,6 +323,8 @@ btestrelease: define_build cd $(ROOT_DIR); tar -cf $(BIN_TAR) $(REL_EXTERNS) cd $(ROOT_DIR); tar -X $(BASE_DIR)/$(BASE_NAME)-test.exclude -rf \ $(BIN_TAR) test/$(BASE_NAME)/* + cd $(ROOT_DIR); tar -T $(BASE_DIR)/$(BASE_NAME)-help.include -rf \ + $(BIN_TAR) cd $(ROOT_DIR); gzip -f $(BIN_TAR) rellibs: @@ -347,6 +351,8 @@ testrelease: stestrelease btestrelease $(ALL_TAR) cd $(ROOT_DIR); tar -X $(BASE_DIR)/$(BASE_NAME)-test.exclude -rf \ $(ALL_TAR) test/$(BASE_NAME)/* + cd $(ROOT_DIR); tar -T $(BASE_DIR)/$(BASE_NAME)-help.include -rf \ + $(ALL_TAR) cd $(ROOT_DIR); tar -X $(BASE_DIR)/$(BASE_NAME)-vicious.exclude -rf \ $(ALL_TAR) ViCious/$(BASE_DIR)/* cd $(ROOT_DIR); gzip -f $(ALL_TAR) diff --git a/ViCious/cyclone/snapfiles b/ViCious/cyclone/snapfiles index d2b2a2f..dcc83e8 100644 --- a/ViCious/cyclone/snapfiles +++ b/ViCious/cyclone/snapfiles @@ -5,6 +5,13 @@ SNAPFILES = \ miXed\bin\dummies.dll \
miXed\bin\maxmode.dll \
miXed\bin\cyclist.exe \
+ miXed\bin\Append-help.pd \
+ miXed\bin\Clip-help.pd \
+ miXed\bin\Clip~-help.pd \
+ miXed\bin\Line~-help.pd \
+ miXed\bin\Scope~-help.pd \
+ miXed\bin\Snapshot~-help.pd \
+ miXed\bin\Table-help.pd \
miXed\ViCious\cyclone\makefile \
miXed\ViCious\cyclone\objects \
miXed\ViCious\cyclone\snapfiles \
diff --git a/bin/Append-help.pd b/bin/Append-help.pd new file mode 100644 index 0000000..8f50c9a --- /dev/null +++ b/bin/Append-help.pd @@ -0,0 +1,4 @@ +#N canvas 50 50 600 400 12; +#X text 10 10 Append clone works on messages (arrays of atoms) \, unlike the; +#X text 10 30 internal append of Pd \, which works on data structures (lists; +#X text 10 50 of scalars).; diff --git a/bin/Clip-help.pd b/bin/Clip-help.pd new file mode 100644 index 0000000..70578ac --- /dev/null +++ b/bin/Clip-help.pd @@ -0,0 +1,3 @@ +#N canvas 50 50 600 400 12; +#X text 10 10 Clip clone \, unlike the clip built into Pd \, handles lists; +#X text 10 30 of floats.; diff --git a/bin/Clip~-help.pd b/bin/Clip~-help.pd new file mode 100644 index 0000000..04e55a7 --- /dev/null +++ b/bin/Clip~-help.pd @@ -0,0 +1,3 @@ +#N canvas 50 50 600 400 12; +#X text 10 10 Clip~ clone \, unlike the clip~ built into Pd \, accepts; +#X text 10 30 signal input in range inlets for sample-accurate control.; diff --git a/bin/Line~-help.pd b/bin/Line~-help.pd new file mode 100644 index 0000000..5759c13 --- /dev/null +++ b/bin/Line~-help.pd @@ -0,0 +1,10 @@ +#N canvas 50 50 600 400 12; +#X text 10 10 Line~ clone \, unlike the line~ built into Pd; +#X text 10 30 .; +#X text 30 30 accepts lists of unlimited size: schedules as many; +#X text 30 50 segments as there are pairs of floats in the input \;; +#X text 10 70 .; +#X text 30 70 sample-accurately starts successive segments \;; +#X text 10 90 .; +#X text 30 90 when last target is reached \, sends a bang through; +#X text 30 110 the right outlet.; diff --git a/bin/Scope~-help.pd b/bin/Scope~-help.pd new file mode 100644 index 0000000..2a5b28c --- /dev/null +++ b/bin/Scope~-help.pd @@ -0,0 +1,4 @@ +#N canvas 50 50 600 400 12; +#X text 10 10 Scope~ clone's main purpose is quick \, preliminary; +#X text 10 30 verification of other tilde clones. One can run MSP; +#X text 10 50 patches alongside their Pd imports and watch the scope~s.; diff --git a/bin/Snapshot~-help.pd b/bin/Snapshot~-help.pd new file mode 100644 index 0000000..f91d50c --- /dev/null +++ b/bin/Snapshot~-help.pd @@ -0,0 +1,8 @@ +#N canvas 50 50 600 400 12; +#X text 10 10 Snapshot~ clone \, unlike the snapshot~ built into Pd; +#X text 10 30 .; +#X text 30 30 optionally replaces external triggering source with an; +#X text 30 50 internal clock \;; +#X text 10 70 .; +#X text 30 70 reports value of an element at a settable offset in the; +#X text 30 90 signal vector.; diff --git a/bin/Table-help.pd b/bin/Table-help.pd new file mode 100644 index 0000000..a73ea93 --- /dev/null +++ b/bin/Table-help.pd @@ -0,0 +1,11 @@ +#N canvas 50 50 600 400 12; +#X text 10 10 Table clone's main purpose is sucking data from tables; +#X text 10 30 embedded in Max patches.; +#X text 10 90 Nevertheless \, most table features are supported: changing; +#X text 10 110 size and contents \, traversal \, file i/o \, all queries; +#X text 10 130 (including 'quantile' and 'bang') and dumping.; +#X text 10 160 Tables with the same name share the same contents.; +#X text 10 220 Table elements are 32-bit integers \, although some operations; +#X text 10 240 (like embedding and editing) lose precision due to the; +#X text 10 260 unavoidable int-to-float conversion.; +#X text 10 290 Editing is textual \, not graphical.; diff --git a/bin/keepme b/bin/keepme deleted file mode 100644 index 8b13789..0000000 --- a/bin/keepme +++ /dev/null @@ -1 +0,0 @@ - diff --git a/bin/notes.txt b/bin/notes.txt new file mode 100644 index 0000000..a12f918 --- /dev/null +++ b/bin/notes.txt @@ -0,0 +1,14 @@ +Keeping help files and binaries in the same directory ensures opening +proper patches for clashing clones on crippled file systems. + +TODO for help files + * simple guide into importing + * describe compatibility mode + * detailed notes for any clone with incompatibilities + +DONE for help files + +with cyclone alpha53 + * short notes about main differences between clashing clones (Append, + Clip, Clip~, Line~, Scope~, Snapshot~, Table) and the corresponding + internal Pd classes. diff --git a/cyclone/build_counter b/cyclone/build_counter index 55027b1..a0a93b7 100644 --- a/cyclone/build_counter +++ b/cyclone/build_counter @@ -1,7 +1,7 @@ #define CYCLONE_VERSION "0.1" #define CYCLONE_RELEASE "alpha" -#define CYCLONE_BUILD 52 +#define CYCLONE_BUILD 53 #if 0 -CYCLONE_SNAPSHOT = 0.1-alpha52 +CYCLONE_SNAPSHOT = 0.1-alpha53 #endif diff --git a/cyclone/cyclone-help.include b/cyclone/cyclone-help.include new file mode 100644 index 0000000..549df46 --- /dev/null +++ b/cyclone/cyclone-help.include @@ -0,0 +1,7 @@ +bin/Append-help.pd +bin/Clip-help.pd +bin/Clip~-help.pd +bin/Line~-help.pd +bin/Scope~-help.pd +bin/Snapshot~-help.pd +bin/Table-help.pd diff --git a/cyclone/hammer/Table.c b/cyclone/hammer/Table.c index a120f13..00043f0 100644 --- a/cyclone/hammer/Table.c +++ b/cyclone/hammer/Table.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2004 krzYszcz and others. +/* Copyright (c) 2004-2005 krzYszcz and others. * For information on usage and redistribution, and for a DISCLAIMER OF ALL * WARRANTIES, see the file, "LICENSE.txt," in this distribution. */ @@ -225,10 +225,48 @@ static int tablecommon_quantile(t_tablecommon *cc, float f) return (ndx); } +static void tablecommon_fromatoms(t_tablecommon *cc, int ac, t_atom *av) +{ + int i, size = 0, nsyms = 0; + t_atom *ap; + int *ptr; + cc->c_increation = 1; + for (i = 0, ap = av; i < ac; i++, ap++) + { + if (ap->a_type == A_FLOAT) + size++; + else if (ap->a_type == A_SYMBOL) + nsyms++, size++; + } + if (size < ac) + loud_warning(0, "Table", "%d invalid atom%s ignored", + ac - size, (ac - size > 1 ? "s" : "")); + if (nsyms) + loud_warning(0, "Table", "%d symbol%s bashed to zero", + nsyms, (nsyms > 1 ? "s" : "")); + tablecommon_setlength(cc, size); + size = cc->c_length; + ptr = cc->c_table; + for (i = 0; i < ac; i++, av++) + { + if (av->a_type == A_FLOAT) + *ptr++ = (int)av->a_w.w_float; + else if (av->a_type == A_SYMBOL) + *ptr++ = 0; + else + continue; + if (size-- == 1) + break; + } + while (size--) + *ptr++ = 0; + cc->c_increation = 0; +} + +/* FIXME keep int precision: save/load directly, not through a bb */ /* LATER binary files */ static void tablecommon_doread(t_tablecommon *cc, t_symbol *fn, t_canvas *cv) { - /* FIXME */ t_binbuf *bb = binbuf_new(); int ac; t_atom *av; @@ -249,8 +287,8 @@ static void tablecommon_doread(t_tablecommon *cc, t_symbol *fn, t_canvas *cv) av->a_type == A_SYMBOL && av->a_w.w_symbol == gensym("table")) { + tablecommon_fromatoms(cc, ac - 1, av + 1); post("Table: %s read successful", fn->s_name); /* CHECKME */ - /* FIXME */ } #if 0 /* FIXME */ else /* CHECKME complaint */ @@ -325,7 +363,7 @@ static void table_embedhook(t_pd *z, t_binbuf *bb, t_symbol *bindsym) static void tablecommon_editorhook(t_pd *z, t_symbol *s, int ac, t_atom *av) { - /* FIXME */ + tablecommon_fromatoms((t_tablecommon *)z, ac, av); } static void tablecommon_free(t_tablecommon *cc) @@ -754,7 +792,7 @@ static int tablecommon_editorappend(t_tablecommon *cc, *bp++ = ' ', cnt++; cnt += sprintf(bp, "%d", v); if (col + cnt > 80) - buf[0] = '\n', col = cnt; + buf[0] = '\n', col = cnt - 1; /* assuming col > 0 */ else col += cnt; hammereditor_append(cc->c_filehandle, buf); @@ -763,22 +801,19 @@ static int tablecommon_editorappend(t_tablecommon *cc, static void table_open(t_table *x) { - /* FIXME */ t_tablecommon *cc = x->x_common; char buf[MAXPDSTRING]; int *bp = cc->c_table; int count = cc->c_length, col = 0; - /* LATER prepend "table: " */ - hammereditor_open(cc->c_filehandle, - /* CHECKED default name is plain `Untitled' */ - x->x_name ? x->x_name->s_name : "Untitled"); + hammereditor_open(cc->c_filehandle, (x->x_name ? x->x_name->s_name : 0), 0); while (count--) col = tablecommon_editorappend(cc, *bp++, buf, col); + hammereditor_setdirty(cc->c_filehandle, 0); } static void table_wclose(t_table *x) { - /* FIXME */ + hammereditor_close(x->x_common->c_filehandle, 1); } static void table_click(t_table *x, t_floatarg xpos, t_floatarg ypos, diff --git a/cyclone/hammer/capture.c b/cyclone/hammer/capture.c index b36c421..7598a59 100644 --- a/cyclone/hammer/capture.c +++ b/cyclone/hammer/capture.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2002-2003 krzYszcz and others. +/* Copyright (c) 2002-2005 krzYszcz and others. * For information on usage and redistribution, and for a DISCLAIMER OF ALL * WARRANTIES, see the file, "LICENSE.txt," in this distribution. */ @@ -87,7 +87,7 @@ static int capture_formatint(int i, char *buf, int col, *bp++ = ' ', cnt++; cnt += sprintf(bp, fmt, i); if (col + cnt > maxcol) - buf[0] = '\n', col = cnt; + buf[0] = '\n', col = cnt - 1; /* assuming col > 0 */ else col += cnt; return (col); @@ -102,7 +102,7 @@ static int capture_formatfloat(float f, char *buf, int col, *bp++ = ' ', cnt++; cnt += sprintf(bp, fmt, f); if (col + cnt > maxcol) - buf[0] = '\n', col = cnt; + buf[0] = '\n', col = cnt - 1; /* assuming col > 0 */ else col += cnt; return (col); @@ -194,7 +194,7 @@ static void capture_open(t_capture *x) { int count = x->x_count; char buf[MAXPDSTRING]; - hammereditor_open(x->x_filehandle, "t_capture"); /* CHECKED */ + hammereditor_open(x->x_filehandle, "Capture", ""); /* CHECKED */ if (count < x->x_bufsize) { float *bp = x->x_buffer; diff --git a/cyclone/hammer/coll.c b/cyclone/hammer/coll.c index a0644c8..fc81b30 100644 --- a/cyclone/hammer/coll.c +++ b/cyclone/hammer/coll.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2002-2004 krzYszcz and others. +/* Copyright (c) 2002-2005 krzYszcz and others. * For information on usage and redistribution, and for a DISCLAIMER OF ALL * WARRANTIES, see the file, "LICENSE.txt," in this distribution. */ @@ -9,10 +9,8 @@ #include "common/loud.h" #include "hammer/file.h" -/* FIXME sort -1 -1, sort 1 crashes in pd large */ -/* FIXME sort crashes after (corrupt?) transfers from the editor */ +/* LATER profile for the bottlenecks of insertion and sorting */ /* LATER make sure that ``reentrancy protection hack'' is really working... */ -/* CHECKME default fname for 'write' -- c_filename, x_name, nothing? */ #ifdef KRZYSZCZ //#define COLL_DEBUG @@ -42,7 +40,7 @@ typedef struct _collcommon int c_selfmodified; int c_entered; /* a counter, LATER rethink */ int c_embedflag; /* common field (CHECKED in 'TEXT' files) */ - t_symbol *c_filename; + t_symbol *c_filename; /* CHECKED common for all, read and write */ t_canvas *c_lastcanvas; t_hammerfile *c_filehandle; t_collelem *c_first; @@ -98,20 +96,27 @@ static void collelem_free(t_collelem *ep) } /* CHECKME again... apparently c74 is not able to fix this for good */ -/* result: 1 for ep1 < ep2, otherwise 0 (symbols are less then floats) */ -static int collelem_less(t_collelem *ep1, t_collelem *ep2, int ndx) +/* result: 1 for ep1 < ep2, 0 for ep1 >= ep2, all symbols are < any float */ +static int collelem_less(t_collelem *ep1, t_collelem *ep2, int ndx, int swap) { + int isless; + if (swap) + { + t_collelem *ep = ep1; + ep1 = ep2; + ep2 = ep; + } if (ndx < 0) { if (ep1->e_symkey) - return (ep2->e_symkey ? - strcmp(ep1->e_symkey->s_name, - ep2->e_symkey->s_name) < 0 - : 1); /* CHECKED incompatible with 4.07, but consistent */ + isless = + (ep2->e_symkey ? strcmp(ep1->e_symkey->s_name, + ep2->e_symkey->s_name) < 0 + : 1); /* CHECKED incompatible with 4.07, but consistent */ else if (ep2->e_symkey) - return (0); /* CHECKED incompatible with 4.07, but consistent */ + isless = 0; /* CHECKED incompatible with 4.07, but consistent */ else - return (ep1->e_numkey < ep2->e_numkey); /* CHECKED in 4.07 */ + isless = (ep1->e_numkey < ep2->e_numkey); /* CHECKED in 4.07 */ } else { @@ -122,25 +127,25 @@ static int collelem_less(t_collelem *ep1, t_collelem *ep2, int ndx) if (ap1->a_type == A_FLOAT) { if (ap2->a_type == A_FLOAT) - return (ap1->a_w.w_float < ap2->a_w.w_float); + isless = (ap1->a_w.w_float < ap2->a_w.w_float); else if (ap2->a_type == A_SYMBOL) - return (0); + isless = 0; else - return (1); + isless = 1; } else if (ap1->a_type == A_SYMBOL) { if (ap2->a_type == A_FLOAT) - return (1); + isless = 1; else if (ap2->a_type == A_SYMBOL) - return (strcmp(ap1->a_w.w_symbol->s_name, - ap2->a_w.w_symbol->s_name) < 0); + isless = (strcmp(ap1->a_w.w_symbol->s_name, + ap2->a_w.w_symbol->s_name) < 0); else - return (1); + isless = 1; } - else - return (0); + else isless = 0; } + return (isless); } static t_collelem *collcommon_numkey(t_collcommon *cc, int numkey) @@ -379,10 +384,10 @@ static void collcommon_renumber(t_collcommon *cc, int startkey) } /* LATER choose a better algo, after coll's storage structures stabilize. - Note, that even the simple insertion sort below (n-square) might prove - better for dlls, than theoretically efficient algo (nlogn) which requires + Note, that even the simple insertion sort below (n-square) might prove better + for bi-directional lists, than theoretically efficient algo (nlogn) requiring random access emulation. Avoiding recursion is not a bad idea, too. */ -static void collcommon_sort(t_collcommon *cc, int asc, int ndx) +static void collcommon_sort(t_collcommon *cc, int descending, int ndx) { t_collelem *min = cc->c_first; t_collelem *ep; @@ -391,7 +396,8 @@ static void collcommon_sort(t_collcommon *cc, int asc, int ndx) cc->c_increation = 1; /* search for a sentinel element */ do - if (collelem_less(ep, min, ndx) == asc) min = ep; + if (collelem_less(ep, min, ndx, descending)) + min = ep; while (ep = ep->e_next); /* prepend it */ collcommon_swaplinks(cc, cc->c_first, min); @@ -401,9 +407,12 @@ static void collcommon_sort(t_collcommon *cc, int asc, int ndx) { t_collelem *next = ep->e_next; for (min = ep->e_prev; - collelem_less(ep, min, ndx) == asc; + min && /* LATER remove */ + collelem_less(ep, min, ndx, descending); min = min->e_prev); - if (ep != min->e_next) + if (!min) /* LATER remove */ + loudbug_bug("collcommon_sort"); + else if (ep != min->e_next) { collcommon_takeout(cc, ep); collcommon_putafter(cc, ep, min); @@ -457,12 +466,17 @@ static t_collelem *collcommon_tonumkey(t_collcommon *cc, int numkey, { collcommon_putbefore(cc, new, old); do - if (old->e_hasnumkey) old->e_numkey++; /* LATER rethink */ + if (old->e_hasnumkey) + /* CHECKED incremented up to the last one; incompatible: + elements with numkey == 0 not incremented (a bug?) */ + old->e_numkey++; while (old = old->e_next); } else { - int closestkey = 0; /* LATER rethink */ + /* CHECKED negative numkey always put before the last element, + zero numkey always becomes the new head */ + int closestkey = 0; t_collelem *closest = 0, *ep; for (ep = cc->c_first; ep; ep = ep->e_next) { @@ -501,7 +515,7 @@ static t_collelem *collcommon_tosymkey(t_collcommon *cc, t_symbol *symkey, return (new); } -static int collcommon_fromlist(t_collcommon *cc, int ac, t_atom *av) +static int collcommon_fromatoms(t_collcommon *cc, int ac, t_atom *av) { int hasnumkey = 0, numkey; t_symbol *symkey = 0; @@ -565,7 +579,7 @@ static int collcommon_fromlist(t_collcommon *cc, int ac, t_atom *av) static int collcommon_frombinbuf(t_collcommon *cc, t_binbuf *bb) { - return (collcommon_fromlist(cc, binbuf_getnatom(bb), binbuf_getvec(bb))); + return (collcommon_fromatoms(cc, binbuf_getnatom(bb), binbuf_getvec(bb))); } static void collcommon_doread(t_collcommon *cc, t_symbol *fn, t_canvas *cv) @@ -730,7 +744,7 @@ static void coll_embedhook(t_pd *z, t_binbuf *bb, t_symbol *bindsym) static void collcommon_editorhook(t_pd *z, t_symbol *s, int ac, t_atom *av) { - int nlines = collcommon_fromlist((t_collcommon *)z, ac, av); + int nlines = collcommon_fromatoms((t_collcommon *)z, ac, av); if (nlines < 0) loud_error(0, "coll: editing error in line %d", 1 - nlines); } @@ -1169,7 +1183,7 @@ static void coll_sort(t_coll *x, t_floatarg f1, t_floatarg f2) int dir, ndx; if (loud_checkint((t_pd *)x, f1, &dir, gensym("sort")) && loud_checkint((t_pd *)x, f2, &ndx, gensym("sort"))) - collcommon_sort(x->x_common, (dir < 0 ? 1 : 0), + collcommon_sort(x->x_common, (dir < 0 ? 0 : 1), (ndx < 0 ? -1 : (ndx ? ndx - 1 : 0))); } @@ -1298,9 +1312,12 @@ static void coll_min(t_coll *x, t_floatarg f) if (loud_checkint((t_pd *)x, f, &ndx, gensym("min"))) { t_collelem *found; - if (ndx <= 0) - ndx = 0; /* LATER consider complaining, CHECKME */ - else ndx--; + if (ndx > 0) + ndx--; + /* LATER consider complaining: */ + else if (ndx < 0) + return; /* CHECKED silently rejected */ + /* else CHECKED silently defaults to 1 */ if (found = coll_firsttyped(x, ndx, A_FLOAT)) { t_float result = found->e_data[ndx].a_w.w_float; @@ -1327,9 +1344,12 @@ static void coll_max(t_coll *x, t_floatarg f) if (loud_checkint((t_pd *)x, f, &ndx, gensym("max"))) { t_collelem *found; - if (ndx <= 0) - ndx = 0; /* LATER consider complaining, CHECKME */ - else ndx--; + if (ndx > 0) + ndx--; + /* LATER consider complaining: */ + else if (ndx < 0) + return; /* CHECKED silently rejected */ + /* else CHECKED silently defaults to 1 */ if (found = coll_firsttyped(x, ndx, A_FLOAT)) { t_float result = found->e_data[ndx].a_w.w_float; @@ -1383,7 +1403,7 @@ static void coll_write(t_coll *x, t_symbol *s) if (s && s != &s_) collcommon_dowrite(cc, s, x->x_canvas); else - hammerpanel_save(cc->c_filehandle, 0, 0); /* CHECKME default name */ + hammerpanel_save(cc->c_filehandle, 0, 0); /* CHECKED no default name */ } static void coll_readagain(t_coll *x) @@ -1401,7 +1421,7 @@ static void coll_writeagain(t_coll *x) if (cc->c_filename) collcommon_dowrite(cc, 0, 0); else - hammerpanel_save(cc->c_filehandle, 0, 0); /* CHECKME default name */ + hammerpanel_save(cc->c_filehandle, 0, 0); /* CHECKED no default name */ } static void coll_filetype(t_coll *x, t_symbol *s) @@ -1431,9 +1451,8 @@ static void coll_open(t_coll *x) int i, natoms, newline; t_atom *ap; char buf[MAXPDSTRING]; - /* LATER prepend "coll: " */ hammereditor_open(cc->c_filehandle, - x->x_name ? x->x_name->s_name : "Untitled"); + (x->x_name ? x->x_name->s_name : "Untitled"), "coll"); collcommon_tobinbuf(cc, bb); natoms = binbuf_getnatom(bb); ap = binbuf_getvec(bb); @@ -1453,10 +1472,12 @@ static void coll_open(t_coll *x) hammereditor_append(cc->c_filehandle, buf); ap++; } + hammereditor_setdirty(cc->c_filehandle, 0); binbuf_free(bb); } -/* asking and storing the changes -- CHECKME close window, and 'wclose' */ +/* CHECKED if there was any editing, both close window and 'wclose' + ask and replace the contents. LATER debug. */ static void coll_wclose(t_coll *x) { hammereditor_close(x->x_common->c_filehandle, 1); diff --git a/cyclone/hammer/prob.c b/cyclone/hammer/prob.c index 2794858..83960eb 100644 --- a/cyclone/hammer/prob.c +++ b/cyclone/hammer/prob.c @@ -244,12 +244,13 @@ static void prob__silent(t_prob *x) } } +/* CHECKED not available, LATER full editing */ static void prob_click(t_prob *x, t_floatarg xpos, t_floatarg ypos, t_floatarg shift, t_floatarg ctrl, t_floatarg alt) { t_probtrans *state; char buf[64]; - hammereditor_open(x->x_filehandle, "prob"); + hammereditor_open(x->x_filehandle, 0, 0); for (state = x->x_translist; state; state = state->tr_nextstate) { t_probtrans *trans; diff --git a/cyclone/hammer/seq.c b/cyclone/hammer/seq.c index 030a7ab..26027c0 100644 --- a/cyclone/hammer/seq.c +++ b/cyclone/hammer/seq.c @@ -860,26 +860,22 @@ mfwritefailed: return (result); } -/* FIXME */ -/* CHECKED absolute timestamps, semi-terminated, verified */ -static int seq_frombinbuf(t_seq *x, t_binbuf *bb) +/* CHECKED text file input: absolute timestamps, semi-terminated, verified */ +static int seq_fromatoms(t_seq *x, int ac, t_atom *av, int abstime) { - int nevents = 0; - int ac = binbuf_getnatom(bb); - t_atom *av = binbuf_getvec(bb); - while (ac--) - if (av++->a_type == A_SEMI) /* FIXME parsing */ + int i, nevents = 0; + t_atom *ap; + for (i = 0, ap = av; i < ac; i++, ap++) + if (ap->a_type == A_SEMI) /* FIXME parsing */ nevents++; if (nevents) { t_seqevent *ep; float prevtime = 0; - int i = -1; if (!seq_dogrowing(x, nevents, 0)) return (0); + i = -1; nevents = 0; - ac = binbuf_getnatom(bb); - av = binbuf_getvec(bb); ep = x->x_sequence; while (ac--) { @@ -887,8 +883,12 @@ static int seq_frombinbuf(t_seq *x, t_binbuf *bb) { if (i < 0) { - ep->e_delta = av->a_w.w_float - prevtime; - prevtime = av->a_w.w_float; + if (abstime) + { + ep->e_delta = av->a_w.w_float - prevtime; + prevtime = av->a_w.w_float; + } + else ep->e_delta = av->a_w.w_float; i = 0; } else if (i < 4) @@ -945,7 +945,8 @@ static void seq_textread(t_seq *x, char *path) } else { - int nlines = seq_frombinbuf(x, bb); + int nlines = /* CHECKED absolute timestamps */ + seq_fromatoms(x, binbuf_getnatom(bb), binbuf_getvec(bb), 1); if (nlines < 0) /* CHECKED "bad MIDI file (truncated)" alert, even if a text file */ loud_error((t_pd *)x, "bad text file (truncated)"); @@ -1047,11 +1048,13 @@ static void seq_write(t_seq *x, t_symbol *s) canvas_getdir(x->x_canvas), x->x_defname); } -static void seq_eventstring(t_seq *x, char *buf, t_seqevent *ep) +static void seq_eventstring(t_seq *x, char *buf, t_seqevent *ep, int editable) { unsigned char *bp = ep->e_bytes; int i; - if (*bp < 128 || *bp == 247) + if (editable) + sprintf(buf, "%g", ep->e_delta); + else if (*bp < 128 || *bp == 247) sprintf(buf, "(%g)->", ep->e_delta); else sprintf(buf, "(%g)", ep->e_delta); @@ -1079,9 +1082,8 @@ static void seq_print(t_seq *x) truncated = 0; endpost(); while (nevents--) - { - /* CHECKED bytes are space-separated, no semi */ - seq_eventstring(x, buf, ep); + { /* CHECKED bytes are space-separated, no semi */ + seq_eventstring(x, buf, ep, 0); post(buf); ep++; } @@ -1090,22 +1092,28 @@ static void seq_print(t_seq *x) else post(" no sequence"); /* CHECKED */ } -static void seq_properties(t_gobj *z, t_glist *glist) +static void seq_editorhook(t_pd *z, t_symbol *s, int ac, t_atom *av) +{ + seq_fromatoms((t_seq *)z, ac, av, 0); +} + +static void seq_click(t_seq *x, t_floatarg xpos, t_floatarg ypos, + t_floatarg shift, t_floatarg ctrl, t_floatarg alt) { - t_seq *x = (t_seq *)z; t_seqevent *ep = x->x_sequence; int nevents = x->x_nevents; char buf[MAXPDSTRING+2]; - sprintf(buf, "seq: %s", (x->x_defname && x->x_defname != &s_ ? - x->x_defname->s_name : "<anonymous>")); - hammereditor_open(x->x_filehandle, buf); + hammereditor_open(x->x_filehandle, + (x->x_defname && x->x_defname != &s_ ? + x->x_defname->s_name : "<anonymous>"), 0); while (nevents--) - { - seq_eventstring(x, buf, ep); - strcat(buf, "\n"); + { /* LATER rethink sysex continuation */ + seq_eventstring(x, buf, ep, 1); + strcat(buf, ";\n"); hammereditor_append(x->x_filehandle, buf); ep++; } + hammereditor_setdirty(x->x_filehandle, 0); } static void seq_free(t_seq *x) @@ -1129,8 +1137,8 @@ static void *seq_new(t_symbol *s) warned = 1; } x->x_canvas = canvas_getcurrent(); - x->x_filehandle = hammerfile_new((t_pd *)x, 0, - seq_readhook, seq_writehook, 0); + x->x_filehandle = hammerfile_new((t_pd *)x, 0, seq_readhook, seq_writehook, + seq_editorhook); x->x_timescale = 1.; x->x_newtimescale = 1.; x->x_prevtime = 0.; @@ -1188,6 +1196,7 @@ void seq_setup(void) class_addmethod(seq_class, (t_method)seq_print, gensym("print"), 0); + /* incompatible extensions */ class_addmethod(seq_class, (t_method)seq_pause, gensym("pause"), 0); class_addmethod(seq_class, (t_method)seq_continue, @@ -1200,8 +1209,9 @@ void seq_setup(void) gensym("cd"), A_DEFSYM, 0); class_addmethod(seq_class, (t_method)seq_pwd, gensym("pwd"), A_SYMBOL, 0); - - forky_setpropertiesfn(seq_class, seq_properties); + class_addmethod(seq_class, (t_method)seq_click, + gensym("click"), + A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, 0); hammerfile_setup(seq_class, 0); fitter_setup(seq_class, 0); } diff --git a/cyclone/notes.txt b/cyclone/notes.txt index 6f83d33..8b93d15 100644 --- a/cyclone/notes.txt +++ b/cyclone/notes.txt @@ -5,6 +5,16 @@ TODO for cyclone DONE for cyclone +alpha53 + * matrix~: incompatible message 'set' + * coll: + . fixed descending order of 'sort' (a leaking sentinel bug) + . ignoring negative indices in 'min' and 'max' + . editor fixes (close by wm, dirty flag, title) + * Table: reading from file, reading from editor, editor fixes + * seq: editor fixes, editor bound to click (should bind to "open" too...) + * prob, capture, capture~: viewer fixes + alpha52 * compatibility mode interface in maxmode object: messages 'set', 'get' (reply through the second outlet) diff --git a/cyclone/sickle/capture.c b/cyclone/sickle/capture.c index 089c21e..8f8f5a0 100644 --- a/cyclone/sickle/capture.c +++ b/cyclone/sickle/capture.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2002-2003 krzYszcz and others. +/* Copyright (c) 2002-2005 krzYszcz and others. * For information on usage and redistribution, and for a DISCLAIMER OF ALL * WARRANTIES, see the file, "LICENSE.txt," in this distribution. */ @@ -54,7 +54,7 @@ static int capture_formatfloat(t_capture *x, float f, char *buf, int col, else cnt += sprintf(bp, "%d", (int)f); if (col + cnt > maxcol) - buf[0] = '\n', col = cnt; + buf[0] = '\n', col = cnt - 1; /* assuming col > 0 */ else col += cnt; return (col); @@ -144,7 +144,7 @@ static void capture_open(t_capture *x) int count = x->x_count; char buf[MAXPDSTRING]; int nindices = (x->x_nindices > 0 ? x->x_nindices : x->x_nblock); - hammereditor_open(x->x_filehandle, "Signal Capture"); /* CHECKED */ + hammereditor_open(x->x_filehandle, "Signal Capture", ""); /* CHECKED */ if (x->x_mode == 'f' || count < x->x_bufsize) { float *bp = x->x_buffer; @@ -169,6 +169,7 @@ static void capture_open(t_capture *x) } } +/* CHECKED without asking and storing the changes */ static void capture_wclose(t_capture *x) { hammereditor_close(x->x_filehandle, 0); diff --git a/cyclone/sickle/matrix.c b/cyclone/sickle/matrix.c index a0772dc..a1c1ef4 100644 --- a/cyclone/sickle/matrix.c +++ b/cyclone/sickle/matrix.c @@ -9,7 +9,7 @@ #include "sickle/sic.h" #ifdef KRZYSZCZ -#define MATRIX_DEBUG +//#define MATRIX_DEBUG #endif #define MATRIX_DEFGAIN 0. /* CHECKED */ @@ -124,6 +124,32 @@ static void matrix_clear(t_matrix *x) x->x_cells[i] = 0; } +static void matrix_set(t_matrix *x, t_floatarg f1, t_floatarg f2) +{ + int i, onoff; + float gain = f1; + static int warned = 0; + if (fittermax_get() && !warned) + { + fittermax_warning(*(t_pd *)x, "'set' not supported in Max"); + warned = 1; + } + onoff = (gain < -MATRIX_GAINEPSILON || gain > MATRIX_GAINEPSILON); + for (i = 0; i < x->x_ncells; i++) + x->x_cells[i] = onoff; + if (x->x_gains) + { + float ramp = (f2 < MATRIX_MINRAMP ? 0. : f2); + for (i = 0; i < x->x_ncells; i++) + { + if (onoff) /* LATER rethink */ + x->x_gains[i] = gain; + x->x_ramps[i] = ramp; + matrix_retarget(x, i); + } + } +} + /* CHECKED c74's refman and help patch are wrong about int pairs -- the actual syntax is "[dis]connect indx ondx1 [ondx2 [ondx3..." */ static void matrix_connect(t_matrix *x, t_symbol *s, int ac, t_atom *av) @@ -543,6 +569,8 @@ void matrix_tilde_setup(void) class_addlist(matrix_class, matrix_list); class_addmethod(matrix_class, (t_method)matrix_clear, gensym("clear"), 0); + class_addmethod(matrix_class, (t_method)matrix_set, + gensym("set"), A_FLOAT, A_DEFFLOAT, 0); class_addmethod(matrix_class, (t_method)matrix_connect, gensym("connect"), A_GIMME, 0); class_addmethod(matrix_class, (t_method)matrix_connect, diff --git a/shared/common/binport.c b/shared/common/binport.c index 1df9571..90cf251 100644 --- a/shared/common/binport.c +++ b/shared/common/binport.c @@ -96,6 +96,7 @@ enum { BINPORT_NULLTYPE, BINPORT_INTTYPE = 1, BINPORT_FLOATTYPE, BINPORT_SYMTYPE, BINPORT_DEFINTTYPE = 5, BINPORT_DEFFLOATTYPE, BINPORT_DEFSYMTYPE, + BINPORT_DEFDOLLSYMTYPE = 9, BINPORT_SEMITYPE = 10, BINPORT_COMMATYPE, BINPORT_DOLLARTYPE, BINPORT_DOLLSYMTYPE }; @@ -535,6 +536,15 @@ static int binport_nextatom(t_binport *bp, t_atom *ap) if (!binport_setbysymtable(bp, ap, opval)) goto badbin; break; + case BINPORT_DEFDOLLSYMTYPE: /* half-byte #symbol id */ + if (!binport_setbysymtable(bp, ap, opval)) + goto badbin; + sprintf(buf, "#%s", ap->a_w.w_symbol->s_name); +#ifdef BINPORT_DEBUG + binport_warning(buf); +#endif + ap->a_w.w_symbol = gensym(buf); + break; case BINPORT_SEMITYPE: /* LATER warn about nonzero opval */ ap->a_type = A_SEMI; diff --git a/shared/hammer/file.c b/shared/hammer/file.c index ecb5006..c671946 100644 --- a/shared/hammer/file.c +++ b/shared/hammer/file.c @@ -58,17 +58,20 @@ static t_hammerfile *hammerfile_getproxy(t_pd *master) return (0); } -/* FIXME somehow plug the "save changes" dialog into close-by-wm */ -/* FIXME dirty condition */ static void hammereditor_guidefs(void) { - sys_gui("proc hammereditor_open {name geometry title} {\n"); + sys_gui("proc hammereditor_open {name geometry title sendable} {\n"); sys_gui(" if {[winfo exists $name]} {\n"); sys_gui(" $name.text delete 1.0 end\n"); sys_gui(" } else {\n"); sys_gui(" toplevel $name\n"); sys_gui(" wm title $name $title\n"); sys_gui(" wm geometry $name $geometry\n"); + sys_gui(" if {$sendable} {\n"); + sys_gui(" wm protocol $name WM_DELETE_WINDOW \\\n"); + sys_gui(" [concat hammereditor_close $name 1]\n"); + sys_gui(" bind $name <<Modified>> \"hammereditor_dodirty $name\"\n"); + sys_gui(" }\n"); sys_gui(" text $name.text -relief raised -bd 2 \\\n"); sys_gui(" -font -*-courier-medium--normal--12-* \\\n"); sys_gui(" -yscrollcommand \"$name.scroll set\" -background lightgrey\n"); @@ -78,6 +81,23 @@ static void hammereditor_guidefs(void) sys_gui(" }\n"); sys_gui("}\n"); + sys_gui("proc hammereditor_dodirty {name} {\n"); + sys_gui(" if {[catch {$name.text edit modified} dirty]} {set dirty 0}\n"); + sys_gui(" set title [wm title $name]\n"); + sys_gui(" set dt [string equal -length 1 $title \"*\"]\n"); + sys_gui(" if {$dirty} {\n"); + sys_gui(" if {$dt == 0} {wm title $name *$title}\n"); + sys_gui(" } else {\n"); + sys_gui(" if {$dt} {wm title $name [string range $title 1 end]}\n"); + sys_gui(" }\n"); + sys_gui("}\n"); + + sys_gui("proc hammereditor_setdirty {name flag} {\n"); + sys_gui(" if {[winfo exists $name]} {\n"); + sys_gui(" catch {$name.text edit modified $flag}\n"); + sys_gui(" }\n"); + sys_gui("}\n"); + sys_gui("proc hammereditor_doclose {name} {\n"); sys_gui(" destroy $name\n"); sys_gui("}\n"); @@ -91,10 +111,9 @@ static void hammereditor_guidefs(void) /* FIXME make it more reliable */ sys_gui("proc hammereditor_send {name} {\n"); sys_gui(" if {[winfo exists $name]} {\n"); - sys_gui(" set ii [$name.text index [concat end - 1 lines]]\n"); sys_gui(" pd [concat miXed$name clear \\;]\n"); sys_gui(" for {set i 1} \\\n"); - sys_gui(" {[$name.text compare $i.end < $ii]} \\\n"); + sys_gui(" {[$name.text compare $i.end < end]} \\\n"); sys_gui(" {incr i 1} {\n"); sys_gui(" set lin [$name.text get $i.0 $i.end]\n"); sys_gui(" if {$lin != \"\"} {\n"); @@ -110,38 +129,56 @@ static void hammereditor_guidefs(void) sys_gui("proc hammereditor_close {name ask} {\n"); sys_gui(" if {[winfo exists $name]} {\n"); - sys_gui(" set dirty $ask\n"); /* FIXME */ - sys_gui(" if {$dirty == 0} {hammereditor_doclose $name} else {\n"); + sys_gui(" if {[catch {$name.text edit modified} dirty]} {set dirty 0}\n"); + sys_gui(" if {$ask && $dirty} {\n"); sys_gui(" set title [wm title $name]\n"); + sys_gui(" if {[string equal -length 1 $title \"*\"]} {\n"); + sys_gui(" set title [string range $title 1 end]\n"); + sys_gui(" }\n"); sys_gui(" set answer [tk_messageBox \\-type yesnocancel \\\n"); sys_gui(" \\-icon question \\\n"); sys_gui(" \\-message [concat Save changes to $title?]]\n"); sys_gui(" if {$answer == \"yes\"} {hammereditor_send $name}\n"); sys_gui(" if {$answer != \"cancel\"} {hammereditor_doclose $name}\n"); - sys_gui(" }\n"); + sys_gui(" } else {hammereditor_doclose $name}\n"); sys_gui(" }\n"); sys_gui("}\n"); } -void hammereditor_open(t_hammerfile *f, char *title) +/* null owner defaults to class name, pass "" to supress */ +void hammereditor_open(t_hammerfile *f, char *title, char *owner) { - if (!title) title = class_getname(*f->f_master); - sys_vgui("hammereditor_open .%x %dx%d {%s}\n", (int)f, 600, 340, title); + if (!owner) + owner = class_getname(*f->f_master); + if (!*owner) + owner = 0; + if (!title) + { + title = owner; + owner = 0; + } + if (owner) + sys_vgui("hammereditor_open .%x %dx%d {%s: %s} %d\n", + (int)f, 600, 340, owner, title, (f->f_editorfn != 0)); + else + sys_vgui("hammereditor_open .%x %dx%d {%s} %d\n", + (int)f, 600, 340, (title ? title : "Untitled"), + (f->f_editorfn != 0)); } static void hammereditor_tick(t_hammerfile *f) { - sys_vgui("hammereditor_close .%x %d\n", (int)f, 1); + sys_vgui("hammereditor_close .%x 1\n", (int)f); } void hammereditor_close(t_hammerfile *f, int ask) { - if (ask) + if (ask && f->f_editorfn) /* hack: deferring modal dialog creation in order to allow for a message box redraw to happen -- LATER investigate */ clock_delay(f->f_editorclock, 0); else - sys_vgui("hammereditor_close .%x %d\n", (int)f, 0); + sys_vgui("hammereditor_close .%x 0\n", (int)f); } void hammereditor_append(t_hammerfile *f, char *contents) @@ -150,6 +187,12 @@ void hammereditor_append(t_hammerfile *f, char *contents) sys_vgui("hammereditor_append .%x {%s}\n", (int)f, contents); } +void hammereditor_setdirty(t_hammerfile *f, int flag) +{ + if (f->f_editorfn) + sys_vgui("hammereditor_setdirty .%x %d\n", (int)f, flag); +} + static void hammereditor_clear(t_hammerfile *f) { if (f->f_editorfn) diff --git a/shared/hammer/file.h b/shared/hammer/file.h index 13be3b8..7e68cdc 100644 --- a/shared/hammer/file.h +++ b/shared/hammer/file.h @@ -11,9 +11,10 @@ EXTERN_STRUCT _hammerfile; typedef void (*t_hammerfilefn)(t_pd *, t_symbol *, int, t_atom *); typedef void (*t_hammerembedfn)(t_pd *, t_binbuf *, t_symbol *); -void hammereditor_open(t_hammerfile *f, char *title); +void hammereditor_open(t_hammerfile *f, char *title, char *owner); void hammereditor_close(t_hammerfile *f, int ask); void hammereditor_append(t_hammerfile *f, char *contents); +void hammereditor_setdirty(t_hammerfile *f, int flag); void hammerpanel_open(t_hammerfile *f, t_symbol *inidir); void hammerpanel_setopendir(t_hammerfile *f, t_symbol *dir); t_symbol *hammerpanel_getopendir(t_hammerfile *f); diff --git a/shared/notes.txt b/shared/notes.txt index 44c0c11..de093b8 100644 --- a/shared/notes.txt +++ b/shared/notes.txt @@ -5,6 +5,14 @@ TODO for root and shared DONE for root and shared +with cyclone alpha53 + * binport: added half-byte #symbol id + * hammereditor: + . fixed closing by window manager + . dirty flag bound, shown and observed (unless in viewer mode) + . title specification simplified and standardized + . bug fix: incomplete transfer from editor + with cyclone alpha52 * fragile: class name resolution based on voluntary mutation and raising * fitter: mirroring removed diff --git a/test/cyclone/matrix-test.pd b/test/cyclone/matrix-test.pd index 23ba18a..1a6642c 100644 --- a/test/cyclone/matrix-test.pd +++ b/test/cyclone/matrix-test.pd @@ -77,7 +77,7 @@ #X obj 306 179 print; #X msg 26 138 dump; #X msg 23 101 dumptarget; -#N canvas 179 79 698 356 lists 0; +#N canvas 179 79 698 356 lists 1; #X obj 363 29 osc~ 220; #X obj 450 29 osc~ 230; #X obj 362 73 matrix~ 3 2 1; @@ -109,6 +109,10 @@ #X obj 361 117 *~ 0.01; #X obj 443 117 *~ 0.01; #X msg 174 29 ramp 0; +#X msg 608 57 0; +#X msg 609 87 1; +#X floatatom 541 108 5 0 0 0 - - -; +#X msg 541 133 set \$1 1000; #X connect 0 0 2 0; #X connect 1 0 2 1; #X connect 2 0 28 0; @@ -137,6 +141,10 @@ #X connect 28 0 3 0; #X connect 29 0 3 1; #X connect 30 0 2 0; +#X connect 31 0 33 0; +#X connect 32 0 33 0; +#X connect 33 0 34 0; +#X connect 34 0 2 0; #X restore 413 221 pd lists; #X connect 0 0 8 0; #X connect 1 0 0 0; @@ -259,7 +259,7 @@ static void tot_click(t_tot *x, t_floatarg xpos, t_floatarg ypos, char *head = scriptlet_getcontents(x->x_persistent, &nleft); char buf[MAXPDSTRING + 1]; buf[MAXPDSTRING] = 0; - hammereditor_open(x->x_filehandle, "scriptlet editor"); + hammereditor_open(x->x_filehandle, "scriptlet editor", 0); while (nleft > 0) { if (nleft > MAXPDSTRING) diff --git a/toxy/toxy-help.include b/toxy/toxy-help.include new file mode 100644 index 0000000..289c81c --- /dev/null +++ b/toxy/toxy-help.include @@ -0,0 +1 @@ +bin/plustot-help.pd diff --git a/toxy/widget.c b/toxy/widget.c index 9481b89..c0bffd8 100644 --- a/toxy/widget.c +++ b/toxy/widget.c @@ -468,7 +468,7 @@ static void widget_properties(t_gobj *z, t_glist *glist) char buf[MAXPDSTRING + 1]; buf[MAXPDSTRING] = 0; sprintf(buf, "%s %s", x->x_type->s_name, x->x_name->s_name); - hammereditor_open(x->x_filehandle, buf); + hammereditor_open(x->x_filehandle, buf, 0); while (nleft > 0) { if (nleft > MAXPDSTRING) |