#N canvas 513 24 555 689 10;
#X obj 0 697 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
14 -228856 -66577 0;
#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header route 3 12 0 18
-204280 -1 0;
#X obj 0 240 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
-228856 -1 0;
#N canvas 50 229 494 392 META 0;
#X text 12 85 PLATFORM windows macosx gnulinux;
#X text 12 165 LIBRARY internal;
#X text 12 205 WEBSITE http://crca.ucsd.edu/~msp/;
#X text 12 35 LICENSE SIBSD;
#X text 12 185 AUTHOR Miller Puckette;
#X text 12 245 HELP_PATCH_AUTHORS This help patch was updated for Pd
version 0.38.4 by Dave Sabine and Hans-Christoph Steiner as part of
a project called pddp proposed by Krzysztof Czaja to build comprehensive
documentation for Pd. Jonathan Wilkes revised the patch to conform
to the PDDP template for Pd version 0.42.;
#X text 12 105 INLET_0 anything;
#X text 12 125 OUTLET_N anything;
#X text 12 145 OUTLET_R anything;
#X text 12 5 KEYWORDS control needs_work list_op symbol_op list_op
anything_op;
#X text 12 225 RELEASE_DATE 1997;
#X text 12 55 DESCRIPTION route a message according to the selector
or first element;
#X restore 500 699 pd META;
#X obj 0 447 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
13 -228856 -1 0;
#X obj 0 576 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
0 13 -228856 -1 0;
#X obj 0 672 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
0 13 -228856 -1 0;
#N canvas 74 482 428 109 Related_objects 0;
#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
14 -204280 -1 0;
#X text 8 2 [route] Related Objects;
#X obj 22 43 select;
#X obj 72 43 spigot;
#X obj 123 43 moses;
#X restore 102 699 pd Related_objects;
#X obj 78 249 cnv 17 3 125 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
-162280 0;
#X obj 78 456 cnv 17 3 17 empty \$0-pddp.cnv.let.0 n 5 9 0 16 -228856
-162280 0;
#X obj 512 4 route;
#X obj 459 20 pddp/pddplink http://wiki.puredata.info/en/route -text
pdpedia: route;
#X obj 27 113 route 0 1;
#X msg 27 61 0 12;
#X msg 65 61 1 13;
#X msg 103 61 2 14;
#X obj 78 156 print rejection_outlet;
#X obj 27 200 print left_outlet;
#X obj 78 136 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X obj 52 178 print middle_outlet;
#X obj 52 136 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X obj 27 136 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X msg 140 61 7 17;
#N canvas 414 108 517 509 float_mode 0;
#X text 89 271 float;
#X text 89 365 list;
#X text 89 325 symbol;
#X text 89 455 pointer;
#X text 139 455 - a pointer is always sent to the rightmost outlet.
;
#X text 89 438 bang;
#X text 139 271 - the incoming value is compared to the creation argument(s).
If there is a match \, a bang is sent to the outlet corresponding to
the matching creation argument. If there is no match the input is sent
to the rightmost outlet.;
#X obj 0 0 cnv 15 515 20 empty \$0-pddp.cnv.subheading empty 3 12 0
14 -204280 -1 0;
#X text 8 2 [route] Message Handling in "Float Mode";
#X obj 1 261 cnv 3 500 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
-228856 -1 0;
#X obj 70 270 cnv 17 3 225 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
-162280 0;
#X text 138 438 - a bang will be sent to the rightmost inlet.;
#X text 88 481 All other messages will be sent to the rightmost outlet.
;
#X msg 141 50 2;
#X msg 148 72 1 2 3;
#X obj 129 167 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
#X msg 169 116 something else;
#X obj 204 167 print rejection_outlet;
#X obj 141 239 print out0;
#X obj 162 217 print out1;
#X text 50 26 For "float mode" \, the first argument must be a float.
;
#X obj 141 142 route 1 2 3;
#X obj 183 195 print out2;
#X msg 158 94 3 dog night;
#X text 139 325 - the symbol is compared to the creation arguments
\, and a bang is sent to the corresponding outlet if there is a match.
;
#X text 139 365 - the first element of the list is compared to the
creation argument(s). If there is a match \, the first element is removed
from the list \, and the remaining list is sent to the outlet corresponding
to the matching creation argument. If there is no match the input is
sent to the rightmost outlet.;
#X obj 150 167 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
#X obj 171 167 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
#X connect 13 0 21 0;
#X connect 14 0 21 0;
#X connect 16 0 21 0;
#X connect 21 0 18 0;
#X connect 21 0 15 0;
#X connect 21 1 19 0;
#X connect 21 1 26 0;
#X connect 21 2 22 0;
#X connect 21 2 27 0;
#X connect 21 3 17 0;
#X connect 23 0 21 0;
#X restore 171 306 pd float_mode;
#X text 98 249 anything;
#X text 168 249 - [route] handles its input in 3 different "modes"
\, depending on what the creation arguments are. Click the subpatches
below to see how message types are handled under each mode.;
#N canvas 289 73 516 599 selector_mode 0;
#X text 88 548 pointer;
#X text 138 548 - a pointer is always sent to the rightmost outlet.
;
#X obj 0 0 cnv 15 515 21 empty \$0-pddp.cnv.subheading empty 3 12 0
14 -204280 -1 0;
#X obj 0 389 cnv 3 500 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
-228856 -1 0;
#X obj 69 398 cnv 17 3 255 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
-162280 0;
#X obj 56 244 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X obj 89 244 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X obj 203 262 print rejection_outlet;
#X msg 68 59 der;
#X obj 68 349 print out0;
#X obj 101 327 print out1;
#X text 7 1 [route] Message Handling in "Selector Mode";
#X msg 92 690 foo;
#X msg 101 718 symbol foo;
#X obj 169 283 print out3;
#X obj 92 840 print out0;
#X obj 133 818 print out1;
#X text 120 690 the selector "foo" matches the first argument;
#X text 171 718 the selector "symbol" matches the second argument;
#X text 88 398 bang;
#X text 138 398 - if one of the creation arguments is "bang" \, then
a bang will be sent out the corresponding outlet.;
#X text 138 428 - if one of the creation arguments is "float" \, then
an incoming float will be sent out the corresponding outlet.;
#X text 88 428 float;
#X text 88 458 list;
#X text 138 458 - if one of the creation arguments is "list" \, then
two behaviors are possible:;
#X text 138 484 a) if the first element is a float \, the list is sent
out the corresponding outlet.;
#X text 138 509 b) if the first element is a symbol \, the "list" selector
is removed \, and the remaining message is sent out the corresponding
outlet.;
#X text 88 568 symbol;
#X text 138 568 - if one of the creation arguments is "symbol" \, then
an incoming symbol will be sent out the corresponding outlet.;
#X text 87 596 All other messages - the selector of the incoming message
is compared to the creation argument(s). If there is a match \, the
selector is stripped and the remaining message is sent to the corresponding
outlet. If there is no match the input is sent to the rightmost outlet.
;
#X text 91 667 Beware! All this can be confusing at times...;
#X msg 84 103 das;
#X obj 135 305 print out2;
#X obj 123 244 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
#X obj 157 244 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
#X msg 108 182 doh;
#X obj 191 244 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
#X msg 74 81 die 41;
#X text 49 36 In selector mode \, all creation arguments should be
symbols.;
#X obj 68 221 route der die das float;
#X msg 93 125 float 41;
#X msg 103 153 41;
#X text 135 147 (Remember: a single float "n" in a message or object
box is shorthand for "float n");
#X text 134 181 sent to the rightmost outlet (the "rejection outlet")
;
#X obj 92 774 route foo symbol list;
#X obj 174 796 print out2;
#X msg 128 744 2 3 four;
#X text 189 744 an implicit list-- matches the third argument;
#X connect 8 0 39 0;
#X connect 12 0 44 0;
#X connect 13 0 44 0;
#X connect 31 0 39 0;
#X connect 35 0 39 0;
#X connect 37 0 39 0;
#X connect 39 0 5 0;
#X connect 39 0 9 0;
#X connect 39 1 6 0;
#X connect 39 1 10 0;
#X connect 39 2 32 0;
#X connect 39 2 33 0;
#X connect 39 3 14 0;
#X connect 39 3 34 0;
#X connect 39 4 7 0;
#X connect 39 4 36 0;
#X connect 40 0 39 0;
#X connect 41 0 39 0;
#X connect 44 0 15 0;
#X connect 44 1 16 0;
#X connect 44 2 45 0;
#X connect 46 0 44 0;
#X restore 171 331 pd selector_mode;
#X obj 78 496 cnv 17 3 17 empty \$0-pddp.cnv.let.0 r 5 9 0 16 -228856
-162280 0;
#X text 98 497 anything;
#X text 80 594 1) float;
#X text 168 594 - [route] can take symbols or floats as arguments.
(Note: the first argument determines which "mode" below.) If floats
are used \, [route] operates in "float mode"-- if symbols are used
\, float operates in "selector mode." See the subpatches above to see
how incoming data is handled in each mode.;
#X obj 4 699 pddp/pddplink all_about_help_patches.pd -text Usage Guide
;
#X obj 100 675 pddp/pddplink ../2.control.examples/18.conditional.pd
-text doc/2.control.examples/18.conditional.pd;
#X msg 140 85 Grizabella;
#X text 11 23 route a message according to the selector or first element
;
#N canvas 592 32 426 587 type_mode 0;
#X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
14 -204280 -1 0;
#X text 7 1 [route] Message Handling in "Type Mode";
#X msg 85 305 bang;
#X msg 96 348 symbol pie;
#X msg 99 368 pie;
#X msg 74 265 1 2 3;
#X text 93 224 a float;
#X text 119 264 a list (of floats);
#X text 122 305 a bang;
#X text 175 348 a symbol;
#X text 133 369 none of the above!;
#X text 178 284 a list of symbols;
#X floatatom 109 425 5 0 0 0 - - -, f 5;
#X symbolatom 157 424 10 0 0 0 - - -, f 10;
#X obj 62 445 bng 15 250 50 0 empty empty bang -6 23 1 12 -262144 -1
-1;
#X msg 62 225 89;
#X msg 68 245 float 7;
#X obj 62 401 route bang float symbol list;
#X obj 109 445 bng 15 250 50 0 empty empty float -4 23 1 12 -262144
-1 -1;
#X obj 157 445 bng 15 250 50 0 empty empty symbol -12 23 1 12 -262144
-1 -1;
#X obj 205 445 bng 15 250 50 0 empty empty list -2 23 1 12 -262144
-1 -1;
#X obj 253 445 bng 15 250 50 0 empty empty undefined -18 23 1 12 -262144
-1 -1;
#X msg 80 285 list moon earth;
#X text 123 243 definitely a float!;
#X text 49 482 [trigger]-style shortcuts don't work:;
#X text 162 501 !=;
#X obj 63 502 route b f s l;
#X obj 184 502 route bang float symbol list;
#N canvas 0 22 466 633 routing_data_types 0;
#X obj 334 314 route symbol;
#X obj 336 334 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 413 335 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 331 361 route symbol;
#X obj 333 381 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 410 382 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X msg 318 269 test;
#X msg 357 269 symbol test;
#X obj 58 331 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 135 331 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 55 378 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 132 378 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X msg 89 266 bang;
#X obj 56 311 route bang;
#X obj 53 358 route bang;
#X text 14 5 routing based on reserved words:;
#X obj 188 331 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 265 331 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 185 378 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 262 378 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 186 311 route float;
#X obj 183 358 route float;
#X msg 170 266 1;
#X msg 209 266 float 12;
#X obj 181 542 route list;
#X obj 181 561 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 249 562 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 168 580 route list;
#X obj 168 599 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 236 600 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X msg 184 493 list 1 two 3;
#X msg 167 473 1 two 3;
#X msg 200 513 list one 2 three;
#X msg 365 289 symbol;
#X msg 113 484 list;
#X msg 224 287 float test;
#X text 26 245 These all output the as same atom type that is routed:
;
#X msg 15 266 bang test;
#X obj 71 131 route 1;
#X msg 71 183;
#X obj 71 164 prepend set;
#X msg 71 100 1 2 3 4;
#X msg 218 183;
#X obj 218 164 prepend set;
#X obj 218 131 route this;
#X msg 218 100 this is not a list;
#X text 21 50 [route] has three modes \, first is float \, second is
symbol \, and third is data type. In the first two modes \, the first
element of the set is stripped off by [route].;
#X text 26 206 In the third mode \, [route] outputs the same atom type
(bang->bang \, float->float \, symbol->symbol).;
#X text 26 419 Lists do not behave the same with [route list] even
though it is interpreting incoming lists \, not just routing by keyword
\, as in the second symbol mode.;
#X msg 174 164 set;
#X text 157 164 re;
#X text 164 24 "bang" \, "float" \, "symbol" \, and "list";
#X connect 0 0 1 0;
#X connect 0 0 3 0;
#X connect 0 1 2 0;
#X connect 3 0 4 0;
#X connect 3 1 5 0;
#X connect 6 0 0 0;
#X connect 7 0 0 0;
#X connect 12 0 13 0;
#X connect 13 0 8 0;
#X connect 13 0 14 0;
#X connect 13 1 9 0;
#X connect 14 0 10 0;
#X connect 14 1 11 0;
#X connect 20 0 16 0;
#X connect 20 0 21 0;
#X connect 20 1 17 0;
#X connect 21 0 18 0;
#X connect 21 1 19 0;
#X connect 22 0 20 0;
#X connect 23 0 20 0;
#X connect 24 0 25 0;
#X connect 24 0 27 0;
#X connect 24 1 26 0;
#X connect 27 0 28 0;
#X connect 27 1 29 0;
#X connect 30 0 24 0;
#X connect 31 0 24 0;
#X connect 32 0 24 0;
#X connect 33 0 0 0;
#X connect 34 0 24 0;
#X connect 35 0 20 0;
#X connect 37 0 13 0;
#X connect 38 0 40 0;
#X connect 40 0 39 0;
#X connect 41 0 38 0;
#X connect 43 0 42 0;
#X connect 44 0 43 0;
#X connect 45 0 44 0;
#X connect 49 0 42 0;
#X connect 49 0 39 0;
#X restore 71 549 pd routing_data_types;
#X text 47 529 More info:;
#X text 20 37 In type mode \, the arguments are zero or one of the
four reserved words: "bang" \, "float" \, "symbol" \, and "list". Instead
of matching the 'value' of a message \, the [route] object will match
'data type': i.e. lists will be sent through the first outlet \, floats
will be sent through the second outlet \, symbols through the third
outlet \, bangs through the fourth outlet. The fifth outlet will then
output anything that does not match one of the previously defined data
types (i.e. the "pie" message below is a text message that hasn't been
defined as a 'symbol' - hence \, Pd cannot determine which data type
it is and it will be output through the right-most outlet).;
#N canvas 0 22 450 300 special_cases_of_lists 0;
#X msg 87 54 list;
#X msg 88 87 list 5;
#X text 65 23 SPECIAL CASES OF LISTS.;
#X floatatom 107 188 5 0 0 0 - - -, f 5;
#X symbolatom 155 187 10 0 0 0 - - -, f 10;
#X obj 60 208 bng 15 250 50 0 empty empty bang -6 23 1 12 -262144 -1
-1;
#X msg 88 124 list not-a-list;
#X obj 60 164 route bang float symbol list;
#X obj 107 208 bng 15 250 50 0 empty empty float -4 23 1 12 -262144
-1 -1;
#X obj 155 208 bng 15 250 50 0 empty empty symbol -12 23 1 12 -262144
-1 -1;
#X obj 203 208 bng 15 250 50 0 empty empty list -2 23 1 12 -262144
-1 -1;
#X obj 251 208 bng 15 250 50 0 empty empty undefined -18 23 1 12 -262144
-1 -1;
#X text 86 40 An empty list is translated into a bang;
#X text 86 73 A list with only one float is translated to a float;
#X text 86 109 A list with only one symbol is translated to a symbol
;
#X connect 0 0 7 0;
#X connect 1 0 7 0;
#X connect 3 0 8 0;
#X connect 4 0 9 0;
#X connect 6 0 7 0;
#X connect 7 0 5 0;
#X connect 7 1 3 0;
#X connect 7 2 4 0;
#X connect 7 3 10 0;
#X connect 7 4 11 0;
#X restore 211 549 pd special_cases_of_lists;
#X obj 91 328 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X text 108 326 also a bang;
#X connect 2 0 17 0;
#X connect 3 0 17 0;
#X connect 4 0 17 0;
#X connect 5 0 17 0;
#X connect 12 0 18 0;
#X connect 13 0 19 0;
#X connect 15 0 17 0;
#X connect 16 0 17 0;
#X connect 17 0 14 0;
#X connect 17 1 12 0;
#X connect 17 2 13 0;
#X connect 17 3 20 0;
#X connect 17 4 21 0;
#X connect 22 0 17 0;
#X connect 32 0 17 0;
#X restore 171 356 pd type_mode;
#X text 277 356 match the type of the message;
#X text 277 331 match first symbol in the message;
#X text 261 306 match first float in the message;
#X text 98 457 anything;
#X text 168 540 An incoming pointer will never match and so will always
be sent to the rejection outlet.;
#X text 168 456 - an outlet is added for each argument. Messages that
match are output from the respective outlet with its first element
stripped off.;
#X text 168 497 - the rightmost outlet of [route] is always the "rejection
outlet." Incoming messages which do not match any of the arguments
are sent to the rightmost outlet unchanged.;
#X text 97 608 symbol;
#X obj 78 387 cnv 17 3 45 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
-162280 0;
#X text 98 386 float;
#N canvas 79 52 428 344 second_inlet 0;
#X floatatom 68 278 5 0 0 0 - - -, f 5;
#X floatatom 31 232 5 0 0 0 - - -, f 5;
#X floatatom 80 234 5 0 0 0 - - -, f 5;
#X obj 217 301 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X msg 203 206 symbol word;
#X msg 217 228 symbol other;
#X msg 315 240 symbol other;
#X obj 274 301 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X msg 312 216 symbol word;
#X obj 1 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
14 -204280 -1 0;
#X text 8 1 [route] The Second Inlet;
#X text 20 38 The right inlet is used to reset the argument's value
as in the patch below. This feature is available only on [route] objects
with only ONE creation argument (or no creation arguments in which
case it takes on the default value of 0). In the other examples with
multiple creation arguments \, you'll notice that this second inlet
is absent.;
#X obj 23 256 route 42;
#X obj 217 276 route word;
#X msg 23 210 42;
#X obj 217 255 list trim;
#X text 20 128 Also notice in the right example how symbols need to
be truncated of its symbol prefix using [list trim] or using a message.
Otherwise \, route will not recognize the value correctly.;
#X msg 164 206 word;
#X msg 125 182 symbol word;
#X obj 23 278 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X connect 1 0 12 0;
#X connect 2 0 12 1;
#X connect 4 0 15 0;
#X connect 5 0 15 0;
#X connect 6 0 13 1;
#X connect 8 0 13 1;
#X connect 12 0 19 0;
#X connect 12 1 0 0;
#X connect 13 0 3 0;
#X connect 13 1 7 0;
#X connect 14 0 12 0;
#X connect 15 0 13 0;
#X connect 17 0 13 0;
#X connect 18 0 13 0;
#X restore 171 416 pd second_inlet;
#X text 98 400 symbol;
#X text 167 386 - the right inlet is available if there is only one
creation argument. See the subpatch below for details:;
#X obj 258 145 route word;
#X obj 269 110 list trim;
#X obj 315 168 print rejection_outlet;
#X obj 258 192 print left_outlet;
#X symbolatom 355 86 10 0 0 0 - - -, f 10;
#X symbolatom 334 119 10 0 0 0 - - -, f 10;
#X text 398 119 This one doesn't work;
#X msg 269 85 symbol word;
#X msg 258 60 word;
#X connect 12 0 17 0;
#X connect 12 0 21 0;
#X connect 12 1 19 0;
#X connect 12 1 20 0;
#X connect 12 2 16 0;
#X connect 12 2 18 0;
#X connect 13 0 12 0;
#X connect 14 0 12 0;
#X connect 15 0 12 0;
#X connect 22 0 12 0;
#X connect 33 0 12 0;
#X connect 49 0 52 0;
#X connect 49 1 51 0;
#X connect 50 0 49 0;
#X connect 53 0 50 0;
#X connect 54 0 49 0;
#X connect 56 0 50 0;
#X connect 57 0 49 0;
