Revision: 10473 http://pure-data.svn.sourceforge.net/pure-data/?rev=10473&view=rev Author: lukeiannini Date: 2009-01-03 09:15:08 +0000 (Sat, 03 Jan 2009)
Log Message: ----------- some new objects to support structhausen and mmmap
Modified Paths: -------------- trunk/abstractions/sfruit/sfruit/color.rgbset.pd trunk/abstractions/sfruit/sfruit/countseq.pd trunk/abstractions/sfruit/sfruit/learnOSC.pd trunk/abstractions/sfruit/sfruit/list-union-merge.pd trunk/abstractions/sfruit/sfruit/setabng.pd
Added Paths: ----------- trunk/abstractions/sfruit/sfruit/OSCout.pd trunk/abstractions/sfruit/sfruit/beat2fracx.pd trunk/abstractions/sfruit/sfruit/castsymbol.pd trunk/abstractions/sfruit/sfruit/changeargs.pd trunk/abstractions/sfruit/sfruit/list-mapx.pd trunk/abstractions/sfruit/sfruit/list-union-merge-help.pd trunk/abstractions/sfruit/sfruit/midi.random-smooth.pd trunk/abstractions/sfruit/sfruit/quantize-help.pd trunk/abstractions/sfruit/sfruit/quantize.pd trunk/abstractions/sfruit/sfruit/receivemany.pd trunk/abstractions/sfruit/sfruit/templater-help.pd trunk/abstractions/sfruit/sfruit/templater.pd
Added: trunk/abstractions/sfruit/sfruit/OSCout.pd =================================================================== --- trunk/abstractions/sfruit/sfruit/OSCout.pd (rev 0) +++ trunk/abstractions/sfruit/sfruit/OSCout.pd 2009-01-03 09:15:08 UTC (rev 10473) @@ -0,0 +1,14 @@ +#N canvas 0 22 367 215 10; +#X obj 52 133 udpsend; +#X obj 52 103 packOSC; +#X obj 124 75 loadbang; +#X obj 124 96 list append connect $1 $2; +#X obj 52 61 r OSCOUT; +#X obj 78 175 print; +#X obj 124 116 list trim; +#X connect 0 0 5 0; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 3 0 6 0; +#X connect 4 0 1 0; +#X connect 6 0 0 0;
Added: trunk/abstractions/sfruit/sfruit/beat2fracx.pd =================================================================== --- trunk/abstractions/sfruit/sfruit/beat2fracx.pd (rev 0) +++ trunk/abstractions/sfruit/sfruit/beat2fracx.pd 2009-01-03 09:15:08 UTC (rev 10473) @@ -0,0 +1,15 @@ +#N canvas 0 22 226 251 10; +#X obj 43 46 list; +#X obj 43 79 symbol2list x; +#X obj 43 104 list split 1; +#X obj 77 129 beat2frac; +#X obj 43 167 *; +#X obj 43 21 inlet; +#X obj 43 194 outlet; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 2 0 4 0; +#X connect 2 1 3 0; +#X connect 3 0 4 1; +#X connect 4 0 6 0; +#X connect 5 0 0 0;
Added: trunk/abstractions/sfruit/sfruit/castsymbol.pd =================================================================== --- trunk/abstractions/sfruit/sfruit/castsymbol.pd (rev 0) +++ trunk/abstractions/sfruit/sfruit/castsymbol.pd 2009-01-03 09:15:08 UTC (rev 10473) @@ -0,0 +1,11 @@ +#N canvas 660 453 201 199 10; +#X obj 36 29 inlet; +#X obj 66 80 list prepend set; +#X obj 36 56 t b a; +#X msg 36 108; +#X obj 36 138 outlet; +#X connect 0 0 2 0; +#X connect 1 0 3 0; +#X connect 2 0 3 0; +#X connect 2 1 1 0; +#X connect 3 0 4 0;
Added: trunk/abstractions/sfruit/sfruit/changeargs.pd =================================================================== --- trunk/abstractions/sfruit/sfruit/changeargs.pd (rev 0) +++ trunk/abstractions/sfruit/sfruit/changeargs.pd 2009-01-03 09:15:08 UTC (rev 10473) @@ -0,0 +1,14 @@ +#N canvas 438 397 450 300 10; +#X obj 122 126 dollarg; +#X msg 122 202; +#X obj 139 176 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 122 103 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 122 227 saveargs; +#X obj 122 149 prepent set; +#X connect 0 0 5 0; +#X connect 1 0 4 0; +#X connect 2 0 1 0; +#X connect 3 0 0 0; +#X connect 5 0 1 0;
Modified: trunk/abstractions/sfruit/sfruit/color.rgbset.pd =================================================================== --- trunk/abstractions/sfruit/sfruit/color.rgbset.pd 2009-01-03 09:13:36 UTC (rev 10472) +++ trunk/abstractions/sfruit/sfruit/color.rgbset.pd 2009-01-03 09:15:08 UTC (rev 10473) @@ -1,4 +1,4 @@ -#N canvas 185 89 559 602 10; +#N canvas 226 22 559 602 10; #X obj 30 173 cnv 15 18 15 empty $0dispcol1 empty 20 12 0 14 -128992 -262144 0; #X obj 218 73 * -65536; @@ -27,8 +27,8 @@ #X obj 70 106 vsl 15 60 0 255 0 0 $0blue $0blueR empty 0 -8 0 8 -64 -1 -1 2938 1; #X obj 279 526 list trim; -#X obj 52 90 hradio 10 1 0 3 $0layer $0layerr back 0 -4 0 8 -1 -262144 --1 0; +#X obj 52 90 hradio 10 1 0 3 $0layer $0layerr label 0 -4 0 8 -1 -262144 +-1 2; #X obj 361 224 r $0layer; #X obj 218 47 int; #X obj 281 47 int; @@ -36,7 +36,7 @@ #X obj 218 21 r $0red; #X obj 281 21 r $0green; #X obj 351 21 r $0blue; -#X obj 30 85 bng 15 250 50 0 $0nullS $0nullR empty 0 -6 0 8 -260033 +#X obj 41 96 bng 8 250 50 0 $0nullS $0nullR empty 0 -6 0 8 -260033 -1 -1; #X obj 35 288 r $0layer; #X obj 35 313 sel 0 1 2; @@ -91,6 +91,12 @@ #X restore 81 536 pd init; #X obj 30 26 inlet; #X obj 30 51 unpack f f f; +#X obj 133 150 colorpanel; +#X obj 133 171 list-map; +#X obj 187 171 * 255; +#X obj 32 82 bng 12 250 50 0 $0.colorpanel.s $0.colorpanel.r C 3 +7 0 8 -212800 -1 -1; +#X obj 133 126 r $0.colorpanel.s; #X connect 1 0 7 0; #X connect 2 0 5 0; #X connect 3 0 4 0; @@ -153,4 +159,9 @@ #X connect 55 0 20 0; #X connect 55 1 21 0; #X connect 55 2 22 0; +#X connect 56 0 57 0; +#X connect 57 0 55 0; +#X connect 57 1 58 0; +#X connect 58 0 57 1; +#X connect 60 0 56 0; #X coords 0 -1 1 1 56 109 2 30 80;
Modified: trunk/abstractions/sfruit/sfruit/countseq.pd =================================================================== --- trunk/abstractions/sfruit/sfruit/countseq.pd 2009-01-03 09:13:36 UTC (rev 10472) +++ trunk/abstractions/sfruit/sfruit/countseq.pd 2009-01-03 09:15:08 UTC (rev 10473) @@ -1,5 +1,4 @@ #N canvas 974 303 373 390 10; - #X obj 26 159 f; #X obj 81 83 sel restart; #X msg 81 108 0;
Modified: trunk/abstractions/sfruit/sfruit/learnOSC.pd =================================================================== --- trunk/abstractions/sfruit/sfruit/learnOSC.pd 2009-01-03 09:13:36 UTC (rev 10472) +++ trunk/abstractions/sfruit/sfruit/learnOSC.pd 2009-01-03 09:15:08 UTC (rev 10473) @@ -1,20 +1,22 @@ -#N canvas 145 92 239 311 10; +#N canvas 42 170 239 311 10; #X obj 72 131 list split 1; #X obj 72 181 t b a; #X msg 129 155 0; -#X obj 25 218 sdeeprouteOSC; #X obj 25 247 outlet; #X obj 105 87 inlet learn?; #X obj 144 249 outlet; #X obj 72 155 spigot; #X obj 25 58 r OSCIN; -#X connect 0 0 7 0; +#X obj 144 183 inlet; +#X obj 25 218 sdeeprouteOSC $1; +#X connect 0 0 6 0; #X connect 1 0 2 0; -#X connect 1 1 3 1; -#X connect 1 1 6 0; -#X connect 2 0 7 1; -#X connect 3 0 4 0; -#X connect 5 0 7 1; -#X connect 7 0 1 0; -#X connect 8 0 0 0; -#X connect 8 0 3 0; +#X connect 1 1 5 0; +#X connect 1 1 9 1; +#X connect 2 0 6 1; +#X connect 4 0 6 1; +#X connect 6 0 1 0; +#X connect 7 0 0 0; +#X connect 7 0 9 0; +#X connect 8 0 9 1; +#X connect 9 0 3 0;
Added: trunk/abstractions/sfruit/sfruit/list-mapx.pd =================================================================== --- trunk/abstractions/sfruit/sfruit/list-mapx.pd (rev 0) +++ trunk/abstractions/sfruit/sfruit/list-mapx.pd 2009-01-03 09:15:08 UTC (rev 10473) @@ -0,0 +1,31 @@ +#N canvas 470 232 489 423 10; +#X obj 86 33 inlet; +#X obj 275 52 inlet; +#X obj 151 352 outlet; +#X obj 170 248 outlet; +#X obj 151 317 list; +#X obj 275 215 list prepend; +#X obj 354 185 t a; +#X obj 151 155 t b a a b; +#X obj 86 58 route bang; +#X obj 86 83 b; +#X obj 151 84 t b a; +#X obj 151 124 list; +#X obj 170 215 list-dripx $1; +#X connect 0 0 8 0; +#X connect 1 0 5 0; +#X connect 4 0 2 0; +#X connect 5 0 6 0; +#X connect 5 0 4 1; +#X connect 6 0 5 1; +#X connect 7 0 4 0; +#X connect 7 1 12 0; +#X connect 7 2 4 1; +#X connect 7 3 5 1; +#X connect 8 0 9 0; +#X connect 8 1 10 0; +#X connect 9 0 11 0; +#X connect 10 0 11 0; +#X connect 10 1 11 1; +#X connect 11 0 7 0; +#X connect 12 0 3 0;
Added: trunk/abstractions/sfruit/sfruit/list-union-merge-help.pd =================================================================== --- trunk/abstractions/sfruit/sfruit/list-union-merge-help.pd (rev 0) +++ trunk/abstractions/sfruit/sfruit/list-union-merge-help.pd 2009-01-03 09:15:08 UTC (rev 10473) @@ -0,0 +1,15 @@ +#N canvas 734 402 450 300 10; +#X obj 104 120 list-union-merge; +#X msg 197 95 /a /b /c; +#X msg 104 94 /1 /2 /3; +#X obj 104 144 prepent set; +#X text 11 31 for each value in the right inlet , append each value +in the left inlet and merge into one symbol. Used for multiplexing +large numbers of OSC-style addresses.; +#X msg 104 169; +#X text 234 265 2008 Luke Iannini; +#X text 15 8 [list-union-merge]; +#X connect 0 0 3 0; +#X connect 1 0 0 1; +#X connect 2 0 0 0; +#X connect 3 0 5 0;
Modified: trunk/abstractions/sfruit/sfruit/list-union-merge.pd =================================================================== --- trunk/abstractions/sfruit/sfruit/list-union-merge.pd 2009-01-03 09:13:36 UTC (rev 10472) +++ trunk/abstractions/sfruit/sfruit/list-union-merge.pd 2009-01-03 09:15:08 UTC (rev 10473) @@ -9,6 +9,7 @@ #X obj 138 33 inlet; #X obj 52 32 inlet; #X obj 52 339 outlet; +#X obj -5 90 route bang; #X connect 0 0 9 0; #X connect 0 1 3 0; #X connect 1 0 2 0; @@ -20,4 +21,6 @@ #X connect 5 0 2 1; #X connect 6 0 0 1; #X connect 7 0 1 1; -#X connect 8 0 0 0; +#X connect 8 0 10 0; +#X connect 10 0 9 0; +#X connect 10 1 0 0;
Added: trunk/abstractions/sfruit/sfruit/midi.random-smooth.pd =================================================================== --- trunk/abstractions/sfruit/sfruit/midi.random-smooth.pd (rev 0) +++ trunk/abstractions/sfruit/sfruit/midi.random-smooth.pd 2009-01-03 09:15:08 UTC (rev 10473) @@ -0,0 +1,17 @@ +#N canvas 1001 348 198 230 10; +#X obj 68 98 / 999999; +#X obj 68 76 random 999999; +#X obj 41 167 line 50 5; +#X msg 41 145 $1 50; +#X obj 41 124 +; +#X obj 41 51 t a b; +#X obj 41 19 inlet; +#X obj 41 189 outlet; +#X connect 0 0 4 1; +#X connect 1 0 0 0; +#X connect 2 0 7 0; +#X connect 3 0 2 0; +#X connect 4 0 3 0; +#X connect 5 0 4 0; +#X connect 5 1 1 0; +#X connect 6 0 5 0;
Added: trunk/abstractions/sfruit/sfruit/quantize-help.pd =================================================================== --- trunk/abstractions/sfruit/sfruit/quantize-help.pd (rev 0) +++ trunk/abstractions/sfruit/sfruit/quantize-help.pd 2009-01-03 09:15:08 UTC (rev 10473) @@ -0,0 +1,11 @@ +#N canvas 496 468 450 300 10; +#X text 272 256 2008 Luke Iannini; +#X floatatom 115 107 5 0 0 0 - - -; +#X floatatom 115 188 5 0 0 0 - - -; +#X obj 115 145 quantize 16; +#X text 22 20 [quantize] rounds a number to the next multiple of its +argument; +#X msg 193 145 0.333; +#X connect 1 0 3 0; +#X connect 3 0 2 0; +#X connect 5 0 3 1;
Added: trunk/abstractions/sfruit/sfruit/quantize.pd =================================================================== --- trunk/abstractions/sfruit/sfruit/quantize.pd (rev 0) +++ trunk/abstractions/sfruit/sfruit/quantize.pd 2009-01-03 09:15:08 UTC (rev 10473) @@ -0,0 +1,42 @@ +#N canvas 194 246 374 297 10; +#X obj 160 162 / 2; +#X obj 129 192 >; +#X obj 47 209 +; +#X obj 47 236 *; +#X obj 197 192 t a; +#X obj 47 109 t a a; +#X obj 122 162 fmod; +#X obj 47 162 /; +#X obj 47 185 int; +#X obj 126 110 t a a a a; +#X obj 126 39 inlet; +#X obj 47 39 inlet; +#X obj 47 262 outlet; +#X obj 204 22 loadbang; +#X obj 204 49 f $1; +#X obj 204 70 sel 0; +#X msg 204 93 1; +#X text 193 149 if remainder is > 1/2 ,; +#X text 194 163 quantize to next snappoint; +#X text 182 157 <; +#X connect 0 0 1 1; +#X connect 1 0 2 1; +#X connect 2 0 3 0; +#X connect 3 0 12 0; +#X connect 4 0 3 1; +#X connect 5 0 7 0; +#X connect 5 1 6 0; +#X connect 6 0 1 0; +#X connect 7 0 8 0; +#X connect 8 0 2 0; +#X connect 9 0 7 1; +#X connect 9 1 6 1; +#X connect 9 2 0 0; +#X connect 9 3 4 0; +#X connect 10 0 9 0; +#X connect 11 0 5 0; +#X connect 13 0 14 0; +#X connect 14 0 15 0; +#X connect 15 0 16 0; +#X connect 15 1 9 0; +#X connect 16 0 9 0;
Added: trunk/abstractions/sfruit/sfruit/receivemany.pd =================================================================== --- trunk/abstractions/sfruit/sfruit/receivemany.pd (rev 0) +++ trunk/abstractions/sfruit/sfruit/receivemany.pd 2009-01-03 09:15:08 UTC (rev 10473) @@ -0,0 +1,21 @@ +#N canvas 37 448 222 329 10; +#X obj 42 34 inlet; +#X msg 74 189 clear; +#X obj 42 63 t a b; +#X obj 42 88 list-enumerate; +#X obj 42 115 list-dripx 2; +#X msg 42 154 add $1 $2; +#X obj 42 235 list split 1; +#X obj 86 285 outlet; +#X obj 42 212 receive2list; +#X obj 42 285 outlet; +#X connect 0 0 2 0; +#X connect 1 0 8 0; +#X connect 2 0 3 0; +#X connect 2 1 1 0; +#X connect 3 0 4 0; +#X connect 4 0 5 0; +#X connect 5 0 8 0; +#X connect 6 0 9 0; +#X connect 6 1 7 0; +#X connect 8 0 6 0;
Modified: trunk/abstractions/sfruit/sfruit/setabng.pd =================================================================== --- trunk/abstractions/sfruit/sfruit/setabng.pd 2009-01-03 09:13:36 UTC (rev 10472) +++ trunk/abstractions/sfruit/sfruit/setabng.pd 2009-01-03 09:15:08 UTC (rev 10473) @@ -1,22 +1,20 @@ -#N canvas 766 282 203 271 10; +#N canvas 766 282 224 325 10; #X obj 44 35 inlet; -#X obj 44 199 spigot; -#X msg 44 154 1; -#X msg 83 154 0; -#X obj 44 107 t b b b; -#X obj 95 107 t b; +#X obj 44 229 spigot; +#X msg 44 184 1; +#X msg 83 184 0; +#X obj 44 137 t b b b; +#X obj 44 263 outlet; +#X obj 132 196 inlet; +#X obj 131 172 outlet; #X obj 44 70 route set; -#X obj 44 233 outlet; -#X obj 132 166 inlet; -#X obj 131 142 outlet; -#X connect 0 0 6 0; -#X connect 1 0 7 0; +#X connect 0 0 8 0; +#X connect 1 0 5 0; #X connect 2 0 1 1; #X connect 3 0 1 1; #X connect 4 0 2 0; -#X connect 4 1 9 0; +#X connect 4 1 7 0; #X connect 4 2 3 0; -#X connect 5 0 9 0; -#X connect 6 0 4 0; -#X connect 6 1 5 0; -#X connect 8 0 1 0; +#X connect 6 0 1 0; +#X connect 8 0 4 0; +#X connect 8 1 7 0;
Added: trunk/abstractions/sfruit/sfruit/templater-help.pd =================================================================== --- trunk/abstractions/sfruit/sfruit/templater-help.pd (rev 0) +++ trunk/abstractions/sfruit/sfruit/templater-help.pd 2009-01-03 09:15:08 UTC (rev 10473) @@ -0,0 +1,43 @@ +#N canvas 657 235 658 370 10; +#X obj 17 329 sendcanvas; +#X msg 17 251 obj 10 10 templater modcount , loadbang; +#X text 270 69 arguments:; +#X text 284 88 my_template_name - this will be expanded to "my_template_name-template.pd" +and searched for in your Pd path.; +#X text 282 140 absolute/relative - by default , templater will start +building the objects in the template file 20 pixels South of the point +where you instantiated [templater]. Give "1" (or anything) as the second +argument for templater to instead create the objects exactly as they +are defined in the template file , with no offset.; +#X text 522 320 2008 Luke Iannini; +#X text 522 335 proyekto.net; +#X msg 17 281 obj 10 10 templater tmetro , loadbang; +#X text 282 253 for the moment , one must manually delete the [templater] +object immediately after spawning it.; +#X text 89 229 try me!; +#X text 40 301 (delete existing to try another); +#N canvas 514 43 411 356 creating-templates 0; +#X obj 10 35 metro 250; +#X obj 10 10 tgl 20 0 empty empty empty 17 7 0 10 -200676 -1 -1 0 1 +; +#X obj 30 58 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X text 29 287 As an aside , an easy way to edit templates is to simply +spawn them as [modcount-template] or similar - they're just Pd patches +in your Pd path.; +#X text 25 140 To make a template , simply create a patch and save +it as <myname>-template.pd somewhere in your Pd path.; +#X text 26 178 The top-left object should be in the upper-left corner +of the canvas if you plan to use the relative positioning feature of +[templater].; +#X text 28 226 Or , position objects just as you'd like them to appear +if you plan to use the absolute mode of [templater]. The example above +shows the placement of objects within the "modcount" template.; +#X connect 0 0 2 0; +#X connect 1 0 0 0; +#X restore 301 323 pd creating-templates; +#X text 283 291 subpatches are not yet supported; +#X text 266 32 [templater] - create and connect a set of pd objects +in the current patch based on a template file.; +#X connect 1 0 0 0; +#X connect 7 0 0 0;
Added: trunk/abstractions/sfruit/sfruit/templater.pd =================================================================== --- trunk/abstractions/sfruit/sfruit/templater.pd (rev 0) +++ trunk/abstractions/sfruit/sfruit/templater.pd 2009-01-03 09:15:08 UTC (rev 10473) @@ -0,0 +1,94 @@ +#N canvas 804 104 455 638 10; +#X obj 103 318 textfile; +#X obj 103 366 route #X; +#X obj 103 387 route connect; +#X obj 50 271 until; +#X obj 50 145 t b b; +#X obj 50 46 loadbang; +#X obj 103 435 unpack f f f f; +#X obj 103 519 pack f f f f; +#X obj 103 581 sendcanvas 1; +#X obj 208 443 r $0.index-offset; +#X obj 149 479 +; +#X obj 103 479 +; +#X msg 103 551 connect $1 $2 $3 $4; +#X obj 69 98 canvasindex; +#X obj 132 125 s $0.index-offset; +#N canvas 342 115 467 373 offset-coords 0; +#X obj 47 3 inlet; +#X obj 46 334 outlet; +#X obj 47 78 list split 1; +#X obj 96 113 list split 2; +#X obj 110 256 list append; +#X obj 47 282 list append; +#X obj 194 181 +; +#X obj 194 152 unpack f f; +#X obj 209 94 unpack f f; +#X obj 251 182 +; +#X obj 194 211 pack f f; +#X obj 208 62 inlet; +#X obj 46 309 list trim; +#X obj 266 122 + 20; +#X text 301 123 spawn under [templater]; +#X connect 0 0 2 0; +#X connect 2 0 5 0; +#X connect 2 1 3 0; +#X connect 3 0 7 0; +#X connect 3 1 4 1; +#X connect 4 0 5 1; +#X connect 5 0 12 0; +#X connect 6 0 10 0; +#X connect 7 0 6 0; +#X connect 7 1 9 0; +#X connect 8 0 6 1; +#X connect 8 1 13 0; +#X connect 9 0 10 1; +#X connect 10 0 4 0; +#X connect 11 0 8 0; +#X connect 12 0 1 0; +#X connect 13 0 9 1; +#X restore 199 387 pd offset-coords; +#X obj 199 409 sendcanvas 1; +#X obj 292 362 canvasposition; +#X obj 50 74 t b b b; +#X obj 113 75 s $0.get-position; +#X obj 292 292 r $0.get-position; +#X obj 102 174 list append $1; +#X obj 102 198 route float; +#X msg 103 235 read $1-template.pd , rewind; +#X obj 292 339 sel 0; +#X text 304 16 *optional; +#X obj 292 316 list append $2; +#X text 86 16 [templater templatename absolute?*]; +#X text 286 602 2008 Luke Iannini; +#X connect 0 0 1 0; +#X connect 0 1 3 1; +#X connect 1 0 2 0; +#X connect 2 0 6 0; +#X connect 2 1 15 0; +#X connect 3 0 0 0; +#X connect 4 0 3 0; +#X connect 4 1 21 0; +#X connect 5 0 18 0; +#X connect 6 0 11 0; +#X connect 6 1 7 1; +#X connect 6 2 10 0; +#X connect 6 3 7 3; +#X connect 7 0 12 0; +#X connect 9 0 11 1; +#X connect 9 0 10 1; +#X connect 10 0 7 2; +#X connect 11 0 7 0; +#X connect 12 0 8 0; +#X connect 13 1 14 0; +#X connect 15 0 16 0; +#X connect 17 0 15 1; +#X connect 18 0 4 0; +#X connect 18 1 13 0; +#X connect 18 2 19 0; +#X connect 20 0 26 0; +#X connect 21 0 22 0; +#X connect 22 1 23 0; +#X connect 23 0 0 0; +#X connect 24 0 17 0; +#X connect 26 0 24 0;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.