aboutsummaryrefslogtreecommitdiff
path: root/extensions/xgui
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/xgui')
-rw-r--r--extensions/xgui/AUTHORS.txt3
-rw-r--r--extensions/xgui/INSTALL.txt34
-rw-r--r--extensions/xgui/LICENSE.txt26
-rw-r--r--extensions/xgui/README.txt150
-rw-r--r--extensions/xgui/adapters_in/xy2coord.pd38
-rw-r--r--extensions/xgui/adapters_in/xy2move.pd12
-rw-r--r--extensions/xgui/adapters_in/xy2xy1.pd15
-rw-r--r--extensions/xgui/adapters_in/xy2xy2.pd15
-rw-r--r--extensions/xgui/adapters_out/click2bxy.pd16
-rw-r--r--extensions/xgui/adapters_out/coord2xy.pd16
-rw-r--r--extensions/xgui/adapters_out/drag2move.pd10
-rw-r--r--extensions/xgui/adapters_out/drag2strength.pd10
-rw-r--r--extensions/xgui/adapters_out/move2xy.pd12
-rw-r--r--extensions/xgui/behaviors/dragable.pd10
-rw-r--r--extensions/xgui/behaviors/light_over.pd34
-rw-r--r--extensions/xgui/behaviors/ma_2d.pd130
-rw-r--r--extensions/xgui/behaviors/move.pd10
-rw-r--r--extensions/xgui/behaviors/move_x.pd10
-rw-r--r--extensions/xgui/behaviors/move_y.pd10
-rw-r--r--extensions/xgui/behaviors/width_over.pd30
-rwxr-xr-xextensions/xgui/bin/pdx.sh6
-rw-r--r--extensions/xgui/bin/xgui-client.sh867
-rw-r--r--extensions/xgui/bin/xgui.bat1
-rwxr-xr-xextensions/xgui/bin/xgui.sh908
-rw-r--r--extensions/xgui/doc/01_first_seg.pd123
-rw-r--r--extensions/xgui/doc/02_behaviors.pd49
-rw-r--r--extensions/xgui/doc/03_low_level.pd28
-rw-r--r--extensions/xgui/doc/04_classic.pd98
-rw-r--r--extensions/xgui/doc/05_xseq.pd315
-rw-r--r--extensions/xgui/doc/06_physics.pd24
-rw-r--r--extensions/xgui/doc/07_speak.pd54
-rw-r--r--extensions/xgui/doc/08_more_physics.pd89
-rw-r--r--extensions/xgui/doc/09_more_physics2.pd199
-rw-r--r--extensions/xgui/doc/10_sliders.pd83
-rw-r--r--extensions/xgui/doc/Kroonde/K_jongle.pd44
-rw-r--r--extensions/xgui/doc/Kroonde/K_konfig.pd81
-rw-r--r--extensions/xgui/doc/Kroonde/K_panel.pd81
-rw-r--r--extensions/xgui/doc/Kroonde/K_send.pd70
-rw-r--r--extensions/xgui/doc/Kroonde/Koonfig_ip_dest.pd72
-rw-r--r--extensions/xgui/doc/Kroonde/Koonfig_my_ip.pd72
-rw-r--r--extensions/xgui/doc/Kroonde/Kroonde.pd8
-rw-r--r--extensions/xgui/doc/Kroonde/calibration.pd47
-rw-r--r--extensions/xgui/doc/Kroonde/inv1024.pd8
-rw-r--r--extensions/xgui/doc/Kroonde/kroonde_dest_ip.pd49
-rw-r--r--extensions/xgui/doc/Kroonde/kroonde_ip.pd49
-rw-r--r--extensions/xgui/doc/Kroonde/range.pd43
-rw-r--r--extensions/xgui/doc/Kroonde/stom.pd6
-rw-r--r--extensions/xgui/doc/Kroonde/tst.pd18
-rw-r--r--extensions/xgui/doc/direct_test.pd18
-rw-r--r--extensions/xgui/doc/help-send2.pd18
-rw-r--r--extensions/xgui/doc/help_atom.pd11
-rw-r--r--extensions/xgui/doc/help_convert.pd8
-rw-r--r--extensions/xgui/doc/help_damping.pd15
-rw-r--r--extensions/xgui/doc/help_mass.pd14
-rw-r--r--extensions/xgui/doc/help_object_arc.pd75
-rw-r--r--extensions/xgui/doc/help_object_rect.pd51
-rw-r--r--extensions/xgui/doc/help_object_text.pd78
-rw-r--r--extensions/xgui/doc/help_spring.pd34
-rw-r--r--extensions/xgui/doc/help_valueinit.pd8
-rw-r--r--extensions/xgui/doc/help_vector.pd34
-rw-r--r--extensions/xgui/doc/sound/09_more_physics3.pd217
-rw-r--r--extensions/xgui/doc/sound/09_more_physics4.pd219
-rw-r--r--extensions/xgui/doc/sound/09_more_physics5.pd238
-rw-r--r--extensions/xgui/doc/sound/09_more_physics6.pd462
-rw-r--r--extensions/xgui/doc/sound/09_more_physics7.pd458
-rw-r--r--extensions/xgui/doc/sound/2yoyo.pd464
-rw-r--r--extensions/xgui/doc/sound/2yoyos.pd462
-rw-r--r--extensions/xgui/doc/sound/atom.pd33
-rw-r--r--extensions/xgui/doc/sound/sound.pd136
-rw-r--r--extensions/xgui/filters/coord.pd10
-rw-r--r--extensions/xgui/filters/xy1.pd10
-rw-r--r--extensions/xgui/filters/xy2.pd10
-rw-r--r--extensions/xgui/install.bat7
-rw-r--r--extensions/xgui/main/alias.pd9
-rw-r--r--extensions/xgui/main/arc.pd59
-rw-r--r--extensions/xgui/main/canvas.pd28
-rw-r--r--extensions/xgui/main/make4seg_ss.pd31
-rw-r--r--extensions/xgui/main/make4seg_sss.pd33
-rw-r--r--extensions/xgui/main/make_obj_name.pd23
-rw-r--r--extensions/xgui/main/node.pd100
-rwxr-xr-xextensions/xgui/main/pdx_connect.pd77
-rw-r--r--extensions/xgui/main/rect.pd59
-rw-r--r--extensions/xgui/main/seg.pd60
-rw-r--r--extensions/xgui/main/text.pd59
-rw-r--r--extensions/xgui/makefile64
-rw-r--r--extensions/xgui/objects/button.pd81
-rw-r--r--extensions/xgui/objects/i-point.pd6
-rw-r--r--extensions/xgui/objects/i-rect.pd142
-rw-r--r--extensions/xgui/objects/i-seg.pd152
-rw-r--r--extensions/xgui/objects/i-seg_mp.pd140
-rw-r--r--extensions/xgui/objects/my_slider1.pd112
-rw-r--r--extensions/xgui/objects/my_slider2.pd112
-rw-r--r--extensions/xgui/objects/my_slider3.pd160
-rw-r--r--extensions/xgui/objects/pad.pd85
-rw-r--r--extensions/xgui/objects/potar.pd103
-rw-r--r--extensions/xgui/objects/preset.pd112
-rw-r--r--extensions/xgui/objects/slider2.pd141
-rw-r--r--extensions/xgui/objects/slider_prob.pd118
-rw-r--r--extensions/xgui/pdx.bat5
-rwxr-xr-xextensions/xgui/pdx.sh14
-rw-r--r--extensions/xgui/physics/atom.pd21
-rw-r--r--extensions/xgui/physics/damping.pd59
-rw-r--r--extensions/xgui/physics/force.pd29
-rw-r--r--extensions/xgui/physics/lia_2d.pd206
-rw-r--r--extensions/xgui/physics/mass.pd118
-rw-r--r--extensions/xgui/physics/spring.pd155
-rw-r--r--extensions/xgui/physics/vector.pd162
-rw-r--r--extensions/xgui/preset1.txt12
-rw-r--r--extensions/xgui/preset2.txt12
-rw-r--r--extensions/xgui/preset3.txt12
-rw-r--r--extensions/xgui/preset4.txt12
-rw-r--r--extensions/xgui/utils/bounded.pd43
-rw-r--r--extensions/xgui/utils/concat_set_bang.pd22
-rw-r--r--extensions/xgui/utils/concat_value.pd26
-rw-r--r--extensions/xgui/utils/convert.pd10
-rw-r--r--extensions/xgui/utils/in.pd37
-rw-r--r--extensions/xgui/utils/init2.pd27
-rw-r--r--extensions/xgui/utils/moy.pd13
-rw-r--r--extensions/xgui/utils/subspace.pd50
-rw-r--r--extensions/xgui/utils/unique.pd10
-rw-r--r--extensions/xgui/utils/value2.pd13
-rw-r--r--extensions/xgui/utils/valueinit.pd8
-rw-r--r--extensions/xgui/xgui-lib/a2s.c66
-rw-r--r--extensions/xgui/xgui-lib/concat.c68
-rw-r--r--extensions/xgui/xgui-lib/help_number.pd60
-rw-r--r--extensions/xgui/xgui-lib/m_pd.h579
-rw-r--r--extensions/xgui/xgui-lib/makefile86
-rw-r--r--extensions/xgui/xgui-lib/message.c116
-rw-r--r--extensions/xgui/xgui-lib/number.c249
-rw-r--r--extensions/xgui/xgui-lib/oname2l.c73
-rw-r--r--extensions/xgui/xgui-lib/recv2.c80
-rw-r--r--extensions/xgui/xgui-lib/replace_selector.c60
-rw-r--r--extensions/xgui/xgui-lib/seg.c96
-rw-r--r--extensions/xgui/xgui-lib/send2.c67
-rw-r--r--extensions/xgui/xgui-lib/test_xgui_lib.pd134
-rw-r--r--extensions/xgui/xgui-lib/try.sh1
-rw-r--r--extensions/xgui/xgui-lib/xgui_lib.c17
137 files changed, 12067 insertions, 0 deletions
diff --git a/extensions/xgui/AUTHORS.txt b/extensions/xgui/AUTHORS.txt
new file mode 100644
index 00000000..5bc32953
--- /dev/null
+++ b/extensions/xgui/AUTHORS.txt
@@ -0,0 +1,3 @@
+Damien HENRY : Main contributor
+Olaff Matthes : The sendto object + good ideas
+
diff --git a/extensions/xgui/INSTALL.txt b/extensions/xgui/INSTALL.txt
new file mode 100644
index 00000000..d05c9fbc
--- /dev/null
+++ b/extensions/xgui/INSTALL.txt
@@ -0,0 +1,34 @@
+copy xgui in your pd directory.
+
+[linux]
+ it's better to do a make uninstall with your old version of xgui before installing the new one.
+
+ from a terminal :
+ make
+ make install
+
+ Thats all !!!
+ it will copy the right files @ the rigth places,
+ but only if you have install pd with make install too.
+
+ Test it by running pdx from a terminal
+
+ make uninstall
+ will remove all the files created by "make install"
+
+[windows]
+ extract the xgui_x.xx.tar.gz into your pd-path
+ for ex.: c:/pd/
+
+ Run "install.bat", it will copy the right files @ the rigth places.
+
+ Test it by running pdx.bat
+
+[other & all]
+ Seg is very easy to install just have a look into makefile & install.bat
+ and you'll have all the information to install it manually.
+
+ In fact you d'ont really need to install anything :
+ just extract the archive in your pd directory.
+ Then run xgui & pd with the right options : check pdx.* for details.
+
diff --git a/extensions/xgui/LICENSE.txt b/extensions/xgui/LICENSE.txt
new file mode 100644
index 00000000..715c2cb7
--- /dev/null
+++ b/extensions/xgui/LICENSE.txt
@@ -0,0 +1,26 @@
+This software is copyrighted by Damien Henry and others. The following
+terms apply to all files associated with the software unless explicitly
+disclaimed in individual files.
+
+The authors hereby grant permission to use, copy, modify, distribute,
+and license this software and its documentation for any purpose, provided
+that existing copyright notices are retained in all copies and that this
+notice is included verbatim in any distributions. No written agreement,
+license, or royalty fee is required for any of the authorized uses.
+Modifications to this software may be copyrighted by their authors
+and need not follow the licensing terms described here, provided that
+the new terms are clearly indicated on the first page of each file where
+they apply.
+
+IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY
+FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
+DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE
+IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
+NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
+MODIFICATIONS.
diff --git a/extensions/xgui/README.txt b/extensions/xgui/README.txt
new file mode 100644
index 00000000..95398b53
--- /dev/null
+++ b/extensions/xgui/README.txt
@@ -0,0 +1,150 @@
+This is the README file for Xgui_0.10b, an experimental GUI (Graphical User Interface) server for pure data.
+
+The goal of Xgui is not to replace the existing GUI, but to add some graphicals functionality to pd.
+
+Xgui is designed to run on all platforms supported by pure data.
+It is working very well on linux, well on win2000 and not so well on win98 (something make it slow).
+
+All this documentation is write in a poor english.
+
+1) Here a try to explain what Xgui is :
+
+ Xgui is a graphical server that wait for some orders from a socket.
+ I cames with somes pd objects that allow to make the connection with the server.
+ For example the "canvas" object allow to create a new windows.
+
+ GOALS :
+ To allow users of pure-data to disgn their own gui objects.
+ PARADIGME :
+ The gui-object will be entirely describe in pd patchs.
+ One graphical object <=> One object in a pd patch.
+ HOW :
+ By provided some atom objects can that can :
+ * creates somes windows
+ * put some basics graphicals objects in it.
+ * receive events in relations with the graphicals objects.
+
+2) Quick start
+
+ 1. Run pdx
+ This will load the Xgui server
+ Then it will load pure-data
+ Then it open the patch pdx_connect.pd
+ Then it connect pd with the Xgui server via a loadbang.
+
+ 2. load one of the patch in the doc/Xgui directory
+
+ 3. Then play with the patchs
+ and enjoy the result in the Xgui window.
+
+
+2) Some more technical info :
+
+ On a technical point view all of this is very simple.
+
+ Xgui is divided into 2 part :
+ * The Xgui server (Xgui.sh) is a tcl/tk script that exchange data with pd via socket
+
+ * Some pd abstractions that are uses to establish the conection between pd and the Xgui server.(pdx_connect.pd)
+
+ * some pd abstractions that represent a graphical object :
+ - the "Canvas.pd" abstraction that is the object to open a Xgui windows.
+ - The "seg.pd" abstraction that is the basic object to draw a line in the canvas.
+
+
+3) Why Xgui is diferent from the iem/grip way ?
+
+ Because in iem or grip, the basic elements for buildings a GUI are on a very hight level :
+ Sliders, and so much more.
+ Xgui didn't provide this king of high level features but allow the pd user to disgn their own ones.
+
+4) Why Xgui is close to the data features of pure-data, and why it's different.
+
+ The goals of the experimental data features of pure-data is certainly the same as Xgui :
+ Provide a tools to compositor to create their own representation for their own musical language. And more.
+
+ Pure data will be THE PERFECT TOOL for writting music and not only to generate RT sound. And more.
+
+ The data approch is based on the Concept of template : The user will disgn the template of an object.
+ The HUGE good point is that the user got the ablility to dynamicly cut and paste any objects.
+ pure-data will automaticaly manage the duplication of the data.
+ The bad point is that today the code that will manage the object is not inside the template.
+ This mean that the way to write patch that use the data feature is not very easy.
+
+Miller, please corect me if i'm wrong.
+
+
+ The Xgui approch is base on his paradigm : One pd object <=> one graphical object.
+ This imply that the pd object will provide properties, methods and events of the graphical side.
+ And this make very easy to make complex GUI with very few simples objects.
+ But it's not possible to duplicate a graphical object without duplicate the pd object...
+
+ As you can see thoses two way of thinking are very complementary, and i hope to find a solution
+ to have the best of both world
+
+5) Releases :
+
+ seg_0.01 : 17 of febuary 2002 : First release: basic idea.
+ seg_0.02 : 20 of febuary 2002 : Structured basic idea.
+ No functionality have been added, but the project is reorganised into folders.
+ Some installations script are provided.
+ seg_0.03 : 20 of march 2002 : multi windows
+ Now seg offer the abollity to open as many windows as needed, to resize them, and draw into the rigth one.
+ There is no compatibility between version 0.03 & 0.02 But it's easy to change the patchs
+ seg_0.04 : 26 of march 2002 : bug correction & better doc
+ seg_0.05 : 08 of april 2002 : add some basics physics modeling tools & examples
+ Xgui_0.06 : 28 of april 2002 : add 3 objects (arc,rect,text) + doc + examples + event Rigth click
+ Rename the project cause it doesn't deals with only the seg object now.
+ Xgui_0.07 : 30 of April 2002 : Add the canvas color methods and corect some smalls bug
+ Xgui_0.08 : 6 of june 2002 : Add the ability to syncronise many xgui windows with some peer2peer facility.
+ Xgui_0.09 : 23 of july 2002 : Add the ability to save some preset.
+ Xgui_0.10 : 10 of novembre 2002 : add the ability to share some windows with other computer on the web.
+
+6) Todo list :
+
+ * Add some objects :pictures, menu, etc...
+ * Add some methodes : nearest object, nearest point onto the object,etc...
+ * add some behaviors : colision, stick, etc...
+ * add some event : keyboard, dblclick, etc..
+ * integrate Xgui closer into pd.(concatenate the pd.tk and Xgui.sh for ex. Thats working !!!!)
+ * why not rewrite it in java ?
+ * Or write a policy to put the Xgui code into html using the tcl/tk plugins ?
+ * a real doc.
+ * Etc...
+ * & even more.
+
+7) Future :
+
+ xgui will be more and more internet oriented in a sharing/colaborative/real-time/ point of view.
+ But I still whant it be able to :
+ * disgn very complex object like sequencer or mixing table.
+ * disgn experimental object for driving experimental synthesis methods
+ * be used for creating realtime graphics linked with music.
+ * be used for writing experimental music
+ * be open to be used for something I've not think about.
+
+
+8) Contact : http://dh7.free.fr
+
+ Please don't hesitate to contact me if you need some help or some info about Xgui.
+ Don't hesitate to reports bugs too...
+
+ Any feedback welcome.
+
+ Damien HENRY : dh7@free.fr ; dh@dh7.net
+
+8) Thanks :
+
+* Miller Puckette
+* Olaff Matthes for giving me the code of his remote object.
+* Everybody involved in pure-data.
+* & + ...
+
+9) COPYRIGHT.
+
+ Except as otherwise noted, all files in the Xgui distribution are
+
+ Copyright (c) 2002 damien Henry and others.
+
+For information on usage and redistribution, and for a DISCLAIMER OF ALL
+WARRANTIES, see the file, "LICENSE.txt," included in the Xgui distribution.
diff --git a/extensions/xgui/adapters_in/xy2coord.pd b/extensions/xgui/adapters_in/xy2coord.pd
new file mode 100644
index 00000000..2915389f
--- /dev/null
+++ b/extensions/xgui/adapters_in/xy2coord.pd
@@ -0,0 +1,38 @@
+#N canvas 528 314 372 265 10;
+#X text 267 228 dh20020106;
+#X text 10 6 coord : convert x1 y1 x2 y2 to a coord command;
+#X obj 164 36 inlet;
+#X obj 35 179 pack f f f f;
+#X msg 35 202 coord \$1 \$2 \$3 \$4;
+#X obj 178 133 f;
+#X obj 135 133 f;
+#X obj 92 133 f;
+#X obj 164 60 t b f;
+#X obj 121 36 inlet;
+#X obj 121 60 t b f;
+#X obj 78 36 inlet;
+#X obj 78 60 t b f;
+#X obj 35 36 inlet;
+#X obj 35 134 f;
+#X obj 78 98 t b b b b;
+#X obj 35 227 outlet;
+#X connect 2 0 8 0;
+#X connect 3 0 4 0;
+#X connect 4 0 16 0;
+#X connect 5 0 3 3;
+#X connect 6 0 3 2;
+#X connect 7 0 3 1;
+#X connect 8 0 15 0;
+#X connect 8 1 5 1;
+#X connect 9 0 10 0;
+#X connect 10 0 15 0;
+#X connect 10 1 6 1;
+#X connect 11 0 12 0;
+#X connect 12 0 15 0;
+#X connect 12 1 7 1;
+#X connect 13 0 14 0;
+#X connect 14 0 3 0;
+#X connect 15 0 14 0;
+#X connect 15 1 7 0;
+#X connect 15 2 6 0;
+#X connect 15 3 5 0;
diff --git a/extensions/xgui/adapters_in/xy2move.pd b/extensions/xgui/adapters_in/xy2move.pd
new file mode 100644
index 00000000..bafabb52
--- /dev/null
+++ b/extensions/xgui/adapters_in/xy2move.pd
@@ -0,0 +1,12 @@
+#N canvas 584 581 299 140 10;
+#X text 199 97 dh20020106;
+#X obj 112 36 inlet;
+#X obj 35 36 inlet;
+#X obj 70 95 outlet;
+#X text 10 6 move : convert x1 y1 to a move command;
+#X msg 35 62 move \$1 0;
+#X msg 112 61 move 0 \$1;
+#X connect 1 0 6 0;
+#X connect 2 0 5 0;
+#X connect 5 0 3 0;
+#X connect 6 0 3 0;
diff --git a/extensions/xgui/adapters_in/xy2xy1.pd b/extensions/xgui/adapters_in/xy2xy1.pd
new file mode 100644
index 00000000..e408136b
--- /dev/null
+++ b/extensions/xgui/adapters_in/xy2xy1.pd
@@ -0,0 +1,15 @@
+#N canvas 540 374 413 171 10;
+#X obj 78 36 inlet;
+#X obj 35 36 inlet;
+#X obj 35 136 outlet;
+#X obj 35 88 pack f f;
+#X obj 78 58 t b f;
+#X msg 35 111 xy1 \$1 \$2;
+#X text 91 138 dh20020108;
+#X text 10 6 xy2xy1;
+#X connect 0 0 4 0;
+#X connect 1 0 3 0;
+#X connect 3 0 5 0;
+#X connect 4 0 3 0;
+#X connect 4 1 3 1;
+#X connect 5 0 2 0;
diff --git a/extensions/xgui/adapters_in/xy2xy2.pd b/extensions/xgui/adapters_in/xy2xy2.pd
new file mode 100644
index 00000000..04ad49f2
--- /dev/null
+++ b/extensions/xgui/adapters_in/xy2xy2.pd
@@ -0,0 +1,15 @@
+#N canvas 544 394 413 171 10;
+#X obj 78 36 inlet;
+#X obj 35 36 inlet;
+#X obj 35 136 outlet;
+#X obj 35 88 pack f f;
+#X obj 78 58 t b f;
+#X text 91 138 dh20020108;
+#X text 10 6 xy2xy1;
+#X msg 35 111 xy2 \$1 \$2;
+#X connect 0 0 4 0;
+#X connect 1 0 3 0;
+#X connect 3 0 7 0;
+#X connect 4 0 3 0;
+#X connect 4 1 3 1;
+#X connect 7 0 2 0;
diff --git a/extensions/xgui/adapters_out/click2bxy.pd b/extensions/xgui/adapters_out/click2bxy.pd
new file mode 100644
index 00000000..2a38c05f
--- /dev/null
+++ b/extensions/xgui/adapters_out/click2bxy.pd
@@ -0,0 +1,16 @@
+#N canvas 31 132 308 276 12;
+#X text 15 7 click filter;
+#X obj 21 34 inlet;
+#X obj 21 63 route click;
+#X obj 21 91 unpack f f;
+#X obj 96 122 outlet;
+#X obj 56 150 outlet;
+#X text 93 177 dh20020111;
+#X obj 21 119 t b f;
+#X obj 21 177 outlet;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 7 0;
+#X connect 3 1 4 0;
+#X connect 7 0 8 0;
+#X connect 7 1 5 0;
diff --git a/extensions/xgui/adapters_out/coord2xy.pd b/extensions/xgui/adapters_out/coord2xy.pd
new file mode 100644
index 00000000..0ba3c9be
--- /dev/null
+++ b/extensions/xgui/adapters_out/coord2xy.pd
@@ -0,0 +1,16 @@
+#N canvas 349 396 294 247 10;
+#X text 16 10 coords2xy;
+#X obj 16 30 inlet;
+#X obj 108 133 outlet;
+#X obj 15 103 unpack f f f f;
+#X obj 77 158 outlet;
+#X obj 46 133 outlet;
+#X obj 15 158 outlet;
+#X text 104 9 dh2002106;
+#X obj 15 81 route coord;
+#X connect 1 0 8 0;
+#X connect 3 0 6 0;
+#X connect 3 1 5 0;
+#X connect 3 2 4 0;
+#X connect 3 3 2 0;
+#X connect 8 0 3 0;
diff --git a/extensions/xgui/adapters_out/drag2move.pd b/extensions/xgui/adapters_out/drag2move.pd
new file mode 100644
index 00000000..45cd2aeb
--- /dev/null
+++ b/extensions/xgui/adapters_out/drag2move.pd
@@ -0,0 +1,10 @@
+#N canvas 298 205 450 300 10;
+#X text 22 10 drag2move;
+#X obj 24 35 inlet;
+#X obj 24 110 outlet;
+#X obj 24 62 route move;
+#X msg 24 86 move \$1 \$2;
+#X text 97 115 dh20020401;
+#X connect 1 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 2 0;
diff --git a/extensions/xgui/adapters_out/drag2strength.pd b/extensions/xgui/adapters_out/drag2strength.pd
new file mode 100644
index 00000000..20468163
--- /dev/null
+++ b/extensions/xgui/adapters_out/drag2strength.pd
@@ -0,0 +1,10 @@
+#N canvas 298 205 450 300 10;
+#X obj 24 35 inlet;
+#X obj 24 110 outlet;
+#X obj 24 62 route move;
+#X text 97 115 dh20020401;
+#X msg 24 86 strength \$1 \$2;
+#X text 22 10 drag2strength;
+#X connect 0 0 2 0;
+#X connect 2 0 4 0;
+#X connect 4 0 1 0;
diff --git a/extensions/xgui/adapters_out/move2xy.pd b/extensions/xgui/adapters_out/move2xy.pd
new file mode 100644
index 00000000..eb14b1be
--- /dev/null
+++ b/extensions/xgui/adapters_out/move2xy.pd
@@ -0,0 +1,12 @@
+#N canvas 240 231 188 178 10;
+#X text 13 11 move2xy;
+#X obj 18 58 route move;
+#X obj 18 35 inlet;
+#X obj 18 81 unpack f f;
+#X obj 18 107 outlet;
+#X obj 82 108 outlet;
+#X text 22 135 dh20020106;
+#X connect 1 0 3 0;
+#X connect 2 0 1 0;
+#X connect 3 0 4 0;
+#X connect 3 1 5 0;
diff --git a/extensions/xgui/behaviors/dragable.pd b/extensions/xgui/behaviors/dragable.pd
new file mode 100644
index 00000000..c797e23a
--- /dev/null
+++ b/extensions/xgui/behaviors/dragable.pd
@@ -0,0 +1,10 @@
+#N canvas 521 551 292 171 10;
+#X text 120 114 dh20020106;
+#X obj 35 36 inlet;
+#X obj 35 111 outlet;
+#X text 10 6 move : filter move command;
+#X msg 35 87 move \$1 \$2;
+#X obj 35 63 route drag;
+#X connect 1 0 5 0;
+#X connect 4 0 2 0;
+#X connect 5 0 4 0;
diff --git a/extensions/xgui/behaviors/light_over.pd b/extensions/xgui/behaviors/light_over.pd
new file mode 100644
index 00000000..9caf83ad
--- /dev/null
+++ b/extensions/xgui/behaviors/light_over.pd
@@ -0,0 +1,34 @@
+#N canvas 681 249 333 272 10;
+#X text 17 8 change color when enter and leave;
+#X obj 24 44 inlet;
+#X obj 214 107 inlet;
+#X obj 24 79 route enter leave;
+#X obj 67 217 outlet;
+#X msg 69 189 color \$1;
+#X obj 81 128 symbol Black;
+#X msg 24 104 bang;
+#X msg 81 103 bang;
+#X obj 160 45 inlet;
+#X text 247 198 dh20020109;
+#X obj 208 137 symbol;
+#X obj 160 69 symbol;
+#X obj 100 160 symbol SteelBlue2;
+#X obj 183 220 outlet;
+#X msg 167 196 1;
+#X msg 198 195 0;
+#X connect 1 0 3 0;
+#X connect 2 0 11 0;
+#X connect 3 0 7 0;
+#X connect 3 1 8 0;
+#X connect 5 0 4 0;
+#X connect 6 0 5 0;
+#X connect 7 0 13 0;
+#X connect 7 0 15 0;
+#X connect 8 0 6 0;
+#X connect 8 0 16 0;
+#X connect 9 0 12 0;
+#X connect 11 0 13 1;
+#X connect 12 0 6 1;
+#X connect 13 0 5 0;
+#X connect 15 0 14 0;
+#X connect 16 0 14 0;
diff --git a/extensions/xgui/behaviors/ma_2d.pd b/extensions/xgui/behaviors/ma_2d.pd
new file mode 100644
index 00000000..aae99292
--- /dev/null
+++ b/extensions/xgui/behaviors/ma_2d.pd
@@ -0,0 +1,130 @@
+#N canvas 152 56 773 603 10;
+#X obj -233 305 float;
+#X floatatom -202 208 0 0 0;
+#X floatatom -233 329 0 0 0;
+#X text -201 279 X(n);
+#X text -200 331 X(n-1);
+#X obj -233 254 float;
+#X floatatom -234 279 0 0 0;
+#X obj -232 229 t b;
+#X obj 31 112 inlet;
+#X obj -36 484 outlet;
+#X floatatom -41 186 0 0 0;
+#X obj -191 6 loadbang;
+#X text -36 87 M;
+#X obj 16 327 /;
+#X obj -14 358 +;
+#X obj -14 328 * 2;
+#X obj -14 387 -;
+#X obj 18 484 outlet;
+#X obj 18 456 -;
+#X text -279 139 bang;
+#X floatatom 16 298 0 0 0;
+#X text -22 503 X;
+#X obj -45 359 t b;
+#X obj -43 106 inlet;
+#X obj 16 268 f;
+#X obj -277 186 t b b;
+#X obj -43 129 r mm;
+#X obj -41 160 \$1;
+#X obj -256 6 r initm;
+#X msg -231 73 0;
+#X obj -263 32 t b b b;
+#X text 29 504 Vx;
+#X text 41 86 Fx;
+#X obj 202 311 float;
+#X floatatom 233 214 0 0 0;
+#X floatatom 202 335 0 0 0;
+#X obj 202 260 float;
+#X floatatom 201 285 0 0 0;
+#X obj 203 235 t b;
+#X obj 352 120 inlet;
+#X obj 285 492 outlet;
+#X obj 337 335 /;
+#X obj 307 366 +;
+#X obj 307 336 * 2;
+#X obj 307 395 -;
+#X obj 339 492 outlet;
+#X obj 339 464 -;
+#X floatatom 337 306 0 0 0;
+#X obj 276 367 t b;
+#X obj 337 276 f;
+#X text 234 285 Y(n);
+#X text 235 337 Y(n-1);
+#X msg 135 59 0;
+#X text 358 89 Fy;
+#X text 299 511 Y;
+#X text 350 512 Vy;
+#X msg -273 121 bang;
+#X obj -277 161 r b_mass;
+#X connect 0 0 2 0;
+#X connect 0 0 7 0;
+#X connect 0 0 16 1;
+#X connect 0 0 22 0;
+#X connect 1 0 5 1;
+#X connect 1 0 18 0;
+#X connect 5 0 6 0;
+#X connect 5 0 0 1;
+#X connect 5 0 15 0;
+#X connect 5 0 18 1;
+#X connect 7 0 5 0;
+#X connect 8 0 24 1;
+#X connect 10 0 13 1;
+#X connect 10 0 41 1;
+#X connect 11 0 27 0;
+#X connect 11 0 29 0;
+#X connect 11 0 52 0;
+#X connect 13 0 14 1;
+#X connect 14 0 16 0;
+#X connect 15 0 14 0;
+#X connect 16 0 1 0;
+#X connect 16 0 9 0;
+#X connect 18 0 17 0;
+#X connect 20 0 13 0;
+#X connect 22 0 16 0;
+#X connect 23 0 10 0;
+#X connect 24 0 20 0;
+#X connect 25 0 0 0;
+#X connect 25 0 33 0;
+#X connect 25 1 24 0;
+#X connect 25 1 49 0;
+#X connect 26 0 10 0;
+#X connect 27 0 10 0;
+#X connect 28 0 30 0;
+#X connect 29 0 1 0;
+#X connect 29 0 6 0;
+#X connect 29 0 2 0;
+#X connect 29 0 24 1;
+#X connect 29 0 20 0;
+#X connect 30 0 25 0;
+#X connect 30 1 29 0;
+#X connect 30 1 52 0;
+#X connect 30 2 27 0;
+#X connect 33 0 35 0;
+#X connect 33 0 38 0;
+#X connect 33 0 44 1;
+#X connect 33 0 48 0;
+#X connect 34 0 36 1;
+#X connect 34 0 46 0;
+#X connect 36 0 37 0;
+#X connect 36 0 33 1;
+#X connect 36 0 43 0;
+#X connect 36 0 46 1;
+#X connect 38 0 36 0;
+#X connect 39 0 49 1;
+#X connect 41 0 42 1;
+#X connect 42 0 44 0;
+#X connect 43 0 42 0;
+#X connect 44 0 34 0;
+#X connect 44 0 40 0;
+#X connect 46 0 45 0;
+#X connect 47 0 41 0;
+#X connect 48 0 44 0;
+#X connect 49 0 47 0;
+#X connect 52 0 34 0;
+#X connect 52 0 47 0;
+#X connect 52 0 49 1;
+#X connect 52 0 37 0;
+#X connect 52 0 35 0;
+#X connect 56 0 25 0;
+#X connect 57 0 25 0;
diff --git a/extensions/xgui/behaviors/move.pd b/extensions/xgui/behaviors/move.pd
new file mode 100644
index 00000000..03723e63
--- /dev/null
+++ b/extensions/xgui/behaviors/move.pd
@@ -0,0 +1,10 @@
+#N canvas 517 531 267 171 10;
+#X text 120 114 dh20020106;
+#X obj 35 36 inlet;
+#X obj 35 111 outlet;
+#X text 10 6 move : filter move command;
+#X msg 35 87 move \$1 \$2;
+#X obj 35 63 route drag;
+#X connect 1 0 5 0;
+#X connect 4 0 2 0;
+#X connect 5 0 4 0;
diff --git a/extensions/xgui/behaviors/move_x.pd b/extensions/xgui/behaviors/move_x.pd
new file mode 100644
index 00000000..4703c7a0
--- /dev/null
+++ b/extensions/xgui/behaviors/move_x.pd
@@ -0,0 +1,10 @@
+#N canvas 525 571 292 171 10;
+#X text 120 114 dh20020106;
+#X obj 35 36 inlet;
+#X obj 35 111 outlet;
+#X text 10 6 move : filter move command;
+#X msg 35 87 move \$1 0;
+#X obj 35 63 route drag;
+#X connect 1 0 5 0;
+#X connect 4 0 2 0;
+#X connect 5 0 4 0;
diff --git a/extensions/xgui/behaviors/move_y.pd b/extensions/xgui/behaviors/move_y.pd
new file mode 100644
index 00000000..3adce981
--- /dev/null
+++ b/extensions/xgui/behaviors/move_y.pd
@@ -0,0 +1,10 @@
+#N canvas 456 433 292 171 10;
+#X text 120 114 dh20020106;
+#X obj 35 36 inlet;
+#X obj 35 111 outlet;
+#X text 10 6 move : filter move command;
+#X msg 35 87 move 0 \$2;
+#X obj 35 63 route drag;
+#X connect 1 0 5 0;
+#X connect 4 0 2 0;
+#X connect 5 0 4 0;
diff --git a/extensions/xgui/behaviors/width_over.pd b/extensions/xgui/behaviors/width_over.pd
new file mode 100644
index 00000000..469cc52f
--- /dev/null
+++ b/extensions/xgui/behaviors/width_over.pd
@@ -0,0 +1,30 @@
+#N canvas 406 227 335 274 10;
+#X text 17 8 change color when enter and leave;
+#X obj 24 44 inlet;
+#X obj 214 107 inlet;
+#X obj 24 79 route enter leave;
+#X obj 67 217 outlet;
+#X msg 24 104 bang;
+#X msg 81 103 bang;
+#X obj 160 45 inlet;
+#X text 247 198 dh20020109;
+#X obj 183 220 outlet;
+#X msg 167 196 1;
+#X msg 198 195 0;
+#X obj 81 128 float \$1;
+#X obj 100 160 float \$2;
+#X msg 69 189 width \$1;
+#X connect 1 0 3 0;
+#X connect 2 0 13 1;
+#X connect 3 0 5 0;
+#X connect 3 1 6 0;
+#X connect 5 0 10 0;
+#X connect 5 0 13 0;
+#X connect 6 0 11 0;
+#X connect 6 0 12 0;
+#X connect 7 0 12 1;
+#X connect 10 0 9 0;
+#X connect 11 0 9 0;
+#X connect 12 0 14 0;
+#X connect 13 0 14 0;
+#X connect 14 0 4 0;
diff --git a/extensions/xgui/bin/pdx.sh b/extensions/xgui/bin/pdx.sh
new file mode 100755
index 00000000..0c893b65
--- /dev/null
+++ b/extensions/xgui/bin/pdx.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+/usr/local/bin/xgui &
+/usr/local/bin/pd -open /usr/local/lib/pdx/main/pdx_connect.pd \
+ -path /usr/local/lib/pdx/main/ \
+ -path /usr/local/lib/pdx/patch4pdx/
+
diff --git a/extensions/xgui/bin/xgui-client.sh b/extensions/xgui/bin/xgui-client.sh
new file mode 100644
index 00000000..12090187
--- /dev/null
+++ b/extensions/xgui/bin/xgui-client.sh
@@ -0,0 +1,867 @@
+#!/bin/sh
+# the next line restarts using wish \
+exec wish "$0" "$@"
+
+
+#################################################
+puts "pd(x) - Step 2 : xgui-client"
+puts "xgui b0.10 dh200209xx"
+puts "Damien HENRY (c)"
+
+#################################################
+# define the globals variables needed for a node
+global xgui_gui
+global xgui_cmd_out
+global data_data
+
+global from_all
+
+global host_name
+global host_port
+global xgui_me
+set host_name localhost
+set host_port 4877
+set xgui_me "$host_name:$host_port"
+
+global pd_name
+global pd_port
+global pd_sok
+global xgui_pd
+set pd_name xxx
+set pd_port 000
+set xgui_pd "$pd_name:$pd_port"
+set pd_sok -1
+
+global neibourg_list
+global neibourg_data
+set neibourg_list [list]
+set neibourg_data [list]
+set data_data [list]
+set xgui_gui 1
+set xgui_cmd_out 0
+
+#################################################
+# Read what are the argument
+if { [lsearch argv --help] != -1 } { puts "xgui localhost 4877 -nogui -no_cmd_out" }
+
+#################################################
+# puts up my windows
+if { $xgui_gui } {
+ global text2out
+ global text_from_outside
+ global text_comment
+ wm title . "Xgui b0.09"
+ frame .haut
+ frame .config1
+ frame .config2
+ frame .bas
+ entry .haut.e_in -width 50 -textvariable text2in
+ entry .haut.e_fo -width 50 -textvariable text_from_outside -state disabled
+ entry .haut.e_rem -width 50 -textvariable text_comment -state disabled
+ entry .haut.t_out -width 50 -textvariable text2out -state disabled
+
+ entry .config1.host -width 10 -textvariable host_name
+ entry .config1.port -width 5 -textvariable host_port
+
+ entry .config2.host -width 10 -textvariable pd_name
+ entry .config2.port -width 5 -textvariable pd_port
+
+ button .config1.do -text "change" -command {
+ global xgui_me
+ global host_name
+ global host_port
+ global from_all
+ set xgui_me "$host_name:$host_port"
+ catch {close $from_all}
+ set from_all [socket -server seg_receive $host_port]
+ }
+
+ button .config2.do -text "change" -command {
+ global xgui_pd
+ global pd_name
+ global pd_port
+ set xgui_pd "$pd_name:$pd_port"
+ catch {close $pd_sok}
+ catch {set pd_sok [socket $pd_name $pd_port]}
+ }
+
+ button .bas.b_quit -text "quit" -width 7 -command {
+ send2nodes / */ "# $xgui_me disconnected"
+ do_this "$xgui_me/ ~/ disconnect *" xgui
+ exit
+ }
+ button .bas.b_do -text do -width 7 -command { do_this $text2in xgui}
+ button .bas.b_clear -text clear -width 7 -command { set text2in "" }
+
+ pack .haut.e_in .haut.e_fo .haut.t_out .haut.e_rem
+ pack .config1.host .config1.port .config1.do -side left
+ pack .config2.host .config2.port .config2.do -side left
+ pack .bas.b_do .bas.b_clear .bas.b_quit -side left -pady 2 -padx 5
+ pack .haut .config1 .config2 .bas -pady 2
+ wm resizable . false false
+}
+
+#################################################
+# definition de la partie serveur
+
+catch {set from_all [socket -server seg_receive $host_port]}
+
+proc seg_receive {channel addr port} {
+ global xgui_me
+ fileevent $channel readable "readLine $channel $addr $port"
+ do_this "/ */ # $xgui_me connected from $channel $addr $port" 0
+}
+
+proc readLine {channel addr port} {
+ global neibourg_list
+ global neibourg_data
+ global xgui_me
+ global text_from_outside
+ if {[gets $channel line]<0} {
+ fileevent $channel readable {}
+ after idle "close $channel"
+ set n [lsearch $neibourg_data $channel]
+ if {$n != -1 } {
+ set neibourg_list [lreplace $neibourg_list $n $n]
+ set neibourg_data [lreplace $neibourg_data $n $n]
+ }
+ send2nodes / */ "# $xgui_me disconnected from $addr:$port"
+ } else {
+# catch { do_this $line $channel }
+ set text_from_outside "$addr:$port $line"
+# set text_from_outside "$line"
+ do_this $line $channel
+ }
+}
+
+
+#################################################
+# tell that every thing OK
+set text_comment "$xgui_me created"
+
+# end of the initialisations
+########################################################################################
+
+#################################################
+#methods for xgui_node
+proc xgui_node_add_canvas {canvas_name} {
+ set canvas_name [string trim $canvas_name "/"]
+ set canvas_name [split $canvas_name "/"]
+ set canvas_name [lindex $canvas_name end]
+ destroy .$canvas_name
+ data_forget ~/$canvas_name
+ toplevel .$canvas_name
+ wm title .$canvas_name $canvas_name
+ wm resizable .$canvas_name false false
+ canvas .$canvas_name.$canvas_name
+ pack .$canvas_name.$canvas_name
+ data_remember ~/$canvas_name/ "~/$canvas_name add_canvas"
+ send2nodes / */ "# added ~/$canvas_name"
+
+ set c .$canvas_name.$canvas_name
+ $c bind all <Any-Enter> "itemEnter $c"
+ $c bind all <Any-Leave> "itemLeave $c"
+ bind $c <1> "itemStartDrag $c %x %y click"
+ bind $c <2> "itemStartDrag $c %x %y m-click"
+ bind $c <3> "itemStartDrag $c %x %y r_click"
+ bind $c <Shift-1> "itemStartDrag $c %x %y s-click"
+ bind $c <Shift-2> "itemStartDrag $c %x %y s-m-click"
+ bind $c <Shift-3> "itemStartDrag $c %x %y s-r-click"
+ bind $c <Control-1> "itemStartDrag $c %x %y c-click"
+ bind $c <Control-2> "itemStartDrag $c %x %y c-m-click"
+ bind $c <Control-3> "itemStartDrag $c %x %y c-r-click"
+ bind $c <B1-Motion> "itemDrag $c %x %y drag"
+ bind $c <B2-Motion> "itemDrag $c %x %y m-drag"
+ bind $c <B3-Motion> "itemDrag $c %x %y r-drag"
+ bind $c <Shift-B1-Motion> "itemDrag $c %x %y s-drag"
+ bind $c <Shift-B2-Motion> "itemDrag $c %x %y s-m-drag"
+ bind $c <Shift-B3-Motion> "itemDrag $c %x %y s-r-drag"
+ bind $c <Key> "itemKeyPress $c %A %k"
+}
+
+proc xgui_node_del_canvas {canvas_name } {
+ global text_comment
+ set canvas_name [string trim $canvas_name "/"]
+ set canvas_name [split $canvas_name "/"]
+ set canvas_name [lindex $canvas_name end]
+ destroy .$canvas_name
+ data_forget ~/$canvas_name
+ set text_comment "deleted $canvas_name"
+}
+
+proc xgui_node_error {from error} {
+ global text_comment
+ set text_comment "# error : unable to do <$error> ($from)"
+}
+
+proc xgui_node_connect { c_who c_from channel } {
+ global neibourg_list
+ global neibourg_data
+ global xgui_me
+ global text_comment
+ set c_from [string trim $c_from "/"]
+ switch $c_who {
+ "me" {
+ set n [lsearch $neibourg_data $channel]
+ if { $n == -1 } {
+ lappend neibourg_list $c_from
+ lappend neibourg_data $channel
+ set text_comment "$xgui_me connect himself to $c_from onto channel $channel"
+ } else {
+ set text_comment "$xgui_me already connected to $c_from onto channel $channel"
+ }
+ }
+ "pd" {
+ global pd_name
+ global pd_port
+ global pd_sok
+ global xgui_pd
+ set c_host [split $c_from ":"]
+ set pd_name [lindex $c_host 0]
+ set pd_port [lindex $c_host 1]
+ set xgui_pd "$pd_name:$pd_port"
+ set pd_sok [socket -async $pd_name $pd_port]
+ # set pd_sok [socket $pd_name $pd_port]
+ if { $pd_sok != -1 } {
+ set text_comment " $xgui_me connected to pd"
+ } else { set text_comment "connection refused with pd" }
+ }
+ default {
+ set c_host [split $c_who ":"]
+ set c_name [lindex $c_host 0]
+ set c_port [lindex $c_host 1]
+ set sok -1
+ catch {set sok [socket -async $c_name $c_port]}
+ if { $sok != -1 } {
+ lappend neibourg_list $c_who
+ lappend neibourg_data $sok
+ fileevent $sok readable [list read_and_do $sok]
+ set text_comment "$xgui_me connected $c_who"
+ } else { set text_comment "connection refused with $c_who" }
+ }
+ }
+}
+
+proc xgui_node_disconnect { d_who d_from channel} {
+ global neibourg_list
+ global neibourg_data
+ global text_comment
+ switch $d_who {
+ "me" {
+ set d_who [string trim $d_from "/"]
+ set n [lsearch $neibourg_list $d_who]
+ if {$n != -1 } {
+ catch { close [lrange $neibourg_data $n $n] }
+ set neibourg_list [lreplace $neibourg_list $n $n]
+ set neibourg_data [lreplace $neibourg_data $n $n]
+ set text_comment "$d_who disconnected himself"
+ } else { set text_comment "error $d_from not a neibourg" }
+ }
+
+ "pd" {
+ global pd_name
+ global pd_port
+ global pd_sok
+ global xgui_pd
+ set pd_name none
+ set pd_port none
+ set xgui_pd "$pd_name:$pd_port"
+ set pd_sok -1
+ catch {close pd_sok}
+ }
+ "*" {
+ foreach sok $neibourg_data { close $sok }
+ set neibourg_list [list]
+ set neibourg_data [list]
+ set text_comment "$d_from disconnect *"
+ }
+ default {
+ set n [lsearch $neibourg_list $d_who]
+ if {$n != -1 } {
+ catch { close [lrange $neibourg_data $n $n] }
+ set neibourg_list [lreplace $neibourg_list $n $n]
+ set neibourg_data [lreplace $neibourg_data $n $n]
+ set text_comment "$d_who disconnected $d_from"
+ } else { set text_comment "error $d_who not a neibourg" }
+ }
+ }
+}
+
+proc xgui_node_hide { canvas } {
+ set canvas_name [string trim $canvas_name "/"]
+ set canvas_name [split $canvas_name "/"]
+ set canvas_name [lindex $canvas_name end]
+ destroy .$canvas_name
+}
+
+proc xgui_node_neibourg { w_from } {
+ global neibourg_list
+ global neibourg_data
+ global xgui_me
+ foreach name $neibourg_list {
+ send2nodes / $w_from "# $xgui_me connected to $name"
+ }
+}
+
+proc xgui_node_clone { obj new_obj } {
+ data_clone $obj $new_obj
+}
+
+proc xgui_node_load { file } {
+ data_load $file
+}
+
+proc xgui_node_save { obj file } {
+ data_save $obj $file
+}
+
+proc xgui_node_load_coord { file } {
+ data_load_send $file
+}
+
+proc xgui_node_save_coord { obj file } {
+ data_save_param $obj coord $file
+}
+
+proc xgui_node_debug { from var } {
+ global host_name
+ global host_port
+ global xgui_me
+ global neibourg_list
+ global neibourg_data
+ global xgui_gui
+ global xgui_cmd_out
+ global data_data
+ global text_comment
+ global pd_name
+ global pd_port
+ global pd_sok
+ global xgui_pd
+ global from_all
+ set text_comment "$var = [subst $var ]"
+}
+
+proc xgui_node_help { w_from } {
+ send2nodes / $w_from "# method: connect who"
+ send2nodes / $w_from "# method: disconnect who"
+ send2nodes / $w_from "# method: neibourg"
+ send2nodes / $w_from "# method: ping"
+ send2nodes / $w_from "# method: add_canvas"
+ send2nodes / $w_from "# method: del_canvas"
+}
+#################################################
+#methods for canvas
+
+proc canvas_size {canvas_name x y} {
+ .$canvas_name.$canvas_name configure -width $x
+ .$canvas_name.$canvas_name configure -height $y
+ wm geometry .$canvas_name
+ data_remember ~/$canvas_name//size "~/$canvas_name size $x $y"
+}
+
+proc canvas_color {canvas_name color} {
+ .$canvas_name.$canvas_name configure -bg $color
+ data_remember ~/$canvas_name//color "~/$canvas_name color $color"
+ }
+
+#################################################
+#methods for all objects
+
+proc obj_move {canvas gobj_name x y } {
+ global xgui_pd
+ catch {.$canvas.$canvas move $gobj_name $x $y
+ send2pd / pd/$canvas/$gobj_name "coord [.$canvas.$canvas coords $gobj_name]"
+ data_remember ~/$canvas/$gobj_name//coord "~/$canvas/$gobj_name coord [.$canvas.$canvas coords $gobj_name]"
+ }
+}
+
+proc obj_color {canvas gobj_name new_color} {
+ .$canvas.$canvas itemconfigure $gobj_name -fill $new_color
+ data_remember ~/$canvas/$gobj_name//color "~/$canvas/$gobj_name color $new_color"
+}
+
+proc obj_border {canvas gobj_name new_color} {
+ .$canvas.$canvas itemconfigure $gobj_name -outline $new_color
+ data_remember ~/$canvas/$gobj_name//border "~/$canvas/$gobj_name border $new_color"
+}
+
+proc obj_raise {canvas gobj_name } {
+ .$canvas.$canvas raise $gobj_name
+ data_remember ~/$canvas/$gobj_name//raise "~/$canvas/$gobj_name raise"
+}
+
+proc obj_coord {canvas gobj_name x1 y1 x2 y2 } {
+ catch {
+ .$canvas.$canvas coords $gobj_name $x1 $y1 $x2 $y2
+ data_remember ~/$canvas/$gobj_name//coord "~/$canvas/$gobj_name coord $x1 $y1 $x2 $y2"
+ }
+}
+
+proc obj_xy1 {canvas gobj_name x1 y1 } {
+ catch {
+ set old_coord [.$canvas.$canvas coords $gobj_name]
+ .$canvas.$canvas coords $gobj_name $x1 $y1 [lindex $old_coord 2] [lindex $old_coord 3]
+ data_remember ~/$canvas/$gobj_name//coord "~/$canvas/$gobj_name coord $x1 $y1 [lindex $old_coord 2] [lindex $old_coord 3]"
+ }
+}
+
+proc obj_xy2 {canvas gobj_name x2 y2 } {
+ catch {
+ set old_coord [.$canvas.$canvas coords $gobj_name]
+ .$canvas.$canvas coords $gobj_name [lindex $old_coord 0] [lindex $old_coord 1] $x2 $y2
+ data_remember ~/$canvas/$gobj_name//coord "~/$canvas/$gobj_name coord [lindex $old_coord 0] [lindex $old_coord 1] $x2 $y2"
+ }
+}
+
+proc obj_width {canvas gobj_name new_width} {
+ .$canvas.$canvas itemconfigure $gobj_name -width $new_width
+ data_remember ~/$canvas/$gobj_name//width "~/$canvas/$gobj_name width $new_width"
+}
+
+proc obj_near {canvas gobj_name x y} {
+ # to be done...
+}
+
+proc obj_del {canvas obj_name} {
+ .$canvas.$canvas delete $obj_name
+ send2nodes /$canvas */$canvas "# deleted $obj_name"
+ data_forget ~/$canvas/$obj_name
+}
+
+#################################################
+#methods for seg
+
+proc seg_add {canvas gobj_name x1 y1 x2 y2 } {
+ .$canvas.$canvas delete $gobj_name
+ data_forget ~/$canvas/$gobj_name
+ .$canvas.$canvas create line $x1 $y1 $x2 $y2 -width 3 -tags $gobj_name -capstyle round
+ # send2nodes /$canvas */$canvas "added $gobj_name"
+ data_remember ~/$canvas/$gobj_name/ "~/$canvas/$gobj_name add_seg"
+}
+
+proc seg_caps {canvas gobj_name new_cap} {
+ .$canvas.$canvas itemconfigure $gobj_name -capstyle $new_cap
+ data_remember ~/$canvas/$gobj_name//caps "~/$canvas/$gobj_name caps $new_cap"
+}
+
+#################################################
+#methods for text
+
+proc text_add {canvas gobj_name x1 y1 text } {
+ .$canvas.$canvas delete $gobj_name
+ data_forget ~/$canvas/$gobj_name
+ .$canvas.$canvas create text $x1 $y1 -text $text -tags $gobj_name -anchor sw
+ # send2nodes /$canvas */$canvas "added $gobj_name"
+ data_remember ~/$canvas/$gobj_name/ "~/$canvas/$gobj_name add_text"
+}
+
+proc text_value {canvas gobj_name value} {
+ .$canvas.$canvas itemconfigure $gobj_name -text $value
+ data_remember ~/$canvas/$gobj_name//text "~/$canvas/$gobj_name text $value"
+}
+
+proc text_anchor {canvas gobj_name value} {
+ .$canvas.$canvas itemconfigure $gobj_name -anchor $value
+ data_remember ~/$canvas/$gobj_name//anchor "~/$canvas/$gobj_name anchor $value"
+}
+
+proc text_justify {canvas gobj_name value} {
+ .$canvas.$canvas itemconfigure $gobj_name -justify $value
+ data_remember ~/$canvas/$gobj_name//justify "~/$canvas/$gobj_name justify $value"
+}
+
+proc text_pos {canvas gobj_name x y} {
+ .$canvas.$canvas coords $gobj_name $x $y
+ data_remember ~/$canvas/$gobj_name//pos "~/$canvas/$gobj_name pos $x $y"
+}
+
+#################################################
+#methods for rect
+
+proc rect_add {canvas gobj_name x1 y1 x2 y2 } {
+ .$canvas.$canvas delete $gobj_name
+ data_forget ~/$canvas/$gobj_name
+ .$canvas.$canvas create rectangle $x1 $y1 $x2 $y2 -width 2 -tags $gobj_name
+ # send2nodes /$canvas */$canvas "# added $gobj_name"
+ data_remember ~/$canvas/$gobj_name/ "~/$canvas/$gobj_name add_rect"
+}
+
+#################################################
+#methods for arc
+
+proc arc_add {canvas gobj_name x1 y1 x2 y2 start width} {
+ .$canvas.$canvas delete $gobj_name
+ data_forget ~/$canvas/$gobj_name
+ .$canvas.$canvas create arc $x1 $y1 $x2 $y2 -start $start -extent $width -width 2 -tags $gobj_name
+ # send2nodes /$canvas */$canvas "# added $gobj_name "
+ data_remember ~/$canvas/$gobj_name/ "~/$canvas/$gobj_name add_arc"
+}
+
+proc arc_start {canvas gobj_name new_start} {
+ .$canvas.$canvas itemconfigure $gobj_name -start $new_start
+ data_remember ~/$canvas/$gobj_name//start "~/$canvas/$gobj_name start $new_start"}
+
+proc arc_width {canvas gobj_name new_width} {
+ .$canvas.$canvas itemconfigure $gobj_name -extent $new_width
+ data_remember ~/$canvas/$gobj_name//angle "~/$canvas/$gobj_name angle $new_width"}
+
+proc arc_style {canvas gobj_name new_style} {
+ .$canvas.$canvas itemconfigure $gobj_name -style $new_style
+ data_remember ~/$canvas/$gobj_name//style "~/$canvas/$gobj_name style $new_style "}
+
+################################################
+# Set up event bindings for all canvas:
+
+proc itemStartDrag {c x y event} {
+ global xgui_pd
+ global lastX lastY
+ global my_selected
+ set lastX [$c canvasx $x]
+ set lastY [$c canvasy $y]
+ set my_selected [lindex [$c gettags current] 0]
+ set c [lindex [split $c "."] 1]
+ send2pd / pd/$c/$my_selected "$event $x $y"
+}
+
+proc itemDrag {c x y event} {
+ global xgui_pd
+ global lastX lastY
+ global my_selected
+ set x [$c canvasx $x]
+ set y [$c canvasy $y]
+ set c [lindex [split $c "."] 1]
+ send2pd / pd/$c/$my_selected "$event [expr $x-$lastX] [expr $y-$lastY]"
+ set lastX $x
+ set lastY $y
+}
+
+proc itemEnter {c} {
+ global xgui_pd
+ set my_item [lindex [$c gettags current] 0]
+ set c [lindex [split $c "."] 1]
+ send2pd / pd/$c/$my_item enter
+}
+
+proc itemLeave {c} {
+ global xgui_pd
+ set my_item [lindex [$c gettags current] 0]
+ set c [lindex [split $c "."] 1]
+ send2pd / pd/$c/$my_item leave
+}
+
+proc itemKeyPress {c ascii num} {
+ global xgui_pd
+ set my_item [lindex [$c gettags current] 0]
+ set c [lindex [split $c "."] 1]
+ send2pd / pd/$c/$my_item "keypress $ascii $num"
+ send2pd / pd/$c "keypress $ascii $num"
+}
+
+#####################################################################################
+# Here the procedures that keep a memory about all objectz.
+
+proc data_remember {obj_sel m} {
+ global data_data
+ set line_to_destroy 0
+ foreach line $data_data {
+ if {[string match "$obj_sel/*" $line] == 1} {
+ set line_to_destroy $line
+ }
+ }
+ if { $line_to_destroy !=0 } {
+ set n [lsearch $data_data $line_to_destroy ]
+ set data_data [lreplace $data_data $n $n "$obj_sel/ $m" ]
+ } else {
+ lappend data_data "$obj_sel/ $m"
+ }
+}
+
+proc data_forget { obj } {
+ global data_data
+ while { [lsearch $data_data $obj/* ] != -1} {
+ set n [lsearch $data_data $obj/* ]
+ set data_data [lreplace $data_data $n $n]
+ }
+}
+
+proc data_clone { from_obj to_new_obj } {
+ global data_data
+ foreach line $data_data {
+ if {[string match "$from_obj/*" $line] == 1} {
+ set new_line [join [lreplace [split $line] 0 0 ] ]
+ regsub -all -- $from_obj $new_line $to_new_obj newest_line
+ do_this "~/ $newest_line" 0
+ }
+ }
+}
+
+proc data_save { from_obj file } {
+ global data_data
+ set file_chn [open $file w]
+ foreach line $data_data {
+ if {[string match "$from_obj/*" $line] == 1} {
+ set new_line [join [lreplace [split $line] 0 0 ] ]
+ puts $file_chn "$new_line"
+ }
+ }
+ close $file_chn
+}
+
+proc data_save_param { from_obj selector file } {
+ global data_data
+ set file_chn [open $file w]
+ foreach line $data_data {
+ if {[string match "$from_obj/*//$selector*" $line] == 1} {
+ set new_line [join [lreplace [split $line] 0 0 ] ]
+ puts $file_chn "$new_line"
+ }
+ }
+ close $file_chn
+}
+
+proc data_load { file } {
+ global data_data
+ set file_chn [open $file r]
+ while {[eof $file_chn]==0} {
+ set line [gets $file_chn]
+ do_this "~/ $line" 0
+ }
+ close $file_chn
+}
+
+proc data_load_send { file } {
+ global data_data
+ set file_chn [open $file r]
+ while {[eof $file_chn]==0} {
+ set line [gets $file_chn]
+ set line2s [split $line]
+ set line2s [join [linsert $line2s 1 update]]
+# regsub -all -- ~/ $line2s */ new_line
+# do_this "~/ $line" 0
+ send2pd / $line2s ""
+ }
+ close $file_chn
+}
+
+
+################################################################################################
+#anything to send somewhere ???
+proc send2nodes { m_from m_to ms2send } {
+ global xgui_gui
+ global xgui_cmd_out
+ global text2out
+ global xgui_me
+ global neibourg_list
+ global neibourg_data
+
+ global text_comment
+
+ set m2send "$xgui_me$m_from $m_to $ms2send"
+ set m_to [string trim $m_to "/"]
+ set m_to_l [split $m_to "/"]
+ set m_to_node [lindex $m_to_l 0]
+
+ if { $xgui_gui == 1 } {
+ set text2out $m2send
+ }
+ if { $xgui_cmd_out == 1 } {
+ puts $m2send
+ }
+
+ switch [lindex [split $m_to "/"] 0 ] {
+ "*" {
+ foreach n $neibourg_list {
+ regsub -all -- {\*} $m_to $n m2
+ send2nodes $m_from $m2 $ms2send
+ }
+ }
+ "." {
+ foreach n $neibourg_data {
+ catch {puts $n $ms2send;flush $n}
+ }
+ }
+ default {
+ set n [lsearch $neibourg_list $m_to_node]
+ if { $n != -1 } {
+ # if catch = error then we have to remove the link.
+ catch {
+ puts [lrange $neibourg_data $n $n] "$m2send;"
+ flush [lrange $neibourg_data $n $n]
+ }
+ } else {
+ set $text_comment "didn't find any coresponding neigbourg"
+ }
+ }
+ }
+}
+
+proc send2pd { m_from m_to ms2send } {
+ global xgui_gui
+ global xgui_cmd_out
+ global text2out
+ global xgui_me
+ global pd_sok
+
+ set m2send "$xgui_me$m_from $m_to $ms2send;"
+
+ if { $xgui_gui == 1 } {
+ set text2out $m2send
+ }
+ if { $xgui_cmd_out == 1 } {
+ puts $m2send
+ }
+
+ # catch {
+ puts $pd_sok $m2send ; flush $pd_sok
+ # }
+}
+
+
+#####################################################################################
+# the 3 main proc that do every thing ##########################################
+#####################################################################################
+
+proc read_and_do { channel } {
+ gets $channel message
+ global text_from_outside
+ set text_from_outside "$channel \"$message"
+ do_this $message $channel
+}
+
+proc do_this { m channel} {
+ global xgui_me
+ set m [string trim $m ";"]
+ if {[llength $m] >= 3} {
+ set m_to [string trim [lindex $m 1] "/"]
+ set m_to_l [split $m_to "/"]
+ set m_to_node [lindex $m_to_l 0]
+ set m_from [string trim [lindex $m 0] "/"]
+ set m_cmd [lrange $m 2 end]
+ #you have to know who you are :
+ if { "$m_to_node" == "$xgui_me" } { set m_to_node "~" }
+ switch $m_to_node {
+ "~" { catch {do_this_here $m_from $m_to $m_cmd $channel} }
+ "*" {
+ # you too are a part of the whole !!!
+ catch { do_this_here $m_from $m_to $m_cmd $channel }
+ send2nodes / $m_to "[lrange $m 2 end]"
+ }
+ "pd" {send2pd / $m_to "[lrange $m 2 end]"}
+ default {send2nodes / $m_to "[lrange $m 2 end]"}
+ }
+ } else {
+ if {$m == "help"} {
+ # send2nodes / $m_to "# syntax : sender receiver method args..."
+ } else {
+ xgui_node_error "not enought args" $m
+ }
+ }
+}
+
+proc do_this_here { m_from m_to m_cmd channel} {
+ global xgui_me
+ global xgui_pd
+ set m_to [split $m_to "/"]
+ set m_from_l [split $m_from "/"]
+ set m_from_node [lindex $m_from_l 0]
+ set m_selector [lindex $m_cmd 0]
+ set m_argc [llength $m_cmd]-1
+ if {$m_argc >= 1} { set m_argv [lrange $m_cmd 1 end]
+ set a1 [lindex $m_argv 0]
+ if {$m_argc >=2 } { set a2 [lindex $m_argv 1]
+ if {$m_argc >=3 } { set a3 [lindex $m_argv 2]
+ if {$m_argc >=4 } { set a4 [lindex $m_argv 3]
+ if {$m_argc >=5 } { set a5 [lindex $m_argv 4]
+ if {$m_argc >=6 } { set a6 [lindex $m_argv 5]
+ if {$m_argc >=7 } { set a7 [lindex $m_argv 6]
+ if {$m_argc >=8 } { set a8 [lindex $m_argv 7]
+ if {$m_argc >=9 } { set a9 [lindex $m_argv 8]
+ if {$m_argc >=10 } { set a10 [lindex $m_argv 9]
+ } } } } } } } } }
+ } else {set m_argv "{}" }
+
+ switch [llength $m_to] {
+ 1 { # this is for the node ##########################
+ switch $m_selector {
+ "add_canvas" { xgui_node_add_canvas $a1}
+ "del_canvas" { xgui_node_del_canvas $a1}
+ "show" { xgui_node_clone $a1 $a1 }
+ "hide" { xgui_node_hide }
+ "connect" { if {$a1 == "pd"} { xgui_node_connect pd $a2 $channel
+ } else { xgui_node_connect $a1 $m_from $channel} }
+ "connect_on" { xgui_node_connect $a1 $m_from $channel
+ send2nodes / $a1/ "connect me"
+ send2nodes / $a1/ "clone ~/$a2 $xgui_me/$a2"
+ send2nodes / $a1/ "connect_on_pd $xgui_me" }
+ "connect_on_pd" { send2nodes / $a1/ "connect pd $xgui_pd" }
+ "disconnect" { xgui_node_disconnect $a1 $m_from $channel}
+
+ "neibourg" { xgui_node_neibourg $m_from }
+ "clone" { xgui_node_clone $a1 $a2 }
+ "save" { xgui_node_save $a1 $a2 }
+ "save_coord" { xgui_node_save_coord $a1 $a2 }
+ "load_coord" { xgui_node_load_coord $a1 }
+ "load" { xgui_node_load $a1 }
+ "help" { xgui_node_help $m_from }
+ "debug" { xgui_node_debug $m_from $$a1 }
+ "ping" { send2nodes / $m_from "# $m_from pinged" }
+ "#" { global text_comment ; set text_comment $m_argv}
+ default { xgui_node_error "node method $m_selector does not exist" $m_cmd }
+ }
+ }
+ 2 { # this is for the canvas $m_c ##########################
+ set m_c [lindex $m_to 1]
+ switch $m_selector {
+ "add_canvas" { catch {xgui_node_add_canvas $m_c }}
+ "del_canvas" { xgui_node_del_canvas $m_c }
+ "size" {canvas_size $m_c $a1 $a2}
+ "color" {canvas_color $m_c $a1}
+ "del" {obj_del $m_c $a1}
+ "kill" {obj_del $m_c $a1}
+ "add_seg" {seg_add $m_c $a1 10 10 20 20 }
+ "add_text" {text_add $m_c $a1 10 10 "text" }
+ "add_rect" {rect_add $m_c $a1 10 10 20 20 }
+ "add_arc" {arc_add $m_c $a1 10 10 20 20 0 90 }
+ default {xgui_node_error "canvas method $m_selector does not exist" $m_cmd }
+ }
+ }
+ 3 { # this is for the object $m_o witch is into $m_c ########
+ set m_c [lindex $m_to 1]
+ set m_o [lindex $m_to 2]
+ switch $m_selector {
+ "add_seg" {seg_add $m_c $m_o 10 10 20 20 }
+ "add_text" {text_add $m_c $m_o 10 10 "text" }
+ "add_rect" {rect_add $m_c $m_o 10 10 20 20 }
+ "add_arc" {arc_add $m_c $m_o 10 10 20 20 0 90 }
+ "del" {obj_del $m_c $m_o}
+ "kill" {obj_del $m_c $m_o}
+ "show" {obj_show $m_c $m_o }
+ "hide" {obj_hide $m_c $m_o }
+ "move" {obj_move $m_c $m_o $a1 $a2}
+ "scale" {obj_scale $m_c $m_o $a1 $a2 $a3 $a4 }
+ "raise" {obj_raise $m_c $m_o }
+ "near" {obj_near $m_c $m_o $a1 $a2 }
+ "color" {obj_color $m_c $m_o $a1}
+ "width" {obj_width $m_c $m_o $a1}
+ "coord" {obj_coord $m_c $m_o $a1 $a2 $a3 $a4 }
+ "xy1" {obj_xy1 $m_c $m_o $a1 $a2 }
+ "xy2" {obj_xy2 $m_c $m_o $a1 $a2 }
+ "border" {obj_border $m_c $m_o $a1}
+
+ "caps" {seg_caps $m_c $m_o $a1}
+
+ "text" {text_value $m_c $m_o $a1}
+ "pos" {text_pos $m_c $m_o $a1 $a2 }
+ "anchor" {text_anchor $m_c $m_o $a1}
+ "justify" {text_justify $m_c $m_o $a1}
+
+ "start" {arc_start $m_c $m_o $a1 }
+ "angle" { arc_width $m_c $m_o $a1 }
+ "style" {arc_style $m_c $m_o $a1}
+
+ default {xgui_node_error "obj_method $m_selector does not exist" $m_argv }
+ }
+ }
+ }
+}
+
diff --git a/extensions/xgui/bin/xgui.bat b/extensions/xgui/bin/xgui.bat
new file mode 100644
index 00000000..4133fe0e
--- /dev/null
+++ b/extensions/xgui/bin/xgui.bat
@@ -0,0 +1 @@
+..\..\bin\wish83.exe .\xgui.sh --help
diff --git a/extensions/xgui/bin/xgui.sh b/extensions/xgui/bin/xgui.sh
new file mode 100755
index 00000000..da0bfcd6
--- /dev/null
+++ b/extensions/xgui/bin/xgui.sh
@@ -0,0 +1,908 @@
+#!/bin/sh
+# the next line restarts using wish \
+exec wish "$0" "$@"
+
+
+#################################################
+puts "pd(x) - Step 2 : xgui"
+puts "xgui b0.10 dh200209xx"
+puts "Damien HENRY (c)"
+
+#################################################
+# define the globals variables needed for a node
+global xgui_gui
+global xgui_cmd_out
+global data_data
+
+global from_all
+
+global host_name
+global host_port
+global xgui_me
+set host_name localhost
+set host_port 4877
+set xgui_me "$host_name:$host_port"
+
+global pd_name
+global pd_port
+global pd_sok
+global xgui_pd
+set pd_name xxx
+set pd_port 000
+set xgui_pd "$pd_name:$pd_port"
+set pd_sok -1
+
+global neibourg_list
+global neibourg_data
+set neibourg_list [list]
+set neibourg_data [list]
+set data_data [list]
+set xgui_gui 1
+set xgui_cmd_out 0
+
+global time4flush
+set time4flush 20
+
+#################################################
+# Read what are the argument
+if { [lsearch argv --help] != -1 } { puts "xgui localhost 4877 -nogui -no_cmd_out" }
+
+#################################################
+# puts up my windows
+proc xgui_node_visu {onoff} {
+ set xgui_gui $onoff
+ if { $xgui_gui } {
+ global text2out
+ global text_from_outside
+ global text_comment
+ wm title . "Xgui b0.09"
+ frame .haut
+ frame .config1
+ frame .config2
+ frame .bas
+ entry .haut.e_in -width 50 -textvariable text2in
+ entry .haut.e_fo -width 50 -textvariable text_from_outside -state disabled
+ entry .haut.e_rem -width 50 -textvariable text_comment -state disabled
+ entry .haut.t_out -width 50 -textvariable text2out -state disabled
+
+ entry .config1.host -width 10 -textvariable host_name
+ entry .config1.port -width 5 -textvariable host_port
+
+ entry .config2.host -width 10 -textvariable pd_name
+ entry .config2.port -width 5 -textvariable pd_port
+
+ button .config1.do -text "change" -command {
+ global xgui_me
+ global host_name
+ global host_port
+ global from_all
+ set xgui_me "$host_name:$host_port"
+ catch {close $from_all}
+ set from_all [socket -server seg_receive $host_port]
+ }
+
+ button .config2.do -text "change" -command {
+ global xgui_pd
+ global pd_name
+ global pd_port
+ set xgui_pd "$pd_name:$pd_port"
+ catch {close $pd_sok}
+ catch {set pd_sok [socket $pd_name $pd_port]}
+ }
+
+ button .bas.b_quit -text "quit" -width 7 -command {
+ send2nodes / */ "# $xgui_me disconnected"
+ do_this "$xgui_me/ ~/ disconnect *" xgui
+ exit
+ }
+ button .bas.b_do -text do -width 7 -command { do_this $text2in xgui}
+ button .bas.b_clear -text clear -width 7 -command { set text2in "" }
+
+ pack .haut.e_in .haut.e_fo .haut.t_out .haut.e_rem
+ pack .config1.host .config1.port .config1.do -side left
+ pack .config2.host .config2.port .config2.do -side left
+ pack .bas.b_do .bas.b_clear .bas.b_quit -side left -pady 2 -padx 5
+ pack .haut .config1 .config2 .bas -pady 2
+ wm resizable . false false
+ }
+}
+
+#################################################
+# definition de la partie serveur
+#catch {
+ set from_all [socket -server seg_receive $host_port]
+#}
+
+proc seg_receive {channel addr port} {
+ global xgui_me
+ fileevent $channel readable "readLine $channel $addr $port"
+ do_this "/ */ # $xgui_me connected from $channel $addr $port" 0
+}
+
+proc readLine {channel addr port} {
+ global neibourg_list
+ global neibourg_data
+ global xgui_me
+ global text_from_outside
+ if {[gets $channel line]<0} {
+ fileevent $channel readable {}
+ after idle "close $channel"
+ set n [lsearch $neibourg_data $channel]
+ if {$n != -1 } {
+ set neibourg_list [lreplace $neibourg_list $n $n]
+ set neibourg_data [lreplace $neibourg_data $n $n]
+ }
+ send2nodes / */ "# $xgui_me disconnected from $addr:$port"
+ } else {
+ set text_from_outside "$addr:$port $line"
+ # catch {
+ do_this $line $channel
+ # }
+ }
+}
+
+
+#################################################
+# tell that every thing OK
+set text_comment "$xgui_me created"
+
+# end of the initialisations
+########################################################################################
+
+#################################################
+#methods for xgui_node
+
+proc xgui_node_name { name port } {
+ global xgui_me
+ global host_name
+ global host_port
+ global from_all
+ set host_name $name
+ set host_port $port
+ set xgui_me "$host_name:$host_port"
+ catch {close $from_all}
+ set from_all [socket -server seg_receive $host_port]
+}
+
+proc xgui_node_gui { on_off } {
+ if ( on_off == on ) {
+ }
+}
+
+proc xgui_node_add_canvas {canvas_name} {
+ set canvas_name [string trim $canvas_name "/"]
+ set canvas_name [split $canvas_name "/"]
+ set canvas_name [lindex $canvas_name end]
+ destroy .$canvas_name
+ data_forget ~/$canvas_name
+ toplevel .$canvas_name
+ wm title .$canvas_name $canvas_name
+ wm resizable .$canvas_name false false
+ canvas .$canvas_name.$canvas_name
+ pack .$canvas_name.$canvas_name
+ data_remember ~/$canvas_name/ "~/$canvas_name add_canvas"
+ send2nodes / */ "# added ~/$canvas_name"
+
+ set c .$canvas_name.$canvas_name
+ $c bind all <Any-Enter> "itemEnter $c"
+ $c bind all <Any-Leave> "itemLeave $c"
+ bind $c <1> "itemStartDrag $c %x %y click"
+ bind $c <2> "itemStartDrag $c %x %y m-click"
+ bind $c <3> "itemStartDrag $c %x %y r_click"
+ bind $c <Shift-1> "itemStartDrag $c %x %y s-click"
+ bind $c <Shift-2> "itemStartDrag $c %x %y s-m-click"
+ bind $c <Shift-3> "itemStartDrag $c %x %y s-r-click"
+ bind $c <Control-1> "itemStartDrag $c %x %y c-click"
+ bind $c <Control-2> "itemStartDrag $c %x %y c-m-click"
+ bind $c <Control-3> "itemStartDrag $c %x %y c-r-click"
+ bind $c <B1-Motion> "itemDrag $c %x %y drag"
+ bind $c <B2-Motion> "itemDrag $c %x %y m-drag"
+ bind $c <B3-Motion> "itemDrag $c %x %y r-drag"
+ bind $c <Shift-B1-Motion> "itemDrag $c %x %y s-drag"
+ bind $c <Shift-B2-Motion> "itemDrag $c %x %y s-m-drag"
+ bind $c <Shift-B3-Motion> "itemDrag $c %x %y s-r-drag"
+ bind $c <Key> "itemKeyPress $c %A %k"
+}
+
+proc xgui_node_del_canvas {canvas_name } {
+ global text_comment
+ set canvas_name [string trim $canvas_name "/"]
+ set canvas_name [split $canvas_name "/"]
+ set canvas_name [lindex $canvas_name end]
+ destroy .$canvas_name
+ data_forget ~/$canvas_name
+ set text_comment "deleted $canvas_name"
+}
+
+proc xgui_node_error {from error} {
+ global text_comment
+ set text_comment "# error : unable to do <$error> ($from)"
+}
+
+proc xgui_node_connect { c_who c_from channel } {
+ global neibourg_list
+ global neibourg_data
+ global xgui_me
+ global text_comment
+ set c_from [string trim $c_from "/"]
+ switch $c_who {
+ "me" {
+ set n [lsearch $neibourg_data $channel]
+ if { $n == -1 } {
+ lappend neibourg_list $c_from
+ lappend neibourg_data $channel
+ set text_comment "$xgui_me connect himself to $c_from onto channel $channel"
+# fconfigure $channel -blocking false -bufering line
+ } else {
+ set text_comment "$xgui_me already connected to $c_from onto channel $channel"
+ }
+ }
+ "pd" {
+ global pd_name
+ global pd_port
+ global pd_sok
+ global xgui_pd
+ set c_host [split $c_from ":"]
+ set pd_name [lindex $c_host 0]
+ set pd_port [lindex $c_host 1]
+ set xgui_pd "$pd_name:$pd_port"
+# test perf a faire....
+ set pd_sok [socket -async $pd_name $pd_port]
+# set pd_sok [socket $pd_name $pd_port]
+ if { $pd_sok != -1 } {
+ set text_comment " $xgui_me connected to pd"
+# fconfigure $pd_sok -blocking false -bufering line
+ } else { set text_comment "connection refused with pd" }
+ }
+ default {
+ set c_host [split $c_who ":"]
+ set c_name [lindex $c_host 0]
+ set c_port [lindex $c_host 1]
+ set sok -1
+ catch {set sok [socket -async $c_name $c_port]}
+ if { $sok != -1 } {
+ lappend neibourg_list $c_who
+ lappend neibourg_data $sok
+ fileevent $sok readable [list read_and_do $sok]
+# fconfigure $sok -blocking false -bufering line
+ set text_comment "$xgui_me connected $c_who"
+ } else { set text_comment "connection refused with $c_who" }
+ }
+ }
+}
+
+proc xgui_node_disconnect { d_who d_from channel} {
+ global neibourg_list
+ global neibourg_data
+ global text_comment
+ switch $d_who {
+ "me" {
+ set d_who [string trim $d_from "/"]
+ set n [lsearch $neibourg_list $d_who]
+ if {$n != -1 } {
+ catch { close [lrange $neibourg_data $n $n] }
+ set neibourg_list [lreplace $neibourg_list $n $n]
+ set neibourg_data [lreplace $neibourg_data $n $n]
+ set text_comment "$d_who disconnected himself"
+ } else { set text_comment "error $d_from not a neibourg" }
+ }
+
+ "pd" {
+ global pd_name
+ global pd_port
+ global pd_sok
+ global xgui_pd
+ set pd_name none
+ set pd_port none
+ set xgui_pd "$pd_name:$pd_port"
+ set pd_sok -1
+ catch {close pd_sok}
+ }
+ "*" {
+ foreach sok $neibourg_data { close $sok }
+ set neibourg_list [list]
+ set neibourg_data [list]
+ set text_comment "$d_from disconnect *"
+ }
+ default {
+ set n [lsearch $neibourg_list $d_who]
+ if {$n != -1 } {
+ catch { close [lrange $neibourg_data $n $n] }
+ set neibourg_list [lreplace $neibourg_list $n $n]
+ set neibourg_data [lreplace $neibourg_data $n $n]
+ set text_comment "$d_who disconnected $d_from"
+ } else { set text_comment "error $d_who not a neibourg" }
+ }
+ }
+}
+
+proc xgui_node_hide { canvas } {
+ set canvas_name [string trim $canvas_name "/"]
+ set canvas_name [split $canvas_name "/"]
+ set canvas_name [lindex $canvas_name end]
+ destroy .$canvas_name
+}
+
+proc xgui_node_neibourg { w_from } {
+ global neibourg_list
+ global neibourg_data
+ global xgui_me
+ foreach name $neibourg_list {
+ send2nodes / $w_from "# $xgui_me connected to $name"
+ }
+}
+
+proc xgui_node_clone { obj new_obj } {
+ data_clone $obj $new_obj
+}
+
+proc xgui_node_load { file } {
+ data_load $file
+}
+
+proc xgui_node_save { obj file } {
+ data_save $obj $file
+}
+
+proc xgui_node_load_coord { file } {
+ data_load_send $file
+}
+
+proc xgui_node_save_coord { obj file } {
+ data_save_param $obj coord $file
+}
+
+proc xgui_node_debug { from var } {
+ global host_name
+ global host_port
+ global xgui_me
+ global neibourg_list
+ global neibourg_data
+ global xgui_gui
+ global xgui_cmd_out
+ global data_data
+ global text_comment
+ global pd_name
+ global pd_port
+ global pd_sok
+ global xgui_pd
+ global from_all
+ set text_comment "$var = [subst $var ]"
+}
+
+proc xgui_node_help { w_from } {
+ send2nodes / $w_from "# method: connect who"
+ send2nodes / $w_from "# method: disconnect who"
+ send2nodes / $w_from "# method: neibourg"
+ send2nodes / $w_from "# method: ping"
+ send2nodes / $w_from "# method: add_canvas"
+ send2nodes / $w_from "# method: del_canvas"
+}
+#################################################
+#methods for canvas
+
+proc canvas_size {canvas_name x y} {
+ .$canvas_name.$canvas_name configure -width $x
+ .$canvas_name.$canvas_name configure -height $y
+ wm geometry .$canvas_name
+ data_remember ~/$canvas_name//size "~/$canvas_name size $x $y"
+}
+
+proc canvas_color {canvas_name color} {
+ .$canvas_name.$canvas_name configure -bg $color
+ data_remember ~/$canvas_name//color "~/$canvas_name color $color"
+ }
+
+#################################################
+#methods for all objects
+
+proc obj_move {canvas gobj_name x y } {
+ global xgui_pd
+ catch {.$canvas.$canvas move $gobj_name $x $y
+ send2pd / pd/$canvas/$gobj_name "coord [.$canvas.$canvas coords $gobj_name]"
+ data_remember ~/$canvas/$gobj_name//coord "~/$canvas/$gobj_name coord [.$canvas.$canvas coords $gobj_name]"
+ }
+}
+
+proc obj_color {canvas gobj_name new_color} {
+ .$canvas.$canvas itemconfigure $gobj_name -fill $new_color
+ data_remember ~/$canvas/$gobj_name//color "~/$canvas/$gobj_name color $new_color"
+}
+
+proc obj_border {canvas gobj_name new_color} {
+ .$canvas.$canvas itemconfigure $gobj_name -outline $new_color
+ data_remember ~/$canvas/$gobj_name//border "~/$canvas/$gobj_name border $new_color"
+}
+
+proc obj_raise {canvas gobj_name } {
+ .$canvas.$canvas raise $gobj_name
+ data_remember ~/$canvas/$gobj_name//raise "~/$canvas/$gobj_name raise"
+}
+
+proc obj_coord {canvas gobj_name x1 y1 x2 y2 } {
+ catch {
+ .$canvas.$canvas coords $gobj_name $x1 $y1 $x2 $y2
+ data_remember ~/$canvas/$gobj_name//coord "~/$canvas/$gobj_name coord $x1 $y1 $x2 $y2"
+ }
+}
+
+proc obj_xy1 {canvas gobj_name x1 y1 } {
+ catch {
+ set old_coord [.$canvas.$canvas coords $gobj_name]
+ .$canvas.$canvas coords $gobj_name $x1 $y1 [lindex $old_coord 2] [lindex $old_coord 3]
+ data_remember ~/$canvas/$gobj_name//coord "~/$canvas/$gobj_name coord $x1 $y1 [lindex $old_coord 2] [lindex $old_coord 3]"
+ }
+}
+
+proc obj_xy2 {canvas gobj_name x2 y2 } {
+ catch {
+ set old_coord [.$canvas.$canvas coords $gobj_name]
+ .$canvas.$canvas coords $gobj_name [lindex $old_coord 0] [lindex $old_coord 1] $x2 $y2
+ data_remember ~/$canvas/$gobj_name//coord "~/$canvas/$gobj_name coord [lindex $old_coord 0] [lindex $old_coord 1] $x2 $y2"
+ }
+}
+
+proc obj_width {canvas gobj_name new_width} {
+ .$canvas.$canvas itemconfigure $gobj_name -width $new_width
+ data_remember ~/$canvas/$gobj_name//width "~/$canvas/$gobj_name width $new_width"
+}
+
+proc obj_near {canvas gobj_name x y} {
+ # to be done...
+}
+
+proc obj_del {canvas obj_name} {
+ .$canvas.$canvas delete $obj_name
+ send2nodes /$canvas */$canvas "# deleted $obj_name"
+ data_forget ~/$canvas/$obj_name
+}
+
+#################################################
+#methods for seg
+
+proc seg_add {canvas gobj_name x1 y1 x2 y2 } {
+ .$canvas.$canvas delete $gobj_name
+ data_forget ~/$canvas/$gobj_name
+ .$canvas.$canvas create line $x1 $y1 $x2 $y2 -width 3 -tags $gobj_name -capstyle round
+ # send2nodes /$canvas */$canvas "added $gobj_name"
+ data_remember ~/$canvas/$gobj_name/ "~/$canvas/$gobj_name add_seg"
+}
+
+proc seg_caps {canvas gobj_name new_cap} {
+ .$canvas.$canvas itemconfigure $gobj_name -capstyle $new_cap
+ data_remember ~/$canvas/$gobj_name//caps "~/$canvas/$gobj_name caps $new_cap"
+}
+
+#################################################
+#methods for text
+
+proc text_add {canvas gobj_name x1 y1 text } {
+ .$canvas.$canvas delete $gobj_name
+ data_forget ~/$canvas/$gobj_name
+ .$canvas.$canvas create text $x1 $y1 -text $text -tags $gobj_name -anchor sw
+ # send2nodes /$canvas */$canvas "added $gobj_name"
+ data_remember ~/$canvas/$gobj_name/ "~/$canvas/$gobj_name add_text"
+}
+
+proc text_value {canvas gobj_name value} {
+ .$canvas.$canvas itemconfigure $gobj_name -text $value
+ data_remember ~/$canvas/$gobj_name//text "~/$canvas/$gobj_name text $value"
+}
+
+proc text_anchor {canvas gobj_name value} {
+ .$canvas.$canvas itemconfigure $gobj_name -anchor $value
+ data_remember ~/$canvas/$gobj_name//anchor "~/$canvas/$gobj_name anchor $value"
+}
+
+proc text_justify {canvas gobj_name value} {
+ .$canvas.$canvas itemconfigure $gobj_name -justify $value
+ data_remember ~/$canvas/$gobj_name//justify "~/$canvas/$gobj_name justify $value"
+}
+
+proc text_pos {canvas gobj_name x y} {
+ .$canvas.$canvas coords $gobj_name $x $y
+ data_remember ~/$canvas/$gobj_name//pos "~/$canvas/$gobj_name pos $x $y"
+}
+
+#################################################
+#methods for rect
+
+proc rect_add {canvas gobj_name x1 y1 x2 y2 } {
+ .$canvas.$canvas delete $gobj_name
+ data_forget ~/$canvas/$gobj_name
+ .$canvas.$canvas create rectangle $x1 $y1 $x2 $y2 -width 2 -tags $gobj_name
+ # send2nodes /$canvas */$canvas "# added $gobj_name"
+ data_remember ~/$canvas/$gobj_name/ "~/$canvas/$gobj_name add_rect"
+}
+
+#################################################
+#methods for arc
+
+proc arc_add {canvas gobj_name x1 y1 x2 y2 start width} {
+ .$canvas.$canvas delete $gobj_name
+ data_forget ~/$canvas/$gobj_name
+ .$canvas.$canvas create arc $x1 $y1 $x2 $y2 -start $start -extent $width -width 2 -tags $gobj_name
+ # send2nodes /$canvas */$canvas "# added $gobj_name "
+ data_remember ~/$canvas/$gobj_name/ "~/$canvas/$gobj_name add_arc"
+}
+
+proc arc_start {canvas gobj_name new_start} {
+ .$canvas.$canvas itemconfigure $gobj_name -start $new_start
+ data_remember ~/$canvas/$gobj_name//start "~/$canvas/$gobj_name start $new_start"}
+
+proc arc_width {canvas gobj_name new_width} {
+ .$canvas.$canvas itemconfigure $gobj_name -extent $new_width
+ data_remember ~/$canvas/$gobj_name//angle "~/$canvas/$gobj_name angle $new_width"}
+
+proc arc_style {canvas gobj_name new_style} {
+ .$canvas.$canvas itemconfigure $gobj_name -style $new_style
+ data_remember ~/$canvas/$gobj_name//style "~/$canvas/$gobj_name style $new_style "}
+
+################################################
+# Set up event bindings for all canvas:
+
+proc itemStartDrag {c x y event} {
+ global xgui_pd
+ global lastX lastY
+ global my_selected
+ set lastX [$c canvasx $x]
+ set lastY [$c canvasy $y]
+ set my_selected [lindex [$c gettags current] 0]
+ set c [lindex [split $c "."] 1]
+ send2pd / pd/$c/$my_selected "$event $x $y"
+}
+
+proc itemDrag {c x y event} {
+ global xgui_pd
+ global lastX lastY
+ global my_selected
+ set x [$c canvasx $x]
+ set y [$c canvasy $y]
+ set c [lindex [split $c "."] 1]
+ send2pd / pd/$c/$my_selected "$event [expr $x-$lastX] [expr $y-$lastY]"
+ set lastX $x
+ set lastY $y
+}
+
+proc itemEnter {c} {
+ global xgui_pd
+ set my_item [lindex [$c gettags current] 0]
+ set c [lindex [split $c "."] 1]
+ send2pd / pd/$c/$my_item enter
+}
+
+proc itemLeave {c} {
+ global xgui_pd
+ set my_item [lindex [$c gettags current] 0]
+ set c [lindex [split $c "."] 1]
+ send2pd / pd/$c/$my_item leave
+}
+
+proc itemKeyPress {c ascii num} {
+ global xgui_pd
+ set my_item [lindex [$c gettags current] 0]
+ set c [lindex [split $c "."] 1]
+ send2pd / pd/$c/$my_item "keypress $ascii $num"
+ send2pd / pd/$c "keypress $ascii $num"
+}
+
+#####################################################################################
+# Here the procedures that keep a memory about all objectz.
+
+proc data_remember {obj_sel m} {
+ global data_data
+ set line_to_destroy 0
+ foreach line $data_data {
+ if {[string match "$obj_sel/*" $line] == 1} {
+ set line_to_destroy $line
+ }
+ }
+ if { $line_to_destroy !=0 } {
+ set n [lsearch $data_data $line_to_destroy ]
+ set data_data [lreplace $data_data $n $n "$obj_sel/ $m" ]
+ } else {
+ lappend data_data "$obj_sel/ $m"
+ }
+}
+
+proc data_forget { obj } {
+ global data_data
+ while { [lsearch $data_data $obj/* ] != -1} {
+ set n [lsearch $data_data $obj/* ]
+ set data_data [lreplace $data_data $n $n]
+ }
+}
+
+proc data_clone { from_obj to_new_obj } {
+ global data_data
+ foreach line $data_data {
+ if {[string match "$from_obj/*" $line] == 1} {
+ set new_line [join [lreplace [split $line] 0 0 ] ]
+ regsub -all -- $from_obj $new_line $to_new_obj newest_line
+ do_this "~/ $newest_line" 0
+ }
+ }
+}
+
+proc data_save { from_obj file } {
+ global data_data
+ set file_chn [open $file w]
+ foreach line $data_data {
+ if {[string match "$from_obj/*" $line] == 1} {
+ set new_line [join [lreplace [split $line] 0 0 ] ]
+ puts $file_chn "$new_line"
+ }
+ }
+ close $file_chn
+}
+
+proc data_save_param { from_obj selector file } {
+ global data_data
+ set file_chn [open $file w]
+ foreach line $data_data {
+ if {[string match "$from_obj/*//$selector*" $line] == 1} {
+ set new_line [join [lreplace [split $line] 0 0 ] ]
+ puts $file_chn "$new_line"
+ }
+ }
+ close $file_chn
+}
+
+proc data_load { file } {
+ global data_data
+ set file_chn [open $file r]
+ while {[eof $file_chn]==0} {
+ set line [gets $file_chn]
+ do_this "~/ $line" 0
+ }
+ close $file_chn
+}
+
+proc data_load_send { file } {
+ global data_data
+ set file_chn [open $file r]
+ while {[eof $file_chn]==0} {
+ set line [gets $file_chn]
+ set line2s [split $line]
+ set line2s [join [linsert $line2s 1 update]]
+# regsub -all -- ~/ $line2s */ new_line
+# do_this "~/ $line" 0
+ send2pd / $line2s ""
+ }
+ close $file_chn
+}
+
+
+################################################################################################
+#anything to send somewhere ???
+proc send2nodes { m_from m_to ms2send } {
+ global xgui_gui
+ global xgui_cmd_out
+ global text2out
+ global xgui_me
+ global neibourg_list
+ global neibourg_data
+
+ global text_comment
+
+ global time4flush
+
+ set m2send "$xgui_me$m_from $m_to $ms2send"
+ set m_to [string trim $m_to "/"]
+ set m_to_l [split $m_to "/"]
+ set m_to_node [lindex $m_to_l 0]
+
+ if { $xgui_gui == 1 } {
+ set text2out $m2send
+ }
+ if { $xgui_cmd_out == 1 } {
+ puts $m2send
+ }
+
+ switch [lindex [split $m_to "/"] 0 ] {
+ "*" {
+ foreach n $neibourg_list {
+ regsub -all -- {\*} $m_to $n m2
+ send2nodes $m_from $m2 $ms2send
+ }
+ }
+ "." {
+ foreach n $neibourg_data {
+ catch {
+ puts $n $ms2send
+ #after cancel {flush $n}
+ #after $time4flush {flush $n}
+ flush $n
+ }
+ }
+ }
+ default {
+ set n [lsearch $neibourg_list $m_to_node]
+ if { $n != -1 } {
+ # if catch = error then we have to remove the link.
+ catch {
+ puts [lrange $neibourg_data $n $n] "$m2send;"
+ #after cancel {flush [lrange $neibourg_data $n $n]}
+ #after $time4flush {flush [lrange $neibourg_data $n $n]}
+ flush [lrange $neibourg_data $n $n]
+ }
+ } else {
+ set $text_comment "didn't find any coresponding neigbourg"
+ }
+ }
+ }
+}
+
+proc send2pd { m_from m_to ms2send } {
+ global xgui_gui
+ global xgui_cmd_out
+ global text2out
+ global xgui_me
+ global pd_sok
+
+ set m2send "$xgui_me$m_from $m_to $ms2send;"
+
+ if { $xgui_gui == 1 } {
+ set text2out $m2send
+ }
+ if { $xgui_cmd_out == 1 } {
+ puts $m2send
+ }
+
+ # catch {
+ puts $pd_sok $m2send
+ flush $pd_sok
+ # }
+}
+
+
+#####################################################################################
+# the 3 main proc that do every thing ##########################################
+#####################################################################################
+
+proc read_and_do { channel } {
+ gets $channel message
+ global text_from_outside
+ set text_from_outside "$channel \"$message"
+ do_this $message $channel
+}
+
+proc do_this { m channel} {
+ global xgui_me
+ set m [string trim $m ";"]
+ if {[llength $m] >= 3} {
+ set m_to [string trim [lindex $m 1] "/"]
+ set m_to_l [split $m_to "/"]
+ set m_to_node [lindex $m_to_l 0]
+ set m_from [string trim [lindex $m 0] "/"]
+ set m_cmd [lrange $m 2 end]
+ #you have to know who you are :
+ if { "$m_to_node" == "$xgui_me" } { set m_to_node "~" }
+ switch $m_to_node {
+ "~" { catch {do_this_here $m_from $m_to $m_cmd $channel} }
+ "*" {
+ # you too are a part of the whole !!!
+ catch { do_this_here $m_from $m_to $m_cmd $channel }
+ send2nodes / $m_to "[lrange $m 2 end]"
+ }
+ "pd" {send2pd / $m_to "[lrange $m 2 end]"}
+ default {send2nodes / $m_to "[lrange $m 2 end]"}
+ }
+ } else {
+ if {$m == "help"} {
+ # send2nodes / $m_to "# syntax : sender receiver method args..."
+ } else {
+ xgui_node_error "not enought args" $m
+ }
+ }
+}
+
+proc do_this_here { m_from m_to m_cmd channel} {
+ global xgui_me
+ global xgui_pd
+ set m_to [split $m_to "/"]
+ set m_from_l [split $m_from "/"]
+ set m_from_node [lindex $m_from_l 0]
+ set m_selector [lindex $m_cmd 0]
+ set m_argc [llength $m_cmd]-1
+ if {$m_argc >= 1} { set m_argv [lrange $m_cmd 1 end]
+ set a1 [lindex $m_argv 0]
+ if {$m_argc >=2 } { set a2 [lindex $m_argv 1]
+ if {$m_argc >=3 } { set a3 [lindex $m_argv 2]
+ if {$m_argc >=4 } { set a4 [lindex $m_argv 3]
+ if {$m_argc >=5 } { set a5 [lindex $m_argv 4]
+ if {$m_argc >=6 } { set a6 [lindex $m_argv 5]
+ if {$m_argc >=7 } { set a7 [lindex $m_argv 6]
+ if {$m_argc >=8 } { set a8 [lindex $m_argv 7]
+ if {$m_argc >=9 } { set a9 [lindex $m_argv 8]
+ if {$m_argc >=10 } { set a10 [lindex $m_argv 9]
+ } } } } } } } } }
+ } else {set m_argv "{}" }
+
+ switch [llength $m_to] {
+ 1 { # this is for the node ##########################
+ switch $m_selector {
+ "rename" { xgui_node_name $a1 $a2 }
+
+ "add_canvas" { xgui_node_add_canvas $a1}
+ "del_canvas" { xgui_node_del_canvas $a1}
+ "show" { xgui_node_clone $a1 $a1 }
+ "hide" { xgui_node_hide }
+ "connect" { if {$a1 == "pd"} { xgui_node_connect pd $a2 $channel
+ } else { xgui_node_connect $a1 $m_from $channel} }
+ "connect_on" { xgui_node_connect $a1 $m_from $channel
+ send2nodes / $a1/ "connect me"
+ send2nodes / $a1/ "clone ~/$a2 $xgui_me/$a2"
+ send2nodes / $a1/ "connect_on_pd $xgui_me" }
+ "connect_on_pd" { send2nodes / $a1/ "connect pd $xgui_pd" }
+ "disconnect" { xgui_node_disconnect $a1 $m_from $channel}
+
+ "neibourg" { xgui_node_neibourg $m_from }
+ "clone" { xgui_node_clone $a1 $a2 }
+ "save" { xgui_node_save $a1 $a2 }
+ "save_coord" { xgui_node_save_coord $a1 $a2 }
+ "load_coord" { xgui_node_load_coord $a1 }
+ "load" { xgui_node_load $a1 }
+ "help" { xgui_node_help $m_from }
+ "debug" { xgui_node_debug $m_from $$a1 }
+ "ping" { send2nodes / $m_from "# $m_from pinged" }
+ "#" { global text_comment ; set text_comment $m_argv}
+ default { xgui_node_error "node method $m_selector does not exist" $m_cmd }
+ }
+ }
+ 2 { # this is for the canvas $m_c ##########################
+ set m_c [lindex $m_to 1]
+ switch $m_selector {
+ "add_canvas" { catch {xgui_node_add_canvas $m_c }}
+ "del_canvas" { xgui_node_del_canvas $m_c }
+ "size" {canvas_size $m_c $a1 $a2}
+ "color" {canvas_color $m_c $a1}
+ "del" {obj_del $m_c $a1}
+ "kill" {obj_del $m_c $a1}
+ "add_seg" {seg_add $m_c $a1 10 10 20 20 }
+ "add_text" {text_add $m_c $a1 10 10 "text" }
+ "add_rect" {rect_add $m_c $a1 10 10 20 20 }
+ "add_arc" {arc_add $m_c $a1 10 10 20 20 0 90 }
+ default {xgui_node_error "canvas method $m_selector does not exist" $m_cmd }
+ }
+ }
+ 3 { # this is for the object $m_o witch is into $m_c ########
+ set m_c [lindex $m_to 1]
+ set m_o [lindex $m_to 2]
+ switch $m_selector {
+ "add_seg" {seg_add $m_c $m_o 10 10 20 20 }
+ "add_text" {text_add $m_c $m_o 10 10 "text" }
+ "add_rect" {rect_add $m_c $m_o 10 10 20 20 }
+ "add_arc" {arc_add $m_c $m_o 10 10 20 20 0 90 }
+ "del" {obj_del $m_c $m_o}
+ "kill" {obj_del $m_c $m_o}
+ "show" {obj_show $m_c $m_o }
+ "hide" {obj_hide $m_c $m_o }
+ "move" {obj_move $m_c $m_o $a1 $a2}
+ "scale" {obj_scale $m_c $m_o $a1 $a2 $a3 $a4 }
+ "raise" {obj_raise $m_c $m_o }
+ "near" {obj_near $m_c $m_o $a1 $a2 }
+ "color" {obj_color $m_c $m_o $a1}
+ "width" {obj_width $m_c $m_o $a1}
+ "coord" {obj_coord $m_c $m_o $a1 $a2 $a3 $a4 }
+ "xy1" {obj_xy1 $m_c $m_o $a1 $a2 }
+ "xy2" {obj_xy2 $m_c $m_o $a1 $a2 }
+ "border" {obj_border $m_c $m_o $a1}
+
+ "caps" {seg_caps $m_c $m_o $a1}
+
+ "text" {text_value $m_c $m_o $a1}
+ "pos" {text_pos $m_c $m_o $a1 $a2 }
+ "anchor" {text_anchor $m_c $m_o $a1}
+ "justify" {text_justify $m_c $m_o $a1}
+
+ "start" {arc_start $m_c $m_o $a1 }
+ "angle" { arc_width $m_c $m_o $a1 }
+ "style" {arc_style $m_c $m_o $a1}
+
+ default {xgui_node_error "obj_method $m_selector does not exist" $m_argv }
+ }
+ }
+ }
+}
+
diff --git a/extensions/xgui/doc/01_first_seg.pd b/extensions/xgui/doc/01_first_seg.pd
new file mode 100644
index 00000000..b38a64ae
--- /dev/null
+++ b/extensions/xgui/doc/01_first_seg.pd
@@ -0,0 +1,123 @@
+#N canvas 485 37 638 682 10;
+#X floatatom 27 382 3 0 100;
+#X msg 27 406 width \$1;
+#X msg 108 424 caps butt;
+#X msg 108 402 caps round;
+#X msg 108 380 caps projecting;
+#X msg 28 545 color \$1;
+#X msg 28 523 list Blue;
+#X msg 28 479 list Black;
+#X text 518 640 dh20020212;
+#X obj 28 567 alias my_first_seg;
+#X obj 27 451 alias my_first_seg;
+#X obj 20 314 alias my_first_seg;
+#X msg 20 292 width 10;
+#X text 23 337 this is an alias;
+#X msg 27 186 show;
+#X msg 67 186 hide;
+#X msg 25 39 show;
+#X msg 65 39 hide;
+#X text 124 188 then you can draw a segment into it.;
+#X text 39 249 this is the real seg object;
+#X text 170 355 try thoses too.;
+#X text 8 3 This example shows differents to modify a segment in a
+canvas.;
+#X msg 20 270 coord 20 10 100 150;
+#X floatatom 311 528 5 0 0;
+#X floatatom 354 528 5 0 0;
+#X floatatom 401 528 5 0 0;
+#X floatatom 447 528 5 0 0;
+#X obj 311 603 alias my_first_seg;
+#X obj 312 504 line;
+#X msg 355 314 bang;
+#X obj 357 505 line;
+#X obj 407 506 line;
+#X obj 452 507 line;
+#X obj 311 554 xy2coord;
+#X msg 109 40 size 500 500;
+#X text 174 277 Here some values you can change;
+#X obj 354 471 route 0 1 2 3 4;
+#X obj 353 366 t b b;
+#X obj 499 504 line;
+#X obj 499 529 int;
+#X floatatom 499 552 3 0 100;
+#X msg 499 576 width \$1;
+#X msg 394 315 stop;
+#X obj 383 418 random 500;
+#X msg 207 40 color white;
+#X msg 207 62 color blue;
+#X msg 104 545 color green;
+#X msg 479 348 500;
+#X msg 478 325 500;
+#X obj 353 340 metro 500;
+#X obj 353 445 pack f f 500;
+#X msg 512 324 5;
+#X msg 511 348 5;
+#X msg 106 523 color red;
+#X msg 28 501 list grey;
+#X msg 208 84 color lightgrey;
+#X obj 353 393 random 5;
+#X obj 25 109 canvas */my_first_canvas;
+#X obj 25 133 print canvas;
+#X obj 24 226 seg my_first_seg */my_first_canvas/my_first_seg;
+#X obj 25 613 alias my_first_seg;
+#X obj 25 636 print my_first_seg;
+#X obj 216 147 i-seg */my_first_canvas;
+#X msg 216 123 show;
+#X msg 283 40 color black;
+#X connect 0 0 1 0;
+#X connect 1 0 10 0;
+#X connect 2 0 10 0;
+#X connect 3 0 10 0;
+#X connect 4 0 10 0;
+#X connect 5 0 9 0;
+#X connect 6 0 5 0;
+#X connect 7 0 5 0;
+#X connect 12 0 11 0;
+#X connect 14 0 59 0;
+#X connect 15 0 59 0;
+#X connect 16 0 57 0;
+#X connect 17 0 57 0;
+#X connect 22 0 11 0;
+#X connect 23 0 33 0;
+#X connect 24 0 33 1;
+#X connect 25 0 33 2;
+#X connect 26 0 33 3;
+#X connect 28 0 23 0;
+#X connect 29 0 49 0;
+#X connect 30 0 24 0;
+#X connect 31 0 25 0;
+#X connect 32 0 26 0;
+#X connect 33 0 27 0;
+#X connect 34 0 57 0;
+#X connect 36 0 28 0;
+#X connect 36 1 30 0;
+#X connect 36 2 31 0;
+#X connect 36 3 32 0;
+#X connect 36 4 38 0;
+#X connect 37 0 56 0;
+#X connect 37 1 43 0;
+#X connect 38 0 39 0;
+#X connect 39 0 40 0;
+#X connect 40 0 41 0;
+#X connect 41 0 27 0;
+#X connect 42 0 49 0;
+#X connect 43 0 50 1;
+#X connect 44 0 57 0;
+#X connect 45 0 57 0;
+#X connect 46 0 9 0;
+#X connect 46 0 9 0;
+#X connect 47 0 50 2;
+#X connect 48 0 49 1;
+#X connect 49 0 37 0;
+#X connect 50 0 36 0;
+#X connect 51 0 49 1;
+#X connect 52 0 50 2;
+#X connect 53 0 9 0;
+#X connect 54 0 5 0;
+#X connect 55 0 57 0;
+#X connect 56 0 50 0;
+#X connect 57 0 58 0;
+#X connect 60 0 61 0;
+#X connect 63 0 62 0;
+#X connect 64 0 57 0;
diff --git a/extensions/xgui/doc/02_behaviors.pd b/extensions/xgui/doc/02_behaviors.pd
new file mode 100644
index 00000000..8c4367ab
--- /dev/null
+++ b/extensions/xgui/doc/02_behaviors.pd
@@ -0,0 +1,49 @@
+#N canvas 418 -8 563 706 10;
+#X obj 22 628 light_over;
+#X text 404 671 dh20020212;
+#X text 7 30 This example shows the diferent properties oand methodes
+of a seg object;
+#X floatatom 87 651 1 0 1;
+#X obj 22 588 spigot;
+#X floatatom 59 564 1 0 1;
+#X msg 27 166 show;
+#X msg 67 166 hide;
+#X msg 27 89 show;
+#X msg 67 89 hide;
+#X text 9 9 Patch "pdx_connect.pd" must be loaded and connected;
+#X text 244 88 First create the canvas.;
+#X text 246 108 uses the show method;
+#X text 255 171 then you can draw a segment into it.;
+#X text 20 315 You'll receive here all the event from the seg windows
+;
+#X msg 111 90 size 500 500;
+#X obj 24 270 alias a_seg;
+#X obj 25 292 print a_seg;
+#X obj 24 384 alias a_seg;
+#X obj 24 474 alias a_seg;
+#X text 50 404 a_seg detect a move;
+#X text 49 451 and send it to himselve;
+#X text 116 474 this way you can drag and drop the seg;
+#X msg 152 170 width 20;
+#X obj 22 537 alias a_seg;
+#X obj 22 675 alias a_seg;
+#X text 81 567 breaking the link is killing the behavior;
+#X text 61 334 Try to move the segment with your mouse !;
+#X obj 24 427 dragable;
+#X text 101 427 dragable is a behaviors;
+#X obj 27 120 canvas */my_canvas;
+#X obj 26 208 seg a_seg */my_canvas/a_seg;
+#X connect 0 0 25 0;
+#X connect 0 1 3 0;
+#X connect 4 0 0 0;
+#X connect 5 0 4 1;
+#X connect 6 0 31 0;
+#X connect 7 0 31 0;
+#X connect 8 0 30 0;
+#X connect 9 0 30 0;
+#X connect 15 0 30 0;
+#X connect 16 0 17 0;
+#X connect 18 0 28 0;
+#X connect 23 0 31 0;
+#X connect 24 0 4 0;
+#X connect 28 0 19 0;
diff --git a/extensions/xgui/doc/03_low_level.pd b/extensions/xgui/doc/03_low_level.pd
new file mode 100644
index 00000000..dad23536
--- /dev/null
+++ b/extensions/xgui/doc/03_low_level.pd
@@ -0,0 +1,28 @@
+#N canvas 323 157 503 508 12;
+#X obj 72 455 print from_seg;
+#X text 18 12 This example show how to use seg using the low level
+interface.;
+#X text 73 406 The events from seg arrives there;
+#X text 553 471 dh20020317;
+#X obj 79 346 send to_node;
+#X msg 79 84 do */ add_canvas */test;
+#X msg 79 111 do */test add_seg foo;
+#X obj 72 428 r */test/foo;
+#X msg 79 137 do */test size 100 100;
+#X msg 79 163 do */test/foo width 10;
+#X msg 79 194 do */test/foo move 10 10;
+#X msg 79 221 do */test/foo color blue;
+#X msg 79 252 do */test/foo caps butt;
+#X msg 79 279 do */test/foo coord 10 10 20 20;
+#X msg 79 303 do */test color white;
+#X text 385 469 dh20020530;
+#X connect 5 0 4 0;
+#X connect 6 0 4 0;
+#X connect 7 0 0 0;
+#X connect 8 0 4 0;
+#X connect 9 0 4 0;
+#X connect 10 0 4 0;
+#X connect 11 0 4 0;
+#X connect 12 0 4 0;
+#X connect 13 0 4 0;
+#X connect 14 0 4 0;
diff --git a/extensions/xgui/doc/04_classic.pd b/extensions/xgui/doc/04_classic.pd
new file mode 100644
index 00000000..c76a3c36
--- /dev/null
+++ b/extensions/xgui/doc/04_classic.pd
@@ -0,0 +1,98 @@
+#N canvas 25 191 968 433 10;
+#X floatatom 10 178 5 0 0;
+#X floatatom 10 122 5 0 0;
+#X floatatom 234 122 5 0 0;
+#X floatatom 468 123 5 0 0;
+#X floatatom 731 121 5 0 0;
+#X text 17 23 This example show how to create some simples sliders
+with diferent look and diferent behavior;
+#X obj 415 15 loadbang;
+#X msg 807 21 hide;
+#X msg 49 122 show;
+#X msg 85 123 hide;
+#X msg 279 122 show;
+#X msg 317 122 hide;
+#X msg 513 123 show;
+#X msg 552 123 hide;
+#X msg 776 121 show;
+#X msg 812 121 hide;
+#X obj 415 37 t b b b;
+#X text 731 177 dh20020318;
+#X text 17 -2 Patch "pdx_connect.pd" must be loaded and connected;
+#X msg 7 283 show;
+#X msg 43 283 hide;
+#X floatatom 191 220 5 0 0;
+#X msg 236 220 show;
+#X msg 272 220 hide;
+#X floatatom 190 279 5 0 0;
+#X floatatom 429 217 5 0 0;
+#X msg 474 217 show;
+#X msg 510 217 hide;
+#X floatatom 428 276 5 0 0;
+#X floatatom 672 216 5 0 0;
+#X msg 717 216 show;
+#X msg 753 216 hide;
+#X floatatom 671 275 5 0 0;
+#X obj 7 336 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
+-1;
+#X msg 321 303 show;
+#X msg 357 303 hide;
+#X obj 322 367 print;
+#X msg 538 16 show \, size 300 157 \, color lightgrey;
+#X obj 538 39 canvas */sliders;
+#X obj 10 150 slider2 sl1 */sliders 20 20 127 1270;
+#X obj 468 149 my_slider2 sl3 */sliders 70 20 127 127 127;
+#X obj 730 148 my_slider2 sl4 */sliders 90 20 127 127;
+#X obj 7 311 button b1 */sliders OK 120 20 30 20;
+#X obj 321 342 pad pd1 */sliders 170 20 297 147 1000 1000;
+#X obj 430 251 potar pt2 */sliders 120 80;
+#X obj 672 250 potar pt3 */sliders 120 110;
+#X obj 189 254 potar pt1 */sliders 120 50;
+#X obj 234 150 my_slider2 sl2 */sliders 50 20 127 127;
+#X connect 1 0 39 0;
+#X connect 2 0 47 0;
+#X connect 3 0 40 0;
+#X connect 4 0 41 0;
+#X connect 6 0 16 0;
+#X connect 7 0 38 0;
+#X connect 8 0 39 0;
+#X connect 9 0 39 0;
+#X connect 10 0 47 0;
+#X connect 11 0 47 0;
+#X connect 12 0 40 0;
+#X connect 13 0 40 0;
+#X connect 14 0 41 0;
+#X connect 15 0 41 0;
+#X connect 16 0 8 0;
+#X connect 16 0 10 0;
+#X connect 16 0 14 0;
+#X connect 16 0 19 0;
+#X connect 16 0 22 0;
+#X connect 16 0 26 0;
+#X connect 16 0 12 0;
+#X connect 16 0 30 0;
+#X connect 16 0 34 0;
+#X connect 16 2 37 0;
+#X connect 19 0 42 0;
+#X connect 20 0 42 0;
+#X connect 21 0 46 0;
+#X connect 22 0 46 0;
+#X connect 23 0 46 0;
+#X connect 25 0 44 0;
+#X connect 26 0 44 0;
+#X connect 27 0 44 0;
+#X connect 29 0 45 0;
+#X connect 30 0 45 0;
+#X connect 31 0 45 0;
+#X connect 34 0 43 0;
+#X connect 35 0 43 0;
+#X connect 37 0 38 0;
+#X connect 39 0 0 0;
+#X connect 40 0 25 0;
+#X connect 41 0 29 0;
+#X connect 42 0 33 0;
+#X connect 43 0 36 0;
+#X connect 44 0 28 0;
+#X connect 45 0 32 0;
+#X connect 46 0 24 0;
+#X connect 47 0 21 0;
diff --git a/extensions/xgui/doc/05_xseq.pd b/extensions/xgui/doc/05_xseq.pd
new file mode 100644
index 00000000..92f08043
--- /dev/null
+++ b/extensions/xgui/doc/05_xseq.pd
@@ -0,0 +1,315 @@
+#N canvas 186 5 737 541 10;
+#X floatatom 251 85 3 0 100;
+#X msg 16 195 width \$1;
+#X msg 223 180 color red;
+#X obj 185 256 metro 100;
+#X msg 185 279 move 1 0;
+#X obj 185 371 s play_pos;
+#X obj 185 325 coord2xy;
+#X floatatom 185 348 5 0 0;
+#X msg 109 86 stop;
+#X text 251 64 size;
+#X obj 204 226 alias cursor;
+#X text 16 35 This patch show how to create a simple sequencer.;
+#N canvas 248 263 301 267 save 0;
+#X obj 32 56 inlet;
+#X obj 32 190 outlet;
+#X obj 117 54 inlet;
+#X obj 32 79 route coord;
+#X msg 32 163 coord 467 107 70 21;
+#X msg 32 103 set coord \$1 \$2 \$3 \$4;
+#X text 36 12 save some value using the classicle saving feature instead
+of state;
+#X text 148 186 dh20020216;
+#X obj 165 68 loadbang;
+#X msg 161 164 move 0 0;
+#X obj 117 133 t b b;
+#X connect 0 0 3 0;
+#X connect 2 0 10 0;
+#X connect 3 0 5 0;
+#X connect 4 0 1 0;
+#X connect 5 0 4 0;
+#X connect 8 0 10 0;
+#X connect 9 0 1 0;
+#X connect 10 0 9 0;
+#X connect 10 1 4 0;
+#X restore 115 225 pd save;
+#N canvas 240 223 602 402 save 0;
+#X obj 32 56 inlet;
+#X obj 32 190 outlet;
+#X obj 117 54 inlet;
+#X obj 32 79 route coord;
+#X msg 32 163 coord 393 153 84 40;
+#X msg 32 103 set coord \$1 \$2 \$3 \$4;
+#X text 36 12 save some value using the classicle saving feature instead
+of state;
+#X text 148 186 dh20020216;
+#X obj 208 74 loadbang;
+#X obj 117 133 bang;
+#X obj 209 96 t b b;
+#X msg 209 120 move 0 0;
+#X connect 0 0 3 0;
+#X connect 2 0 9 0;
+#X connect 3 0 5 0;
+#X connect 4 0 1 0;
+#X connect 5 0 4 0;
+#X connect 8 0 10 0;
+#X connect 9 0 4 0;
+#X connect 10 0 11 0;
+#X connect 10 1 4 0;
+#X connect 11 0 1 0;
+#X restore 115 248 pd save;
+#N canvas 240 223 602 402 save 0;
+#X obj 32 56 inlet;
+#X obj 32 190 outlet;
+#X obj 117 54 inlet;
+#X obj 32 79 route coord;
+#X msg 32 163 coord 11 177 505 16;
+#X msg 32 103 set coord \$1 \$2 \$3 \$4;
+#X obj 117 133 bang;
+#X text 36 12 save some value using the classicle saving feature instead
+of state;
+#X text 148 186 dh20020216;
+#X obj 208 74 loadbang;
+#X obj 209 96 t b b;
+#X msg 209 120 move 0 0;
+#X connect 0 0 3 0;
+#X connect 2 0 6 0;
+#X connect 3 0 5 0;
+#X connect 4 0 1 0;
+#X connect 5 0 4 0;
+#X connect 6 0 4 0;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 10 1 4 0;
+#X connect 11 0 1 0;
+#X restore 115 271 pd save;
+#N canvas 240 223 602 402 save 0;
+#X obj 32 56 inlet;
+#X obj 32 190 outlet;
+#X obj 117 54 inlet;
+#X obj 32 79 route coord;
+#X msg 32 163 coord 453 196 70 19;
+#X msg 32 103 set coord \$1 \$2 \$3 \$4;
+#X obj 117 133 bang;
+#X text 36 12 save some value using the classicle saving feature instead
+of state;
+#X text 148 186 dh20020216;
+#X obj 208 74 loadbang;
+#X obj 209 96 t b b;
+#X msg 209 120 move 0 0;
+#X connect 0 0 3 0;
+#X connect 2 0 6 0;
+#X connect 3 0 5 0;
+#X connect 4 0 1 0;
+#X connect 5 0 4 0;
+#X connect 6 0 4 0;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 10 1 4 0;
+#X connect 11 0 1 0;
+#X restore 115 294 pd save;
+#N canvas 240 223 600 400 save 0;
+#X obj 32 56 inlet;
+#X obj 32 190 outlet;
+#X obj 117 54 inlet;
+#X obj 32 79 route coord;
+#X msg 32 163 coord 70 27 475 133;
+#X msg 32 103 set coord \$1 \$2 \$3 \$4;
+#X obj 117 133 bang;
+#X text 36 12 save some value using the classicle saving feature instead
+of state;
+#X text 148 186 dh20020216;
+#X obj 153 133 loadbang;
+#X connect 0 0 3 0;
+#X connect 2 0 6 0;
+#X connect 3 0 5 0;
+#X connect 4 0 1 0;
+#X connect 5 0 4 0;
+#X connect 6 0 4 0;
+#X connect 9 0 4 0;
+#X restore 115 317 pd save;
+#N canvas 240 223 602 402 save 0;
+#X obj 32 56 inlet;
+#X obj 32 190 outlet;
+#X obj 117 54 inlet;
+#X obj 32 79 route coord;
+#X msg 32 163 coord 93 232 381 10;
+#X msg 32 103 set coord \$1 \$2 \$3 \$4;
+#X obj 117 133 bang;
+#X text 36 12 save some value using the classicle saving feature instead
+of state;
+#X text 148 186 dh20020216;
+#X obj 208 74 loadbang;
+#X obj 209 96 t b b;
+#X msg 209 120 move 0 0;
+#X connect 0 0 3 0;
+#X connect 2 0 6 0;
+#X connect 3 0 5 0;
+#X connect 4 0 1 0;
+#X connect 5 0 4 0;
+#X connect 6 0 4 0;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 10 1 4 0;
+#X connect 11 0 1 0;
+#X restore 115 340 pd save;
+#N canvas 447 269 604 404 save 0;
+#X obj 32 56 inlet;
+#X obj 32 190 outlet;
+#X obj 117 54 inlet;
+#X obj 32 79 route coord;
+#X msg 32 163 coord 66 120 484 50;
+#X msg 32 103 set coord \$1 \$2 \$3 \$4;
+#X obj 117 133 bang;
+#X text 36 12 save some value using the classicle saving feature instead
+of state;
+#X text 148 186 dh20020216;
+#X obj 208 74 loadbang;
+#X obj 209 96 t b b;
+#X msg 209 120 move 0 0;
+#X connect 0 0 3 0;
+#X connect 2 0 6 0;
+#X connect 3 0 5 0;
+#X connect 4 0 1 0;
+#X connect 5 0 4 0;
+#X connect 6 0 4 0;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 10 1 4 0;
+#X connect 11 0 1 0;
+#X restore 115 363 pd save;
+#N canvas 240 223 602 402 save 0;
+#X obj 32 56 inlet;
+#X obj 32 190 outlet;
+#X obj 117 54 inlet;
+#X obj 32 79 route coord;
+#X msg 32 163 coord 425 22 54 217;
+#X msg 32 103 set coord \$1 \$2 \$3 \$4;
+#X obj 117 133 bang;
+#X text 36 12 save some value using the classicle saving feature instead
+of state;
+#X text 148 186 dh20020216;
+#X obj 208 74 loadbang;
+#X obj 209 96 t b b;
+#X msg 209 120 move 0 0;
+#X connect 0 0 3 0;
+#X connect 2 0 6 0;
+#X connect 3 0 5 0;
+#X connect 4 0 1 0;
+#X connect 5 0 4 0;
+#X connect 6 0 4 0;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 10 1 4 0;
+#X connect 11 0 1 0;
+#X restore 115 386 pd save;
+#X msg 153 86 bang;
+#X text 139 64 load preset;
+#X obj 185 136 t b b b b;
+#X obj 346 302 move_x;
+#X text 362 365 You can modify what's in the seg windows.;
+#X text 362 385 If you save this patch \, what's in the seg windows
+will be saved too.;
+#X msg 243 162 show;
+#X msg 16 162 show;
+#X obj 360 130 loadbang;
+#X msg 470 195 show;
+#X msg 488 86 hide;
+#X msg 449 86 bang;
+#X msg 470 218 size 510 240;
+#X obj 16 248 i-seg */xseq;
+#X obj 16 271 i-seg */xseq;
+#X obj 16 294 i-seg */xseq;
+#X obj 16 317 i-seg */xseq;
+#X obj 16 340 i-seg */xseq;
+#X obj 16 363 i-seg */xseq;
+#X obj 16 386 i-seg */xseq;
+#X obj 185 302 seg cursor */xseq/cursor;
+#X msg 204 203 coord 10 10 10 230;
+#X msg 287 431 \; pd dsp 1;
+#X obj 360 153 t b b b b b;
+#X obj 15 109 t b b;
+#X msg 72 86 bang;
+#X msg 15 86 restart;
+#X text 9 9 Patch "pdx_connect.pd" must be loaded and connected;
+#X text 363 441 click here if you whant to hear what's generated !
+;
+#X obj 470 241 canvas */xseq;
+#X obj 16 225 i-seg */xseq;
+#X obj 16 479 preset p3 */xseq set03 10 80 40 20;
+#X obj 16 505 preset p4 */xseq set04 10 110 40 20;
+#X obj 16 428 preset p1 */xseq set01 10 20 40 20;
+#X obj 16 454 preset p2 */xseq set02 10 50 40 20;
+#X connect 0 0 1 0;
+#X connect 1 0 33 0;
+#X connect 1 0 34 0;
+#X connect 1 0 35 0;
+#X connect 1 0 36 0;
+#X connect 1 0 37 0;
+#X connect 1 0 38 0;
+#X connect 1 0 39 0;
+#X connect 1 0 50 0;
+#X connect 2 0 10 0;
+#X connect 3 0 4 0;
+#X connect 4 0 40 0;
+#X connect 6 0 7 0;
+#X connect 7 0 5 0;
+#X connect 8 0 3 0;
+#X connect 12 0 50 0;
+#X connect 13 0 33 0;
+#X connect 14 0 34 0;
+#X connect 15 0 35 0;
+#X connect 16 0 36 0;
+#X connect 17 0 37 0;
+#X connect 18 0 38 0;
+#X connect 19 0 39 0;
+#X connect 20 0 12 1;
+#X connect 20 0 13 1;
+#X connect 20 0 14 1;
+#X connect 20 0 15 1;
+#X connect 20 0 16 1;
+#X connect 20 0 17 1;
+#X connect 20 0 18 1;
+#X connect 20 0 19 1;
+#X connect 22 0 3 0;
+#X connect 22 0 42 0;
+#X connect 22 1 41 0;
+#X connect 22 2 2 0;
+#X connect 22 3 26 0;
+#X connect 23 0 40 0;
+#X connect 26 0 10 0;
+#X connect 27 0 33 0;
+#X connect 27 0 34 0;
+#X connect 27 0 35 0;
+#X connect 27 0 36 0;
+#X connect 27 0 37 0;
+#X connect 27 0 38 0;
+#X connect 27 0 39 0;
+#X connect 27 0 50 0;
+#X connect 28 0 43 0;
+#X connect 29 0 49 0;
+#X connect 30 0 49 0;
+#X connect 31 0 43 0;
+#X connect 32 0 49 0;
+#X connect 33 0 13 0;
+#X connect 34 0 14 0;
+#X connect 35 0 15 0;
+#X connect 36 0 16 0;
+#X connect 37 0 17 0;
+#X connect 38 0 18 0;
+#X connect 39 0 19 0;
+#X connect 40 0 6 0;
+#X connect 40 0 23 0;
+#X connect 41 0 10 0;
+#X connect 43 0 46 0;
+#X connect 43 1 20 0;
+#X connect 43 1 22 0;
+#X connect 43 2 27 0;
+#X connect 43 3 32 0;
+#X connect 43 4 29 0;
+#X connect 44 0 3 0;
+#X connect 44 1 41 0;
+#X connect 45 0 3 0;
+#X connect 46 0 44 0;
+#X connect 50 0 12 0;
diff --git a/extensions/xgui/doc/06_physics.pd b/extensions/xgui/doc/06_physics.pd
new file mode 100644
index 00000000..e883c7ce
--- /dev/null
+++ b/extensions/xgui/doc/06_physics.pd
@@ -0,0 +1,24 @@
+#N canvas 168 295 427 332 10;
+#X text 11 24 Here a small example to shows that the behaviors generated
+with pure-data can be very funny !!!;
+#X text 224 197 dh20020210;
+#X text 13 -1 Patch "pdx_connect.pd" must be loaded and connected;
+#X msg 21 175 show;
+#X obj 22 60 loadbang;
+#X msg 104 103 show;
+#X msg 262 63 hide;
+#X msg 227 62 bang;
+#X obj 21 82 t b b b;
+#X msg 55 125 size 400 400;
+#X text 26 247 Try to move the thing on the seg windows to ma;
+#X obj 77 151 canvas */physics;
+#X obj 21 197 i-seg_mp */physics 150 150;
+#X connect 3 0 12 0;
+#X connect 4 0 8 0;
+#X connect 5 0 11 0;
+#X connect 6 0 11 0;
+#X connect 7 0 8 0;
+#X connect 8 0 3 0;
+#X connect 8 1 9 0;
+#X connect 8 2 5 0;
+#X connect 9 0 11 0;
diff --git a/extensions/xgui/doc/07_speak.pd b/extensions/xgui/doc/07_speak.pd
new file mode 100644
index 00000000..bbf87318
--- /dev/null
+++ b/extensions/xgui/doc/07_speak.pd
@@ -0,0 +1,54 @@
+#N canvas 386 128 534 423 10;
+#X floatatom 360 236 3 0 100;
+#X msg 360 259 width \$1;
+#X text 361 320 dh20020212;
+#X text 9 9 Patch "pdx_connect.pd" must be loaded and connected;
+#X obj 360 75 adc~;
+#X obj 360 148 env~;
+#X obj 360 171 - 55;
+#X obj 360 192 * 3;
+#X obj 360 281 alias mouth;
+#X obj 360 214 max 5;
+#X text 371 330 dh20020319;
+#X obj 24 61 loadbang;
+#X text 7 30 Just say "hoooo" into your microphone !!!;
+#X obj 55 297 move;
+#X obj 160 295 move;
+#X msg 232 65 bang;
+#X obj 49 131 canvas */speak;
+#X msg 49 108 show \, size 300 300;
+#X msg 35 154 show \, coord 100 210 200 210;
+#X msg 24 206 show \, coord 110 100 110 100 \, width 20;
+#X msg 84 237 show \, coord 190 100 190 100 \, width 20;
+#X obj 24 83 t b b;
+#X obj 35 181 seg mouth */speak/m;
+#X obj 24 268 seg le */speak/le;
+#X obj 137 269 seg re */speak/re;
+#X msg 234 101 \; pd dsp 1;
+#X obj 357 100 hip~ 500;
+#X obj 357 124 lop~ 1000;
+#X connect 0 0 1 0;
+#X connect 1 0 8 0;
+#X connect 4 0 26 0;
+#X connect 4 1 26 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 9 0;
+#X connect 9 0 0 0;
+#X connect 11 0 21 0;
+#X connect 13 0 23 0;
+#X connect 14 0 24 0;
+#X connect 15 0 21 0;
+#X connect 17 0 16 0;
+#X connect 18 0 22 0;
+#X connect 19 0 23 0;
+#X connect 20 0 24 0;
+#X connect 21 0 18 0;
+#X connect 21 0 19 0;
+#X connect 21 0 20 0;
+#X connect 21 1 17 0;
+#X connect 21 1 25 0;
+#X connect 23 0 13 0;
+#X connect 24 0 14 0;
+#X connect 26 0 27 0;
+#X connect 27 0 5 0;
diff --git a/extensions/xgui/doc/08_more_physics.pd b/extensions/xgui/doc/08_more_physics.pd
new file mode 100644
index 00000000..d771b5c6
--- /dev/null
+++ b/extensions/xgui/doc/08_more_physics.pd
@@ -0,0 +1,89 @@
+#N canvas 40 267 1010 405 12;
+#X text 24 9 help physics;
+#X msg 764 244 show;
+#X msg 814 244 hide;
+#X msg 870 246 size 500 500;
+#X msg 726 300 show;
+#X msg 776 300 hide;
+#X msg 831 300 width 30;
+#X obj 796 163 loadbang;
+#X obj 795 191 t b b b b;
+#X msg 736 327 coord 250 250 250 300;
+#X msg 120 260 on;
+#X obj 71 233 route enter leave move;
+#X msg 70 260 off;
+#X msg 892 191 on;
+#X msg 925 299 width 50;
+#X msg 542 248 on;
+#X obj 493 221 route enter leave move;
+#X msg 492 248 off;
+#X obj 564 29 mass big 10 250 250 0 0;
+#X msg 233 138 xy1 \$1 \$2;
+#X msg 232 168 xy2 \$1 \$2;
+#X msg 837 75 xy1 \$1 \$2;
+#X msg 836 105 xy2 \$1 \$2;
+#X text 880 361 dh20020404;
+#X obj 194 25 damping damp2 0.1;
+#X obj 794 30 damping damp1 1;
+#X obj 512 151 spring spring2 10 0 250 250 250 250;
+#X obj 100 87 mass mass1 1 100 100 0 0;
+#X obj 386 104 spring spring1 100 100 250 250 250 300;
+#X obj 170 56 force force1 0 500;
+#X obj 26 324 seg A */my_canvas/my_mass;
+#X obj 218 356 seg b */my_canvas/my_spring;
+#X obj 459 362 seg c */my_canvas/my_big_mass;
+#X obj 766 273 canvas */my_canvas;
+#X connect 1 0 33 0;
+#X connect 2 0 33 0;
+#X connect 3 0 33 0;
+#X connect 4 0 30 0;
+#X connect 4 0 31 0;
+#X connect 4 0 32 0;
+#X connect 5 0 30 0;
+#X connect 5 0 31 0;
+#X connect 6 0 30 0;
+#X connect 7 0 8 0;
+#X connect 7 0 13 0;
+#X connect 8 0 6 0;
+#X connect 8 0 9 0;
+#X connect 8 0 14 0;
+#X connect 8 1 4 0;
+#X connect 8 2 3 0;
+#X connect 8 3 1 0;
+#X connect 9 0 32 0;
+#X connect 10 0 27 0;
+#X connect 11 0 12 0;
+#X connect 11 1 10 0;
+#X connect 12 0 27 0;
+#X connect 13 0 18 0;
+#X connect 13 0 27 0;
+#X connect 14 0 32 0;
+#X connect 15 0 18 0;
+#X connect 16 0 17 0;
+#X connect 16 1 15 0;
+#X connect 17 0 18 0;
+#X connect 18 1 21 0;
+#X connect 18 1 22 0;
+#X connect 18 1 25 1;
+#X connect 18 1 26 2;
+#X connect 18 1 28 1;
+#X connect 19 0 30 0;
+#X connect 20 0 30 0;
+#X connect 20 0 31 0;
+#X connect 21 0 31 0;
+#X connect 21 0 32 0;
+#X connect 22 0 32 0;
+#X connect 24 1 27 1;
+#X connect 25 1 18 1;
+#X connect 26 2 18 1;
+#X connect 27 1 19 0;
+#X connect 27 1 20 0;
+#X connect 27 1 24 1;
+#X connect 27 1 28 2;
+#X connect 28 1 18 1;
+#X connect 28 2 27 1;
+#X connect 29 1 27 1;
+#X connect 30 0 11 0;
+#X connect 30 0 27 0;
+#X connect 32 0 16 0;
+#X connect 32 0 18 0;
diff --git a/extensions/xgui/doc/09_more_physics2.pd b/extensions/xgui/doc/09_more_physics2.pd
new file mode 100644
index 00000000..2e2539e6
--- /dev/null
+++ b/extensions/xgui/doc/09_more_physics2.pd
@@ -0,0 +1,199 @@
+#N canvas 54 20 729 706 12;
+#X msg 466 13 show;
+#X obj 7 37 loadbang;
+#X obj 33 75 t b b b b;
+#X msg 218 9 on;
+#X msg 220 87 xy1 \$1 \$2;
+#X msg 324 86 xy2 \$1 \$2;
+#X text 52 202 dh20020404;
+#X msg 230 168 xy1 \$1 \$2;
+#X msg 326 168 xy2 \$1 \$2;
+#X msg 221 406 xy1 \$1 \$2;
+#X msg 314 404 xy2 \$1 \$2;
+#X obj 470 91 seg l1 */my_string/l1;
+#X obj 475 168 seg l2 */my_string/l2;
+#X msg 216 490 xy1 \$1 \$2;
+#X msg 317 490 xy2 \$1 \$2;
+#X msg 209 573 xy1 \$1 \$2;
+#X msg 315 572 xy2 \$1 \$2;
+#X obj 482 45 seg m1 */my_string/m1;
+#X msg 219 245 xy1 \$1 \$2;
+#X msg 317 242 xy2 \$1 \$2;
+#X obj 463 254 seg l3 */my_string/l3;
+#X msg 220 320 xy1 \$1 \$2;
+#X msg 321 321 xy2 \$1 \$2;
+#X obj 458 337 seg l4 */my_string/l4;
+#X obj 340 757 seg m2 */my_string/m2;
+#X obj 452 420 seg l5 */my_string/l5;
+#X obj 455 508 seg l6 */my_string/l6;
+#X obj 571 14 light_over;
+#X msg 515 13 raise;
+#X msg 212 653 xy1 \$1 \$2;
+#X msg 318 652 xy2 \$1 \$2;
+#X msg 102 771 xy1 \$1 \$2;
+#X msg 208 770 xy2 \$1 \$2;
+#X obj 458 588 seg l7 */my_string/l7;
+#X obj 450 666 seg l8 */my_string/l8;
+#X msg 506 -9 width 30;
+#X msg 30 662 width 10;
+#X text 60 224 dh20020405;
+#X text 24 9 a nice string...;
+#X obj 102 745 mass m9 50 250 100 0 0;
+#X obj 230 142 mass m2 1 250 240 0 0;
+#X obj 219 219 mass m3 1 250 220 0 0;
+#X obj 220 294 mass m4 1 250 200 0 0;
+#X obj 221 380 mass m5 1 250 180 0 0;
+#X obj 210 465 mass m6 1 250 160 0 0;
+#X obj 209 547 mass m7 1 250 140 0 0;
+#X obj 212 627 mass m8 1 250 120 0 0;
+#X obj 237 36 force f1 0 10000;
+#X obj 164 720 damping d9 3000;
+#X obj 330 779 spring sl 5000 0 250 250 250 100;
+#X obj 450 692 spring s9 1000 20;
+#X obj 458 614 spring s8 1000 20;
+#X obj 455 534 spring s6 1000 20;
+#X obj 452 446 spring s5 1000 20;
+#X obj 458 363 spring s4 1000 20;
+#X obj 463 280 spring s3 1000 20;
+#X obj 461 195 spring s2 1000 20;
+#X obj 470 118 spring s1 1000 20;
+#X obj 282 13 damping d1 10;
+#X obj 291 121 damping d2 10;
+#X obj 281 195 damping d3 10;
+#X obj 285 270 damping d4 10;
+#X obj 282 356 damping d5 10;
+#X obj 285 438 damping d6 10;
+#X obj 271 522 damping d7 10;
+#X obj 274 602 damping d8 10;
+#X obj 220 61 mass m1 10 250 260 0 0;
+#X text 21 -11 This example is running OK on a PIII 800;
+#X msg 51 101 show \, size 500 800;
+#X msg 70 125 color white;
+#X obj 53 156 canvas */my_string;
+#X connect 0 0 12 0;
+#X connect 0 0 17 0;
+#X connect 0 0 11 0;
+#X connect 0 0 24 0;
+#X connect 0 0 20 0;
+#X connect 0 0 23 0;
+#X connect 0 0 25 0;
+#X connect 0 0 26 0;
+#X connect 0 0 33 0;
+#X connect 0 0 34 0;
+#X connect 1 0 2 0;
+#X connect 2 0 35 0;
+#X connect 2 0 28 0;
+#X connect 2 0 36 0;
+#X connect 2 0 3 0;
+#X connect 2 1 0 0;
+#X connect 2 2 69 0;
+#X connect 2 3 68 0;
+#X connect 3 0 39 0;
+#X connect 3 0 40 0;
+#X connect 3 0 41 0;
+#X connect 3 0 42 0;
+#X connect 3 0 43 0;
+#X connect 3 0 44 0;
+#X connect 3 0 45 0;
+#X connect 3 0 46 0;
+#X connect 3 0 66 0;
+#X connect 4 0 11 0;
+#X connect 4 0 17 0;
+#X connect 5 0 17 0;
+#X connect 7 0 12 0;
+#X connect 8 0 11 0;
+#X connect 9 0 25 0;
+#X connect 10 0 23 0;
+#X connect 13 0 26 0;
+#X connect 14 0 25 0;
+#X connect 15 0 33 0;
+#X connect 16 0 26 0;
+#X connect 17 0 27 0;
+#X connect 17 0 66 0;
+#X connect 18 0 20 0;
+#X connect 19 0 12 0;
+#X connect 21 0 23 0;
+#X connect 22 0 20 0;
+#X connect 27 0 17 0;
+#X connect 28 0 17 0;
+#X connect 29 0 34 0;
+#X connect 30 0 33 0;
+#X connect 31 0 24 0;
+#X connect 32 0 34 0;
+#X connect 32 0 24 0;
+#X connect 35 0 17 0;
+#X connect 36 0 24 0;
+#X connect 39 1 31 0;
+#X connect 39 1 32 0;
+#X connect 39 1 48 1;
+#X connect 39 1 49 1;
+#X connect 39 1 50 2;
+#X connect 40 1 7 0;
+#X connect 40 1 8 0;
+#X connect 40 1 56 1;
+#X connect 40 1 57 2;
+#X connect 40 1 59 1;
+#X connect 41 1 18 0;
+#X connect 41 1 19 0;
+#X connect 41 1 55 1;
+#X connect 41 1 56 2;
+#X connect 41 1 60 1;
+#X connect 42 1 21 0;
+#X connect 42 1 22 0;
+#X connect 42 1 54 1;
+#X connect 42 1 55 2;
+#X connect 42 1 61 1;
+#X connect 43 1 9 0;
+#X connect 43 1 10 0;
+#X connect 43 1 53 1;
+#X connect 43 1 54 2;
+#X connect 43 1 62 1;
+#X connect 44 1 13 0;
+#X connect 44 1 14 0;
+#X connect 44 1 52 1;
+#X connect 44 1 53 2;
+#X connect 44 1 63 1;
+#X connect 45 1 15 0;
+#X connect 45 1 16 0;
+#X connect 45 1 51 1;
+#X connect 45 1 52 2;
+#X connect 45 1 64 1;
+#X connect 46 1 29 0;
+#X connect 46 1 30 0;
+#X connect 46 1 50 1;
+#X connect 46 1 51 2;
+#X connect 46 1 65 1;
+#X connect 47 1 66 1;
+#X connect 48 1 39 1;
+#X connect 49 1 39 1;
+#X connect 50 1 46 1;
+#X connect 50 2 39 1;
+#X connect 51 1 45 1;
+#X connect 51 2 46 1;
+#X connect 52 1 44 1;
+#X connect 52 2 45 1;
+#X connect 53 1 43 1;
+#X connect 53 2 44 1;
+#X connect 54 1 42 1;
+#X connect 54 2 43 1;
+#X connect 55 1 41 1;
+#X connect 55 2 42 1;
+#X connect 56 1 40 1;
+#X connect 56 2 41 1;
+#X connect 57 1 66 1;
+#X connect 57 2 40 1;
+#X connect 57 2 40 1;
+#X connect 58 1 66 1;
+#X connect 59 1 40 1;
+#X connect 60 1 41 1;
+#X connect 61 1 42 1;
+#X connect 62 1 43 1;
+#X connect 63 1 44 1;
+#X connect 64 1 45 1;
+#X connect 65 1 46 1;
+#X connect 66 1 4 0;
+#X connect 66 1 5 0;
+#X connect 66 1 57 1;
+#X connect 66 1 58 1;
+#X connect 68 0 70 0;
+#X connect 69 0 70 0;
diff --git a/extensions/xgui/doc/10_sliders.pd b/extensions/xgui/doc/10_sliders.pd
new file mode 100644
index 00000000..9a1c27ce
--- /dev/null
+++ b/extensions/xgui/doc/10_sliders.pd
@@ -0,0 +1,83 @@
+#N canvas 21 168 943 364 10;
+#X floatatom 10 178 5 0 0;
+#X floatatom 10 122 5 0 0;
+#X obj 415 15 loadbang;
+#X msg 807 21 hide;
+#X msg 49 122 show;
+#X msg 85 123 hide;
+#X obj 415 37 t b b b;
+#X text 762 189 dh20020318;
+#X text 17 -2 Patch "pdx_connect.pd" must be loaded and connected;
+#X obj 538 39 canvas */sliders;
+#X msg 469 14 bang;
+#X msg 11 221 show;
+#X msg 47 221 hide;
+#X floatatom 241 179 5 0 0;
+#X floatatom 241 123 5 0 0;
+#X msg 280 123 show;
+#X msg 316 124 hide;
+#X floatatom 467 179 5 0 0;
+#X floatatom 467 123 5 0 0;
+#X msg 506 123 show;
+#X msg 542 124 hide;
+#X floatatom 698 180 5 0 0;
+#X floatatom 698 124 5 0 0;
+#X msg 737 124 show;
+#X msg 773 125 hide;
+#X text 772 199 dh20020723;
+#X msg 93 271 show;
+#X msg 131 274 hide;
+#X msg 419 238 show;
+#X msg 455 238 hide;
+#X msg 501 288 show;
+#X msg 539 291 hide;
+#X obj 241 151 slider2 sl2 */sliders 50 20 127 1270;
+#X obj 467 151 slider2 sl3 */sliders 80 20 127 1270;
+#X obj 698 152 slider2 sl4 */sliders 110 20 127 1270;
+#X obj 11 244 preset p1 */sliders preset1.txt 140 20 70 20;
+#X obj 100 293 preset p2 */sliders preset2.txt 140 50 70 20;
+#X obj 419 261 preset p3 */sliders preset3.txt 140 80 70 20;
+#X obj 508 310 preset p4 */sliders preset4.txt 140 110 70 20;
+#X msg 538 16 show \, size 220 157 \, color lightgrey;
+#X obj 11 150 slider2 sl1 */sliders 20 20 127 1270;
+#X text 17 23 This example show how to create some simples persitant
+preset;
+#X text 14 54 USE CRTL+CLICK TO SAVE A PRESET \; CLICK TO LOAD ONE
+;
+#X connect 1 0 40 0;
+#X connect 2 0 6 0;
+#X connect 3 0 9 0;
+#X connect 4 0 40 0;
+#X connect 5 0 40 0;
+#X connect 6 0 4 0;
+#X connect 6 0 15 0;
+#X connect 6 0 19 0;
+#X connect 6 0 23 0;
+#X connect 6 0 11 0;
+#X connect 6 0 26 0;
+#X connect 6 0 28 0;
+#X connect 6 0 30 0;
+#X connect 6 2 39 0;
+#X connect 10 0 6 0;
+#X connect 11 0 35 0;
+#X connect 12 0 35 0;
+#X connect 14 0 32 0;
+#X connect 15 0 32 0;
+#X connect 16 0 32 0;
+#X connect 18 0 33 0;
+#X connect 19 0 33 0;
+#X connect 20 0 33 0;
+#X connect 22 0 34 0;
+#X connect 23 0 34 0;
+#X connect 24 0 34 0;
+#X connect 26 0 36 0;
+#X connect 27 0 36 0;
+#X connect 28 0 37 0;
+#X connect 29 0 37 0;
+#X connect 30 0 38 0;
+#X connect 31 0 38 0;
+#X connect 32 0 13 0;
+#X connect 33 0 17 0;
+#X connect 34 0 21 0;
+#X connect 39 0 9 0;
+#X connect 40 0 0 0;
diff --git a/extensions/xgui/doc/Kroonde/K_jongle.pd b/extensions/xgui/doc/Kroonde/K_jongle.pd
new file mode 100644
index 00000000..3ac940b1
--- /dev/null
+++ b/extensions/xgui/doc/Kroonde/K_jongle.pd
@@ -0,0 +1,44 @@
+#N canvas 238 31 407 597 16;
+#X floatatom 132 81 4 0 0;
+#X floatatom 185 81 4 0 0;
+#X text 137 567 S01;
+#X text 188 567 S02;
+#X text 260 566 S05;
+#X text 311 566 S06;
+#X floatatom 252 82 4 0 0;
+#X floatatom 305 82 4 0 0;
+#X obj 132 53 r S01;
+#X obj 185 53 r S02;
+#X obj 252 54 r S05;
+#X obj 305 54 r S06;
+#X obj 132 305 vsl 50 256 0 1023 0 0 empty empty empty 20 8 0 8 -260818
+-1 -1 0 1;
+#X obj 185 305 vsl 50 256 0 1023 0 0 empty empty empty 20 8 0 8 -260818
+-1 -1 0 1;
+#X obj 252 305 vsl 50 256 0 1023 0 0 empty empty empty 20 8 0 8 -260818
+-1 -1 15703 1;
+#X obj 305 305 vsl 50 256 0 1023 0 0 empty empty empty 20 8 0 8 -260818
+-1 -1 17297 1;
+#X obj 68 150 calibration;
+#X obj 79 114 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X obj 97 182 calibration;
+#X obj 166 214 calibration;
+#X obj 217 255 calibration;
+#X obj 40 44 K_send;
+#X connect 0 0 16 1;
+#X connect 1 0 18 1;
+#X connect 6 0 19 1;
+#X connect 7 0 20 1;
+#X connect 8 0 0 0;
+#X connect 9 0 1 0;
+#X connect 10 0 6 0;
+#X connect 11 0 7 0;
+#X connect 16 0 12 0;
+#X connect 17 0 16 0;
+#X connect 17 0 18 0;
+#X connect 17 0 19 0;
+#X connect 17 0 20 0;
+#X connect 18 0 13 0;
+#X connect 19 0 14 0;
+#X connect 20 0 15 0;
diff --git a/extensions/xgui/doc/Kroonde/K_konfig.pd b/extensions/xgui/doc/Kroonde/K_konfig.pd
new file mode 100644
index 00000000..525db47a
--- /dev/null
+++ b/extensions/xgui/doc/Kroonde/K_konfig.pd
@@ -0,0 +1,81 @@
+#N canvas 0 0 959 578 12;
+#X msg 242 479 255;
+#X msg 192 479 255;
+#X msg 145 479 255;
+#X msg 97 479 255;
+#X text 167 363 ip destination;
+#X obj 52 409 bng 40 250 50 0 empty empty empty 20 8 0 8 -258699 -143491
+-143491;
+#X obj 52 533 koonfig_ip_dest;
+#X floatatom 224 504 5 0 0;
+#X floatatom 176 504 5 0 0;
+#X floatatom 128 504 5 0 0;
+#X floatatom 80 504 5 0 0;
+#X obj 60 92 kroonde_ip;
+#X floatatom 170 128 5 0 0;
+#X floatatom 118 128 5 0 0;
+#X floatatom 67 128 5 0 0;
+#X floatatom 16 128 5 0 0;
+#X floatatom 169 212 5 0 0;
+#X floatatom 117 212 5 0 0;
+#X floatatom 66 212 5 0 0;
+#X floatatom 15 212 5 0 0;
+#X obj 35 172 kroonde_dest_ip;
+#X msg 97 454 192;
+#X msg 145 454 168;
+#X msg 192 454 254;
+#X msg 242 454 93;
+#X text 21 10 configuration du Kroonde;
+#X text 371 162 Ces objets affichent la configuration du kroonde \,
+lorsque celui-ci s'initialise.;
+#X text 307 10 Il est necessaire de relier le Kroonde a l'ordinateur
+en midi (in et out) pour configurer le Kroonde.;
+#X text 291 127 <- addresse IP du Kroonde;
+#X text 288 211 <- addresse IP du destinataire des message du kroonde
+;
+#X text 317 245 (255.255.255.255 correspond a un envoie a toutes les
+machines connectees);
+#X obj 508 409 bng 40 250 50 0 empty empty empty 20 8 0 8 -258699 -143491
+-143491;
+#X floatatom 676 504 5 0 0;
+#X floatatom 628 504 5 0 0;
+#X floatatom 580 504 5 0 0;
+#X floatatom 532 504 5 0 0;
+#X msg 532 479 192;
+#X msg 580 479 168;
+#X msg 628 479 254;
+#X msg 676 479 92;
+#X text 650 363 ip Kroonde;
+#X obj 508 533 koonfig_my_ip;
+#X text 105 419 <- bang pour envoyer la nouvelle addresse;
+#X text 563 419 <- bang pour envoyer la nouvelle addresse;
+#X connect 0 0 7 0;
+#X connect 1 0 8 0;
+#X connect 2 0 9 0;
+#X connect 3 0 10 0;
+#X connect 5 0 6 0;
+#X connect 7 0 6 4;
+#X connect 8 0 6 3;
+#X connect 9 0 6 2;
+#X connect 10 0 6 1;
+#X connect 11 0 15 0;
+#X connect 11 1 14 0;
+#X connect 11 2 13 0;
+#X connect 11 3 12 0;
+#X connect 20 0 19 0;
+#X connect 20 1 18 0;
+#X connect 20 2 17 0;
+#X connect 20 3 16 0;
+#X connect 21 0 10 0;
+#X connect 22 0 9 0;
+#X connect 23 0 8 0;
+#X connect 24 0 7 0;
+#X connect 31 0 41 0;
+#X connect 32 0 41 4;
+#X connect 33 0 41 3;
+#X connect 34 0 41 2;
+#X connect 35 0 41 1;
+#X connect 36 0 35 0;
+#X connect 37 0 34 0;
+#X connect 38 0 33 0;
+#X connect 39 0 32 0;
diff --git a/extensions/xgui/doc/Kroonde/K_panel.pd b/extensions/xgui/doc/Kroonde/K_panel.pd
new file mode 100644
index 00000000..096467dc
--- /dev/null
+++ b/extensions/xgui/doc/Kroonde/K_panel.pd
@@ -0,0 +1,81 @@
+#N canvas 13 121 882 333 16;
+#X obj 443 18 vsl 50 256 0 1023 0 0 empty S09 empty 20 8 64 8 -260818
+-1 -1 0 1;
+#X obj 496 18 vsl 50 256 0 1023 0 0 empty S10 empty 20 8 64 8 -260818
+-1 -1 0 1;
+#X obj 549 18 vsl 50 256 0 1023 0 0 empty S11 empty 20 8 64 8 -260818
+-1 -1 0 1;
+#X obj 602 18 vsl 50 256 0 1023 0 0 empty S12 empty 20 8 64 8 -260818
+-1 -1 0 1;
+#X obj 655 18 vsl 50 256 0 1023 0 0 empty S13 empty 20 8 64 8 -260818
+-1 -1 0 1;
+#X obj 708 18 vsl 50 256 0 1023 0 0 empty S14 empty 20 8 64 8 -260818
+-1 -1 0 1;
+#X obj 761 18 vsl 50 256 0 1023 0 0 empty S15 empty 20 8 64 8 -260818
+-1 -1 0 1;
+#X obj 814 18 vsl 50 256 0 1023 0 0 empty S16 empty 20 8 64 8 -260818
+-1 -1 0 1;
+#X text 504 299 S10;
+#X text 27 301 S01;
+#X text 78 301 S02;
+#X text 132 300 S03;
+#X text 190 300 S04;
+#X text 242 299 S05;
+#X text 293 299 S06;
+#X text 347 298 S07;
+#X text 398 298 S08;
+#X text 450 298 S09;
+#X text 556 299 S11;
+#X text 611 300 S12;
+#X text 662 300 S13;
+#X text 719 300 S14;
+#X text 769 299 S15;
+#X text 820 300 S16;
+#X obj 19 18 vsl 50 256 0 1023 0 0 empty S01 empty 20 8 64 8 -260818
+-1 -1 0 1;
+#X obj 72 18 vsl 50 256 0 1023 0 0 empty S02 empty 20 8 64 8 -260818
+-1 -1 0 1;
+#X obj 125 18 vsl 50 256 0 1023 0 0 empty S03 empty 20 8 64 8 -260818
+-1 -1 0 1;
+#X obj 178 18 vsl 50 256 0 1023 0 0 empty S04 empty 20 8 64 8 -260818
+-1 -1 0 1;
+#X obj 231 18 vsl 50 256 0 1023 0 0 empty S05 empty 20 8 64 8 -260818
+-1 -1 0 1;
+#X obj 284 18 vsl 50 256 0 1023 0 0 empty S06 empty 20 8 64 8 -260818
+-1 -1 0 1;
+#X obj 337 18 vsl 50 256 0 1023 0 0 empty S07 empty 20 8 64 8 -260818
+-1 -1 0 1;
+#X obj 390 18 vsl 50 256 0 1023 0 0 empty S08 empty 20 8 64 8 -260818
+-1 -1 0 1;
+#X obj 20 282 nbx 4 14 -1e+037 1e+037 0 0 empty S01 empty 0 -6 64 10
+-262144 -1 -1 1094 256;
+#X obj 73 282 nbx 4 14 -1e+037 1e+037 0 0 empty S02 empty 0 -6 64 10
+-262144 -1 -1 0 256;
+#X obj 127 282 nbx 4 14 -1e+037 1e+037 0 0 empty S03 empty 0 -6 64
+10 -262144 -1 -1 0 256;
+#X obj 180 282 nbx 4 14 -1e+037 1e+037 0 0 empty S04 empty 0 -6 64
+10 -262144 -1 -1 0 256;
+#X obj 232 282 nbx 4 14 -1e+037 1e+037 0 0 empty S05 empty 0 -6 64
+10 -262144 -1 -1 0 256;
+#X obj 285 282 nbx 4 14 -1e+037 1e+037 0 0 empty S06 empty 0 -6 64
+10 -262144 -1 -1 0 256;
+#X obj 339 282 nbx 4 14 -1e+037 1e+037 0 0 empty S07 empty 0 -6 64
+10 -262144 -1 -1 0 256;
+#X obj 392 282 nbx 4 14 -1e+037 1e+037 0 0 empty S08 empty 0 -6 64
+10 -262144 -1 -1 0 256;
+#X obj 444 282 nbx 4 14 -1e+037 1e+037 0 0 empty S09 empty 0 -6 64
+10 -262144 -1 -1 0 256;
+#X obj 497 282 nbx 4 14 -1e+037 1e+037 0 0 empty S10 empty 0 -6 64
+10 -262144 -1 -1 0 256;
+#X obj 551 282 nbx 4 14 -1e+037 1e+037 0 0 empty S11 empty 0 -6 64
+10 -262144 -1 -1 0 256;
+#X obj 604 282 nbx 4 14 -1e+037 1e+037 0 0 empty S12 empty 0 -6 64
+10 -262144 -1 -1 0 256;
+#X obj 656 282 nbx 4 14 -1e+037 1e+037 0 0 empty S13 empty 0 -6 64
+10 -262144 -1 -1 0 256;
+#X obj 709 282 nbx 4 14 -1e+037 1e+037 0 0 empty S14 empty 0 -6 64
+10 -262144 -1 -1 0 256;
+#X obj 763 282 nbx 4 14 -1e+037 1e+037 0 0 empty S15 empty 0 -6 64
+10 -262144 -1 -1 0 256;
+#X obj 816 282 nbx 4 14 -1e+037 1e+037 0 0 empty S16 empty 0 -6 64
+10 -262144 -1 -1 0 256;
diff --git a/extensions/xgui/doc/Kroonde/K_send.pd b/extensions/xgui/doc/Kroonde/K_send.pd
new file mode 100644
index 00000000..3758034e
--- /dev/null
+++ b/extensions/xgui/doc/Kroonde/K_send.pd
@@ -0,0 +1,70 @@
+#N canvas 95 31 427 337 12;
+#X obj 15 44 route Kroonde;
+#X obj 15 15 netreceive 5678 1;
+#X obj 15 73 unpack 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
+#X obj 15 130 send S01;
+#X obj 34 186 send S02;
+#X obj 54 242 send S03;
+#X obj 73 297 send S04;
+#X obj 94 130 send S05;
+#X obj 112 187 send S06;
+#X obj 134 241 send S07;
+#X obj 156 298 send S08;
+#X obj 15 102 change;
+#X obj 34 160 change;
+#X obj 54 216 change;
+#X obj 73 271 change;
+#X obj 94 102 change;
+#X obj 112 159 change;
+#X obj 134 215 change;
+#X obj 156 272 change;
+#X obj 174 130 send S01;
+#X obj 194 184 send S02;
+#X obj 214 240 send S03;
+#X obj 233 295 send S04;
+#X obj 254 128 send S05;
+#X obj 275 185 send S06;
+#X obj 294 239 send S07;
+#X obj 316 296 send S08;
+#X obj 174 102 change;
+#X obj 194 158 change;
+#X obj 214 214 change;
+#X obj 233 269 change;
+#X obj 254 100 change;
+#X obj 275 157 change;
+#X obj 294 213 change;
+#X obj 316 270 change;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 2 0 11 0;
+#X connect 2 1 12 0;
+#X connect 2 2 13 0;
+#X connect 2 3 14 0;
+#X connect 2 4 15 0;
+#X connect 2 5 16 0;
+#X connect 2 6 17 0;
+#X connect 2 7 18 0;
+#X connect 2 8 27 0;
+#X connect 2 9 28 0;
+#X connect 2 10 29 0;
+#X connect 2 11 30 0;
+#X connect 2 12 31 0;
+#X connect 2 13 32 0;
+#X connect 2 14 33 0;
+#X connect 2 15 34 0;
+#X connect 11 0 3 0;
+#X connect 12 0 4 0;
+#X connect 13 0 5 0;
+#X connect 14 0 6 0;
+#X connect 15 0 7 0;
+#X connect 16 0 8 0;
+#X connect 17 0 9 0;
+#X connect 18 0 10 0;
+#X connect 27 0 19 0;
+#X connect 28 0 20 0;
+#X connect 29 0 21 0;
+#X connect 30 0 22 0;
+#X connect 31 0 23 0;
+#X connect 32 0 24 0;
+#X connect 33 0 25 0;
+#X connect 34 0 26 0;
diff --git a/extensions/xgui/doc/Kroonde/Koonfig_ip_dest.pd b/extensions/xgui/doc/Kroonde/Koonfig_ip_dest.pd
new file mode 100644
index 00000000..c37480a0
--- /dev/null
+++ b/extensions/xgui/doc/Kroonde/Koonfig_ip_dest.pd
@@ -0,0 +1,72 @@
+#N canvas 0 0 621 596 12;
+#X obj 200 65 inlet;
+#X obj 251 65 inlet;
+#X obj 302 65 inlet;
+#X obj 360 65 inlet;
+#X floatatom 302 93 5 0 0;
+#X floatatom 251 93 5 0 0;
+#X floatatom 200 93 5 0 0;
+#X obj 200 121 >> 4;
+#X obj 200 177 % 16;
+#X obj 251 121 >> 4;
+#X obj 251 177 % 16;
+#X obj 302 121 >> 4;
+#X obj 302 177 % 16;
+#X obj 22 93 t b b b b b b b b;
+#X obj 405 260 ctlout 50 10;
+#X obj 405 288 ctlout 51 10;
+#X obj 405 316 ctlout 52 10;
+#X obj 405 344 ctlout 53 10;
+#X obj 405 372 ctlout 54 10;
+#X obj 405 400 ctlout 55 10;
+#X obj 405 428 ctlout 56 10;
+#X obj 405 456 ctlout 57 10;
+#X obj 200 149 f;
+#X obj 200 205 f;
+#X obj 251 149 f;
+#X obj 251 205 f;
+#X obj 302 149 f;
+#X obj 302 205 f;
+#X floatatom 360 93 5 0 0;
+#X obj 360 121 >> 4;
+#X obj 360 177 % 16;
+#X obj 360 149 f;
+#X obj 360 205 f;
+#X obj 22 65 inlet;
+#X connect 0 0 6 0;
+#X connect 1 0 5 0;
+#X connect 2 0 4 0;
+#X connect 3 0 28 0;
+#X connect 4 0 11 0;
+#X connect 4 0 12 0;
+#X connect 5 0 9 0;
+#X connect 5 0 10 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 22 1;
+#X connect 8 0 23 1;
+#X connect 9 0 24 1;
+#X connect 10 0 25 1;
+#X connect 11 0 26 1;
+#X connect 12 0 27 1;
+#X connect 13 0 22 0;
+#X connect 13 1 23 0;
+#X connect 13 2 24 0;
+#X connect 13 3 25 0;
+#X connect 13 4 26 0;
+#X connect 13 5 27 0;
+#X connect 13 6 31 0;
+#X connect 13 7 32 0;
+#X connect 22 0 21 0;
+#X connect 23 0 20 0;
+#X connect 24 0 19 0;
+#X connect 25 0 18 0;
+#X connect 26 0 17 0;
+#X connect 27 0 16 0;
+#X connect 28 0 29 0;
+#X connect 28 0 30 0;
+#X connect 29 0 31 1;
+#X connect 30 0 32 1;
+#X connect 31 0 15 0;
+#X connect 32 0 14 0;
+#X connect 33 0 13 0;
diff --git a/extensions/xgui/doc/Kroonde/Koonfig_my_ip.pd b/extensions/xgui/doc/Kroonde/Koonfig_my_ip.pd
new file mode 100644
index 00000000..20108fbd
--- /dev/null
+++ b/extensions/xgui/doc/Kroonde/Koonfig_my_ip.pd
@@ -0,0 +1,72 @@
+#N canvas 0 0 571 536 12;
+#X obj 200 65 inlet;
+#X obj 251 65 inlet;
+#X obj 302 65 inlet;
+#X obj 360 65 inlet;
+#X floatatom 302 93 5 0 0;
+#X floatatom 251 93 5 0 0;
+#X floatatom 200 93 5 0 0;
+#X obj 200 121 >> 4;
+#X obj 200 177 % 16;
+#X obj 251 121 >> 4;
+#X obj 251 177 % 16;
+#X obj 302 121 >> 4;
+#X obj 302 177 % 16;
+#X obj 22 93 t b b b b b b b b;
+#X obj 200 149 f;
+#X obj 200 205 f;
+#X obj 251 149 f;
+#X obj 251 205 f;
+#X obj 302 149 f;
+#X obj 302 205 f;
+#X floatatom 360 93 5 0 0;
+#X obj 360 121 >> 4;
+#X obj 360 177 % 16;
+#X obj 360 149 f;
+#X obj 360 205 f;
+#X obj 22 65 inlet;
+#X obj 405 260 ctlout 60 10;
+#X obj 405 288 ctlout 61 10;
+#X obj 405 316 ctlout 62 10;
+#X obj 405 344 ctlout 63 10;
+#X obj 405 372 ctlout 64 10;
+#X obj 405 400 ctlout 65 10;
+#X obj 405 428 ctlout 66 10;
+#X obj 405 456 ctlout 67 10;
+#X connect 0 0 6 0;
+#X connect 1 0 5 0;
+#X connect 2 0 4 0;
+#X connect 3 0 20 0;
+#X connect 4 0 11 0;
+#X connect 4 0 12 0;
+#X connect 5 0 9 0;
+#X connect 5 0 10 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 14 1;
+#X connect 8 0 15 1;
+#X connect 9 0 16 1;
+#X connect 10 0 17 1;
+#X connect 11 0 18 1;
+#X connect 12 0 19 1;
+#X connect 13 0 14 0;
+#X connect 13 1 15 0;
+#X connect 13 2 16 0;
+#X connect 13 3 17 0;
+#X connect 13 4 18 0;
+#X connect 13 5 19 0;
+#X connect 13 6 23 0;
+#X connect 13 7 24 0;
+#X connect 14 0 33 0;
+#X connect 15 0 32 0;
+#X connect 16 0 31 0;
+#X connect 17 0 30 0;
+#X connect 18 0 29 0;
+#X connect 19 0 28 0;
+#X connect 20 0 21 0;
+#X connect 20 0 22 0;
+#X connect 21 0 23 1;
+#X connect 22 0 24 1;
+#X connect 23 0 27 0;
+#X connect 24 0 26 0;
+#X connect 25 0 13 0;
diff --git a/extensions/xgui/doc/Kroonde/Kroonde.pd b/extensions/xgui/doc/Kroonde/Kroonde.pd
new file mode 100644
index 00000000..88513d8d
--- /dev/null
+++ b/extensions/xgui/doc/Kroonde/Kroonde.pd
@@ -0,0 +1,8 @@
+#N canvas 24 49 665 135 12;
+#X obj 11 11 K_send;
+#X obj 11 41 K_panel;
+#X text 94 10 <- reception des informations udp;
+#X text 94 37 <- panneau de control des informations venant du kroonde
+;
+#X obj 11 71 K_konfig;
+#X text 95 70 <- configuration de l'addresse IP du kroonde;
diff --git a/extensions/xgui/doc/Kroonde/calibration.pd b/extensions/xgui/doc/Kroonde/calibration.pd
new file mode 100644
index 00000000..a6b0cdf4
--- /dev/null
+++ b/extensions/xgui/doc/Kroonde/calibration.pd
@@ -0,0 +1,47 @@
+#N canvas 372 103 208 379 12;
+#X obj 16 15 inlet;
+#X obj 106 16 inlet;
+#X obj 105 78 gate;
+#X msg 16 77 0;
+#X msg 50 77 1023;
+#X obj 143 153 f;
+#X obj 54 154 f;
+#X obj 106 153 min;
+#X obj 16 153 max;
+#X obj 80 349 outlet;
+#X obj 16 44 select 1;
+#X obj 106 112 t f f;
+#X obj 16 114 t f f;
+#X obj 80 259 range;
+#X msg 106 226 0;
+#X msg 141 226 1023;
+#X obj 106 196 loadbang;
+#X obj 80 287 min 1023;
+#X obj 80 317 max 0;
+#X connect 0 0 2 1;
+#X connect 0 0 10 0;
+#X connect 1 0 2 0;
+#X connect 1 0 13 0;
+#X connect 2 0 7 0;
+#X connect 2 0 8 0;
+#X connect 3 0 12 0;
+#X connect 4 0 11 0;
+#X connect 5 0 7 1;
+#X connect 6 0 8 1;
+#X connect 7 0 5 0;
+#X connect 7 0 13 1;
+#X connect 8 0 6 0;
+#X connect 8 0 13 2;
+#X connect 10 0 3 0;
+#X connect 10 0 4 0;
+#X connect 11 0 7 0;
+#X connect 11 1 7 1;
+#X connect 12 0 8 0;
+#X connect 12 1 8 1;
+#X connect 13 0 17 0;
+#X connect 14 0 13 3;
+#X connect 15 0 13 4;
+#X connect 16 0 14 0;
+#X connect 16 0 15 0;
+#X connect 17 0 18 0;
+#X connect 18 0 9 0;
diff --git a/extensions/xgui/doc/Kroonde/inv1024.pd b/extensions/xgui/doc/Kroonde/inv1024.pd
new file mode 100644
index 00000000..716f3060
--- /dev/null
+++ b/extensions/xgui/doc/Kroonde/inv1024.pd
@@ -0,0 +1,8 @@
+#N canvas 0 0 144 174 12;
+#X obj 46 20 inlet;
+#X obj 46 51 * -1;
+#X obj 46 81 + 1024;
+#X obj 46 111 outlet;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
diff --git a/extensions/xgui/doc/Kroonde/kroonde_dest_ip.pd b/extensions/xgui/doc/Kroonde/kroonde_dest_ip.pd
new file mode 100644
index 00000000..2f5dde54
--- /dev/null
+++ b/extensions/xgui/doc/Kroonde/kroonde_dest_ip.pd
@@ -0,0 +1,49 @@
+#N canvas 334 70 578 383 12;
+#X obj 404 197 outlet;
+#X obj 283 197 outlet;
+#X obj 170 197 outlet;
+#X obj 49 197 outlet;
+#X obj 404 169 +;
+#X obj 422 110 << 4;
+#X obj 422 138 t b f;
+#X obj 283 169 +;
+#X obj 302 138 t b f;
+#X obj 170 169 +;
+#X obj 189 138 t b f;
+#X obj 49 169 +;
+#X obj 68 138 t b f;
+#X obj 68 110 << 4;
+#X obj 189 110 << 4;
+#X obj 302 110 << 4;
+#X obj 49 55 ctlin 56 11;
+#X obj 68 82 ctlin 57 11;
+#X obj 170 55 ctlin 54 11;
+#X obj 189 82 ctlin 55 11;
+#X obj 283 55 ctlin 52 11;
+#X obj 302 82 ctlin 53 11;
+#X obj 404 55 ctlin 50 11;
+#X obj 422 82 ctlin 51 11;
+#X connect 4 0 0 0;
+#X connect 5 0 6 0;
+#X connect 6 0 4 0;
+#X connect 6 1 4 1;
+#X connect 7 0 1 0;
+#X connect 8 0 7 0;
+#X connect 8 1 7 1;
+#X connect 9 0 2 0;
+#X connect 10 0 9 0;
+#X connect 10 1 9 1;
+#X connect 11 0 3 0;
+#X connect 12 0 11 0;
+#X connect 12 1 11 1;
+#X connect 13 0 12 0;
+#X connect 14 0 10 0;
+#X connect 15 0 8 0;
+#X connect 16 0 11 0;
+#X connect 17 0 13 0;
+#X connect 18 0 9 0;
+#X connect 19 0 14 0;
+#X connect 20 0 7 0;
+#X connect 21 0 15 0;
+#X connect 22 0 4 0;
+#X connect 23 0 5 0;
diff --git a/extensions/xgui/doc/Kroonde/kroonde_ip.pd b/extensions/xgui/doc/Kroonde/kroonde_ip.pd
new file mode 100644
index 00000000..7a7e9add
--- /dev/null
+++ b/extensions/xgui/doc/Kroonde/kroonde_ip.pd
@@ -0,0 +1,49 @@
+#N canvas 0 0 582 387 12;
+#X obj 404 197 outlet;
+#X obj 283 197 outlet;
+#X obj 170 197 outlet;
+#X obj 49 197 outlet;
+#X obj 404 169 +;
+#X obj 422 108 << 4;
+#X obj 422 136 t b f;
+#X obj 283 169 +;
+#X obj 303 136 t b f;
+#X obj 170 169 +;
+#X obj 189 136 t b f;
+#X obj 49 169 +;
+#X obj 67 136 t b f;
+#X obj 67 108 << 4;
+#X obj 189 108 << 4;
+#X obj 303 108 << 4;
+#X obj 48 55 ctlin 66 11;
+#X obj 67 80 ctlin 67 11;
+#X obj 172 55 ctlin 64 11;
+#X obj 189 80 ctlin 65 11;
+#X obj 284 55 ctlin 62 11;
+#X obj 303 80 ctlin 63 11;
+#X obj 405 55 ctlin 60 11;
+#X obj 422 80 ctlin 61 11;
+#X connect 4 0 0 0;
+#X connect 5 0 6 0;
+#X connect 6 0 4 0;
+#X connect 6 1 4 1;
+#X connect 7 0 1 0;
+#X connect 8 0 7 0;
+#X connect 8 1 7 1;
+#X connect 9 0 2 0;
+#X connect 10 0 9 0;
+#X connect 10 1 9 1;
+#X connect 11 0 3 0;
+#X connect 12 0 11 0;
+#X connect 12 1 11 1;
+#X connect 13 0 12 0;
+#X connect 14 0 10 0;
+#X connect 15 0 8 0;
+#X connect 16 0 11 0;
+#X connect 17 0 13 0;
+#X connect 18 0 9 0;
+#X connect 19 0 14 0;
+#X connect 20 0 7 0;
+#X connect 21 0 15 0;
+#X connect 22 0 4 0;
+#X connect 23 0 5 0;
diff --git a/extensions/xgui/doc/Kroonde/range.pd b/extensions/xgui/doc/Kroonde/range.pd
new file mode 100644
index 00000000..822e3141
--- /dev/null
+++ b/extensions/xgui/doc/Kroonde/range.pd
@@ -0,0 +1,43 @@
+#N canvas 0 0 281 385 12;
+#X obj 16 45 inlet;
+#X obj 63 45 inlet;
+#X obj 109 45 inlet;
+#X obj 154 45 inlet;
+#X obj 200 45 inlet;
+#X obj 125 112 -;
+#X obj 109 76 t b f;
+#X obj 154 113 -;
+#X obj 16 168 -;
+#X obj 16 76 t b f;
+#X obj 125 218 /;
+#X obj 125 170 t b f;
+#X obj 154 264 *;
+#X obj 186 306 +;
+#X obj 154 77 t b f f;
+#X obj 154 143 t b f;
+#X obj 186 337 outlet;
+#X obj 63 76 t f f;
+#X connect 0 0 9 0;
+#X connect 1 0 17 0;
+#X connect 2 0 6 0;
+#X connect 3 0 14 0;
+#X connect 4 0 7 0;
+#X connect 5 0 11 0;
+#X connect 6 0 5 0;
+#X connect 6 1 5 1;
+#X connect 7 0 15 0;
+#X connect 8 0 10 0;
+#X connect 9 0 8 0;
+#X connect 9 1 8 1;
+#X connect 10 0 12 0;
+#X connect 11 0 10 0;
+#X connect 11 1 10 1;
+#X connect 12 0 13 0;
+#X connect 13 0 16 0;
+#X connect 14 0 7 0;
+#X connect 14 1 7 1;
+#X connect 14 2 13 1;
+#X connect 15 0 12 0;
+#X connect 15 1 12 1;
+#X connect 17 0 8 0;
+#X connect 17 1 5 0;
diff --git a/extensions/xgui/doc/Kroonde/stom.pd b/extensions/xgui/doc/Kroonde/stom.pd
new file mode 100644
index 00000000..ef33f397
--- /dev/null
+++ b/extensions/xgui/doc/Kroonde/stom.pd
@@ -0,0 +1,6 @@
+#N canvas 0 0 96 133 12;
+#X obj 19 17 inlet;
+#X obj 19 45 >> 3;
+#X obj 19 74 outlet;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
diff --git a/extensions/xgui/doc/Kroonde/tst.pd b/extensions/xgui/doc/Kroonde/tst.pd
new file mode 100644
index 00000000..91e4bb0b
--- /dev/null
+++ b/extensions/xgui/doc/Kroonde/tst.pd
@@ -0,0 +1,18 @@
+#N canvas 0 0 452 302 12;
+#X obj 155 143 calibration;
+#X obj 109 75 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
+;
+#X floatatom 258 44 5 0 0;
+#X obj 265 98 change;
+#X floatatom 151 191 5 0 0;
+#X msg 330 2 2;
+#X obj 223 196 bang;
+#X obj 224 226 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X connect 0 0 4 0;
+#X connect 0 0 6 0;
+#X connect 1 0 0 0;
+#X connect 2 0 3 0;
+#X connect 3 0 0 1;
+#X connect 5 0 3 0;
+#X connect 6 0 7 0;
diff --git a/extensions/xgui/doc/direct_test.pd b/extensions/xgui/doc/direct_test.pd
new file mode 100644
index 00000000..d5124e51
--- /dev/null
+++ b/extensions/xgui/doc/direct_test.pd
@@ -0,0 +1,18 @@
+#N canvas 410 111 454 304 12;
+#X obj 9 205 netsend;
+#X msg 9 7 connect localhost 4877;
+#X floatatom 8 235 5 0 0;
+#X msg 9 34 disconnect;
+#X msg 110 35 send pd/ ~/ add_canvas my_canvas;
+#X msg 110 62 send pd/ ~/my_canvas add_seg my_seg;
+#X msg 110 90 send pd/ ~/my_canvas/my_seg move 2 2;
+#X msg 132 145 send pd/ ~/my_canvas/my_seg width \$1;
+#X floatatom 132 119 5 0 0;
+#X connect 0 0 2 0;
+#X connect 1 0 0 0;
+#X connect 3 0 0 0;
+#X connect 4 0 0 0;
+#X connect 5 0 0 0;
+#X connect 6 0 0 0;
+#X connect 7 0 0 0;
+#X connect 8 0 7 0;
diff --git a/extensions/xgui/doc/help-send2.pd b/extensions/xgui/doc/help-send2.pd
new file mode 100644
index 00000000..c7d11764
--- /dev/null
+++ b/extensions/xgui/doc/help-send2.pd
@@ -0,0 +1,18 @@
+#N canvas 416 250 458 308 12;
+#X obj 216 222 receive bla;
+#X obj 321 222 receive foo;
+#X obj 216 250 print bla;
+#X obj 321 250 print foo;
+#X msg 32 104 bla 17.3 23;
+#X msg 76 183 foo 13 \, bla 4;
+#X text 148 75 use message: <name> <data>;
+#X text 253 91 with data of any type;
+#X text 89 26 written by Olaf Matthes <olaf.matthes@gmx.de>;
+#X msg 61 147 foo five is 2 more than 3;
+#X text 9 9 send2 :: send data to any receive object;
+#X obj 32 224 send2;
+#X connect 0 0 2 0;
+#X connect 1 0 3 0;
+#X connect 4 0 11 0;
+#X connect 5 0 11 0;
+#X connect 9 0 11 0;
diff --git a/extensions/xgui/doc/help_atom.pd b/extensions/xgui/doc/help_atom.pd
new file mode 100644
index 00000000..06632186
--- /dev/null
+++ b/extensions/xgui/doc/help_atom.pd
@@ -0,0 +1,11 @@
+#N canvas 356 218 450 300 10;
+#X msg 34 29 move 2 3;
+#X obj 42 132 print;
+#X msg 53 53 ?coord;
+#X text 325 257 dh20020401;
+#X msg 15 8 !coord 10 10;
+#X obj 42 107 atom my_first_atom 10 10;
+#X connect 0 0 5 0;
+#X connect 2 0 5 0;
+#X connect 4 0 5 0;
+#X connect 5 0 1 0;
diff --git a/extensions/xgui/doc/help_convert.pd b/extensions/xgui/doc/help_convert.pd
new file mode 100644
index 00000000..efee35c4
--- /dev/null
+++ b/extensions/xgui/doc/help_convert.pd
@@ -0,0 +1,8 @@
+#N canvas 494 512 450 300 12;
+#X obj 78 114 convert truc bidule;
+#X text 16 12 help_convert;
+#X obj 78 142 print;
+#X msg 78 87 truc 1 2 3;
+#X text 322 256 dh20020401;
+#X connect 0 0 2 0;
+#X connect 3 0 0 0;
diff --git a/extensions/xgui/doc/help_damping.pd b/extensions/xgui/doc/help_damping.pd
new file mode 100644
index 00000000..2cd0dc3c
--- /dev/null
+++ b/extensions/xgui/doc/help_damping.pd
@@ -0,0 +1,15 @@
+#N canvas 333 240 450 300 10;
+#X text 19 11 help damping;
+#X msg 62 64 !c 10;
+#X msg 62 86 !c 1;
+#X obj 49 132 damping my_first_damping 10;
+#X obj 45 164 print;
+#X msg 109 90 ?c;
+#X msg 156 78 ?force;
+#X msg 239 60 mass 0 0 10 10;
+#X connect 1 0 3 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 3 0;
+#X connect 6 0 3 0;
+#X connect 7 0 3 1;
diff --git a/extensions/xgui/doc/help_mass.pd b/extensions/xgui/doc/help_mass.pd
new file mode 100644
index 00000000..9196b5f6
--- /dev/null
+++ b/extensions/xgui/doc/help_mass.pd
@@ -0,0 +1,14 @@
+#N canvas 356 487 450 300 10;
+#X obj 90 138 mass 1 10 10 7;
+#X msg 39 42 !mass 2;
+#X msg 58 64 ?mass;
+#X obj 90 163 print;
+#X msg 119 39 !coord 10 10;
+#X msg 124 61 ?coord;
+#X msg 128 86 move 1 1;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 0 0;
+#X connect 4 0 0 0;
+#X connect 5 0 0 0;
+#X connect 6 0 0 0;
diff --git a/extensions/xgui/doc/help_object_arc.pd b/extensions/xgui/doc/help_object_arc.pd
new file mode 100644
index 00000000..d8ebbe34
--- /dev/null
+++ b/extensions/xgui/doc/help_object_arc.pd
@@ -0,0 +1,75 @@
+#N canvas 361 147 573 502 10;
+#X msg 130 65 hide;
+#X msg 19 200 hide;
+#X obj 9 29 t b b b;
+#X obj 9 7 loadbang;
+#X msg 10 65 show \, size 150 150;
+#X text 426 344 dh20020426;
+#X floatatom 370 146 5 0 0;
+#X floatatom 424 146 5 0 0;
+#X obj 9 429 print from_arc;
+#X msg 213 143 start \$1;
+#X floatatom 200 99 5 0 0;
+#X msg 156 145 angle \$1;
+#X msg 200 54 add 1 \, bang;
+#X msg 200 9 bang;
+#X obj 200 31 metro 10;
+#X obj 212 121 * 2;
+#X msg 193 277 style arc;
+#X msg 193 298 style chord;
+#X msg 92 222 border green;
+#X msg 193 319 style pieslice;
+#X floatatom 90 246 5 0 0;
+#X msg 87 271 width \$1;
+#X obj 200 76 number \$0-c1 0;
+#X obj 10 87 canvas */c3;
+#X msg 343 26 do */c3 add_arc a1;
+#X obj 343 345 s to_node;
+#X obj 9 406 arc a1 */c3/a1;
+#X msg 9 174 show \, color black \, coord 20 20 130 130;
+#X msg 343 70 do */c3/a1 coord 20 20 30 30;
+#X msg 343 48 do */c3/a1 move 1 1;
+#X msg 343 92 do */c3/a1 color blue;
+#X msg 343 116 do */c3/a1 border red;
+#X msg 343 170 do */c3/a1 start \$1;
+#X msg 343 194 do */c3/a1 angle \$1;
+#X msg 343 220 do */c3/a1 style arc;
+#X msg 343 244 do */c3/a1 style chord;
+#X msg 343 267 do */c3/a1 c3 a1 style pieslice;
+#X msg 343 312 do */c3 del a1;
+#X connect 0 0 23 0;
+#X connect 1 0 26 0;
+#X connect 2 0 27 0;
+#X connect 2 2 4 0;
+#X connect 3 0 2 0;
+#X connect 4 0 23 0;
+#X connect 6 0 32 0;
+#X connect 7 0 33 0;
+#X connect 9 0 26 0;
+#X connect 10 0 11 0;
+#X connect 10 0 15 0;
+#X connect 11 0 26 0;
+#X connect 12 0 22 0;
+#X connect 13 0 14 0;
+#X connect 14 0 12 0;
+#X connect 15 0 9 0;
+#X connect 16 0 26 0;
+#X connect 17 0 26 0;
+#X connect 18 0 26 0;
+#X connect 19 0 26 0;
+#X connect 20 0 21 0;
+#X connect 21 0 26 0;
+#X connect 22 0 10 0;
+#X connect 24 0 25 0;
+#X connect 26 0 8 0;
+#X connect 27 0 26 0;
+#X connect 28 0 25 0;
+#X connect 29 0 25 0;
+#X connect 30 0 25 0;
+#X connect 31 0 25 0;
+#X connect 32 0 25 0;
+#X connect 33 0 25 0;
+#X connect 34 0 25 0;
+#X connect 35 0 25 0;
+#X connect 36 0 25 0;
+#X connect 37 0 25 0;
diff --git a/extensions/xgui/doc/help_object_rect.pd b/extensions/xgui/doc/help_object_rect.pd
new file mode 100644
index 00000000..575c2269
--- /dev/null
+++ b/extensions/xgui/doc/help_object_rect.pd
@@ -0,0 +1,51 @@
+#N canvas 336 286 557 374 10;
+#X msg 130 65 hide;
+#X msg 19 200 hide;
+#X obj 41 289 move;
+#X obj 9 29 t b b b;
+#X obj 9 7 loadbang;
+#X obj 358 311 s to_seg;
+#X msg 10 65 show \, size 150 150;
+#X text 441 310 dh20020425;
+#X obj 76 290 light_over;
+#X msg 358 125 send c2 add_rect r1 10 10 20 20;
+#X msg 358 191 send c2 r1 color blue;
+#X msg 358 169 send c2 r1 coord 20 20 30 30;
+#X msg 358 147 send c2 r1 move 1 1;
+#X msg 358 260 send c2 del r1;
+#X msg 358 215 send c2 r1 border red;
+#X obj 10 311 print from_rect;
+#X msg 92 222 border red;
+#X msg 9 174 show \, color black;
+#X msg 92 244 width 1;
+#X msg 210 163 show;
+#X obj 10 87 canvas */c2;
+#X obj 10 269 rect r1 */c2/r1;
+#X obj 220 225 print;
+#X msg 244 162 hide;
+#X obj 131 117 print c3;
+#X obj 209 187 i-rect */c2;
+#X connect 0 0 20 0;
+#X connect 1 0 21 0;
+#X connect 2 0 21 0;
+#X connect 3 0 17 0;
+#X connect 3 2 6 0;
+#X connect 4 0 3 0;
+#X connect 6 0 20 0;
+#X connect 8 0 21 0;
+#X connect 9 0 5 0;
+#X connect 10 0 5 0;
+#X connect 11 0 5 0;
+#X connect 12 0 5 0;
+#X connect 13 0 5 0;
+#X connect 14 0 5 0;
+#X connect 16 0 21 0;
+#X connect 17 0 21 0;
+#X connect 18 0 21 0;
+#X connect 19 0 25 0;
+#X connect 20 0 24 0;
+#X connect 21 0 15 0;
+#X connect 21 0 2 0;
+#X connect 21 0 8 0;
+#X connect 23 0 25 0;
+#X connect 25 0 22 0;
diff --git a/extensions/xgui/doc/help_object_text.pd b/extensions/xgui/doc/help_object_text.pd
new file mode 100644
index 00000000..352f36e3
--- /dev/null
+++ b/extensions/xgui/doc/help_object_text.pd
@@ -0,0 +1,78 @@
+#N canvas 305 23 561 378 10;
+#X msg 142 68 hide;
+#X obj 10 311 print from_text;
+#X floatatom 20 239 5 0 0;
+#X msg 481 46 hide;
+#X obj 274 91 move;
+#X obj 9 29 t b b b;
+#X obj 9 7 loadbang;
+#X floatatom 367 283 5 0 0;
+#X msg 274 46 show \, width 10 \, coord 10 10 10 10;
+#X msg 10 65 show \, size 150 150;
+#X msg 86 111 coord \$1 \$2 \$1 \$2;
+#X obj 274 112 coord2xy;
+#X obj 109 311 print from_text;
+#X floatatom 122 243 5 0 0;
+#X text 441 335 dh20020425;
+#X obj 410 91 light_over;
+#X obj 307 91 width_over 10 13;
+#X msg 20 261 text \$1;
+#X msg 122 265 text \$1;
+#X obj 10 288 text t1 */c1/t1;
+#X obj 10 87 canvas */c1;
+#X obj 274 68 seg s1 */c1/s1;
+#X obj 110 289 text t2 */c1/t2;
+#X msg 9 174 show \, color red \, anchor se \, pos 120 145 \, text
+0;
+#X msg 21 201 show \, color red \, anchor se \, pos 145 145 \, text
+0;
+#X msg 367 305 do */c1/t1 text \$1;
+#X msg 358 147 do */c1/t1 move 1 1;
+#X msg 358 169 do */c1/t1 pos 10 10;
+#X msg 358 191 do */c1/t1 color blue;
+#X msg 358 237 do */c1/t1 anchor ne;
+#X obj 358 336 s to_node;
+#X msg 358 125 do */c1 add_text t1;
+#X msg 358 214 do */c1 del t1;
+#X obj 86 89 route click drag;
+#X msg 131 137 move \$1 \$2;
+#X connect 0 0 20 0;
+#X connect 2 0 17 0;
+#X connect 3 0 21 0;
+#X connect 4 0 21 0;
+#X connect 5 0 23 0;
+#X connect 5 0 24 0;
+#X connect 5 1 8 0;
+#X connect 5 2 9 0;
+#X connect 6 0 5 0;
+#X connect 7 0 25 0;
+#X connect 7 0 25 0;
+#X connect 8 0 21 0;
+#X connect 9 0 20 0;
+#X connect 10 0 21 0;
+#X connect 10 0 11 0;
+#X connect 11 0 2 0;
+#X connect 11 1 13 0;
+#X connect 13 0 18 0;
+#X connect 15 0 21 0;
+#X connect 16 0 21 0;
+#X connect 17 0 19 0;
+#X connect 18 0 22 0;
+#X connect 19 0 1 0;
+#X connect 20 0 33 0;
+#X connect 21 0 4 0;
+#X connect 21 0 11 0;
+#X connect 21 0 15 0;
+#X connect 21 0 16 0;
+#X connect 22 0 12 0;
+#X connect 23 0 19 0;
+#X connect 24 0 22 0;
+#X connect 25 0 30 0;
+#X connect 26 0 30 0;
+#X connect 27 0 30 0;
+#X connect 28 0 30 0;
+#X connect 29 0 30 0;
+#X connect 31 0 30 0;
+#X connect 32 0 30 0;
+#X connect 33 0 10 0;
+#X connect 33 1 34 0;
diff --git a/extensions/xgui/doc/help_spring.pd b/extensions/xgui/doc/help_spring.pd
new file mode 100644
index 00000000..3d9c6077
--- /dev/null
+++ b/extensions/xgui/doc/help_spring.pd
@@ -0,0 +1,34 @@
+#N canvas 300 301 671 472 10;
+#X msg 40 26 ?l;
+#X msg 189 20 ?k;
+#X msg 72 27 !l 50;
+#X msg 73 48 !l 100;
+#X msg 41 49 l;
+#X msg 222 26 ?force1;
+#X msg 224 50 ?force2;
+#X msg 139 48 !k 50;
+#X msg 141 25 !k 1;
+#X obj 423 221 print s2;
+#X obj 289 225 print s1;
+#X msg 438 110 mass 30 30;
+#X msg 289 109 mass 20 30;
+#X obj 151 215 print spring;
+#X msg 298 135 mass 30 30;
+#X msg 438 134 mass 20 30;
+#X msg 438 86 mass 40 30;
+#X obj 153 185 spring my_first_spring 1 100 10 10 20 20;
+#X connect 0 0 17 0;
+#X connect 1 0 17 0;
+#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 6 0 17 0;
+#X connect 7 0 17 0;
+#X connect 8 0 17 0;
+#X connect 11 0 17 2;
+#X connect 12 0 17 1;
+#X connect 14 0 17 1;
+#X connect 15 0 17 2;
+#X connect 16 0 17 2;
+#X connect 17 0 13 0;
diff --git a/extensions/xgui/doc/help_valueinit.pd b/extensions/xgui/doc/help_valueinit.pd
new file mode 100644
index 00000000..0bbb9d39
--- /dev/null
+++ b/extensions/xgui/doc/help_valueinit.pd
@@ -0,0 +1,8 @@
+#N canvas 472 575 450 300 12;
+#X obj 59 146 value test;
+#X obj 40 40 valueinit test 10;
+#X msg 60 117 bang;
+#X obj 53 180 print;
+#X text 180 189 comment;
+#X connect 0 0 3 0;
+#X connect 2 0 0 0;
diff --git a/extensions/xgui/doc/help_vector.pd b/extensions/xgui/doc/help_vector.pd
new file mode 100644
index 00000000..6ad1ae02
--- /dev/null
+++ b/extensions/xgui/doc/help_vector.pd
@@ -0,0 +1,34 @@
+#N canvas 380 381 745 410 10;
+#X text 419 209 dh20020402;
+#X msg 15 8 !xy 10 10;
+#X msg 103 51 add 0 1;
+#X msg 101 29 add 1 0;
+#X msg 38 38 ?xy;
+#X msg 223 7 !xy 10 10;
+#X msg 311 50 add 0 1;
+#X msg 309 28 add 1 0;
+#X msg 246 37 ?xy;
+#X text 22 170 same name => same object !!!!;
+#X text 22 208 but be aware to have the same init value !!!;
+#X obj 42 132 print a;
+#X obj 250 131 print b;
+#X obj 250 106 vector my_first_vector 10 10;
+#X obj 42 107 vector my_first_vector 10 10;
+#X msg 386 10 substract 1 1;
+#X msg 410 47 ?abs;
+#X msg 519 45 !abs 1;
+#X msg 518 69 !abs 10;
+#X connect 1 0 14 0;
+#X connect 2 0 14 0;
+#X connect 3 0 14 0;
+#X connect 4 0 14 0;
+#X connect 5 0 13 0;
+#X connect 6 0 13 0;
+#X connect 7 0 13 0;
+#X connect 8 0 13 0;
+#X connect 13 0 12 0;
+#X connect 14 0 11 0;
+#X connect 15 0 13 0;
+#X connect 16 0 13 0;
+#X connect 17 0 13 0;
+#X connect 18 0 13 0;
diff --git a/extensions/xgui/doc/sound/09_more_physics3.pd b/extensions/xgui/doc/sound/09_more_physics3.pd
new file mode 100644
index 00000000..d12a12d3
--- /dev/null
+++ b/extensions/xgui/doc/sound/09_more_physics3.pd
@@ -0,0 +1,217 @@
+#N canvas 325 6 668 671 12;
+#X msg 466 13 show;
+#X obj 7 37 loadbang;
+#X obj 33 75 t b b b b;
+#X msg 218 9 on;
+#X msg 220 87 xy1 \$1 \$2;
+#X msg 324 86 xy2 \$1 \$2;
+#X text 52 202 dh20020404;
+#X msg 230 168 xy1 \$1 \$2;
+#X msg 326 168 xy2 \$1 \$2;
+#X msg 221 406 xy1 \$1 \$2;
+#X msg 314 404 xy2 \$1 \$2;
+#X obj 470 91 seg l1 */my_string/l1;
+#X obj 475 168 seg l2 */my_string/l2;
+#X msg 216 490 xy1 \$1 \$2;
+#X msg 317 490 xy2 \$1 \$2;
+#X msg 209 573 xy1 \$1 \$2;
+#X msg 315 572 xy2 \$1 \$2;
+#X obj 477 50 seg m1 */my_string/m1;
+#X msg 219 245 xy1 \$1 \$2;
+#X msg 317 242 xy2 \$1 \$2;
+#X obj 463 254 seg l3 */my_string/l3;
+#X msg 220 320 xy1 \$1 \$2;
+#X msg 321 321 xy2 \$1 \$2;
+#X obj 458 337 seg l4 */my_string/l4;
+#X obj 340 757 seg m2 */my_string/m2;
+#X obj 452 420 seg l5 */my_string/l5;
+#X obj 455 508 seg l6 */my_string/l6;
+#X obj 571 14 light_over;
+#X msg 515 13 raise;
+#X msg 212 653 xy1 \$1 \$2;
+#X msg 318 652 xy2 \$1 \$2;
+#X msg 102 771 xy1 \$1 \$2;
+#X msg 208 770 xy2 \$1 \$2;
+#X obj 458 588 seg l7 */my_string/l7;
+#X obj 450 666 seg l8 */my_string/l8;
+#X msg 506 -9 width 30;
+#X msg 30 662 width 10;
+#X text 60 224 dh20020405;
+#X text 24 9 a nice string...;
+#X obj 102 745 mass m9 50 250 100 0 0;
+#X obj 230 142 mass m2 1 250 240 0 0;
+#X obj 219 219 mass m3 1 250 220 0 0;
+#X obj 220 294 mass m4 1 250 200 0 0;
+#X obj 221 380 mass m5 1 250 180 0 0;
+#X obj 210 465 mass m6 1 250 160 0 0;
+#X obj 209 547 mass m7 1 250 140 0 0;
+#X obj 212 627 mass m8 1 250 120 0 0;
+#X obj 237 36 force f1 0 10000;
+#X obj 164 720 damping d9 3000;
+#X obj 330 779 spring sl 5000 0 250 250 250 100;
+#X obj 450 692 spring s9 1000 20;
+#X obj 458 614 spring s8 1000 20;
+#X obj 455 534 spring s6 1000 20;
+#X obj 452 446 spring s5 1000 20;
+#X obj 458 363 spring s4 1000 20;
+#X obj 463 280 spring s3 1000 20;
+#X obj 461 195 spring s2 1000 20;
+#X obj 470 118 spring s1 1000 20;
+#X obj 282 13 damping d1 10;
+#X obj 291 121 damping d2 10;
+#X obj 281 195 damping d3 10;
+#X obj 285 270 damping d4 10;
+#X obj 282 356 damping d5 10;
+#X obj 285 438 damping d6 10;
+#X obj 271 522 damping d7 10;
+#X obj 274 602 damping d8 10;
+#X text 21 -11 This example is running OK on a PIII 800;
+#X msg 51 101 show \, size 500 800;
+#X msg 70 125 color white;
+#X obj 53 156 canvas */my_string;
+#X obj 85 267 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 12700 1;
+#X obj 22 581 -;
+#X obj 43 544 t f f;
+#X obj 40 328 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X obj 20 469 -;
+#X obj 41 432 t f f;
+#X msg 24 512 drag \$1 0;
+#X msg 26 624 drag 0 \$1;
+#X obj 219 61 mass m1 2 250 260 0 0;
+#X connect 0 0 12 0;
+#X connect 0 0 17 0;
+#X connect 0 0 11 0;
+#X connect 0 0 24 0;
+#X connect 0 0 20 0;
+#X connect 0 0 23 0;
+#X connect 0 0 25 0;
+#X connect 0 0 26 0;
+#X connect 0 0 33 0;
+#X connect 0 0 34 0;
+#X connect 1 0 2 0;
+#X connect 2 0 35 0;
+#X connect 2 0 28 0;
+#X connect 2 0 3 0;
+#X connect 2 1 0 0;
+#X connect 2 2 68 0;
+#X connect 2 3 67 0;
+#X connect 3 0 39 0;
+#X connect 3 0 40 0;
+#X connect 3 0 41 0;
+#X connect 3 0 42 0;
+#X connect 3 0 43 0;
+#X connect 3 0 44 0;
+#X connect 3 0 45 0;
+#X connect 3 0 46 0;
+#X connect 3 0 78 0;
+#X connect 4 0 11 0;
+#X connect 4 0 17 0;
+#X connect 5 0 17 0;
+#X connect 7 0 12 0;
+#X connect 8 0 11 0;
+#X connect 9 0 25 0;
+#X connect 10 0 23 0;
+#X connect 13 0 26 0;
+#X connect 14 0 25 0;
+#X connect 15 0 33 0;
+#X connect 16 0 26 0;
+#X connect 17 0 27 0;
+#X connect 18 0 20 0;
+#X connect 19 0 12 0;
+#X connect 21 0 23 0;
+#X connect 22 0 20 0;
+#X connect 27 0 17 0;
+#X connect 28 0 17 0;
+#X connect 29 0 34 0;
+#X connect 30 0 33 0;
+#X connect 31 0 24 0;
+#X connect 32 0 34 0;
+#X connect 32 0 24 0;
+#X connect 35 0 17 0;
+#X connect 36 0 24 0;
+#X connect 39 1 31 0;
+#X connect 39 1 32 0;
+#X connect 39 1 48 1;
+#X connect 39 1 49 1;
+#X connect 39 1 50 2;
+#X connect 40 1 7 0;
+#X connect 40 1 8 0;
+#X connect 40 1 56 1;
+#X connect 40 1 57 2;
+#X connect 40 1 59 1;
+#X connect 41 1 18 0;
+#X connect 41 1 19 0;
+#X connect 41 1 55 1;
+#X connect 41 1 56 2;
+#X connect 41 1 60 1;
+#X connect 42 1 21 0;
+#X connect 42 1 22 0;
+#X connect 42 1 54 1;
+#X connect 42 1 55 2;
+#X connect 42 1 61 1;
+#X connect 43 1 9 0;
+#X connect 43 1 10 0;
+#X connect 43 1 53 1;
+#X connect 43 1 54 2;
+#X connect 43 1 62 1;
+#X connect 44 1 13 0;
+#X connect 44 1 14 0;
+#X connect 44 1 52 1;
+#X connect 44 1 53 2;
+#X connect 44 1 63 1;
+#X connect 45 1 15 0;
+#X connect 45 1 16 0;
+#X connect 45 1 51 1;
+#X connect 45 1 52 2;
+#X connect 45 1 64 1;
+#X connect 46 1 29 0;
+#X connect 46 1 30 0;
+#X connect 46 1 50 1;
+#X connect 46 1 51 2;
+#X connect 46 1 65 1;
+#X connect 47 1 78 1;
+#X connect 48 1 39 1;
+#X connect 49 1 39 1;
+#X connect 50 1 46 1;
+#X connect 50 2 39 1;
+#X connect 51 1 45 1;
+#X connect 51 2 46 1;
+#X connect 52 1 44 1;
+#X connect 52 2 45 1;
+#X connect 53 1 43 1;
+#X connect 53 2 44 1;
+#X connect 54 1 42 1;
+#X connect 54 2 43 1;
+#X connect 55 1 41 1;
+#X connect 55 2 42 1;
+#X connect 56 1 40 1;
+#X connect 56 2 41 1;
+#X connect 57 1 78 1;
+#X connect 57 2 40 1;
+#X connect 57 2 40 1;
+#X connect 58 1 78 1;
+#X connect 59 1 40 1;
+#X connect 60 1 41 1;
+#X connect 61 1 42 1;
+#X connect 62 1 43 1;
+#X connect 63 1 44 1;
+#X connect 64 1 45 1;
+#X connect 65 1 46 1;
+#X connect 67 0 69 0;
+#X connect 68 0 69 0;
+#X connect 70 0 72 0;
+#X connect 71 0 77 0;
+#X connect 72 0 71 1;
+#X connect 72 1 71 0;
+#X connect 73 0 75 0;
+#X connect 74 0 76 0;
+#X connect 75 0 74 1;
+#X connect 75 1 74 0;
+#X connect 76 0 39 0;
+#X connect 77 0 39 0;
+#X connect 78 1 4 0;
+#X connect 78 1 5 0;
+#X connect 78 1 57 1;
+#X connect 78 1 58 1;
diff --git a/extensions/xgui/doc/sound/09_more_physics4.pd b/extensions/xgui/doc/sound/09_more_physics4.pd
new file mode 100644
index 00000000..c037e56c
--- /dev/null
+++ b/extensions/xgui/doc/sound/09_more_physics4.pd
@@ -0,0 +1,219 @@
+#N canvas 325 6 670 673 12;
+#X msg 466 13 show;
+#X obj 7 37 loadbang;
+#X obj 33 75 t b b b b;
+#X msg 218 9 on;
+#X msg 220 87 xy1 \$1 \$2;
+#X msg 324 86 xy2 \$1 \$2;
+#X text 52 202 dh20020404;
+#X msg 230 168 xy1 \$1 \$2;
+#X msg 326 168 xy2 \$1 \$2;
+#X msg 221 406 xy1 \$1 \$2;
+#X msg 314 404 xy2 \$1 \$2;
+#X msg 216 490 xy1 \$1 \$2;
+#X msg 317 490 xy2 \$1 \$2;
+#X msg 209 573 xy1 \$1 \$2;
+#X msg 315 572 xy2 \$1 \$2;
+#X msg 219 245 xy1 \$1 \$2;
+#X msg 317 242 xy2 \$1 \$2;
+#X msg 220 320 xy1 \$1 \$2;
+#X msg 321 321 xy2 \$1 \$2;
+#X obj 571 14 light_over;
+#X msg 515 13 raise;
+#X msg 212 653 xy1 \$1 \$2;
+#X msg 318 652 xy2 \$1 \$2;
+#X msg 102 771 xy1 \$1 \$2;
+#X msg 208 770 xy2 \$1 \$2;
+#X msg 506 -9 width 30;
+#X msg 335 727 width 10;
+#X text 60 224 dh20020405;
+#X text 24 9 a nice string...;
+#X text 21 -11 This example is running OK on a PIII 800;
+#X msg 51 101 show \, size 500 800;
+#X msg 70 125 color white;
+#X obj 53 156 canvas */my_string;
+#X obj 85 267 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 9400 1;
+#X obj 22 581 -;
+#X obj 43 544 t f f;
+#X obj 40 328 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 800 1;
+#X obj 20 469 -;
+#X obj 41 432 t f f;
+#X msg 24 512 drag \$1 0;
+#X msg 26 624 drag 0 \$1;
+#X obj 13 697 loadbang;
+#X obj 282 13 damping \$0d1 10;
+#X obj 237 36 force \$0f1 0 10000;
+#X obj 219 61 mass \$0m1 2 250 260 0 0;
+#X obj 291 121 damping \$0d2 10;
+#X obj 230 142 mass \$0m2 1 250 240 0 0;
+#X obj 281 195 damping \$0d3 10;
+#X obj 219 219 mass \$0m3 1 250 220 0 0;
+#X obj 285 270 damping \$0d4 10;
+#X obj 220 294 mass \$0m4 1 250 200 0 0;
+#X obj 282 356 damping \$0d5 10;
+#X obj 221 380 mass \$0m5 1 250 180 0 0;
+#X obj 285 438 damping \$0d6 10;
+#X obj 210 465 mass \$0m6 1 250 160 0 0;
+#X obj 271 522 damping \$0d7 10;
+#X obj 209 547 mass \$0m7 1 250 140 0 0;
+#X obj 274 602 damping \$0d8 10;
+#X obj 212 627 mass \$0m8 1 250 120 0 0;
+#X obj 477 50 seg \$0m1 */my_string/m1;
+#X obj 470 91 seg \$0l1 */my_string/l1;
+#X obj 470 118 spring \$0s1 1000 20;
+#X obj 475 168 seg \$0l2 */my_string/l2;
+#X obj 461 195 spring \$0s2 1000 20;
+#X obj 463 254 seg \$0l3 */my_string/l3;
+#X obj 463 280 spring \$0s3 1000 20;
+#X obj 458 337 seg \$0l4 */my_string/l4;
+#X obj 458 363 spring \$0s4 1000 20;
+#X obj 452 420 seg \$0l5 */my_string/l5;
+#X obj 452 446 spring \$0s5 1000 20;
+#X obj 455 508 seg \$0l6 */my_string/l6;
+#X obj 455 534 spring \$0s6 1000 20;
+#X obj 458 588 seg \$0l7 */my_string/l7;
+#X obj 458 614 spring \$0s8 1000 20;
+#X obj 450 666 seg \$0l8 */my_string/l8;
+#X obj 450 692 spring \$0s9 1000 20;
+#X obj 340 757 seg \$0m2 */my_string/m2;
+#X obj 330 779 spring \$0sl 5000 0 250 250 250 100;
+#X obj 102 745 mass \$0m9 50 250 100 0 0;
+#X obj 164 720 damping \$0d9 3000;
+#X connect 0 0 59 0;
+#X connect 0 0 60 0;
+#X connect 0 0 62 0;
+#X connect 0 0 64 0;
+#X connect 0 0 66 0;
+#X connect 0 0 68 0;
+#X connect 0 0 70 0;
+#X connect 0 0 72 0;
+#X connect 0 0 74 0;
+#X connect 0 0 76 0;
+#X connect 1 0 2 0;
+#X connect 2 0 25 0;
+#X connect 2 0 20 0;
+#X connect 2 0 3 0;
+#X connect 2 1 0 0;
+#X connect 2 2 31 0;
+#X connect 2 3 30 0;
+#X connect 3 0 44 0;
+#X connect 3 0 46 0;
+#X connect 3 0 48 0;
+#X connect 3 0 50 0;
+#X connect 3 0 52 0;
+#X connect 3 0 54 0;
+#X connect 3 0 56 0;
+#X connect 3 0 58 0;
+#X connect 3 0 78 0;
+#X connect 4 0 59 0;
+#X connect 4 0 60 0;
+#X connect 5 0 59 0;
+#X connect 7 0 62 0;
+#X connect 8 0 60 0;
+#X connect 9 0 68 0;
+#X connect 10 0 66 0;
+#X connect 11 0 70 0;
+#X connect 12 0 68 0;
+#X connect 13 0 72 0;
+#X connect 14 0 70 0;
+#X connect 15 0 64 0;
+#X connect 16 0 62 0;
+#X connect 17 0 66 0;
+#X connect 18 0 64 0;
+#X connect 19 0 59 0;
+#X connect 20 0 59 0;
+#X connect 21 0 74 0;
+#X connect 22 0 72 0;
+#X connect 23 0 76 0;
+#X connect 24 0 74 0;
+#X connect 24 0 76 0;
+#X connect 25 0 59 0;
+#X connect 26 0 76 0;
+#X connect 30 0 32 0;
+#X connect 31 0 32 0;
+#X connect 33 0 35 0;
+#X connect 34 0 40 0;
+#X connect 35 0 34 1;
+#X connect 35 1 34 0;
+#X connect 36 0 38 0;
+#X connect 37 0 39 0;
+#X connect 38 0 37 1;
+#X connect 38 1 37 0;
+#X connect 39 0 78 0;
+#X connect 40 0 78 0;
+#X connect 41 0 26 0;
+#X connect 42 1 44 1;
+#X connect 43 1 44 1;
+#X connect 44 1 4 0;
+#X connect 44 1 5 0;
+#X connect 44 1 42 1;
+#X connect 44 1 61 1;
+#X connect 45 1 46 1;
+#X connect 46 1 7 0;
+#X connect 46 1 8 0;
+#X connect 46 1 45 1;
+#X connect 46 1 61 2;
+#X connect 46 1 63 1;
+#X connect 47 1 48 1;
+#X connect 48 1 15 0;
+#X connect 48 1 16 0;
+#X connect 48 1 47 1;
+#X connect 48 1 63 2;
+#X connect 48 1 65 1;
+#X connect 49 1 50 1;
+#X connect 50 1 17 0;
+#X connect 50 1 18 0;
+#X connect 50 1 49 1;
+#X connect 50 1 65 2;
+#X connect 50 1 67 1;
+#X connect 51 1 52 1;
+#X connect 52 1 9 0;
+#X connect 52 1 10 0;
+#X connect 52 1 51 1;
+#X connect 52 1 67 2;
+#X connect 52 1 69 1;
+#X connect 53 1 54 1;
+#X connect 54 1 11 0;
+#X connect 54 1 12 0;
+#X connect 54 1 53 1;
+#X connect 54 1 69 2;
+#X connect 54 1 71 1;
+#X connect 55 1 56 1;
+#X connect 56 1 13 0;
+#X connect 56 1 14 0;
+#X connect 56 1 55 1;
+#X connect 56 1 71 2;
+#X connect 56 1 73 1;
+#X connect 57 1 58 1;
+#X connect 58 1 21 0;
+#X connect 58 1 22 0;
+#X connect 58 1 57 1;
+#X connect 58 1 73 2;
+#X connect 58 1 75 1;
+#X connect 59 0 19 0;
+#X connect 61 1 44 1;
+#X connect 61 2 46 1;
+#X connect 61 2 46 1;
+#X connect 63 1 46 1;
+#X connect 63 2 48 1;
+#X connect 65 1 48 1;
+#X connect 65 2 50 1;
+#X connect 67 1 50 1;
+#X connect 67 2 52 1;
+#X connect 69 1 52 1;
+#X connect 69 2 54 1;
+#X connect 71 1 54 1;
+#X connect 71 2 56 1;
+#X connect 73 1 56 1;
+#X connect 73 2 58 1;
+#X connect 75 1 58 1;
+#X connect 75 2 78 1;
+#X connect 77 1 78 1;
+#X connect 78 1 23 0;
+#X connect 78 1 24 0;
+#X connect 78 1 75 2;
+#X connect 78 1 77 1;
+#X connect 78 1 79 1;
+#X connect 79 1 78 1;
diff --git a/extensions/xgui/doc/sound/09_more_physics5.pd b/extensions/xgui/doc/sound/09_more_physics5.pd
new file mode 100644
index 00000000..d4a6b392
--- /dev/null
+++ b/extensions/xgui/doc/sound/09_more_physics5.pd
@@ -0,0 +1,238 @@
+#N canvas 325 6 672 675 12;
+#X msg 466 13 show;
+#X obj 7 37 loadbang;
+#X obj 33 75 t b b b b;
+#X msg 218 9 on;
+#X msg 220 87 xy1 \$1 \$2;
+#X msg 324 86 xy2 \$1 \$2;
+#X text 52 202 dh20020404;
+#X msg 230 168 xy1 \$1 \$2;
+#X msg 326 168 xy2 \$1 \$2;
+#X msg 221 406 xy1 \$1 \$2;
+#X msg 314 404 xy2 \$1 \$2;
+#X msg 216 490 xy1 \$1 \$2;
+#X msg 317 490 xy2 \$1 \$2;
+#X msg 209 573 xy1 \$1 \$2;
+#X msg 315 572 xy2 \$1 \$2;
+#X msg 219 245 xy1 \$1 \$2;
+#X msg 317 242 xy2 \$1 \$2;
+#X msg 220 320 xy1 \$1 \$2;
+#X msg 321 321 xy2 \$1 \$2;
+#X msg 515 13 raise;
+#X msg 212 653 xy1 \$1 \$2;
+#X msg 318 652 xy2 \$1 \$2;
+#X msg 102 771 xy1 \$1 \$2;
+#X msg 208 770 xy2 \$1 \$2;
+#X msg 506 -9 width 30;
+#X msg 335 727 width 10;
+#X text 60 224 dh20020405;
+#X text 24 9 a nice string...;
+#X text 21 -11 This example is running OK on a PIII 800;
+#X msg 51 101 show \, size 500 800;
+#X msg 70 125 color white;
+#X obj 53 156 canvas */my_string;
+#X obj 89 276 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 7400 1;
+#X obj 22 581 -;
+#X obj 43 544 t f f;
+#X obj 40 323 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 5000 1;
+#X obj 20 469 -;
+#X obj 41 432 t f f;
+#X msg 24 512 drag \$1 0;
+#X msg 26 624 drag 0 \$1;
+#X obj 13 697 loadbang;
+#X obj 282 13 damping \$0d1 10;
+#X obj 237 36 force \$0f1 0 10000;
+#X obj 219 61 mass \$0m1 2 250 260 0 0;
+#X obj 291 121 damping \$0d2 10;
+#X obj 230 142 mass \$0m2 1 250 240 0 0;
+#X obj 281 195 damping \$0d3 10;
+#X obj 219 219 mass \$0m3 1 250 220 0 0;
+#X obj 285 270 damping \$0d4 10;
+#X obj 220 294 mass \$0m4 1 250 200 0 0;
+#X obj 282 356 damping \$0d5 10;
+#X obj 221 380 mass \$0m5 1 250 180 0 0;
+#X obj 285 438 damping \$0d6 10;
+#X obj 210 465 mass \$0m6 1 250 160 0 0;
+#X obj 271 522 damping \$0d7 10;
+#X obj 209 547 mass \$0m7 1 250 140 0 0;
+#X obj 277 599 damping \$0d8 10;
+#X obj 212 627 mass \$0m8 1 250 120 0 0;
+#X obj 477 50 seg \$0m1 */my_string/m1;
+#X obj 470 91 seg \$0l1 */my_string/l1;
+#X obj 470 118 spring \$0s1 1000 20;
+#X obj 475 168 seg \$0l2 */my_string/l2;
+#X obj 461 195 spring \$0s2 1000 20;
+#X obj 463 254 seg \$0l3 */my_string/l3;
+#X obj 463 280 spring \$0s3 1000 20;
+#X obj 458 337 seg \$0l4 */my_string/l4;
+#X obj 458 363 spring \$0s4 1000 20;
+#X obj 452 420 seg \$0l5 */my_string/l5;
+#X obj 452 446 spring \$0s5 1000 20;
+#X obj 455 508 seg \$0l6 */my_string/l6;
+#X obj 455 534 spring \$0s6 1000 20;
+#X obj 458 588 seg \$0l7 */my_string/l7;
+#X obj 458 614 spring \$0s8 1000 20;
+#X obj 450 666 seg \$0l8 */my_string/l8;
+#X obj 450 692 spring \$0s9 1000 20;
+#X obj 340 757 seg \$0m2 */my_string/m2;
+#X obj 330 779 spring \$0sl 5000 0 250 250 250 100;
+#X obj 102 745 mass \$0m9 50 250 100 0 0;
+#X obj 164 720 damping \$0d9 3000;
+#X obj 154 391 s xy1;
+#X obj 153 417 s xy2;
+#X obj 153 447 s xy3;
+#X obj 152 473 s xy4;
+#X obj 153 498 s xy5;
+#X obj 152 525 s xy6;
+#X obj 150 554 s xy7;
+#X obj 149 580 s xy8;
+#X obj 150 605 s xy9;
+#X obj 16 260 r x1;
+#X obj 17 285 r y1;
+#X connect 0 0 58 0;
+#X connect 0 0 59 0;
+#X connect 0 0 61 0;
+#X connect 0 0 63 0;
+#X connect 0 0 65 0;
+#X connect 0 0 67 0;
+#X connect 0 0 69 0;
+#X connect 0 0 71 0;
+#X connect 0 0 73 0;
+#X connect 0 0 75 0;
+#X connect 1 0 2 0;
+#X connect 2 0 24 0;
+#X connect 2 0 19 0;
+#X connect 2 0 3 0;
+#X connect 2 1 0 0;
+#X connect 2 2 30 0;
+#X connect 2 3 29 0;
+#X connect 3 0 43 0;
+#X connect 3 0 45 0;
+#X connect 3 0 47 0;
+#X connect 3 0 49 0;
+#X connect 3 0 51 0;
+#X connect 3 0 53 0;
+#X connect 3 0 55 0;
+#X connect 3 0 57 0;
+#X connect 3 0 77 0;
+#X connect 4 0 58 0;
+#X connect 4 0 59 0;
+#X connect 5 0 58 0;
+#X connect 7 0 61 0;
+#X connect 8 0 59 0;
+#X connect 9 0 67 0;
+#X connect 10 0 65 0;
+#X connect 11 0 69 0;
+#X connect 12 0 67 0;
+#X connect 13 0 71 0;
+#X connect 14 0 69 0;
+#X connect 15 0 63 0;
+#X connect 16 0 61 0;
+#X connect 17 0 65 0;
+#X connect 18 0 63 0;
+#X connect 19 0 58 0;
+#X connect 20 0 73 0;
+#X connect 21 0 71 0;
+#X connect 22 0 75 0;
+#X connect 23 0 73 0;
+#X connect 23 0 75 0;
+#X connect 24 0 58 0;
+#X connect 25 0 75 0;
+#X connect 29 0 31 0;
+#X connect 30 0 31 0;
+#X connect 32 0 34 0;
+#X connect 33 0 39 0;
+#X connect 34 0 33 1;
+#X connect 34 1 33 0;
+#X connect 35 0 37 0;
+#X connect 36 0 38 0;
+#X connect 37 0 36 1;
+#X connect 37 1 36 0;
+#X connect 38 0 77 0;
+#X connect 39 0 77 0;
+#X connect 40 0 25 0;
+#X connect 41 1 43 1;
+#X connect 42 1 43 1;
+#X connect 43 1 4 0;
+#X connect 43 1 5 0;
+#X connect 43 1 41 1;
+#X connect 43 1 60 1;
+#X connect 43 1 79 0;
+#X connect 44 1 45 1;
+#X connect 45 1 7 0;
+#X connect 45 1 8 0;
+#X connect 45 1 44 1;
+#X connect 45 1 60 2;
+#X connect 45 1 62 1;
+#X connect 45 1 80 0;
+#X connect 46 1 47 1;
+#X connect 47 1 15 0;
+#X connect 47 1 16 0;
+#X connect 47 1 46 1;
+#X connect 47 1 62 2;
+#X connect 47 1 64 1;
+#X connect 47 1 81 0;
+#X connect 48 1 49 1;
+#X connect 49 1 17 0;
+#X connect 49 1 18 0;
+#X connect 49 1 48 1;
+#X connect 49 1 64 2;
+#X connect 49 1 66 1;
+#X connect 49 1 82 0;
+#X connect 50 1 51 1;
+#X connect 51 1 9 0;
+#X connect 51 1 10 0;
+#X connect 51 1 50 1;
+#X connect 51 1 66 2;
+#X connect 51 1 68 1;
+#X connect 51 1 83 0;
+#X connect 52 1 53 1;
+#X connect 53 1 11 0;
+#X connect 53 1 12 0;
+#X connect 53 1 52 1;
+#X connect 53 1 68 2;
+#X connect 53 1 70 1;
+#X connect 53 1 84 0;
+#X connect 54 1 55 1;
+#X connect 55 1 13 0;
+#X connect 55 1 14 0;
+#X connect 55 1 54 1;
+#X connect 55 1 70 2;
+#X connect 55 1 72 1;
+#X connect 55 1 85 0;
+#X connect 56 1 57 1;
+#X connect 57 1 20 0;
+#X connect 57 1 21 0;
+#X connect 57 1 56 1;
+#X connect 57 1 72 2;
+#X connect 57 1 74 1;
+#X connect 57 1 86 0;
+#X connect 60 1 43 1;
+#X connect 60 2 45 1;
+#X connect 60 2 45 1;
+#X connect 62 1 45 1;
+#X connect 62 2 47 1;
+#X connect 64 1 47 1;
+#X connect 64 2 49 1;
+#X connect 66 1 49 1;
+#X connect 66 2 51 1;
+#X connect 68 1 51 1;
+#X connect 68 2 53 1;
+#X connect 70 1 53 1;
+#X connect 70 2 55 1;
+#X connect 72 1 55 1;
+#X connect 72 2 57 1;
+#X connect 74 1 57 1;
+#X connect 74 2 77 1;
+#X connect 76 1 77 1;
+#X connect 77 1 22 0;
+#X connect 77 1 23 0;
+#X connect 77 1 74 2;
+#X connect 77 1 76 1;
+#X connect 77 1 78 1;
+#X connect 77 1 87 0;
+#X connect 78 1 77 1;
+#X connect 88 0 37 0;
+#X connect 89 0 34 0;
diff --git a/extensions/xgui/doc/sound/09_more_physics6.pd b/extensions/xgui/doc/sound/09_more_physics6.pd
new file mode 100644
index 00000000..886038ac
--- /dev/null
+++ b/extensions/xgui/doc/sound/09_more_physics6.pd
@@ -0,0 +1,462 @@
+#N canvas -39 6 1006 674 12;
+#X msg 473 120 show;
+#X obj 8 62 loadbang;
+#X obj 34 100 t b b b b;
+#X msg 207 73 on;
+#X msg 242 127 xy1 \$1 \$2;
+#X msg 346 126 xy2 \$1 \$2;
+#X text 52 202 dh20020404;
+#X msg 240 200 xy1 \$1 \$2;
+#X msg 336 200 xy2 \$1 \$2;
+#X msg 224 422 xy1 \$1 \$2;
+#X msg 317 420 xy2 \$1 \$2;
+#X msg 218 498 xy1 \$1 \$2;
+#X msg 319 498 xy2 \$1 \$2;
+#X msg 209 573 xy1 \$1 \$2;
+#X msg 315 572 xy2 \$1 \$2;
+#X msg 233 276 xy1 \$1 \$2;
+#X msg 331 273 xy2 \$1 \$2;
+#X msg 228 347 xy1 \$1 \$2;
+#X msg 329 348 xy2 \$1 \$2;
+#X msg 522 120 raise;
+#X msg 212 653 xy1 \$1 \$2;
+#X msg 318 652 xy2 \$1 \$2;
+#X msg 106 732 xy1 \$1 \$2;
+#X msg 212 731 xy2 \$1 \$2;
+#X msg 585 119 width 30;
+#X msg 339 688 width 10;
+#X text 60 224 dh20020405;
+#X msg 71 150 color white;
+#X obj 54 181 canvas */my_string;
+#X obj 89 276 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 5900 1;
+#X obj 22 581 -;
+#X obj 43 544 t f f;
+#X obj 40 323 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 10800 1;
+#X obj 20 469 -;
+#X obj 41 432 t f f;
+#X msg 24 512 drag \$1 0;
+#X msg 26 624 drag 0 \$1;
+#X obj 121 641 loadbang;
+#X obj 304 53 damping \$0d1 10;
+#X obj 259 76 force \$0f1 0 10000;
+#X obj 241 101 mass \$0m1 2 250 260 0 0;
+#X obj 301 153 damping \$0d2 10;
+#X obj 240 174 mass \$0m2 1 250 240 0 0;
+#X obj 295 226 damping \$0d3 10;
+#X obj 233 250 mass \$0m3 1 250 220 0 0;
+#X obj 293 297 damping \$0d4 10;
+#X obj 228 321 mass \$0m4 1 250 200 0 0;
+#X obj 285 372 damping \$0d5 10;
+#X obj 224 396 mass \$0m5 1 250 180 0 0;
+#X obj 287 446 damping \$0d6 10;
+#X obj 212 473 mass \$0m6 1 250 160 0 0;
+#X obj 271 522 damping \$0d7 10;
+#X obj 209 547 mass \$0m7 1 250 140 0 0;
+#X obj 277 599 damping \$0d8 10;
+#X obj 212 627 mass \$0m8 1 250 120 0 0;
+#X obj 476 152 seg \$0m1 */my_string/m1;
+#X obj 472 191 seg \$0l1 */my_string/l1;
+#X obj 472 218 spring \$0s1 1000 20;
+#X obj 472 248 seg \$0l2 */my_string/l2;
+#X obj 458 275 spring \$0s2 1000 20;
+#X obj 455 313 seg \$0l3 */my_string/l3;
+#X obj 455 339 spring \$0s3 1000 20;
+#X obj 452 373 seg \$0l4 */my_string/l4;
+#X obj 452 399 spring \$0s4 1000 20;
+#X obj 454 428 seg \$0l5 */my_string/l5;
+#X obj 454 454 spring \$0s5 1000 20;
+#X obj 455 508 seg \$0l6 */my_string/l6;
+#X obj 455 534 spring \$0s6 1000 20;
+#X obj 458 588 seg \$0l7 */my_string/l7;
+#X obj 458 614 spring \$0s8 1000 20;
+#X obj 450 666 seg \$0l8 */my_string/l8;
+#X obj 450 692 spring \$0s9 1000 20;
+#X obj 344 718 seg \$0m2 */my_string/m2;
+#X obj 334 740 spring \$0sl 5000 0 250 250 250 100;
+#X obj 106 706 mass \$0m9 50 250 100 0 0;
+#X obj 168 681 damping \$0d9 3000;
+#X obj 154 391 s xy1;
+#X obj 153 417 s xy2;
+#X obj 153 447 s xy3;
+#X obj 152 473 s xy4;
+#X obj 153 498 s xy5;
+#X obj 152 525 s xy6;
+#X obj 150 554 s xy7;
+#X obj 149 580 s xy8;
+#X obj 150 605 s xy9;
+#X obj 16 260 r x1;
+#X obj 17 285 r y1;
+#X msg 1138 109 show;
+#X obj 673 51 loadbang;
+#X obj 1137 40 t b b b b;
+#X msg 872 62 on;
+#X msg 907 116 xy1 \$1 \$2;
+#X msg 1011 115 xy2 \$1 \$2;
+#X msg 905 189 xy1 \$1 \$2;
+#X msg 1001 189 xy2 \$1 \$2;
+#X msg 889 411 xy1 \$1 \$2;
+#X msg 982 409 xy2 \$1 \$2;
+#X msg 883 487 xy1 \$1 \$2;
+#X msg 984 487 xy2 \$1 \$2;
+#X msg 874 562 xy1 \$1 \$2;
+#X msg 980 561 xy2 \$1 \$2;
+#X msg 898 265 xy1 \$1 \$2;
+#X msg 996 262 xy2 \$1 \$2;
+#X msg 893 336 xy1 \$1 \$2;
+#X msg 994 337 xy2 \$1 \$2;
+#X msg 1187 109 raise;
+#X msg 877 642 xy1 \$1 \$2;
+#X msg 983 641 xy2 \$1 \$2;
+#X msg 771 721 xy1 \$1 \$2;
+#X msg 877 720 xy2 \$1 \$2;
+#X msg 1250 108 width 30;
+#X msg 1004 677 width 10;
+#X obj 761 262 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 200 1;
+#X obj 687 570 -;
+#X obj 708 533 t f f;
+#X obj 705 312 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 7600 1;
+#X obj 685 458 -;
+#X obj 706 421 t f f;
+#X msg 689 501 drag \$1 0;
+#X msg 691 613 drag 0 \$1;
+#X obj 786 630 loadbang;
+#X obj 950 361 damping \$0d5 10;
+#X obj 681 249 r x1;
+#X obj 682 274 r y1;
+#X obj 969 42 damping d1 10;
+#X obj 924 65 force f1 0 10000;
+#X obj 906 90 mass m1 2 350 260 0 0;
+#X obj 966 144 damping d2 10;
+#X obj 905 163 mass m2 1 350 240 0 0;
+#X obj 960 215 damping d3 10;
+#X obj 958 286 damping d4 10;
+#X obj 898 239 mass m3 1 350 220 0 0;
+#X obj 893 310 mass m4 1 350 200 0 0;
+#X obj 889 385 mass m5 1 350 180 0 0;
+#X obj 953 435 damping d6 10;
+#X obj 936 511 damping d7 10;
+#X obj 878 462 mass m6 1 350 160 0 0;
+#X obj 875 536 mass m7 1 350 140 0 0;
+#X obj 876 616 mass m8 1 350 120 0 0;
+#X obj 833 670 damping d9 3000;
+#X obj 771 695 mass m9 50 350 100 0 0;
+#X obj 1115 681 spring s9 1000 20;
+#X obj 1123 603 spring s8 1000 20;
+#X obj 1120 527 spring s6 1000 20;
+#X obj 1119 443 spring s5 1000 20;
+#X obj 1120 328 spring s3 1000 20;
+#X obj 1123 264 spring s2 1000 20;
+#X obj 1136 207 spring s1 1000 20;
+#X obj 1117 388 spring s4 1000 20;
+#X obj 942 588 damping d8 10;
+#X obj 819 380 s xy11;
+#X obj 819 408 s xy12;
+#X obj 819 438 s xy13;
+#X obj 819 462 s xy14;
+#X obj 819 488 s xy15;
+#X obj 818 516 s xy16;
+#X obj 817 544 s xy17;
+#X obj 816 570 s xy18;
+#X obj 816 594 s xy19;
+#X obj 1141 141 seg m1 */my_string/1m1;
+#X obj 1137 180 seg l1 */my_string/1l1;
+#X obj 1124 236 seg l2 */my_string/1l2;
+#X obj 1120 302 seg l3 */my_string/1l3;
+#X obj 1117 362 seg l4 */my_string/1l4;
+#X obj 1119 417 seg l5 */my_string/1l5;
+#X obj 1119 499 seg l6 */my_string/1l6;
+#X obj 1123 577 seg l7 */my_string/1l7;
+#X obj 1120 656 seg l8 */my_string/1l8;
+#X obj 1009 707 seg m2 */my_string/1m2;
+#X msg 53 126 show \, size 500 1500;
+#X obj 1001 731 spring sl 5000 0 250 250 700 100;
+#X connect 0 0 55 0;
+#X connect 0 0 56 0;
+#X connect 0 0 58 0;
+#X connect 0 0 60 0;
+#X connect 0 0 62 0;
+#X connect 0 0 64 0;
+#X connect 0 0 66 0;
+#X connect 0 0 68 0;
+#X connect 0 0 70 0;
+#X connect 0 0 72 0;
+#X connect 1 0 2 0;
+#X connect 2 0 24 0;
+#X connect 2 0 19 0;
+#X connect 2 0 3 0;
+#X connect 2 1 0 0;
+#X connect 2 2 27 0;
+#X connect 2 3 169 0;
+#X connect 3 0 40 0;
+#X connect 3 0 42 0;
+#X connect 3 0 44 0;
+#X connect 3 0 46 0;
+#X connect 3 0 48 0;
+#X connect 3 0 50 0;
+#X connect 3 0 52 0;
+#X connect 3 0 54 0;
+#X connect 3 0 74 0;
+#X connect 4 0 55 0;
+#X connect 4 0 56 0;
+#X connect 5 0 55 0;
+#X connect 7 0 58 0;
+#X connect 8 0 56 0;
+#X connect 9 0 64 0;
+#X connect 10 0 62 0;
+#X connect 11 0 66 0;
+#X connect 12 0 64 0;
+#X connect 13 0 68 0;
+#X connect 14 0 66 0;
+#X connect 15 0 60 0;
+#X connect 16 0 58 0;
+#X connect 17 0 62 0;
+#X connect 18 0 60 0;
+#X connect 19 0 55 0;
+#X connect 20 0 70 0;
+#X connect 21 0 68 0;
+#X connect 22 0 72 0;
+#X connect 23 0 70 0;
+#X connect 23 0 72 0;
+#X connect 24 0 55 0;
+#X connect 25 0 72 0;
+#X connect 27 0 28 0;
+#X connect 29 0 31 0;
+#X connect 30 0 36 0;
+#X connect 31 0 30 1;
+#X connect 31 1 30 0;
+#X connect 32 0 34 0;
+#X connect 33 0 35 0;
+#X connect 34 0 33 1;
+#X connect 34 1 33 0;
+#X connect 35 0 74 0;
+#X connect 36 0 74 0;
+#X connect 37 0 25 0;
+#X connect 38 1 40 1;
+#X connect 39 1 40 1;
+#X connect 40 1 4 0;
+#X connect 40 1 5 0;
+#X connect 40 1 38 1;
+#X connect 40 1 57 1;
+#X connect 40 1 76 0;
+#X connect 41 1 42 1;
+#X connect 42 1 7 0;
+#X connect 42 1 8 0;
+#X connect 42 1 41 1;
+#X connect 42 1 57 2;
+#X connect 42 1 59 1;
+#X connect 42 1 77 0;
+#X connect 43 1 44 1;
+#X connect 44 1 15 0;
+#X connect 44 1 16 0;
+#X connect 44 1 43 1;
+#X connect 44 1 59 2;
+#X connect 44 1 61 1;
+#X connect 44 1 78 0;
+#X connect 45 1 46 1;
+#X connect 46 1 17 0;
+#X connect 46 1 18 0;
+#X connect 46 1 45 1;
+#X connect 46 1 61 2;
+#X connect 46 1 63 1;
+#X connect 46 1 79 0;
+#X connect 47 1 48 1;
+#X connect 48 1 9 0;
+#X connect 48 1 10 0;
+#X connect 48 1 47 1;
+#X connect 48 1 63 2;
+#X connect 48 1 65 1;
+#X connect 48 1 80 0;
+#X connect 49 1 50 1;
+#X connect 50 1 11 0;
+#X connect 50 1 12 0;
+#X connect 50 1 49 1;
+#X connect 50 1 65 2;
+#X connect 50 1 67 1;
+#X connect 50 1 81 0;
+#X connect 51 1 52 1;
+#X connect 52 1 13 0;
+#X connect 52 1 14 0;
+#X connect 52 1 51 1;
+#X connect 52 1 67 2;
+#X connect 52 1 69 1;
+#X connect 52 1 82 0;
+#X connect 53 1 54 1;
+#X connect 54 1 20 0;
+#X connect 54 1 21 0;
+#X connect 54 1 53 1;
+#X connect 54 1 69 2;
+#X connect 54 1 71 1;
+#X connect 54 1 83 0;
+#X connect 57 1 40 1;
+#X connect 57 2 42 1;
+#X connect 57 2 42 1;
+#X connect 59 1 42 1;
+#X connect 59 2 44 1;
+#X connect 61 1 44 1;
+#X connect 61 2 46 1;
+#X connect 63 1 46 1;
+#X connect 63 2 48 1;
+#X connect 65 1 48 1;
+#X connect 65 2 50 1;
+#X connect 67 1 50 1;
+#X connect 67 2 52 1;
+#X connect 69 1 52 1;
+#X connect 69 2 54 1;
+#X connect 71 1 54 1;
+#X connect 71 2 74 1;
+#X connect 73 1 74 1;
+#X connect 74 1 22 0;
+#X connect 74 1 23 0;
+#X connect 74 1 71 2;
+#X connect 74 1 73 1;
+#X connect 74 1 75 1;
+#X connect 74 1 84 0;
+#X connect 75 1 74 1;
+#X connect 85 0 34 0;
+#X connect 86 0 31 0;
+#X connect 87 0 159 0;
+#X connect 87 0 160 0;
+#X connect 87 0 161 0;
+#X connect 87 0 162 0;
+#X connect 87 0 163 0;
+#X connect 87 0 164 0;
+#X connect 87 0 165 0;
+#X connect 87 0 166 0;
+#X connect 87 0 167 0;
+#X connect 87 0 168 0;
+#X connect 88 0 89 0;
+#X connect 89 0 110 0;
+#X connect 89 0 105 0;
+#X connect 89 0 90 0;
+#X connect 89 1 87 0;
+#X connect 90 0 126 0;
+#X connect 90 0 128 0;
+#X connect 90 0 131 0;
+#X connect 90 0 132 0;
+#X connect 90 0 133 0;
+#X connect 90 0 136 0;
+#X connect 90 0 137 0;
+#X connect 90 0 138 0;
+#X connect 90 0 140 0;
+#X connect 91 0 159 0;
+#X connect 91 0 160 0;
+#X connect 92 0 159 0;
+#X connect 93 0 161 0;
+#X connect 94 0 160 0;
+#X connect 95 0 164 0;
+#X connect 96 0 163 0;
+#X connect 97 0 165 0;
+#X connect 98 0 164 0;
+#X connect 99 0 166 0;
+#X connect 100 0 165 0;
+#X connect 101 0 162 0;
+#X connect 102 0 161 0;
+#X connect 103 0 163 0;
+#X connect 104 0 162 0;
+#X connect 105 0 159 0;
+#X connect 106 0 167 0;
+#X connect 107 0 166 0;
+#X connect 108 0 168 0;
+#X connect 109 0 167 0;
+#X connect 109 0 168 0;
+#X connect 110 0 159 0;
+#X connect 111 0 168 0;
+#X connect 112 0 114 0;
+#X connect 113 0 119 0;
+#X connect 114 0 113 1;
+#X connect 114 1 113 0;
+#X connect 115 0 117 0;
+#X connect 116 0 118 0;
+#X connect 117 0 116 1;
+#X connect 117 1 116 0;
+#X connect 118 0 140 0;
+#X connect 119 0 140 0;
+#X connect 120 0 111 0;
+#X connect 121 1 133 1;
+#X connect 122 0 117 0;
+#X connect 123 0 114 0;
+#X connect 124 1 126 1;
+#X connect 125 1 126 1;
+#X connect 126 1 91 0;
+#X connect 126 1 92 0;
+#X connect 126 1 124 1;
+#X connect 126 1 147 1;
+#X connect 126 1 150 0;
+#X connect 127 1 128 1;
+#X connect 128 1 93 0;
+#X connect 128 1 94 0;
+#X connect 128 1 127 1;
+#X connect 128 1 146 1;
+#X connect 128 1 147 2;
+#X connect 128 1 151 0;
+#X connect 129 1 131 1;
+#X connect 130 1 132 1;
+#X connect 131 1 101 0;
+#X connect 131 1 102 0;
+#X connect 131 1 129 1;
+#X connect 131 1 145 1;
+#X connect 131 1 146 2;
+#X connect 131 1 152 0;
+#X connect 132 1 103 0;
+#X connect 132 1 104 0;
+#X connect 132 1 130 1;
+#X connect 132 1 145 2;
+#X connect 132 1 148 1;
+#X connect 132 1 153 0;
+#X connect 133 1 95 0;
+#X connect 133 1 96 0;
+#X connect 133 1 121 1;
+#X connect 133 1 144 1;
+#X connect 133 1 148 2;
+#X connect 133 1 154 0;
+#X connect 134 1 136 1;
+#X connect 135 1 137 1;
+#X connect 136 1 97 0;
+#X connect 136 1 98 0;
+#X connect 136 1 134 1;
+#X connect 136 1 143 1;
+#X connect 136 1 144 2;
+#X connect 136 1 155 0;
+#X connect 137 1 99 0;
+#X connect 137 1 100 0;
+#X connect 137 1 135 1;
+#X connect 137 1 142 1;
+#X connect 137 1 143 2;
+#X connect 137 1 156 0;
+#X connect 138 1 106 0;
+#X connect 138 1 107 0;
+#X connect 138 1 141 1;
+#X connect 138 1 142 2;
+#X connect 138 1 149 1;
+#X connect 138 1 157 0;
+#X connect 139 1 140 1;
+#X connect 140 1 108 0;
+#X connect 140 1 109 0;
+#X connect 140 1 139 1;
+#X connect 140 1 141 2;
+#X connect 140 1 158 0;
+#X connect 140 1 170 1;
+#X connect 141 1 138 1;
+#X connect 141 2 140 1;
+#X connect 142 1 137 1;
+#X connect 142 2 138 1;
+#X connect 143 1 136 1;
+#X connect 143 2 137 1;
+#X connect 144 1 133 1;
+#X connect 144 2 136 1;
+#X connect 145 1 131 1;
+#X connect 145 2 132 1;
+#X connect 146 1 128 1;
+#X connect 146 2 131 1;
+#X connect 147 1 126 1;
+#X connect 147 2 128 1;
+#X connect 147 2 128 1;
+#X connect 148 1 132 1;
+#X connect 148 2 133 1;
+#X connect 149 1 138 1;
+#X connect 169 0 28 0;
+#X connect 170 1 140 1;
diff --git a/extensions/xgui/doc/sound/09_more_physics7.pd b/extensions/xgui/doc/sound/09_more_physics7.pd
new file mode 100644
index 00000000..27494673
--- /dev/null
+++ b/extensions/xgui/doc/sound/09_more_physics7.pd
@@ -0,0 +1,458 @@
+#N canvas -10 -4 1006 674 12;
+#X msg 424 71 show;
+#X obj 7 37 loadbang;
+#X obj 33 75 t b b b b;
+#X msg 191 36 on;
+#X msg 220 87 xy1 \$1 \$2;
+#X msg 324 86 xy2 \$1 \$2;
+#X msg 232 156 xy1 \$1 \$2;
+#X msg 328 156 xy2 \$1 \$2;
+#X msg 228 377 xy1 \$1 \$2;
+#X msg 321 375 xy2 \$1 \$2;
+#X obj 423 124 seg l1 */my_string/l1;
+#X obj 423 179 seg l2 */my_string/l2;
+#X msg 222 452 xy1 \$1 \$2;
+#X msg 323 452 xy2 \$1 \$2;
+#X msg 221 529 xy1 \$1 \$2;
+#X msg 327 528 xy2 \$1 \$2;
+#X obj 422 98 seg m1 */my_string/m1;
+#X msg 231 230 xy1 \$1 \$2;
+#X msg 329 227 xy2 \$1 \$2;
+#X obj 425 231 seg l3 */my_string/l3;
+#X msg 227 301 xy1 \$1 \$2;
+#X msg 328 302 xy2 \$1 \$2;
+#X obj 427 290 seg l4 */my_string/l4;
+#X obj 421 667 seg m2 */my_string/m2;
+#X obj 427 351 seg l5 */my_string/l5;
+#X obj 423 413 seg l6 */my_string/l6;
+#X msg 473 71 raise;
+#X msg 229 605 xy1 \$1 \$2;
+#X msg 335 604 xy2 \$1 \$2;
+#X msg 211 688 xy1 \$1 \$2;
+#X msg 317 687 xy2 \$1 \$2;
+#X obj 424 501 seg l7 */my_string/l7;
+#X obj 428 574 seg l8 */my_string/l8;
+#X msg 533 71 width 30;
+#X msg 416 642 width 10;
+#X obj 211 662 mass m9 50 250 100 0 0;
+#X obj 232 130 mass m2 1 250 240 0 0;
+#X obj 231 204 mass m3 1 250 220 0 0;
+#X obj 227 275 mass m4 1 250 200 0 0;
+#X obj 228 351 mass m5 1 250 180 0 0;
+#X obj 216 427 mass m6 1 250 160 0 0;
+#X obj 221 503 mass m7 1 250 140 0 0;
+#X obj 229 579 mass m8 1 250 120 0 0;
+#X obj 237 36 force f1 0 10000;
+#X obj 273 637 damping d9 3000;
+#X obj 411 689 spring sl 5000 0 250 250 250 100;
+#X obj 428 600 spring s9 1000 20;
+#X obj 424 527 spring s8 1000 20;
+#X obj 423 439 spring s6 1000 20;
+#X obj 427 377 spring s5 1000 20;
+#X obj 427 316 spring s4 1000 20;
+#X obj 425 257 spring s3 1000 20;
+#X obj 426 204 spring s2 1000 20;
+#X obj 435 153 spring s1 1000 20;
+#X obj 427 43 damping d1 10;
+#X obj 293 109 damping d2 10;
+#X obj 293 180 damping d3 10;
+#X obj 292 251 damping d4 10;
+#X obj 289 327 damping d5 10;
+#X obj 291 400 damping d6 10;
+#X obj 283 478 damping d7 10;
+#X obj 291 554 damping d8 10;
+#X obj 216 58 mass m1 10 250 260 0 0;
+#X msg 70 125 color white;
+#X obj 53 156 canvas */my_string;
+#X msg 58 105 show \, size 1000 700;
+#X msg 1000 76 show;
+#X obj 655 49 loadbang;
+#X obj 681 87 t b b b b;
+#X msg 767 41 on;
+#X msg 796 92 xy1 \$1 \$2;
+#X msg 900 91 xy2 \$1 \$2;
+#X msg 808 161 xy1 \$1 \$2;
+#X msg 904 161 xy2 \$1 \$2;
+#X msg 804 382 xy1 \$1 \$2;
+#X msg 897 380 xy2 \$1 \$2;
+#X msg 798 457 xy1 \$1 \$2;
+#X msg 899 457 xy2 \$1 \$2;
+#X msg 797 534 xy1 \$1 \$2;
+#X msg 903 533 xy2 \$1 \$2;
+#X msg 807 235 xy1 \$1 \$2;
+#X msg 905 232 xy2 \$1 \$2;
+#X msg 803 306 xy1 \$1 \$2;
+#X msg 904 307 xy2 \$1 \$2;
+#X msg 1049 76 raise;
+#X msg 805 610 xy1 \$1 \$2;
+#X msg 911 609 xy2 \$1 \$2;
+#X msg 787 693 xy1 \$1 \$2;
+#X msg 893 692 xy2 \$1 \$2;
+#X msg 1109 76 width 30;
+#X msg 992 647 width 10;
+#X obj 813 41 force 1f1 0 10000;
+#X obj 869 114 damping 1d2 10;
+#X obj 869 185 damping 1d3 10;
+#X obj 868 256 damping 1d4 10;
+#X obj 865 332 damping 1d5 10;
+#X obj 867 405 damping 1d6 10;
+#X obj 859 483 damping 1d7 10;
+#X obj 867 559 damping 1d8 10;
+#X obj 849 642 damping 1d9 3000;
+#X obj 1003 48 damping 1d1 10;
+#X obj 998 103 seg 1m1 */my_string/1m1;
+#X obj 999 129 seg 1l1 */my_string/1l1;
+#X obj 997 183 seg 1l2 */my_string/1l2;
+#X obj 1001 236 seg 1l3 */my_string/1l3;
+#X obj 1003 296 seg 1l4 */my_string/1l4;
+#X obj 1004 356 seg 1l5 */my_string/1l5;
+#X obj 999 418 seg 1l6 */my_string/1l6;
+#X obj 1000 506 seg 1l7 */my_string/1l7;
+#X obj 999 156 spring 1s1 1000 20;
+#X obj 1005 205 spring 1s2 1000 20;
+#X obj 1000 263 spring 1s3 1000 20;
+#X obj 1003 318 spring 1s4 1000 20;
+#X obj 1003 376 spring 1s5 1000 20;
+#X obj 999 444 spring 1s6 1000 20;
+#X obj 1003 530 spring 1s8 1000 20;
+#X obj 1004 579 seg 1l8 */my_string/1l8;
+#X obj 1005 606 spring 1s9 1000 20;
+#X obj 997 672 seg 1m2 */my_string/1m2;
+#X obj 796 66 mass 1m1 10 750 260 0 0;
+#X obj 808 135 mass 1m2 1 750 240 0 0;
+#X obj 808 210 mass 1m3 1 750 220 0 0;
+#X obj 803 280 mass 1m4 1 750 200 0 0;
+#X obj 804 356 mass 1m5 1 750 180 0 0;
+#X obj 792 432 mass 1m6 1 750 160 0 0;
+#X obj 795 508 mass 1m7 1 750 140 0 0;
+#X obj 805 584 mass 1m8 1 750 120 0 0;
+#X obj 787 667 mass 1m9 50 750 100 0 0;
+#X obj 987 694 spring 1sl 5000 0 250 250 750 100;
+#X obj 681 330 r move_x2;
+#X obj 706 425 r move_y2;
+#X obj 691 395 -;
+#X obj 681 357 t f f;
+#X obj 708 457 t f f;
+#X obj 710 486 -;
+#X obj 682 188 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 11100 1;
+#X obj 717 189 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 0 1;
+#X obj 85 355 r move_x2;
+#X obj 125 446 r move_y2;
+#X obj 95 420 -;
+#X obj 85 382 t f f;
+#X obj 127 478 t f f;
+#X obj 129 507 -;
+#X obj 86 213 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 3800 1;
+#X obj 121 214 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 0 1;
+#X msg 105 625 move \$1 0;
+#X msg 119 580 move 0 \$1;
+#X msg 685 604 move \$1 0;
+#X msg 695 577 move 0 \$1;
+#X obj 602 122 s xy11;
+#X obj 605 179 s xy12;
+#X obj 610 230 s xy13;
+#X obj 613 289 s xy14;
+#X obj 611 354 s xy15;
+#X obj 614 410 s xy16;
+#X obj 619 460 s xy17;
+#X obj 622 519 s xy18;
+#X obj 620 646 s xy19;
+#X obj 1191 110 s xy11;
+#X obj 1194 167 s xy12;
+#X obj 1199 218 s xy13;
+#X obj 1202 277 s xy14;
+#X obj 1200 342 s xy15;
+#X obj 1203 398 s xy16;
+#X obj 1201 456 s xy17;
+#X obj 1202 513 s xy18;
+#X obj 1189 635 s xy19;
+#X connect 0 0 11 0;
+#X connect 0 0 16 0;
+#X connect 0 0 10 0;
+#X connect 0 0 23 0;
+#X connect 0 0 19 0;
+#X connect 0 0 22 0;
+#X connect 0 0 24 0;
+#X connect 0 0 25 0;
+#X connect 0 0 31 0;
+#X connect 0 0 32 0;
+#X connect 1 0 2 0;
+#X connect 2 0 33 0;
+#X connect 2 0 26 0;
+#X connect 2 0 34 0;
+#X connect 2 0 3 0;
+#X connect 2 1 0 0;
+#X connect 2 2 63 0;
+#X connect 2 3 65 0;
+#X connect 3 0 35 0;
+#X connect 3 0 36 0;
+#X connect 3 0 37 0;
+#X connect 3 0 38 0;
+#X connect 3 0 39 0;
+#X connect 3 0 40 0;
+#X connect 3 0 41 0;
+#X connect 3 0 42 0;
+#X connect 3 0 62 0;
+#X connect 4 0 10 0;
+#X connect 4 0 16 0;
+#X connect 5 0 16 0;
+#X connect 6 0 11 0;
+#X connect 7 0 10 0;
+#X connect 8 0 24 0;
+#X connect 9 0 22 0;
+#X connect 12 0 25 0;
+#X connect 13 0 24 0;
+#X connect 14 0 31 0;
+#X connect 15 0 25 0;
+#X connect 17 0 19 0;
+#X connect 18 0 11 0;
+#X connect 20 0 22 0;
+#X connect 21 0 19 0;
+#X connect 26 0 16 0;
+#X connect 27 0 32 0;
+#X connect 28 0 31 0;
+#X connect 29 0 23 0;
+#X connect 30 0 32 0;
+#X connect 30 0 23 0;
+#X connect 33 0 16 0;
+#X connect 34 0 23 0;
+#X connect 35 1 29 0;
+#X connect 35 1 30 0;
+#X connect 35 1 44 1;
+#X connect 35 1 45 1;
+#X connect 35 1 46 2;
+#X connect 35 1 157 0;
+#X connect 36 1 6 0;
+#X connect 36 1 7 0;
+#X connect 36 1 52 1;
+#X connect 36 1 53 2;
+#X connect 36 1 55 1;
+#X connect 36 1 150 0;
+#X connect 37 1 17 0;
+#X connect 37 1 18 0;
+#X connect 37 1 51 1;
+#X connect 37 1 52 2;
+#X connect 37 1 56 1;
+#X connect 37 1 151 0;
+#X connect 38 1 20 0;
+#X connect 38 1 21 0;
+#X connect 38 1 50 1;
+#X connect 38 1 51 2;
+#X connect 38 1 57 1;
+#X connect 38 1 152 0;
+#X connect 39 1 8 0;
+#X connect 39 1 9 0;
+#X connect 39 1 49 1;
+#X connect 39 1 50 2;
+#X connect 39 1 58 1;
+#X connect 39 1 153 0;
+#X connect 40 1 12 0;
+#X connect 40 1 13 0;
+#X connect 40 1 48 1;
+#X connect 40 1 49 2;
+#X connect 40 1 59 1;
+#X connect 40 1 154 0;
+#X connect 41 1 14 0;
+#X connect 41 1 15 0;
+#X connect 41 1 47 1;
+#X connect 41 1 48 2;
+#X connect 41 1 60 1;
+#X connect 41 1 155 0;
+#X connect 42 1 27 0;
+#X connect 42 1 28 0;
+#X connect 42 1 46 1;
+#X connect 42 1 47 2;
+#X connect 42 1 61 1;
+#X connect 42 1 156 0;
+#X connect 43 1 62 1;
+#X connect 44 1 35 1;
+#X connect 45 1 35 1;
+#X connect 46 1 42 1;
+#X connect 46 2 35 1;
+#X connect 47 1 41 1;
+#X connect 47 2 42 1;
+#X connect 48 1 40 1;
+#X connect 48 2 41 1;
+#X connect 49 1 39 1;
+#X connect 49 2 40 1;
+#X connect 50 1 38 1;
+#X connect 50 2 39 1;
+#X connect 51 1 37 1;
+#X connect 51 2 38 1;
+#X connect 52 1 36 1;
+#X connect 52 2 37 1;
+#X connect 53 1 62 1;
+#X connect 53 2 36 1;
+#X connect 53 2 36 1;
+#X connect 54 1 62 1;
+#X connect 55 1 36 1;
+#X connect 56 1 37 1;
+#X connect 57 1 38 1;
+#X connect 58 1 39 1;
+#X connect 59 1 40 1;
+#X connect 60 1 41 1;
+#X connect 61 1 42 1;
+#X connect 62 1 4 0;
+#X connect 62 1 5 0;
+#X connect 62 1 53 1;
+#X connect 62 1 54 1;
+#X connect 62 1 149 0;
+#X connect 63 0 64 0;
+#X connect 65 0 64 0;
+#X connect 66 0 101 0;
+#X connect 66 0 102 0;
+#X connect 66 0 103 0;
+#X connect 66 0 104 0;
+#X connect 66 0 105 0;
+#X connect 66 0 106 0;
+#X connect 66 0 107 0;
+#X connect 66 0 108 0;
+#X connect 66 0 116 0;
+#X connect 66 0 118 0;
+#X connect 67 0 68 0;
+#X connect 68 0 89 0;
+#X connect 68 0 84 0;
+#X connect 68 0 69 0;
+#X connect 68 0 90 0;
+#X connect 68 1 66 0;
+#X connect 69 0 119 0;
+#X connect 69 0 120 0;
+#X connect 69 0 121 0;
+#X connect 69 0 122 0;
+#X connect 69 0 123 0;
+#X connect 69 0 124 0;
+#X connect 69 0 125 0;
+#X connect 69 0 126 0;
+#X connect 69 0 127 0;
+#X connect 70 0 101 0;
+#X connect 70 0 102 0;
+#X connect 71 0 101 0;
+#X connect 72 0 103 0;
+#X connect 73 0 102 0;
+#X connect 74 0 106 0;
+#X connect 75 0 105 0;
+#X connect 76 0 107 0;
+#X connect 77 0 106 0;
+#X connect 78 0 108 0;
+#X connect 79 0 107 0;
+#X connect 80 0 104 0;
+#X connect 81 0 103 0;
+#X connect 82 0 105 0;
+#X connect 83 0 104 0;
+#X connect 84 0 101 0;
+#X connect 85 0 116 0;
+#X connect 86 0 108 0;
+#X connect 87 0 118 0;
+#X connect 88 0 116 0;
+#X connect 88 0 118 0;
+#X connect 89 0 101 0;
+#X connect 90 0 118 0;
+#X connect 91 1 119 1;
+#X connect 92 1 120 1;
+#X connect 93 1 121 1;
+#X connect 94 1 122 1;
+#X connect 95 1 123 1;
+#X connect 96 1 124 1;
+#X connect 97 1 125 1;
+#X connect 97 1 164 0;
+#X connect 98 1 126 1;
+#X connect 99 1 127 1;
+#X connect 100 1 119 1;
+#X connect 109 1 119 1;
+#X connect 109 2 120 1;
+#X connect 109 2 120 1;
+#X connect 110 1 120 1;
+#X connect 110 2 121 1;
+#X connect 111 1 121 1;
+#X connect 111 2 122 1;
+#X connect 112 1 122 1;
+#X connect 112 2 123 1;
+#X connect 113 1 123 1;
+#X connect 113 2 124 1;
+#X connect 114 1 124 1;
+#X connect 114 2 125 1;
+#X connect 115 1 125 1;
+#X connect 115 2 126 1;
+#X connect 117 1 126 1;
+#X connect 117 2 127 1;
+#X connect 119 1 70 0;
+#X connect 119 1 71 0;
+#X connect 119 1 100 1;
+#X connect 119 1 109 1;
+#X connect 119 1 158 0;
+#X connect 120 1 72 0;
+#X connect 120 1 73 0;
+#X connect 120 1 92 1;
+#X connect 120 1 109 2;
+#X connect 120 1 110 1;
+#X connect 120 1 159 0;
+#X connect 121 1 80 0;
+#X connect 121 1 81 0;
+#X connect 121 1 93 1;
+#X connect 121 1 110 2;
+#X connect 121 1 111 1;
+#X connect 121 1 160 0;
+#X connect 122 1 82 0;
+#X connect 122 1 83 0;
+#X connect 122 1 94 1;
+#X connect 122 1 111 2;
+#X connect 122 1 112 1;
+#X connect 122 1 161 0;
+#X connect 123 1 74 0;
+#X connect 123 1 75 0;
+#X connect 123 1 95 1;
+#X connect 123 1 112 2;
+#X connect 123 1 113 1;
+#X connect 123 1 162 0;
+#X connect 124 1 76 0;
+#X connect 124 1 77 0;
+#X connect 124 1 96 1;
+#X connect 124 1 113 2;
+#X connect 124 1 114 1;
+#X connect 124 1 163 0;
+#X connect 125 1 78 0;
+#X connect 125 1 79 0;
+#X connect 125 1 97 1;
+#X connect 125 1 114 2;
+#X connect 125 1 115 1;
+#X connect 126 1 85 0;
+#X connect 126 1 86 0;
+#X connect 126 1 98 1;
+#X connect 126 1 115 2;
+#X connect 126 1 117 1;
+#X connect 126 1 165 0;
+#X connect 127 1 87 0;
+#X connect 127 1 88 0;
+#X connect 127 1 99 1;
+#X connect 127 1 117 2;
+#X connect 127 1 128 1;
+#X connect 127 1 166 0;
+#X connect 128 1 127 1;
+#X connect 129 0 132 0;
+#X connect 130 0 133 0;
+#X connect 131 0 147 0;
+#X connect 132 0 131 1;
+#X connect 132 1 131 0;
+#X connect 133 0 134 1;
+#X connect 133 1 134 0;
+#X connect 134 0 148 0;
+#X connect 135 0 132 0;
+#X connect 136 0 133 0;
+#X connect 137 0 140 0;
+#X connect 138 0 141 0;
+#X connect 139 0 145 0;
+#X connect 140 0 139 1;
+#X connect 140 1 139 0;
+#X connect 141 0 142 1;
+#X connect 141 1 142 0;
+#X connect 142 0 146 0;
+#X connect 143 0 140 0;
+#X connect 144 0 141 0;
+#X connect 145 0 35 0;
+#X connect 146 0 35 0;
+#X connect 147 0 127 0;
+#X connect 148 0 127 0;
diff --git a/extensions/xgui/doc/sound/2yoyo.pd b/extensions/xgui/doc/sound/2yoyo.pd
new file mode 100644
index 00000000..87be4259
--- /dev/null
+++ b/extensions/xgui/doc/sound/2yoyo.pd
@@ -0,0 +1,464 @@
+#N canvas -10 -4 1010 680 12;
+#X msg 424 71 show;
+#X obj 7 37 loadbang;
+#X obj 33 75 t b b b b;
+#X msg 191 36 on;
+#X msg 220 87 xy1 \$1 \$2;
+#X msg 324 86 xy2 \$1 \$2;
+#X msg 232 156 xy1 \$1 \$2;
+#X msg 328 156 xy2 \$1 \$2;
+#X msg 228 377 xy1 \$1 \$2;
+#X msg 321 375 xy2 \$1 \$2;
+#X obj 423 124 seg l1 */my_string/l1;
+#X obj 423 179 seg l2 */my_string/l2;
+#X msg 222 452 xy1 \$1 \$2;
+#X msg 323 452 xy2 \$1 \$2;
+#X msg 221 529 xy1 \$1 \$2;
+#X msg 327 528 xy2 \$1 \$2;
+#X obj 422 98 seg m1 */my_string/m1;
+#X msg 231 230 xy1 \$1 \$2;
+#X msg 329 227 xy2 \$1 \$2;
+#X obj 425 231 seg l3 */my_string/l3;
+#X msg 227 301 xy1 \$1 \$2;
+#X msg 328 302 xy2 \$1 \$2;
+#X obj 427 290 seg l4 */my_string/l4;
+#X obj 421 667 seg m2 */my_string/m2;
+#X obj 427 351 seg l5 */my_string/l5;
+#X obj 423 413 seg l6 */my_string/l6;
+#X msg 473 71 raise;
+#X msg 229 605 xy1 \$1 \$2;
+#X msg 335 604 xy2 \$1 \$2;
+#X msg 211 688 xy1 \$1 \$2;
+#X msg 317 687 xy2 \$1 \$2;
+#X obj 424 501 seg l7 */my_string/l7;
+#X obj 428 574 seg l8 */my_string/l8;
+#X msg 533 71 width 30;
+#X msg 416 642 width 10;
+#X obj 211 662 mass m9 50 250 100 0 0;
+#X obj 232 130 mass m2 1 250 240 0 0;
+#X obj 231 204 mass m3 1 250 220 0 0;
+#X obj 227 275 mass m4 1 250 200 0 0;
+#X obj 228 351 mass m5 1 250 180 0 0;
+#X obj 216 427 mass m6 1 250 160 0 0;
+#X obj 221 503 mass m7 1 250 140 0 0;
+#X obj 229 579 mass m8 1 250 120 0 0;
+#X obj 237 36 force f1 0 10000;
+#X obj 273 637 damping d9 3000;
+#X obj 411 689 spring sl 5000 0 250 250 250 100;
+#X obj 428 600 spring s9 1000 20;
+#X obj 424 527 spring s8 1000 20;
+#X obj 423 439 spring s6 1000 20;
+#X obj 427 377 spring s5 1000 20;
+#X obj 427 316 spring s4 1000 20;
+#X obj 425 257 spring s3 1000 20;
+#X obj 426 204 spring s2 1000 20;
+#X obj 435 153 spring s1 1000 20;
+#X obj 427 43 damping d1 10;
+#X obj 293 109 damping d2 10;
+#X obj 293 180 damping d3 10;
+#X obj 292 251 damping d4 10;
+#X obj 289 327 damping d5 10;
+#X obj 291 400 damping d6 10;
+#X obj 283 478 damping d7 10;
+#X obj 291 554 damping d8 10;
+#X obj 216 58 mass m1 10 250 260 0 0;
+#X msg 70 125 color white;
+#X obj 53 156 canvas */my_string;
+#X msg 58 105 show \, size 1000 700;
+#X msg 1000 76 show;
+#X obj 655 49 loadbang;
+#X obj 681 87 t b b b b;
+#X msg 767 41 on;
+#X msg 796 92 xy1 \$1 \$2;
+#X msg 900 91 xy2 \$1 \$2;
+#X msg 808 161 xy1 \$1 \$2;
+#X msg 904 161 xy2 \$1 \$2;
+#X msg 804 382 xy1 \$1 \$2;
+#X msg 897 380 xy2 \$1 \$2;
+#X msg 798 457 xy1 \$1 \$2;
+#X msg 899 457 xy2 \$1 \$2;
+#X msg 797 534 xy1 \$1 \$2;
+#X msg 903 533 xy2 \$1 \$2;
+#X msg 807 235 xy1 \$1 \$2;
+#X msg 905 232 xy2 \$1 \$2;
+#X msg 803 306 xy1 \$1 \$2;
+#X msg 904 307 xy2 \$1 \$2;
+#X msg 1049 76 raise;
+#X msg 805 610 xy1 \$1 \$2;
+#X msg 911 609 xy2 \$1 \$2;
+#X msg 787 693 xy1 \$1 \$2;
+#X msg 893 692 xy2 \$1 \$2;
+#X msg 1109 76 width 30;
+#X msg 992 647 width 10;
+#X obj 813 41 force 1f1 0 10000;
+#X obj 869 114 damping 1d2 10;
+#X obj 869 185 damping 1d3 10;
+#X obj 868 256 damping 1d4 10;
+#X obj 865 332 damping 1d5 10;
+#X obj 867 405 damping 1d6 10;
+#X obj 859 483 damping 1d7 10;
+#X obj 867 559 damping 1d8 10;
+#X obj 849 642 damping 1d9 3000;
+#X obj 1003 48 damping 1d1 10;
+#X obj 998 103 seg 1m1 */my_string/1m1;
+#X obj 999 129 seg 1l1 */my_string/1l1;
+#X obj 997 183 seg 1l2 */my_string/1l2;
+#X obj 1001 236 seg 1l3 */my_string/1l3;
+#X obj 1003 296 seg 1l4 */my_string/1l4;
+#X obj 1004 356 seg 1l5 */my_string/1l5;
+#X obj 999 418 seg 1l6 */my_string/1l6;
+#X obj 1000 506 seg 1l7 */my_string/1l7;
+#X obj 999 156 spring 1s1 1000 20;
+#X obj 1005 205 spring 1s2 1000 20;
+#X obj 1000 263 spring 1s3 1000 20;
+#X obj 1003 318 spring 1s4 1000 20;
+#X obj 1003 376 spring 1s5 1000 20;
+#X obj 999 444 spring 1s6 1000 20;
+#X obj 1003 530 spring 1s8 1000 20;
+#X obj 1004 579 seg 1l8 */my_string/1l8;
+#X obj 1005 606 spring 1s9 1000 20;
+#X obj 997 672 seg 1m2 */my_string/1m2;
+#X obj 796 66 mass 1m1 10 750 260 0 0;
+#X obj 808 135 mass 1m2 1 750 240 0 0;
+#X obj 808 210 mass 1m3 1 750 220 0 0;
+#X obj 803 280 mass 1m4 1 750 200 0 0;
+#X obj 804 356 mass 1m5 1 750 180 0 0;
+#X obj 792 432 mass 1m6 1 750 160 0 0;
+#X obj 795 508 mass 1m7 1 750 140 0 0;
+#X obj 805 584 mass 1m8 1 750 120 0 0;
+#X obj 787 667 mass 1m9 50 750 100 0 0;
+#X obj 987 694 spring 1sl 5000 0 250 250 750 100;
+#X obj 681 330 r move_x2;
+#X obj 706 425 r move_y2;
+#X obj 691 395 -;
+#X obj 681 357 t f f;
+#X obj 708 457 t f f;
+#X obj 710 486 -;
+#X obj 682 188 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 5500 1;
+#X obj 717 189 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 12700 1;
+#X obj 95 420 -;
+#X obj 85 382 t f f;
+#X obj 127 478 t f f;
+#X obj 129 507 -;
+#X obj 86 213 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 0 1;
+#X obj 121 214 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 0 1;
+#X msg 105 625 move \$1 0;
+#X msg 119 580 move 0 \$1;
+#X msg 685 604 move \$1 0;
+#X msg 695 577 move 0 \$1;
+#X obj 602 122 s xy11;
+#X obj 605 179 s xy12;
+#X obj 610 230 s xy13;
+#X obj 613 289 s xy14;
+#X obj 611 354 s xy15;
+#X obj 614 410 s xy16;
+#X obj 619 460 s xy17;
+#X obj 622 519 s xy18;
+#X obj 620 646 s xy19;
+#X obj 86 356 r move_x1;
+#X obj 125 446 r move_y1;
+#X obj 1191 110 s xy21;
+#X obj 1194 167 s xy22;
+#X obj 1199 218 s xy23;
+#X obj 1202 276 s xy24;
+#X obj 1200 342 s xy25;
+#X obj 1203 398 s xy26;
+#X obj 1199 456 s xy27;
+#X obj 1202 513 s xy28;
+#X obj 1189 635 s xy29;
+#X msg 545 44 color blue;
+#X msg 1125 48 color red;
+#X connect 0 0 11 0;
+#X connect 0 0 16 0;
+#X connect 0 0 10 0;
+#X connect 0 0 23 0;
+#X connect 0 0 19 0;
+#X connect 0 0 22 0;
+#X connect 0 0 24 0;
+#X connect 0 0 25 0;
+#X connect 0 0 31 0;
+#X connect 0 0 32 0;
+#X connect 1 0 2 0;
+#X connect 2 0 33 0;
+#X connect 2 0 26 0;
+#X connect 2 0 34 0;
+#X connect 2 0 3 0;
+#X connect 2 0 167 0;
+#X connect 2 1 0 0;
+#X connect 2 2 63 0;
+#X connect 2 3 65 0;
+#X connect 3 0 35 0;
+#X connect 3 0 36 0;
+#X connect 3 0 37 0;
+#X connect 3 0 38 0;
+#X connect 3 0 39 0;
+#X connect 3 0 40 0;
+#X connect 3 0 41 0;
+#X connect 3 0 42 0;
+#X connect 3 0 62 0;
+#X connect 4 0 10 0;
+#X connect 4 0 16 0;
+#X connect 5 0 16 0;
+#X connect 6 0 11 0;
+#X connect 7 0 10 0;
+#X connect 8 0 24 0;
+#X connect 9 0 22 0;
+#X connect 12 0 25 0;
+#X connect 13 0 24 0;
+#X connect 14 0 31 0;
+#X connect 15 0 25 0;
+#X connect 17 0 19 0;
+#X connect 18 0 11 0;
+#X connect 20 0 22 0;
+#X connect 21 0 19 0;
+#X connect 26 0 16 0;
+#X connect 27 0 32 0;
+#X connect 28 0 31 0;
+#X connect 29 0 23 0;
+#X connect 30 0 32 0;
+#X connect 30 0 23 0;
+#X connect 33 0 16 0;
+#X connect 34 0 23 0;
+#X connect 35 1 29 0;
+#X connect 35 1 30 0;
+#X connect 35 1 44 1;
+#X connect 35 1 45 1;
+#X connect 35 1 46 2;
+#X connect 35 1 155 0;
+#X connect 36 1 6 0;
+#X connect 36 1 7 0;
+#X connect 36 1 52 1;
+#X connect 36 1 53 2;
+#X connect 36 1 55 1;
+#X connect 36 1 148 0;
+#X connect 37 1 17 0;
+#X connect 37 1 18 0;
+#X connect 37 1 51 1;
+#X connect 37 1 52 2;
+#X connect 37 1 56 1;
+#X connect 37 1 149 0;
+#X connect 38 1 20 0;
+#X connect 38 1 21 0;
+#X connect 38 1 50 1;
+#X connect 38 1 51 2;
+#X connect 38 1 57 1;
+#X connect 38 1 150 0;
+#X connect 39 1 8 0;
+#X connect 39 1 9 0;
+#X connect 39 1 49 1;
+#X connect 39 1 50 2;
+#X connect 39 1 58 1;
+#X connect 39 1 151 0;
+#X connect 40 1 12 0;
+#X connect 40 1 13 0;
+#X connect 40 1 48 1;
+#X connect 40 1 49 2;
+#X connect 40 1 59 1;
+#X connect 40 1 152 0;
+#X connect 41 1 14 0;
+#X connect 41 1 15 0;
+#X connect 41 1 47 1;
+#X connect 41 1 48 2;
+#X connect 41 1 60 1;
+#X connect 41 1 153 0;
+#X connect 42 1 27 0;
+#X connect 42 1 28 0;
+#X connect 42 1 46 1;
+#X connect 42 1 47 2;
+#X connect 42 1 61 1;
+#X connect 42 1 154 0;
+#X connect 43 1 62 1;
+#X connect 44 1 35 1;
+#X connect 45 1 35 1;
+#X connect 46 1 42 1;
+#X connect 46 2 35 1;
+#X connect 47 1 41 1;
+#X connect 47 2 42 1;
+#X connect 48 1 40 1;
+#X connect 48 2 41 1;
+#X connect 49 1 39 1;
+#X connect 49 2 40 1;
+#X connect 50 1 38 1;
+#X connect 50 2 39 1;
+#X connect 51 1 37 1;
+#X connect 51 2 38 1;
+#X connect 52 1 36 1;
+#X connect 52 2 37 1;
+#X connect 53 1 62 1;
+#X connect 53 2 36 1;
+#X connect 53 2 36 1;
+#X connect 54 1 62 1;
+#X connect 55 1 36 1;
+#X connect 56 1 37 1;
+#X connect 57 1 38 1;
+#X connect 58 1 39 1;
+#X connect 59 1 40 1;
+#X connect 60 1 41 1;
+#X connect 61 1 42 1;
+#X connect 62 1 4 0;
+#X connect 62 1 5 0;
+#X connect 62 1 53 1;
+#X connect 62 1 54 1;
+#X connect 62 1 147 0;
+#X connect 63 0 64 0;
+#X connect 65 0 64 0;
+#X connect 66 0 101 0;
+#X connect 66 0 102 0;
+#X connect 66 0 103 0;
+#X connect 66 0 104 0;
+#X connect 66 0 105 0;
+#X connect 66 0 106 0;
+#X connect 66 0 107 0;
+#X connect 66 0 108 0;
+#X connect 66 0 116 0;
+#X connect 66 0 118 0;
+#X connect 67 0 68 0;
+#X connect 67 0 168 0;
+#X connect 68 0 89 0;
+#X connect 68 0 84 0;
+#X connect 68 0 69 0;
+#X connect 68 0 90 0;
+#X connect 68 1 66 0;
+#X connect 69 0 119 0;
+#X connect 69 0 120 0;
+#X connect 69 0 121 0;
+#X connect 69 0 122 0;
+#X connect 69 0 123 0;
+#X connect 69 0 124 0;
+#X connect 69 0 125 0;
+#X connect 69 0 126 0;
+#X connect 69 0 127 0;
+#X connect 70 0 101 0;
+#X connect 70 0 102 0;
+#X connect 71 0 101 0;
+#X connect 72 0 103 0;
+#X connect 73 0 102 0;
+#X connect 74 0 106 0;
+#X connect 75 0 105 0;
+#X connect 76 0 107 0;
+#X connect 77 0 106 0;
+#X connect 78 0 108 0;
+#X connect 79 0 107 0;
+#X connect 80 0 104 0;
+#X connect 81 0 103 0;
+#X connect 82 0 105 0;
+#X connect 83 0 104 0;
+#X connect 84 0 101 0;
+#X connect 85 0 116 0;
+#X connect 86 0 108 0;
+#X connect 87 0 118 0;
+#X connect 88 0 116 0;
+#X connect 88 0 118 0;
+#X connect 89 0 101 0;
+#X connect 90 0 118 0;
+#X connect 91 1 119 1;
+#X connect 92 1 120 1;
+#X connect 93 1 121 1;
+#X connect 94 1 122 1;
+#X connect 95 1 123 1;
+#X connect 96 1 124 1;
+#X connect 97 1 125 1;
+#X connect 97 1 164 0;
+#X connect 98 1 126 1;
+#X connect 99 1 127 1;
+#X connect 100 1 119 1;
+#X connect 109 1 119 1;
+#X connect 109 2 120 1;
+#X connect 109 2 120 1;
+#X connect 110 1 120 1;
+#X connect 110 2 121 1;
+#X connect 111 1 121 1;
+#X connect 111 2 122 1;
+#X connect 112 1 122 1;
+#X connect 112 2 123 1;
+#X connect 113 1 123 1;
+#X connect 113 2 124 1;
+#X connect 114 1 124 1;
+#X connect 114 2 125 1;
+#X connect 115 1 125 1;
+#X connect 115 2 126 1;
+#X connect 117 1 126 1;
+#X connect 117 2 127 1;
+#X connect 119 1 70 0;
+#X connect 119 1 71 0;
+#X connect 119 1 100 1;
+#X connect 119 1 109 1;
+#X connect 119 1 158 0;
+#X connect 120 1 72 0;
+#X connect 120 1 73 0;
+#X connect 120 1 92 1;
+#X connect 120 1 109 2;
+#X connect 120 1 110 1;
+#X connect 120 1 159 0;
+#X connect 121 1 80 0;
+#X connect 121 1 81 0;
+#X connect 121 1 93 1;
+#X connect 121 1 110 2;
+#X connect 121 1 111 1;
+#X connect 121 1 160 0;
+#X connect 122 1 82 0;
+#X connect 122 1 83 0;
+#X connect 122 1 94 1;
+#X connect 122 1 111 2;
+#X connect 122 1 112 1;
+#X connect 122 1 161 0;
+#X connect 123 1 74 0;
+#X connect 123 1 75 0;
+#X connect 123 1 95 1;
+#X connect 123 1 112 2;
+#X connect 123 1 113 1;
+#X connect 123 1 162 0;
+#X connect 124 1 76 0;
+#X connect 124 1 77 0;
+#X connect 124 1 96 1;
+#X connect 124 1 113 2;
+#X connect 124 1 114 1;
+#X connect 124 1 163 0;
+#X connect 125 1 78 0;
+#X connect 125 1 79 0;
+#X connect 125 1 97 1;
+#X connect 125 1 114 2;
+#X connect 125 1 115 1;
+#X connect 126 1 85 0;
+#X connect 126 1 86 0;
+#X connect 126 1 98 1;
+#X connect 126 1 115 2;
+#X connect 126 1 117 1;
+#X connect 126 1 165 0;
+#X connect 127 1 87 0;
+#X connect 127 1 88 0;
+#X connect 127 1 99 1;
+#X connect 127 1 117 2;
+#X connect 127 1 128 1;
+#X connect 127 1 166 0;
+#X connect 128 1 127 1;
+#X connect 129 0 132 0;
+#X connect 130 0 133 0;
+#X connect 131 0 145 0;
+#X connect 132 0 131 1;
+#X connect 132 1 131 0;
+#X connect 133 0 134 1;
+#X connect 133 1 134 0;
+#X connect 134 0 146 0;
+#X connect 135 0 132 0;
+#X connect 136 0 133 0;
+#X connect 137 0 143 0;
+#X connect 138 0 137 1;
+#X connect 138 1 137 0;
+#X connect 139 0 140 1;
+#X connect 139 1 140 0;
+#X connect 140 0 144 0;
+#X connect 141 0 138 0;
+#X connect 142 0 139 0;
+#X connect 143 0 35 0;
+#X connect 144 0 35 0;
+#X connect 145 0 127 0;
+#X connect 146 0 127 0;
+#X connect 156 0 138 0;
+#X connect 157 0 139 0;
+#X connect 167 0 16 0;
+#X connect 168 0 101 0;
diff --git a/extensions/xgui/doc/sound/2yoyos.pd b/extensions/xgui/doc/sound/2yoyos.pd
new file mode 100644
index 00000000..9c8ae407
--- /dev/null
+++ b/extensions/xgui/doc/sound/2yoyos.pd
@@ -0,0 +1,462 @@
+#N canvas 17 1 1006 674 12;
+#X msg 473 120 show;
+#X obj 7 84 loadbang;
+#X obj 33 122 t b b b b;
+#X msg 207 73 on;
+#X msg 242 127 xy1 \$1 \$2;
+#X msg 346 126 xy2 \$1 \$2;
+#X text 51 224 dh20020404;
+#X msg 240 200 xy1 \$1 \$2;
+#X msg 336 200 xy2 \$1 \$2;
+#X msg 224 422 xy1 \$1 \$2;
+#X msg 317 420 xy2 \$1 \$2;
+#X msg 218 498 xy1 \$1 \$2;
+#X msg 319 498 xy2 \$1 \$2;
+#X msg 209 573 xy1 \$1 \$2;
+#X msg 315 572 xy2 \$1 \$2;
+#X msg 233 276 xy1 \$1 \$2;
+#X msg 331 273 xy2 \$1 \$2;
+#X msg 228 347 xy1 \$1 \$2;
+#X msg 329 348 xy2 \$1 \$2;
+#X msg 522 120 raise;
+#X msg 212 653 xy1 \$1 \$2;
+#X msg 318 652 xy2 \$1 \$2;
+#X msg 106 732 xy1 \$1 \$2;
+#X msg 212 731 xy2 \$1 \$2;
+#X msg 585 119 width 30;
+#X msg 339 688 width 10;
+#X text 59 246 dh20020405;
+#X msg 70 172 color white;
+#X obj 53 203 canvas */my_string;
+#X obj 89 276 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 11500 1;
+#X obj 22 581 -;
+#X obj 43 544 t f f;
+#X obj 40 323 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X obj 20 469 -;
+#X obj 41 432 t f f;
+#X msg 24 512 drag \$1 0;
+#X msg 26 624 drag 0 \$1;
+#X obj 121 641 loadbang;
+#X obj 434 90 damping \$0d1 10;
+#X obj 259 76 force \$0f1 0 10000;
+#X obj 241 101 mass \$0m1 2 250 260 0 0;
+#X obj 301 153 damping \$0d2 10;
+#X obj 240 174 mass \$0m2 1 250 240 0 0;
+#X obj 295 226 damping \$0d3 10;
+#X obj 233 250 mass \$0m3 1 250 220 0 0;
+#X obj 293 297 damping \$0d4 10;
+#X obj 228 321 mass \$0m4 1 250 200 0 0;
+#X obj 285 372 damping \$0d5 10;
+#X obj 224 396 mass \$0m5 1 250 180 0 0;
+#X obj 287 446 damping \$0d6 10;
+#X obj 212 473 mass \$0m6 1 250 160 0 0;
+#X obj 271 522 damping \$0d7 10;
+#X obj 209 547 mass \$0m7 1 250 140 0 0;
+#X obj 277 599 damping \$0d8 10;
+#X obj 212 627 mass \$0m8 1 250 120 0 0;
+#X obj 476 152 seg \$0m1 */my_string/m1;
+#X obj 472 191 seg \$0l1 */my_string/l1;
+#X obj 472 218 spring \$0s1 1000 20;
+#X obj 472 248 seg \$0l2 */my_string/l2;
+#X obj 458 275 spring \$0s2 1000 20;
+#X obj 455 313 seg \$0l3 */my_string/l3;
+#X obj 455 339 spring \$0s3 1000 20;
+#X obj 452 373 seg \$0l4 */my_string/l4;
+#X obj 452 399 spring \$0s4 1000 20;
+#X obj 454 428 seg \$0l5 */my_string/l5;
+#X obj 454 454 spring \$0s5 1000 20;
+#X obj 455 508 seg \$0l6 */my_string/l6;
+#X obj 455 534 spring \$0s6 1000 20;
+#X obj 458 588 seg \$0l7 */my_string/l7;
+#X obj 458 614 spring \$0s8 1000 20;
+#X obj 450 666 seg \$0l8 */my_string/l8;
+#X obj 450 692 spring \$0s9 1000 20;
+#X obj 344 718 seg \$0m2 */my_string/m2;
+#X obj 334 740 spring \$0sl 5000 0 250 250 250 100;
+#X obj 106 706 mass \$0m9 50 250 100 0 0;
+#X obj 168 681 damping \$0d9 3000;
+#X msg 1138 109 show;
+#X obj 691 84 loadbang;
+#X obj 741 105 t b b b b;
+#X msg 872 62 on;
+#X msg 907 116 xy1 \$1 \$2;
+#X msg 1011 115 xy2 \$1 \$2;
+#X msg 905 189 xy1 \$1 \$2;
+#X msg 1001 189 xy2 \$1 \$2;
+#X msg 889 411 xy1 \$1 \$2;
+#X msg 982 409 xy2 \$1 \$2;
+#X msg 883 487 xy1 \$1 \$2;
+#X msg 984 487 xy2 \$1 \$2;
+#X msg 874 562 xy1 \$1 \$2;
+#X msg 980 561 xy2 \$1 \$2;
+#X msg 898 265 xy1 \$1 \$2;
+#X msg 996 262 xy2 \$1 \$2;
+#X msg 893 336 xy1 \$1 \$2;
+#X msg 994 337 xy2 \$1 \$2;
+#X msg 1187 109 raise;
+#X msg 877 642 xy1 \$1 \$2;
+#X msg 983 641 xy2 \$1 \$2;
+#X msg 771 721 xy1 \$1 \$2;
+#X msg 877 720 xy2 \$1 \$2;
+#X msg 1250 108 width 30;
+#X msg 1004 677 width 10;
+#X obj 761 262 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144
+-1 -1 10800 1;
+#X obj 687 570 -;
+#X obj 708 533 t f f;
+#X obj 710 312 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 4800 1;
+#X obj 685 458 -;
+#X obj 706 421 t f f;
+#X msg 689 501 drag \$1 0;
+#X msg 691 613 drag 0 \$1;
+#X obj 786 630 loadbang;
+#X obj 1109 75 damping d1 10;
+#X obj 924 65 force f1 0 10000;
+#X obj 966 144 damping d2 10;
+#X obj 960 215 damping d3 10;
+#X obj 958 286 damping d4 10;
+#X obj 953 435 damping d6 10;
+#X obj 936 511 damping d7 10;
+#X obj 833 670 damping d9 3000;
+#X obj 771 695 mass m9 50 350 100 0 0;
+#X obj 1115 681 spring s9 1000 20;
+#X obj 1123 603 spring s8 1000 20;
+#X obj 1120 527 spring s6 1000 20;
+#X obj 1119 443 spring s5 1000 20;
+#X obj 1120 328 spring s3 1000 20;
+#X obj 1123 264 spring s2 1000 20;
+#X obj 1136 207 spring s1 1000 20;
+#X obj 1117 388 spring s4 1000 20;
+#X obj 942 588 damping d8 10;
+#X obj 819 380 s xy11;
+#X obj 819 408 s xy12;
+#X obj 819 438 s xy13;
+#X obj 819 462 s xy14;
+#X obj 819 488 s xy15;
+#X obj 818 516 s xy16;
+#X obj 817 544 s xy17;
+#X obj 816 570 s xy18;
+#X obj 816 594 s xy19;
+#X obj 1141 141 seg m1 */my_string/1m1;
+#X obj 1137 180 seg l1 */my_string/1l1;
+#X obj 1124 236 seg l2 */my_string/1l2;
+#X obj 1120 302 seg l3 */my_string/1l3;
+#X obj 1117 362 seg l4 */my_string/1l4;
+#X obj 1119 417 seg l5 */my_string/1l5;
+#X obj 1119 499 seg l6 */my_string/1l6;
+#X obj 1123 577 seg l7 */my_string/1l7;
+#X obj 1120 656 seg l8 */my_string/1l8;
+#X obj 1009 707 seg m2 */my_string/1m2;
+#X msg 52 148 show \, size 1000 700;
+#X obj 1001 731 spring sl 5000 0 250 250 750 100;
+#X obj 17 283 r x2;
+#X obj 18 259 r y2;
+#X obj 681 249 r x1;
+#X obj 682 274 r y1;
+#X obj 154 391 s xy21;
+#X obj 154 419 s xy22;
+#X obj 155 448 s xy23;
+#X obj 154 475 s xy24;
+#X obj 155 499 s xy25;
+#X obj 152 525 s xy26;
+#X obj 152 556 s xy27;
+#X obj 149 582 s xy28;
+#X obj 151 605 s xy29;
+#X obj 950 361 damping d5 10;
+#X obj 906 90 mass m1 2 750 260 0 0;
+#X obj 908 163 mass m2 1 750 240 0 0;
+#X obj 898 239 mass m3 1 750 220 0 0;
+#X obj 894 310 mass m4 1 750 200 0 0;
+#X obj 889 385 mass m5 1 750 180 0 0;
+#X obj 878 462 mass m6 1 750 160 0 0;
+#X obj 875 536 mass m7 1 750 140 0 0;
+#X obj 876 616 mass m8 1 750 120 0 0;
+#X connect 0 0 55 0;
+#X connect 0 0 56 0;
+#X connect 0 0 58 0;
+#X connect 0 0 60 0;
+#X connect 0 0 62 0;
+#X connect 0 0 64 0;
+#X connect 0 0 66 0;
+#X connect 0 0 68 0;
+#X connect 0 0 70 0;
+#X connect 0 0 72 0;
+#X connect 1 0 2 0;
+#X connect 2 0 24 0;
+#X connect 2 0 19 0;
+#X connect 2 0 3 0;
+#X connect 2 1 0 0;
+#X connect 2 2 27 0;
+#X connect 2 3 147 0;
+#X connect 3 0 40 0;
+#X connect 3 0 42 0;
+#X connect 3 0 44 0;
+#X connect 3 0 46 0;
+#X connect 3 0 48 0;
+#X connect 3 0 50 0;
+#X connect 3 0 52 0;
+#X connect 3 0 54 0;
+#X connect 3 0 74 0;
+#X connect 4 0 55 0;
+#X connect 4 0 56 0;
+#X connect 5 0 55 0;
+#X connect 7 0 58 0;
+#X connect 8 0 56 0;
+#X connect 9 0 64 0;
+#X connect 10 0 62 0;
+#X connect 11 0 66 0;
+#X connect 12 0 64 0;
+#X connect 13 0 68 0;
+#X connect 14 0 66 0;
+#X connect 15 0 60 0;
+#X connect 16 0 58 0;
+#X connect 17 0 62 0;
+#X connect 18 0 60 0;
+#X connect 19 0 55 0;
+#X connect 20 0 70 0;
+#X connect 21 0 68 0;
+#X connect 22 0 72 0;
+#X connect 23 0 70 0;
+#X connect 23 0 72 0;
+#X connect 24 0 55 0;
+#X connect 25 0 72 0;
+#X connect 27 0 28 0;
+#X connect 29 0 31 0;
+#X connect 30 0 36 0;
+#X connect 31 0 30 1;
+#X connect 31 1 30 0;
+#X connect 32 0 34 0;
+#X connect 33 0 35 0;
+#X connect 34 0 33 1;
+#X connect 34 1 33 0;
+#X connect 35 0 74 0;
+#X connect 36 0 74 0;
+#X connect 37 0 25 0;
+#X connect 38 1 40 1;
+#X connect 39 1 40 1;
+#X connect 40 1 4 0;
+#X connect 40 1 5 0;
+#X connect 40 1 38 1;
+#X connect 40 1 57 1;
+#X connect 40 1 153 0;
+#X connect 41 1 42 1;
+#X connect 42 1 7 0;
+#X connect 42 1 8 0;
+#X connect 42 1 41 1;
+#X connect 42 1 57 2;
+#X connect 42 1 59 1;
+#X connect 42 1 154 0;
+#X connect 43 1 44 1;
+#X connect 44 1 15 0;
+#X connect 44 1 16 0;
+#X connect 44 1 43 1;
+#X connect 44 1 59 2;
+#X connect 44 1 61 1;
+#X connect 44 1 155 0;
+#X connect 45 1 46 1;
+#X connect 46 1 17 0;
+#X connect 46 1 18 0;
+#X connect 46 1 45 1;
+#X connect 46 1 61 2;
+#X connect 46 1 63 1;
+#X connect 46 1 156 0;
+#X connect 47 1 48 1;
+#X connect 48 1 9 0;
+#X connect 48 1 10 0;
+#X connect 48 1 47 1;
+#X connect 48 1 63 2;
+#X connect 48 1 65 1;
+#X connect 48 1 157 0;
+#X connect 49 1 50 1;
+#X connect 50 1 11 0;
+#X connect 50 1 12 0;
+#X connect 50 1 49 1;
+#X connect 50 1 65 2;
+#X connect 50 1 67 1;
+#X connect 50 1 158 0;
+#X connect 51 1 52 1;
+#X connect 52 1 13 0;
+#X connect 52 1 14 0;
+#X connect 52 1 51 1;
+#X connect 52 1 67 2;
+#X connect 52 1 69 1;
+#X connect 52 1 159 0;
+#X connect 53 1 54 1;
+#X connect 54 1 20 0;
+#X connect 54 1 21 0;
+#X connect 54 1 53 1;
+#X connect 54 1 69 2;
+#X connect 54 1 71 1;
+#X connect 54 1 160 0;
+#X connect 57 1 40 1;
+#X connect 57 2 42 1;
+#X connect 57 2 42 1;
+#X connect 59 1 42 1;
+#X connect 59 2 44 1;
+#X connect 61 1 44 1;
+#X connect 61 2 46 1;
+#X connect 63 1 46 1;
+#X connect 63 2 48 1;
+#X connect 65 1 48 1;
+#X connect 65 2 50 1;
+#X connect 67 1 50 1;
+#X connect 67 2 52 1;
+#X connect 69 1 52 1;
+#X connect 69 2 54 1;
+#X connect 71 1 54 1;
+#X connect 71 2 74 1;
+#X connect 73 1 74 1;
+#X connect 74 1 22 0;
+#X connect 74 1 23 0;
+#X connect 74 1 71 2;
+#X connect 74 1 73 1;
+#X connect 74 1 75 1;
+#X connect 74 1 161 0;
+#X connect 75 1 74 1;
+#X connect 76 0 137 0;
+#X connect 76 0 138 0;
+#X connect 76 0 139 0;
+#X connect 76 0 140 0;
+#X connect 76 0 141 0;
+#X connect 76 0 142 0;
+#X connect 76 0 143 0;
+#X connect 76 0 144 0;
+#X connect 76 0 145 0;
+#X connect 76 0 146 0;
+#X connect 77 0 78 0;
+#X connect 78 0 99 0;
+#X connect 78 0 94 0;
+#X connect 78 0 79 0;
+#X connect 78 1 76 0;
+#X connect 79 0 118 0;
+#X connect 79 0 163 0;
+#X connect 79 0 164 0;
+#X connect 79 0 165 0;
+#X connect 79 0 166 0;
+#X connect 79 0 167 0;
+#X connect 79 0 168 0;
+#X connect 79 0 169 0;
+#X connect 79 0 170 0;
+#X connect 80 0 137 0;
+#X connect 80 0 138 0;
+#X connect 81 0 137 0;
+#X connect 82 0 139 0;
+#X connect 83 0 138 0;
+#X connect 84 0 142 0;
+#X connect 85 0 141 0;
+#X connect 86 0 143 0;
+#X connect 87 0 142 0;
+#X connect 88 0 144 0;
+#X connect 89 0 143 0;
+#X connect 90 0 140 0;
+#X connect 91 0 139 0;
+#X connect 92 0 141 0;
+#X connect 93 0 140 0;
+#X connect 94 0 137 0;
+#X connect 95 0 145 0;
+#X connect 96 0 144 0;
+#X connect 97 0 146 0;
+#X connect 98 0 145 0;
+#X connect 98 0 146 0;
+#X connect 99 0 137 0;
+#X connect 100 0 146 0;
+#X connect 101 0 103 0;
+#X connect 102 0 108 0;
+#X connect 103 0 102 1;
+#X connect 103 1 102 0;
+#X connect 104 0 106 0;
+#X connect 105 0 107 0;
+#X connect 106 0 105 1;
+#X connect 106 1 105 0;
+#X connect 107 0 118 0;
+#X connect 108 0 118 0;
+#X connect 109 0 100 0;
+#X connect 110 1 163 1;
+#X connect 111 1 163 1;
+#X connect 112 1 164 1;
+#X connect 113 1 165 1;
+#X connect 114 1 166 1;
+#X connect 115 1 168 1;
+#X connect 116 1 169 1;
+#X connect 117 1 118 1;
+#X connect 118 1 97 0;
+#X connect 118 1 98 0;
+#X connect 118 1 117 1;
+#X connect 118 1 119 2;
+#X connect 118 1 136 0;
+#X connect 118 1 148 1;
+#X connect 119 1 170 1;
+#X connect 119 2 118 1;
+#X connect 120 1 169 1;
+#X connect 120 2 170 1;
+#X connect 121 1 168 1;
+#X connect 121 2 169 1;
+#X connect 122 1 167 1;
+#X connect 122 2 168 1;
+#X connect 123 1 165 1;
+#X connect 123 2 166 1;
+#X connect 124 1 164 1;
+#X connect 124 2 165 1;
+#X connect 125 1 163 1;
+#X connect 125 2 164 1;
+#X connect 125 2 164 1;
+#X connect 126 1 166 1;
+#X connect 126 2 167 1;
+#X connect 127 1 170 1;
+#X connect 147 0 28 0;
+#X connect 148 1 118 1;
+#X connect 149 0 34 0;
+#X connect 150 0 31 0;
+#X connect 151 0 106 0;
+#X connect 152 0 103 0;
+#X connect 162 1 167 1;
+#X connect 163 1 80 0;
+#X connect 163 1 81 0;
+#X connect 163 1 110 1;
+#X connect 163 1 125 1;
+#X connect 163 1 128 0;
+#X connect 164 1 82 0;
+#X connect 164 1 83 0;
+#X connect 164 1 112 1;
+#X connect 164 1 124 1;
+#X connect 164 1 125 2;
+#X connect 164 1 129 0;
+#X connect 165 1 90 0;
+#X connect 165 1 91 0;
+#X connect 165 1 113 1;
+#X connect 165 1 123 1;
+#X connect 165 1 124 2;
+#X connect 165 1 130 0;
+#X connect 166 1 92 0;
+#X connect 166 1 93 0;
+#X connect 166 1 114 1;
+#X connect 166 1 123 2;
+#X connect 166 1 126 1;
+#X connect 166 1 131 0;
+#X connect 167 1 84 0;
+#X connect 167 1 85 0;
+#X connect 167 1 122 1;
+#X connect 167 1 126 2;
+#X connect 167 1 132 0;
+#X connect 167 1 162 1;
+#X connect 168 1 86 0;
+#X connect 168 1 87 0;
+#X connect 168 1 115 1;
+#X connect 168 1 121 1;
+#X connect 168 1 122 2;
+#X connect 168 1 133 0;
+#X connect 169 1 88 0;
+#X connect 169 1 89 0;
+#X connect 169 1 116 1;
+#X connect 169 1 120 1;
+#X connect 169 1 121 2;
+#X connect 169 1 134 0;
+#X connect 170 1 95 0;
+#X connect 170 1 96 0;
+#X connect 170 1 119 1;
+#X connect 170 1 120 2;
+#X connect 170 1 127 1;
+#X connect 170 1 135 0;
diff --git a/extensions/xgui/doc/sound/atom.pd b/extensions/xgui/doc/sound/atom.pd
new file mode 100644
index 00000000..561955e2
--- /dev/null
+++ b/extensions/xgui/doc/sound/atom.pd
@@ -0,0 +1,33 @@
+#N canvas 288 79 328 356 12;
+#X obj 17 20 inlet;
+#X obj 189 14 loadbang;
+#X floatatom 204 81 5 0 0;
+#X obj 187 43 \$1;
+#X obj 108 228 osc~;
+#X obj 110 119 +;
+#X obj 141 301 outlet~;
+#X obj 111 149 mtof;
+#X obj 17 50 unpack s 0 0 0 0;
+#X obj 109 200 line~;
+#X obj 110 173 pack 0 50;
+#X obj 203 165 / 400;
+#X obj 141 271 *~;
+#X obj 201 226 line~;
+#X obj 202 199 pack 0 50;
+#X obj 109 91 / 50;
+#X connect 0 0 8 0;
+#X connect 1 0 3 0;
+#X connect 3 0 2 0;
+#X connect 3 0 5 1;
+#X connect 4 0 12 0;
+#X connect 5 0 7 0;
+#X connect 7 0 10 0;
+#X connect 8 3 15 0;
+#X connect 8 4 11 0;
+#X connect 9 0 4 0;
+#X connect 10 0 9 0;
+#X connect 11 0 14 0;
+#X connect 12 0 6 0;
+#X connect 13 0 12 1;
+#X connect 14 0 13 0;
+#X connect 15 0 5 0;
diff --git a/extensions/xgui/doc/sound/sound.pd b/extensions/xgui/doc/sound/sound.pd
new file mode 100644
index 00000000..f6a210bf
--- /dev/null
+++ b/extensions/xgui/doc/sound/sound.pd
@@ -0,0 +1,136 @@
+#N canvas 28 -13 1010 170 12;
+#X obj 866 32 vsl 15 128 0 127 0 0 move_y2 empty empty 0 -8 128 8 -262144
+-1 -1 12700 1;
+#X obj 804 88 hsl 128 15 0 127 0 0 move_x2 empty empty -2 -6 128 8
+-262144 -1 -1 12700 1;
+#X obj 212 153 dac~;
+#X obj 212 123 *~ 0.2;
+#X obj 275 152 dac~;
+#X obj 275 122 *~ 0.2;
+#X obj 338 153 dac~;
+#X obj 338 121 *~ 0.2;
+#X obj 406 152 dac~;
+#X obj 402 122 *~ 0.2;
+#X obj 473 154 dac~;
+#X obj 467 121 *~ 0.2;
+#X obj 530 156 dac~;
+#X obj 530 121 *~ 0.2;
+#X obj 467 82 atom 60;
+#X obj 595 151 dac~;
+#X obj 592 121 *~ 0.2;
+#X obj 655 152 dac~;
+#X obj 655 119 *~ 0.2;
+#X obj 655 80 atom 24;
+#X obj 592 82 atom 36;
+#X obj 530 82 atom 48;
+#X obj 402 83 atom 72;
+#X obj 338 82 atom 65;
+#X obj 275 83 atom 63;
+#X obj 212 84 atom 67;
+#X obj 103 33 vsl 15 128 0 127 0 0 move_y1 empty empty 0 -8 128 8 -262144
+-1 -1 7200 1;
+#X obj 54 91 hsl 128 15 0 127 0 0 move_x1 empty empty -2 -6 128 8 -262144
+-1 -1 5700 1;
+#X obj 216 12 2yoyo;
+#X obj 214 307 dac~;
+#X obj 214 277 *~ 0.2;
+#X obj 277 306 dac~;
+#X obj 277 276 *~ 0.2;
+#X obj 340 307 dac~;
+#X obj 340 275 *~ 0.2;
+#X obj 408 306 dac~;
+#X obj 404 276 *~ 0.2;
+#X obj 475 308 dac~;
+#X obj 469 275 *~ 0.2;
+#X obj 532 310 dac~;
+#X obj 532 275 *~ 0.2;
+#X obj 469 236 atom 60;
+#X obj 597 305 dac~;
+#X obj 594 275 *~ 0.2;
+#X obj 657 306 dac~;
+#X obj 657 273 *~ 0.2;
+#X obj 657 234 atom 24;
+#X obj 594 236 atom 36;
+#X obj 532 236 atom 48;
+#X obj 404 237 atom 72;
+#X obj 340 236 atom 65;
+#X obj 277 237 atom 63;
+#X obj 214 238 atom 67;
+#X obj 214 206 r xy28;
+#X obj 276 202 r xy27;
+#X obj 339 202 r xy26;
+#X obj 403 202 r xy25;
+#X obj 468 201 r xy24;
+#X obj 531 202 r xy23;
+#X obj 594 201 r xy22;
+#X obj 656 199 r xy21;
+#X msg 726 84 0.05;
+#X msg 728 238 0.05;
+#X obj 212 52 r xy11;
+#X obj 274 48 r xy12;
+#X obj 337 48 r xy13;
+#X obj 401 48 r xy14;
+#X obj 466 47 r xy15;
+#X obj 529 48 r xy16;
+#X obj 592 47 r xy17;
+#X obj 654 45 r xy18;
+#X connect 3 0 2 0;
+#X connect 5 0 4 0;
+#X connect 7 0 6 0;
+#X connect 9 0 8 0;
+#X connect 11 0 10 0;
+#X connect 13 0 12 0;
+#X connect 14 0 11 0;
+#X connect 16 0 15 0;
+#X connect 18 0 17 0;
+#X connect 19 0 18 0;
+#X connect 20 0 16 0;
+#X connect 21 0 13 0;
+#X connect 22 0 9 0;
+#X connect 23 0 7 0;
+#X connect 24 0 5 0;
+#X connect 25 0 3 0;
+#X connect 30 0 29 1;
+#X connect 32 0 31 1;
+#X connect 34 0 33 1;
+#X connect 36 0 35 1;
+#X connect 38 0 37 1;
+#X connect 40 0 39 1;
+#X connect 41 0 38 0;
+#X connect 43 0 42 1;
+#X connect 45 0 44 1;
+#X connect 46 0 45 0;
+#X connect 47 0 43 0;
+#X connect 48 0 40 0;
+#X connect 49 0 36 0;
+#X connect 50 0 34 0;
+#X connect 51 0 32 0;
+#X connect 52 0 30 0;
+#X connect 53 0 52 0;
+#X connect 54 0 51 0;
+#X connect 55 0 50 0;
+#X connect 56 0 49 0;
+#X connect 57 0 41 0;
+#X connect 58 0 48 0;
+#X connect 59 0 47 0;
+#X connect 60 0 46 0;
+#X connect 61 0 3 1;
+#X connect 61 0 5 1;
+#X connect 61 0 9 1;
+#X connect 61 0 13 1;
+#X connect 61 0 16 1;
+#X connect 61 0 18 1;
+#X connect 62 0 30 1;
+#X connect 62 0 32 1;
+#X connect 62 0 36 1;
+#X connect 62 0 40 1;
+#X connect 62 0 43 1;
+#X connect 62 0 45 1;
+#X connect 63 0 25 0;
+#X connect 64 0 24 0;
+#X connect 65 0 23 0;
+#X connect 66 0 22 0;
+#X connect 67 0 14 0;
+#X connect 68 0 21 0;
+#X connect 69 0 20 0;
+#X connect 70 0 19 0;
diff --git a/extensions/xgui/filters/coord.pd b/extensions/xgui/filters/coord.pd
new file mode 100644
index 00000000..58ab6271
--- /dev/null
+++ b/extensions/xgui/filters/coord.pd
@@ -0,0 +1,10 @@
+#N canvas 525 571 229 169 10;
+#X text 120 114 dh20020106;
+#X obj 35 36 inlet;
+#X obj 35 111 outlet;
+#X obj 35 63 route coord;
+#X msg 35 87 coord \$1 \$2 \$3 \$4;
+#X text 10 6 coord : filter coord command;
+#X connect 1 0 3 0;
+#X connect 3 0 4 0;
+#X connect 4 0 2 0;
diff --git a/extensions/xgui/filters/xy1.pd b/extensions/xgui/filters/xy1.pd
new file mode 100644
index 00000000..ec45cc36
--- /dev/null
+++ b/extensions/xgui/filters/xy1.pd
@@ -0,0 +1,10 @@
+#N canvas 525 571 290 169 10;
+#X text 120 114 dh20020106;
+#X obj 35 36 inlet;
+#X obj 35 111 outlet;
+#X text 10 6 move : filter move command;
+#X obj 35 63 route xy1;
+#X msg 35 87 xy1 \$1 \$2;
+#X connect 1 0 4 0;
+#X connect 4 0 5 0;
+#X connect 5 0 2 0;
diff --git a/extensions/xgui/filters/xy2.pd b/extensions/xgui/filters/xy2.pd
new file mode 100644
index 00000000..f62f4170
--- /dev/null
+++ b/extensions/xgui/filters/xy2.pd
@@ -0,0 +1,10 @@
+#N canvas 537 631 290 169 10;
+#X text 120 114 dh20020106;
+#X obj 35 36 inlet;
+#X obj 35 111 outlet;
+#X text 10 6 move : filter move command;
+#X msg 35 87 xy2 \$1 \$2;
+#X obj 35 63 route xy2;
+#X connect 1 0 5 0;
+#X connect 4 0 2 0;
+#X connect 5 0 4 0;
diff --git a/extensions/xgui/install.bat b/extensions/xgui/install.bat
new file mode 100644
index 00000000..fa81b06d
--- /dev/null
+++ b/extensions/xgui/install.bat
@@ -0,0 +1,7 @@
+mkdir ..\doc\xgui
+copy doc\* ..\doc\xgui
+cd bin
+copy *.dll ..\..\extra
+cd ..
+
+
diff --git a/extensions/xgui/main/alias.pd b/extensions/xgui/main/alias.pd
new file mode 100644
index 00000000..d5c0d467
--- /dev/null
+++ b/extensions/xgui/main/alias.pd
@@ -0,0 +1,9 @@
+#N canvas 0 0 454 304 12;
+#X obj 10 9 inlet;
+#X obj 10 90 outlet;
+#X text 77 93 dh20020215;
+#X text 95 7 alias an existing object;
+#X obj 10 36 s \$1-in;
+#X obj 10 63 r \$1-out;
+#X connect 0 0 4 0;
+#X connect 5 0 1 0;
diff --git a/extensions/xgui/main/arc.pd b/extensions/xgui/main/arc.pd
new file mode 100644
index 00000000..6586c96c
--- /dev/null
+++ b/extensions/xgui/main/arc.pd
@@ -0,0 +1,59 @@
+#N canvas 201 377 599 300 10;
+#X obj 24 30 inlet;
+#X obj 462 176 outlet;
+#X text 454 203 dh2002010x;
+#X text 465 214 dh20020316;
+#X text 24 9 The SEG onject;
+#X text 476 228 dh20020425;
+#X obj 333 121 oname2l;
+#X obj 333 144 unpack s s s;
+#X obj 333 75 loadbang;
+#X obj 333 236 s \$1-c;
+#X obj 408 164 s \$1-o;
+#X obj 52 90 r \$1-c;
+#X obj 126 94 r \$1-o;
+#X obj 333 167 pack s s;
+#X text 486 235 dh20020530;
+#X obj 332 207 a2s;
+#X msg 333 190 list \$1 / \$2;
+#X obj 139 228 send to_node;
+#X obj 333 98 symbol \$2;
+#X obj 59 30 r \$1-in;
+#X obj 471 151 s \$1-out;
+#X obj 195 154 concat do;
+#X obj 195 131 concat \$2;
+#X obj 13 145 make4seg_sss x del x;
+#X obj 24 55 route show hide @;
+#X obj 462 99 recv2 \$2;
+#X obj 460 73 concat @;
+#X obj 216 101 concat symbol;
+#X obj 13 122 make4seg_sss x add_arc x;
+#X connect 0 0 24 0;
+#X connect 6 0 7 0;
+#X connect 7 0 13 0;
+#X connect 7 1 13 1;
+#X connect 7 2 10 0;
+#X connect 8 0 18 0;
+#X connect 11 0 23 1;
+#X connect 11 0 28 1;
+#X connect 12 0 23 3;
+#X connect 12 0 28 3;
+#X connect 13 0 16 0;
+#X connect 15 0 9 0;
+#X connect 16 0 15 0;
+#X connect 18 0 6 0;
+#X connect 19 0 24 0;
+#X connect 21 0 17 0;
+#X connect 22 0 21 0;
+#X connect 23 0 17 0;
+#X connect 24 0 28 0;
+#X connect 24 1 23 0;
+#X connect 24 2 18 0;
+#X connect 24 2 26 0;
+#X connect 24 2 27 0;
+#X connect 24 3 22 0;
+#X connect 25 0 1 0;
+#X connect 25 0 20 0;
+#X connect 26 0 25 0;
+#X connect 27 0 22 1;
+#X connect 28 0 17 0;
diff --git a/extensions/xgui/main/canvas.pd b/extensions/xgui/main/canvas.pd
new file mode 100644
index 00000000..b40a101d
--- /dev/null
+++ b/extensions/xgui/main/canvas.pd
@@ -0,0 +1,28 @@
+#N canvas 50 250 521 286 10;
+#X obj 196 8 inlet;
+#X obj 399 104 outlet;
+#X obj 237 8 r \$1-in;
+#X obj 423 64 s \$1-out;
+#X text 406 137 dh20020316;
+#X text 22 8 The CANVAS object;
+#X obj 69 111 make4seg_ss */ add_canvas \$1;
+#X obj 121 134 make4seg_ss */ del_canvas \$1;
+#X obj 399 32 receive \$1;
+#X obj 202 231 send to_node;
+#X obj 399 9 receive \$1/;
+#X obj 303 132 concat do;
+#X obj 196 33 route show hide;
+#X obj 303 107 concat \$1;
+#X connect 0 0 12 0;
+#X connect 2 0 12 0;
+#X connect 6 0 9 0;
+#X connect 7 0 9 0;
+#X connect 8 0 3 0;
+#X connect 8 0 1 0;
+#X connect 10 0 1 0;
+#X connect 10 0 3 0;
+#X connect 11 0 9 0;
+#X connect 12 0 6 0;
+#X connect 12 1 7 0;
+#X connect 12 2 13 0;
+#X connect 13 0 11 0;
diff --git a/extensions/xgui/main/make4seg_ss.pd b/extensions/xgui/main/make4seg_ss.pd
new file mode 100644
index 00000000..1d6dd1f9
--- /dev/null
+++ b/extensions/xgui/main/make4seg_ss.pd
@@ -0,0 +1,31 @@
+#N canvas 353 333 341 355 12;
+#X obj 21 34 inlet;
+#X obj 21 294 outlet;
+#X obj 43 130 symbol \$1;
+#X obj 80 157 symbol \$2;
+#X obj 118 182 symbol \$3;
+#X obj 21 60 bang;
+#X obj 110 103 inlet;
+#X obj 147 130 inlet;
+#X obj 184 157 inlet;
+#X obj 43 208 pack s s s;
+#X obj 21 86 t b b b b;
+#X text 205 299 dh20020316;
+#X text 25 4 make easy to concatenate 3 symbols.;
+#X msg 43 234 set do \$1 \$2 \$3;
+#X msg 21 268 do */ add_canvas */my_first_canvas;
+#X connect 0 0 5 0;
+#X connect 2 0 9 0;
+#X connect 3 0 9 1;
+#X connect 4 0 9 2;
+#X connect 5 0 10 0;
+#X connect 6 0 2 1;
+#X connect 7 0 3 1;
+#X connect 8 0 4 1;
+#X connect 9 0 13 0;
+#X connect 10 0 14 0;
+#X connect 10 1 2 0;
+#X connect 10 2 3 0;
+#X connect 10 3 4 0;
+#X connect 13 0 14 0;
+#X connect 14 0 1 0;
diff --git a/extensions/xgui/main/make4seg_sss.pd b/extensions/xgui/main/make4seg_sss.pd
new file mode 100644
index 00000000..75f3027c
--- /dev/null
+++ b/extensions/xgui/main/make4seg_sss.pd
@@ -0,0 +1,33 @@
+#N canvas 325 279 339 353 12;
+#X obj 21 34 inlet;
+#X obj 21 294 outlet;
+#X obj 43 130 symbol \$1;
+#X obj 80 157 symbol \$2;
+#X obj 118 182 symbol \$3;
+#X msg 21 268 do */my_first_canvas/my_first_seg add_seg ;
+#X obj 21 60 bang;
+#X obj 43 208 pack s s s;
+#X obj 21 86 t b b b b;
+#X text 205 299 dh20020316;
+#X text 25 4 make easy to concatenate 3 symbols.;
+#X obj 208 125 inlet;
+#X obj 209 155 symbol;
+#X msg 43 234 set do \$1 \$2 \$3;
+#X obj 111 99 inlet;
+#X obj 148 130 inlet;
+#X connect 0 0 6 0;
+#X connect 2 0 7 0;
+#X connect 3 0 7 1;
+#X connect 4 0 7 2;
+#X connect 5 0 1 0;
+#X connect 6 0 8 0;
+#X connect 7 0 13 0;
+#X connect 8 0 5 0;
+#X connect 8 1 2 0;
+#X connect 8 2 3 0;
+#X connect 8 3 4 0;
+#X connect 11 0 12 0;
+#X connect 12 0 4 1;
+#X connect 13 0 5 0;
+#X connect 14 0 2 1;
+#X connect 15 0 3 1;
diff --git a/extensions/xgui/main/make_obj_name.pd b/extensions/xgui/main/make_obj_name.pd
new file mode 100644
index 00000000..89c24023
--- /dev/null
+++ b/extensions/xgui/main/make_obj_name.pd
@@ -0,0 +1,23 @@
+#N canvas 295 214 335 231 10;
+#X msg 28 174 @ \$1;
+#X obj 28 110 concat \$1;
+#X obj 28 88 concat /;
+#X obj 28 131 concat list;
+#X obj 28 153 a2s;
+#X obj 28 196 outlet;
+#X text 253 200 dh20020602;
+#X obj 28 68 concat o;
+#X obj 28 46 unique;
+#X msg 157 28 bang;
+#X symbolatom 159 171 10 0 0;
+#X obj 28 22 loadbang;
+#X connect 0 0 5 0;
+#X connect 1 0 3 0;
+#X connect 2 0 1 0;
+#X connect 3 0 4 0;
+#X connect 4 0 0 0;
+#X connect 4 0 10 0;
+#X connect 7 0 2 0;
+#X connect 8 0 7 0;
+#X connect 9 0 8 0;
+#X connect 11 0 8 0;
diff --git a/extensions/xgui/main/node.pd b/extensions/xgui/main/node.pd
new file mode 100644
index 00000000..cb84207a
--- /dev/null
+++ b/extensions/xgui/main/node.pd
@@ -0,0 +1,100 @@
+#N canvas 409 95 574 567 10;
+#X obj 31 28 inlet;
+#X text 14 10 The pd basic node;
+#X obj 9 260 outlet;
+#X obj 47 304 netreceive \$2;
+#X obj 261 9 loadbang;
+#X obj 163 141 concat send;
+#X obj 261 60 symbol \$1;
+#X obj 321 59 float \$2;
+#X obj 261 85 pack s f;
+#X obj 31 51 route connect disconnect do;
+#X obj 82 163 netsend;
+#X obj 9 228 r */;
+#X obj 74 27 r to_node;
+#X msg 261 108 list \$1 : \$2;
+#X obj 261 130 a2s;
+#X obj 261 33 t b b;
+#X text 310 398 dh20020530;
+#X obj 161 96 spigot;
+#X obj 86 263 outlet;
+#X obj 86 240 a2s;
+#X obj 86 215 concat list;
+#X obj 193 395 outlet;
+#X obj 189 367 a2s;
+#X obj 188 344 concat list;
+#X msg 86 191 connect_to_ \$1 _other_nodes;
+#X msg 188 320 connect_from_ \$1 _other_nodes;
+#X obj 31 80 t a b;
+#X obj 23 330 replace_selector foo;
+#X obj 23 354 route foo;
+#X obj 55 401 send2;
+#X obj 416 344 oname2l;
+#X obj 416 321 symbol;
+#X obj 419 390 a2s;
+#X msg 416 367 list * / \$2 / \$3;
+#X obj 23 424 replace_selector foo;
+#X obj 23 455 send2;
+#X obj 446 414 a2s;
+#X msg 443 391 list * / \$2;
+#X obj 23 378 t a a a a;
+#X obj 164 426 replace_selector foo;
+#X obj 190 248 print in_pd;
+#X obj 285 238 print out_pd;
+#X obj 31 108 concat connect;
+#X msg 69 132 disconnect;
+#X obj 284 216 spigot;
+#X obj 190 227 spigot;
+#X obj 520 17 inlet;
+#X obj 162 118 concat pd;
+#X connect 0 0 9 0;
+#X connect 3 0 45 0;
+#X connect 3 0 27 0;
+#X connect 3 1 25 0;
+#X connect 4 0 15 0;
+#X connect 5 0 44 0;
+#X connect 5 0 10 0;
+#X connect 6 0 8 0;
+#X connect 7 0 8 1;
+#X connect 8 0 13 0;
+#X connect 9 0 26 0;
+#X connect 9 1 43 0;
+#X connect 9 2 17 0;
+#X connect 10 0 24 0;
+#X connect 10 0 17 1;
+#X connect 11 0 2 0;
+#X connect 12 0 9 0;
+#X connect 13 0 14 0;
+#X connect 15 0 6 0;
+#X connect 15 1 7 0;
+#X connect 17 0 47 0;
+#X connect 19 0 18 0;
+#X connect 20 0 19 0;
+#X connect 22 0 21 0;
+#X connect 23 0 22 0;
+#X connect 24 0 20 0;
+#X connect 25 0 23 0;
+#X connect 26 0 42 0;
+#X connect 26 1 43 0;
+#X connect 27 0 28 0;
+#X connect 28 0 38 0;
+#X connect 30 0 33 0;
+#X connect 30 0 37 0;
+#X connect 31 0 30 0;
+#X connect 32 0 34 1;
+#X connect 33 0 32 0;
+#X connect 34 0 35 0;
+#X connect 36 0 39 1;
+#X connect 37 0 36 0;
+#X connect 38 0 34 0;
+#X connect 38 1 39 0;
+#X connect 38 2 29 0;
+#X connect 38 3 31 0;
+#X connect 39 0 35 0;
+#X connect 42 0 10 0;
+#X connect 43 0 10 0;
+#X connect 44 0 41 0;
+#X connect 45 0 40 0;
+#X connect 46 0 44 1;
+#X connect 46 0 45 1;
+#X connect 47 0 5 0;
diff --git a/extensions/xgui/main/pdx_connect.pd b/extensions/xgui/main/pdx_connect.pd
new file mode 100755
index 00000000..54298a29
--- /dev/null
+++ b/extensions/xgui/main/pdx_connect.pd
@@ -0,0 +1,77 @@
+#N canvas 60 126 1021 550 12;
+#X msg 728 285 bang;
+#X msg 778 285 stop;
+#X obj 728 313 loadbang;
+#X obj 700 475 s b_mass;
+#X obj 806 393 s b_init;
+#X obj 728 367 t b b b b;
+#X obj 775 424 s b_spring;
+#X obj 728 341 metro 50;
+#X obj 672 505 valueinit time_interval 0.05;
+#X obj 740 451 s b_force;
+#X text 443 442 dh20020530;
+#X obj 15 253 print node1;
+#X obj 15 339 print node2;
+#X symbolatom 25 198 30 0 0;
+#X symbolatom 26 225 30 0 0;
+#X obj 15 171 node localhost 4871;
+#X msg 260 67 disconnect;
+#X text -17 515 Keep this patch open to keep the link with xgui active.
+;
+#X text -18 497 Go and see Help Pure documentation /xgui to see some
+demos;
+#X obj 14 18 loadbang;
+#X obj 14 43 t b b;
+#X floatatom 199 173 1 0 1;
+#X obj 15 310 node 192.168.0.5 4872;
+#X msg 15 282 connect 192.168.0.4 4877 \, do */ connect 192.168.0.4:4877
+;
+#X msg 64 43 do ~/ connect_on 192.168.0.4:4877 physics;
+#X msg 547 59 do ~/ connect_on 192.168.0.4:4877 my_canvas;
+#X msg 548 31 do ~/ connect_on pd.la-kitchen.net:4877 physics;
+#X msg 448 224 do localhost:4878/ connect pd pd.la-kitchen:4871;
+#X msg 450 149 do pd.la-kitchen.net:4877/ connect me;
+#X msg 450 176 do pd.la-kitchen.net:4877/ clone physics ~/physics localhost:4877
+;
+#X msg 446 100 do ~/ connect pd.la-kitchen.net:4877;
+#X msg 259 316 connect pd.la-kitchen.net 4877;
+#X symbolatom 95 366 30 0 0;
+#X symbolatom 96 393 30 0 0;
+#X msg 14 95 do localhost:4877/ connect pd localhost:4871;
+#X msg 24 121 do localhost:4877/ disconnect pd;
+#X msg 49 68 connect localhost 4877;
+#X msg 447 122 do pd.la-kitchen.net:4877/ # test***;
+#X msg 190 4 do ~/ rename moi 4877;
+#X connect 0 0 7 0;
+#X connect 1 0 7 0;
+#X connect 2 0 7 0;
+#X connect 5 0 3 0;
+#X connect 5 1 9 0;
+#X connect 5 2 6 0;
+#X connect 5 3 4 0;
+#X connect 7 0 5 0;
+#X connect 15 0 11 0;
+#X connect 15 1 13 0;
+#X connect 15 2 14 0;
+#X connect 16 0 15 0;
+#X connect 19 0 20 0;
+#X connect 20 0 34 0;
+#X connect 20 1 36 0;
+#X connect 21 0 15 1;
+#X connect 22 0 12 0;
+#X connect 22 1 32 0;
+#X connect 22 2 33 0;
+#X connect 23 0 22 0;
+#X connect 24 0 15 0;
+#X connect 25 0 15 0;
+#X connect 26 0 15 0;
+#X connect 27 0 15 0;
+#X connect 28 0 15 0;
+#X connect 29 0 15 0;
+#X connect 30 0 15 0;
+#X connect 31 0 22 0;
+#X connect 34 0 15 0;
+#X connect 35 0 15 0;
+#X connect 36 0 15 0;
+#X connect 37 0 15 0;
+#X connect 38 0 15 0;
diff --git a/extensions/xgui/main/rect.pd b/extensions/xgui/main/rect.pd
new file mode 100644
index 00000000..b964a70f
--- /dev/null
+++ b/extensions/xgui/main/rect.pd
@@ -0,0 +1,59 @@
+#N canvas 201 377 601 302 10;
+#X obj 24 30 inlet;
+#X obj 462 176 outlet;
+#X text 454 203 dh2002010x;
+#X text 465 214 dh20020316;
+#X text 476 228 dh20020425;
+#X obj 333 121 oname2l;
+#X obj 333 144 unpack s s s;
+#X obj 333 75 loadbang;
+#X obj 333 236 s \$1-c;
+#X obj 408 164 s \$1-o;
+#X obj 52 90 r \$1-c;
+#X obj 126 94 r \$1-o;
+#X obj 333 167 pack s s;
+#X text 486 235 dh20020530;
+#X obj 332 207 a2s;
+#X msg 333 190 list \$1 / \$2;
+#X obj 139 228 send to_node;
+#X obj 333 98 symbol \$2;
+#X obj 59 30 r \$1-in;
+#X obj 471 151 s \$1-out;
+#X obj 195 154 concat do;
+#X obj 195 131 concat \$2;
+#X obj 13 145 make4seg_sss x del x;
+#X obj 24 55 route show hide @;
+#X obj 462 99 recv2 \$2;
+#X obj 460 73 concat @;
+#X obj 216 101 concat symbol;
+#X obj 13 122 make4seg_sss x add_rect x;
+#X text 24 9 The Rect onject;
+#X connect 0 0 23 0;
+#X connect 5 0 6 0;
+#X connect 6 0 12 0;
+#X connect 6 1 12 1;
+#X connect 6 2 9 0;
+#X connect 7 0 17 0;
+#X connect 10 0 22 1;
+#X connect 10 0 27 1;
+#X connect 11 0 22 3;
+#X connect 11 0 27 3;
+#X connect 12 0 15 0;
+#X connect 14 0 8 0;
+#X connect 15 0 14 0;
+#X connect 17 0 5 0;
+#X connect 18 0 23 0;
+#X connect 20 0 16 0;
+#X connect 21 0 20 0;
+#X connect 22 0 16 0;
+#X connect 23 0 27 0;
+#X connect 23 1 22 0;
+#X connect 23 2 17 0;
+#X connect 23 2 25 0;
+#X connect 23 2 26 0;
+#X connect 23 3 21 0;
+#X connect 24 0 1 0;
+#X connect 24 0 19 0;
+#X connect 25 0 24 0;
+#X connect 26 0 21 1;
+#X connect 27 0 16 0;
diff --git a/extensions/xgui/main/seg.pd b/extensions/xgui/main/seg.pd
new file mode 100644
index 00000000..1b44fd5d
--- /dev/null
+++ b/extensions/xgui/main/seg.pd
@@ -0,0 +1,60 @@
+#N canvas 387 -9 599 292 10;
+#X obj 24 30 inlet;
+#X obj 472 176 outlet;
+#X text 454 203 dh2002010x;
+#X text 465 214 dh20020316;
+#X text 24 9 The SEG onject;
+#X text 476 228 dh20020425;
+#X obj 333 121 oname2l;
+#X obj 333 144 unpack s s s;
+#X obj 333 75 loadbang;
+#X obj 333 236 s \$1-c;
+#X obj 408 164 s \$1-o;
+#X obj 52 90 r \$1-c;
+#X obj 126 94 r \$1-o;
+#X obj 333 167 pack s s;
+#X text 486 235 dh20020530;
+#X obj 332 207 a2s;
+#X msg 333 190 list \$1 / \$2;
+#X obj 139 228 send to_node;
+#X obj 333 98 symbol \$2;
+#X obj 59 30 r \$1-in;
+#X obj 481 151 s \$1-out;
+#X obj 195 154 concat do;
+#X obj 195 131 concat \$2;
+#X obj 13 145 make4seg_sss x del x;
+#X obj 13 122 make4seg_sss x add_seg x;
+#X obj 24 55 route show hide @;
+#X obj 472 99 recv2 \$2;
+#X obj 470 73 concat @;
+#X obj 216 101 concat symbol;
+#X text 18 342 today's the 14 of july;
+#X connect 0 0 25 0;
+#X connect 6 0 7 0;
+#X connect 7 0 13 0;
+#X connect 7 1 13 1;
+#X connect 7 2 10 0;
+#X connect 8 0 18 0;
+#X connect 11 0 23 1;
+#X connect 11 0 24 1;
+#X connect 12 0 23 3;
+#X connect 12 0 24 3;
+#X connect 13 0 16 0;
+#X connect 15 0 9 0;
+#X connect 16 0 15 0;
+#X connect 18 0 6 0;
+#X connect 19 0 25 0;
+#X connect 21 0 17 0;
+#X connect 22 0 21 0;
+#X connect 23 0 17 0;
+#X connect 24 0 17 0;
+#X connect 25 0 24 0;
+#X connect 25 1 23 0;
+#X connect 25 2 18 0;
+#X connect 25 2 27 0;
+#X connect 25 2 28 0;
+#X connect 25 3 22 0;
+#X connect 26 0 1 0;
+#X connect 26 0 20 0;
+#X connect 27 0 26 0;
+#X connect 28 0 22 1;
diff --git a/extensions/xgui/main/text.pd b/extensions/xgui/main/text.pd
new file mode 100644
index 00000000..ee3b8186
--- /dev/null
+++ b/extensions/xgui/main/text.pd
@@ -0,0 +1,59 @@
+#N canvas 201 377 599 300 10;
+#X obj 24 30 inlet;
+#X obj 462 176 outlet;
+#X text 454 203 dh2002010x;
+#X text 465 214 dh20020316;
+#X text 476 228 dh20020425;
+#X obj 333 121 oname2l;
+#X obj 333 144 unpack s s s;
+#X obj 333 75 loadbang;
+#X obj 333 236 s \$1-c;
+#X obj 408 164 s \$1-o;
+#X obj 52 90 r \$1-c;
+#X obj 126 94 r \$1-o;
+#X obj 333 167 pack s s;
+#X text 486 235 dh20020530;
+#X obj 332 207 a2s;
+#X msg 333 190 list \$1 / \$2;
+#X obj 139 228 send to_node;
+#X obj 333 98 symbol \$2;
+#X obj 59 30 r \$1-in;
+#X obj 471 151 s \$1-out;
+#X obj 195 154 concat do;
+#X obj 195 131 concat \$2;
+#X obj 13 145 make4seg_sss x del x;
+#X obj 24 55 route show hide @;
+#X obj 462 99 recv2 \$2;
+#X obj 460 73 concat @;
+#X obj 216 101 concat symbol;
+#X text 24 9 The text onject;
+#X obj 13 122 make4seg_sss x add_text x;
+#X connect 0 0 23 0;
+#X connect 5 0 6 0;
+#X connect 6 0 12 0;
+#X connect 6 1 12 1;
+#X connect 6 2 9 0;
+#X connect 7 0 17 0;
+#X connect 10 0 22 1;
+#X connect 10 0 28 1;
+#X connect 11 0 22 3;
+#X connect 11 0 28 3;
+#X connect 12 0 15 0;
+#X connect 14 0 8 0;
+#X connect 15 0 14 0;
+#X connect 17 0 5 0;
+#X connect 18 0 23 0;
+#X connect 20 0 16 0;
+#X connect 21 0 20 0;
+#X connect 22 0 16 0;
+#X connect 23 0 28 0;
+#X connect 23 1 22 0;
+#X connect 23 2 17 0;
+#X connect 23 2 25 0;
+#X connect 23 2 26 0;
+#X connect 23 3 21 0;
+#X connect 24 0 1 0;
+#X connect 24 0 19 0;
+#X connect 25 0 24 0;
+#X connect 26 0 21 1;
+#X connect 28 0 16 0;
diff --git a/extensions/xgui/makefile b/extensions/xgui/makefile
new file mode 100644
index 00000000..2c0e1631
--- /dev/null
+++ b/extensions/xgui/makefile
@@ -0,0 +1,64 @@
+#This is the xgui makefile.
+
+current:
+ cd xgui-lib ; make pd_linux ; cd ..
+
+uninstall:
+
+# bin
+ rm -f /usr/local/bin/xgui
+ rm -f /usr/local/bin/pdx
+# main
+ rm -f /usr/local/lib/pdx/main/*
+ rmdir /usr/local/lib/pdx/main
+# patch4pdx
+ rm -f /usr/local/lib/pdx/patch4pdx/*
+ rmdir /usr/local/lib/pdx/patch4pdx
+# lib
+ rm -f /usr/local/lib/pdx/*
+ rmdir /usr/local/lib/pdx
+# doc
+ rm -f /usr/local/lib/pd/doc/xgui/*
+ rmdir /usr/local/lib/pd/doc/xgui
+
+
+
+install:
+
+# bin
+ install ./bin/xgui.sh /usr/local/bin/xgui
+ install ./bin/pdx.sh /usr/local/bin/pdx
+
+# lib
+ mkdir -p /usr/local/lib/pdx
+
+# main
+ mkdir -p /usr/local/lib/pdx/main
+ install ./main/* /usr/local/lib/pdx/main/
+
+# patch4pdx
+ mkdir -p /usr/local/lib/pdx/patch4pdx
+
+ install ./adapters_in/* /usr/local/lib/pdx/patch4pdx/
+ install ./adapters_out/* /usr/local/lib/pdx/patch4pdx/
+ install ./behaviors/* /usr/local/lib/pdx/patch4pdx/
+ install ./filters/* /usr/local/lib/pdx/patch4pdx/
+ install ./objects/* /usr/local/lib/pdx/patch4pdx/
+ install ./utils/* /usr/local/lib/pdx/patch4pdx/
+ install ./physics/* /usr/local/lib/pdx/patch4pdx/
+
+# xgui-lib
+ install ./bin/*.pd_linux /usr/local/lib/pd/extra/
+
+# doc
+ mkdir -p /usr/local/lib/pd/doc/xgui/
+ install ./doc/* /usr/local/lib/pd/doc/xgui/
+
+archive:
+ cd ../;tar -cf xgui.tar xgui
+ gzip ../xgui.tar
+
+4linux:
+ chmod 774 pdx.sh
+ chmod 774 bin/pdx.sh
+ chmod 774 bin/xgui.sh
diff --git a/extensions/xgui/objects/button.pd b/extensions/xgui/objects/button.pd
new file mode 100644
index 00000000..1b6b696e
--- /dev/null
+++ b/extensions/xgui/objects/button.pd
@@ -0,0 +1,81 @@
+#N canvas 261 228 640 649 10;
+#X obj 21 16 inlet;
+#X obj 21 40 route show float hide;
+#X obj 200 185 pack f f f f;
+#X msg 87 181 hide;
+#X obj 295 193 pack f f;
+#X obj 46 65 t b b b b b;
+#X msg 295 217 show \, pos \$1 \$2 \, color blue \, anchor center;
+#X obj 32 522 outlet;
+#X msg 74 439 color grey;
+#X msg 155 440 color white;
+#X obj 76 369 route click;
+#X obj 154 415 delay 100;
+#X obj 336 164 moy;
+#X obj 293 170 moy;
+#X obj 194 138 \$4;
+#X obj 219 138 \$5;
+#X text 444 533 dh20020428;
+#X msg 200 270 show \, coord \$1 \$2 \$3 \$4 \, width 1 \, color white
+;
+#X obj 243 93 \$4;
+#X obj 277 93 \$5;
+#X obj 243 116 + \$6;
+#X obj 274 117 + \$7;
+#X obj 21 132 t b b;
+#X msg 49 161 raise;
+#X msg 25 188 raise;
+#X obj 323 307 symbol \$3;
+#X msg 323 332 text \$1;
+#X text 95 15 button canvas name text posX posY dX dY;
+#X obj 76 343 rect \$1-c;
+#X obj 56 256 make_obj_name \$2;
+#X obj 88 320 make_obj_name \$2;
+#X obj 37 283 text \$1-t;
+#X obj 200 307 alias \$1-c;
+#X obj 323 357 alias \$1-t;
+#X obj 295 241 alias \$1-t;
+#X obj 113 478 alias \$1-c;
+#X connect 0 0 1 0;
+#X connect 1 0 5 0;
+#X connect 1 2 3 0;
+#X connect 2 0 17 0;
+#X connect 3 0 28 0;
+#X connect 3 0 31 0;
+#X connect 4 0 6 0;
+#X connect 5 0 22 0;
+#X connect 5 0 25 0;
+#X connect 5 1 14 0;
+#X connect 5 2 15 0;
+#X connect 5 3 18 0;
+#X connect 5 4 19 0;
+#X connect 6 0 34 0;
+#X connect 8 0 35 0;
+#X connect 9 0 35 0;
+#X connect 10 0 11 0;
+#X connect 10 0 8 0;
+#X connect 10 0 7 0;
+#X connect 11 0 9 0;
+#X connect 12 0 4 1;
+#X connect 13 0 4 0;
+#X connect 14 0 2 0;
+#X connect 14 0 13 0;
+#X connect 15 0 2 1;
+#X connect 15 0 12 0;
+#X connect 17 0 32 0;
+#X connect 18 0 20 0;
+#X connect 19 0 21 0;
+#X connect 20 0 2 2;
+#X connect 20 0 13 1;
+#X connect 21 0 2 3;
+#X connect 21 0 12 1;
+#X connect 22 0 24 0;
+#X connect 22 1 23 0;
+#X connect 23 0 28 0;
+#X connect 24 0 31 0;
+#X connect 25 0 26 0;
+#X connect 26 0 33 0;
+#X connect 28 0 10 0;
+#X connect 29 0 31 0;
+#X connect 30 0 28 0;
+#X connect 31 0 10 0;
diff --git a/extensions/xgui/objects/i-point.pd b/extensions/xgui/objects/i-point.pd
new file mode 100644
index 00000000..f5697cba
--- /dev/null
+++ b/extensions/xgui/objects/i-point.pd
@@ -0,0 +1,6 @@
+#N canvas 371 189 536 425 10;
+#X obj 55 297 move;
+#X obj 24 268 seg le \$0-point */;
+#X obj 87 164 make_object_name \$1;
+#X connect 0 0 1 0;
+#X connect 1 0 0 0;
diff --git a/extensions/xgui/objects/i-rect.pd b/extensions/xgui/objects/i-rect.pd
new file mode 100644
index 00000000..291939c5
--- /dev/null
+++ b/extensions/xgui/objects/i-rect.pd
@@ -0,0 +1,142 @@
+#N canvas 129 132 726 510 10;
+#X msg 357 111 width \$1;
+#X msg 357 88 raise;
+#X obj 26 73 move;
+#X obj 172 73 move;
+#X obj 207 97 coord2xy;
+#X obj 62 96 coord2xy;
+#X obj 107 294 inlet;
+#X obj 110 247 outlet;
+#X msg 18 371 coord \$1 \$2 \$3 \$4;
+#X msg 18 348 coord \$1 \$2 \$1 \$2;
+#X msg 18 394 coord \$3 \$4 \$3 \$4;
+#X msg 155 354 xy1 \$1 \$2;
+#X msg 156 381 xy2 \$1 \$2;
+#X msg 237 376 xy1 \$1 \$2;
+#X msg 237 355 xy2 \$1 \$2;
+#X obj 63 195 xy2xy1;
+#X obj 201 190 xy2xy2;
+#X obj 240 32 light_over;
+#X obj 63 50 light_over;
+#X obj 357 43 bang;
+#X obj 154 463 alias \$0-p2;
+#X obj 153 438 alias \$0-l1;
+#X obj 156 410 alias \$0-p1;
+#X obj 357 180 alias \$0-p2;
+#X text 352 23 default values;
+#X text 169 292 methodes;
+#X text 25 26 two seg for driving one :;
+#X obj 54 268 move;
+#X msg 357 202 coord 10 10 30 30;
+#X msg 311 254 show;
+#X obj 107 316 route coord xy1 xy2 show;
+#X msg 357 65 5;
+#X text 346 423 dh20020427;
+#X obj 67 161 min;
+#X obj 91 161 min;
+#X obj 114 162 min;
+#X obj 139 162 min;
+#X obj 187 139 max;
+#X obj 212 139 max;
+#X obj 237 140 max;
+#X obj 262 140 max;
+#X obj 207 73 seg \$0-p2 \$1/p2;
+#X obj 62 74 seg \$0-p1 \$1/p1;
+#X obj 357 134 alias \$0-p1;
+#X obj 357 157 alias \$0-l1;
+#X obj 526 92 oname2l;
+#X obj 526 115 unpack s s s;
+#X obj 526 46 loadbang;
+#X obj 526 207 s \$1-c;
+#X obj 601 135 s \$1-o;
+#X obj 526 138 pack s s;
+#X obj 526 184 a2s;
+#X msg 526 161 list \$1 / \$2;
+#X obj 526 69 symbol \$2;
+#X obj 111 224 rect \$0-l1 \$1/l1;
+#X text 7 2 i-rect;
+#X connect 0 0 23 0;
+#X connect 0 0 43 0;
+#X connect 0 0 44 0;
+#X connect 1 0 23 0;
+#X connect 1 0 43 0;
+#X connect 2 0 42 0;
+#X connect 3 0 41 0;
+#X connect 4 0 37 1;
+#X connect 4 0 38 0;
+#X connect 4 0 33 1;
+#X connect 4 0 34 0;
+#X connect 4 1 36 0;
+#X connect 4 1 35 1;
+#X connect 4 1 39 1;
+#X connect 4 1 40 0;
+#X connect 5 0 33 0;
+#X connect 5 0 37 0;
+#X connect 5 0 38 1;
+#X connect 5 0 34 1;
+#X connect 5 1 35 0;
+#X connect 5 1 36 1;
+#X connect 5 1 39 0;
+#X connect 5 1 40 1;
+#X connect 6 0 30 0;
+#X connect 8 0 21 0;
+#X connect 9 0 22 0;
+#X connect 10 0 20 0;
+#X connect 11 0 21 0;
+#X connect 11 0 22 0;
+#X connect 12 0 22 0;
+#X connect 13 0 20 0;
+#X connect 14 0 20 0;
+#X connect 14 0 21 0;
+#X connect 15 0 7 0;
+#X connect 15 0 54 0;
+#X connect 16 0 7 0;
+#X connect 16 0 54 0;
+#X connect 17 0 41 0;
+#X connect 18 0 42 0;
+#X connect 19 0 1 0;
+#X connect 19 0 31 0;
+#X connect 19 0 28 0;
+#X connect 27 0 30 0;
+#X connect 28 0 30 0;
+#X connect 29 0 22 0;
+#X connect 29 0 21 0;
+#X connect 29 0 20 0;
+#X connect 29 0 19 0;
+#X connect 30 0 9 0;
+#X connect 30 0 8 0;
+#X connect 30 0 10 0;
+#X connect 30 1 11 0;
+#X connect 30 1 12 0;
+#X connect 30 2 13 0;
+#X connect 30 2 14 0;
+#X connect 30 3 29 0;
+#X connect 30 4 20 0;
+#X connect 30 4 21 0;
+#X connect 30 4 22 0;
+#X connect 31 0 0 0;
+#X connect 33 0 15 0;
+#X connect 34 0 15 0;
+#X connect 35 0 15 1;
+#X connect 36 0 15 1;
+#X connect 37 0 16 0;
+#X connect 38 0 16 0;
+#X connect 39 0 16 1;
+#X connect 40 0 16 1;
+#X connect 41 0 3 0;
+#X connect 41 0 4 0;
+#X connect 41 0 17 0;
+#X connect 42 0 2 0;
+#X connect 42 0 5 0;
+#X connect 42 0 18 0;
+#X connect 45 0 46 0;
+#X connect 46 0 50 0;
+#X connect 46 1 50 1;
+#X connect 46 2 49 0;
+#X connect 47 0 53 0;
+#X connect 50 0 52 0;
+#X connect 51 0 48 0;
+#X connect 52 0 51 0;
+#X connect 53 0 45 0;
+#X connect 54 0 7 0;
+#X connect 54 0 27 0;
diff --git a/extensions/xgui/objects/i-seg.pd b/extensions/xgui/objects/i-seg.pd
new file mode 100644
index 00000000..4c8cebb5
--- /dev/null
+++ b/extensions/xgui/objects/i-seg.pd
@@ -0,0 +1,152 @@
+#N canvas 161 127 786 457 10;
+#X msg 357 111 width \$1;
+#X msg 357 88 raise;
+#X obj 26 73 move;
+#X obj 172 73 move;
+#X obj 207 96 coord2xy;
+#X obj 63 96 coord2xy;
+#X msg 357 65 15;
+#X obj 106 244 inlet;
+#X obj 109 197 outlet;
+#X text 7 2 i-seg;
+#X text 698 427 dh20020107;
+#X msg 17 321 coord \$1 \$2 \$3 \$4;
+#X msg 17 298 coord \$1 \$2 \$1 \$2;
+#X msg 17 344 coord \$3 \$4 \$3 \$4;
+#X msg 154 304 xy1 \$1 \$2;
+#X msg 155 331 xy2 \$1 \$2;
+#X msg 236 326 xy1 \$1 \$2;
+#X msg 236 305 xy2 \$1 \$2;
+#X obj 63 121 xy2xy1;
+#X obj 203 122 xy2xy2;
+#X obj 207 52 light_over;
+#X obj 63 50 light_over;
+#X obj 209 174 light_over;
+#X obj 357 43 bang;
+#X obj 384 366 osc~;
+#X obj 384 297 mtof;
+#X obj 384 388 *~ 0;
+#X obj 375 414 dac~;
+#X obj 628 276 coord2xy;
+#X obj 501 223 r play_pos;
+#X obj 446 253 in;
+#X obj 446 364 * 0.1;
+#X msg 628 226 move 0 0;
+#X obj 628 251 alias \$0-l1;
+#X obj 153 413 alias \$0-p2;
+#X obj 152 388 alias \$0-l1;
+#X obj 155 360 alias \$0-p1;
+#X obj 357 134 alias \$0-p1;
+#X obj 357 157 alias \$0-l1;
+#X obj 357 180 alias \$0-p2;
+#X text 352 23 default values;
+#X text 168 242 methodes;
+#X text 25 26 two seg for driving one :;
+#X obj 53 218 move;
+#X obj 384 342 line~;
+#X obj 384 319 pack 0 3;
+#X obj 510 304 expr (($f3-$f5)/($f2-$f4))*($f1-$f2)+$f3;
+#X obj 384 256 * -0.5;
+#X obj 384 276 + 127;
+#X msg 357 202 coord 10 10 30 30;
+#X msg 311 254 show;
+#X obj 106 266 route coord xy1 xy2 show;
+#X obj 207 73 seg \$0-p2;
+#X obj 65 73 seg \$0-p1;
+#X obj 109 174 seg \$0-l1;
+#X obj 557 27 make_obj_name \$1;
+#X obj 558 51 make_obj_name \$1;
+#X obj 558 74 make_obj_name \$1;
+#X obj 270 73 route update;
+#X obj 119 96 route update;
+#X obj 7 173 route update;
+#X connect 0 0 37 0;
+#X connect 0 0 38 0;
+#X connect 0 0 39 0;
+#X connect 1 0 37 0;
+#X connect 1 0 39 0;
+#X connect 2 0 53 0;
+#X connect 3 0 52 0;
+#X connect 4 0 19 0;
+#X connect 4 1 19 1;
+#X connect 5 0 18 0;
+#X connect 5 1 18 1;
+#X connect 6 0 0 0;
+#X connect 7 0 51 0;
+#X connect 11 0 35 0;
+#X connect 12 0 36 0;
+#X connect 13 0 34 0;
+#X connect 14 0 35 0;
+#X connect 14 0 36 0;
+#X connect 15 0 36 0;
+#X connect 16 0 34 0;
+#X connect 17 0 34 0;
+#X connect 17 0 35 0;
+#X connect 18 0 8 0;
+#X connect 18 0 54 0;
+#X connect 18 0 32 0;
+#X connect 19 0 8 0;
+#X connect 19 0 54 0;
+#X connect 19 0 32 0;
+#X connect 20 0 52 0;
+#X connect 21 0 53 0;
+#X connect 22 0 54 0;
+#X connect 23 0 1 0;
+#X connect 23 0 6 0;
+#X connect 23 0 49 0;
+#X connect 24 0 26 0;
+#X connect 25 0 45 0;
+#X connect 26 0 27 0;
+#X connect 26 0 27 1;
+#X connect 28 0 30 1;
+#X connect 28 0 46 1;
+#X connect 28 1 46 2;
+#X connect 28 2 30 2;
+#X connect 28 2 46 3;
+#X connect 28 3 46 4;
+#X connect 29 0 30 0;
+#X connect 29 0 46 0;
+#X connect 30 0 31 0;
+#X connect 31 0 26 1;
+#X connect 32 0 33 0;
+#X connect 33 0 28 0;
+#X connect 43 0 51 0;
+#X connect 44 0 24 0;
+#X connect 45 0 44 0;
+#X connect 46 0 47 0;
+#X connect 47 0 48 0;
+#X connect 48 0 25 0;
+#X connect 49 0 51 0;
+#X connect 50 0 36 0;
+#X connect 50 0 35 0;
+#X connect 50 0 34 0;
+#X connect 50 0 23 0;
+#X connect 51 0 12 0;
+#X connect 51 0 11 0;
+#X connect 51 0 13 0;
+#X connect 51 1 14 0;
+#X connect 51 1 15 0;
+#X connect 51 2 16 0;
+#X connect 51 2 17 0;
+#X connect 51 3 50 0;
+#X connect 51 4 34 0;
+#X connect 51 4 35 0;
+#X connect 51 4 36 0;
+#X connect 52 0 3 0;
+#X connect 52 0 4 0;
+#X connect 52 0 20 0;
+#X connect 52 0 58 0;
+#X connect 53 0 2 0;
+#X connect 53 0 5 0;
+#X connect 53 0 21 0;
+#X connect 53 0 59 0;
+#X connect 54 0 8 0;
+#X connect 54 0 22 0;
+#X connect 54 0 43 0;
+#X connect 54 0 60 0;
+#X connect 55 0 53 0;
+#X connect 56 0 52 0;
+#X connect 57 0 54 0;
+#X connect 58 0 52 0;
+#X connect 59 0 53 0;
+#X connect 60 0 54 0;
diff --git a/extensions/xgui/objects/i-seg_mp.pd b/extensions/xgui/objects/i-seg_mp.pd
new file mode 100644
index 00000000..3ab21bbe
--- /dev/null
+++ b/extensions/xgui/objects/i-seg_mp.pd
@@ -0,0 +1,140 @@
+#N canvas 89 288 774 438 10;
+#X msg 340 168 raise;
+#X obj 272 76 move;
+#X obj 190 75 coord2xy;
+#X obj 68 75 coord2xy;
+#X obj 593 114 inlet;
+#X obj 124 161 outlet;
+#X msg 416 56 coord 10 10 30 30;
+#X msg 416 31 coord 10 10 10 10;
+#X msg 416 81 coord 30 30 30 30;
+#X text 26 20 i-seg;
+#X text 417 408 dh20020107;
+#X msg 495 202 coord \$1 \$2 \$3 \$4;
+#X msg 495 177 coord \$1 \$2 \$1 \$2;
+#X msg 495 228 coord \$3 \$4 \$3 \$4;
+#X msg 646 184 xy1 \$1 \$2;
+#X msg 647 213 xy2 \$1 \$2;
+#X msg 736 208 xy1 \$1 \$2;
+#X msg 736 185 xy2 \$1 \$2;
+#X obj 68 102 xy2xy1;
+#X obj 186 103 xy2xy2;
+#X obj 193 20 light_over;
+#X obj 125 103 r \$0-l1;
+#X obj 184 332 xy2xy1;
+#X obj 232 336 xy2xy2;
+#X obj 83 253 lia_2d 50 5 0 0 0 0 0 0 0 0 50;
+#X msg 315 223 width 30;
+#X msg 387 222 width 15;
+#X obj 195 301 ma_2d 100 0 0;
+#X obj 275 277 + 50;
+#X obj 422 186 delay 0;
+#X obj 436 157 bang;
+#X obj 417 259 t b b b;
+#X obj 406 355 xy2xy1;
+#X obj 454 359 xy2xy2;
+#X msg 499 295 1;
+#X msg 486 142 show;
+#X obj 457 312 \$3;
+#X obj 415 310 \$2;
+#X obj 647 245 alias \$0-p1;
+#X obj 644 276 alias \$0-l1;
+#X obj 641 311 alias \$0-p2;
+#X obj 340 52 alias \$0-p1;
+#X obj 340 102 alias \$0-p2;
+#X obj 340 77 alias \$0-l1;
+#X obj 593 142 route coord xy1 xy2 show;
+#X obj 270 22 make_obj_name \$1;
+#X obj 68 50 seg \$0-p1;
+#X obj 124 135 seg \$0-l1 \$1;
+#X obj 69 23 make_obj_name \$1;
+#X obj 225 127 make_obj_name \$1;
+#X obj 201 50 seg \$0-p2;
+#X connect 0 0 41 0;
+#X connect 0 0 42 0;
+#X connect 1 0 50 0;
+#X connect 2 0 19 0;
+#X connect 2 0 24 2;
+#X connect 2 1 19 1;
+#X connect 2 1 24 4;
+#X connect 3 0 18 0;
+#X connect 3 1 18 1;
+#X connect 4 0 44 0;
+#X connect 6 0 43 0;
+#X connect 7 0 41 0;
+#X connect 8 0 42 0;
+#X connect 11 0 39 0;
+#X connect 12 0 38 0;
+#X connect 13 0 40 0;
+#X connect 14 0 38 0;
+#X connect 15 0 38 0;
+#X connect 16 0 40 0;
+#X connect 17 0 39 0;
+#X connect 17 0 40 0;
+#X connect 18 0 5 0;
+#X connect 18 0 47 0;
+#X connect 19 0 5 0;
+#X connect 19 0 47 0;
+#X connect 20 0 50 0;
+#X connect 21 0 47 0;
+#X connect 22 0 46 0;
+#X connect 22 0 47 0;
+#X connect 23 0 46 0;
+#X connect 24 2 27 1;
+#X connect 24 3 28 0;
+#X connect 25 0 41 0;
+#X connect 25 0 42 0;
+#X connect 26 0 43 0;
+#X connect 27 0 22 0;
+#X connect 27 0 23 0;
+#X connect 27 0 24 6;
+#X connect 27 1 24 7;
+#X connect 27 2 22 1;
+#X connect 27 2 23 1;
+#X connect 27 2 24 8;
+#X connect 27 3 24 9;
+#X connect 28 0 27 2;
+#X connect 29 0 0 0;
+#X connect 29 0 7 0;
+#X connect 29 0 6 0;
+#X connect 29 0 8 0;
+#X connect 29 0 25 0;
+#X connect 29 0 26 0;
+#X connect 29 0 31 0;
+#X connect 30 0 29 0;
+#X connect 31 0 37 0;
+#X connect 31 1 36 0;
+#X connect 31 2 34 0;
+#X connect 32 0 46 0;
+#X connect 32 0 47 0;
+#X connect 32 0 50 0;
+#X connect 33 0 46 0;
+#X connect 33 0 47 0;
+#X connect 33 0 50 0;
+#X connect 34 0 24 9;
+#X connect 34 0 24 7;
+#X connect 35 0 30 0;
+#X connect 35 0 38 0;
+#X connect 35 0 39 0;
+#X connect 35 0 40 0;
+#X connect 36 0 24 8;
+#X connect 36 0 32 1;
+#X connect 36 0 33 1;
+#X connect 37 0 32 0;
+#X connect 37 0 33 0;
+#X connect 44 0 12 0;
+#X connect 44 0 11 0;
+#X connect 44 0 13 0;
+#X connect 44 1 14 0;
+#X connect 44 1 15 0;
+#X connect 44 2 16 0;
+#X connect 44 2 17 0;
+#X connect 44 3 35 0;
+#X connect 45 0 50 0;
+#X connect 46 0 3 0;
+#X connect 47 0 5 0;
+#X connect 48 0 46 0;
+#X connect 49 0 47 0;
+#X connect 50 0 1 0;
+#X connect 50 0 2 0;
+#X connect 50 0 20 0;
diff --git a/extensions/xgui/objects/my_slider1.pd b/extensions/xgui/objects/my_slider1.pd
new file mode 100644
index 00000000..a40a7fca
--- /dev/null
+++ b/extensions/xgui/objects/my_slider1.pd
@@ -0,0 +1,112 @@
+#N canvas 254 54 549 522 10;
+#X text 95 7 my_slider1;
+#X obj 14 8 inlet;
+#X obj 276 461 outlet;
+#X obj 303 144 xy2coord;
+#X obj 150 153 + 200;
+#X obj 430 275 move_y;
+#X obj 414 425 xy2coord;
+#X obj 430 230 light_over;
+#X obj 260 282 coord2xy;
+#X text 445 493 dh20020109;
+#X obj 277 411 * -1;
+#X obj 277 388 -;
+#X obj 277 434 +;
+#X text 47 86 x pos;
+#X text 127 101 y pos;
+#X text 210 125 y size;
+#X obj 303 190 click2bxy;
+#X msg 462 208 Blue;
+#N canvas 489 354 249 191 check_min_max 0;
+#X obj 51 110 max;
+#X obj 51 86 min;
+#X obj 51 34 inlet;
+#X obj 51 134 outlet;
+#X obj 75 57 r \$0-y_max;
+#X obj 82 80 r \$0-y_min;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X connect 4 0 1 1;
+#X connect 5 0 0 1;
+#X restore 277 342 pd check_min_max;
+#X obj 100 126 s \$0-y_min;
+#X obj 150 177 s \$0-y_max;
+#X obj 316 93 r \$0-y_min;
+#X obj 15 101 s \$0-x_pos;
+#X obj 293 365 r \$0-y_max;
+#X obj 456 385 r \$0-y_max;
+#X obj 293 45 r \$0-x_pos;
+#X obj 413 335 r \$0-x_pos;
+#X obj 14 55 t b b b b b;
+#X obj 64 269 alias \$0-sld;
+#X obj 84 222 alias \$0-cadre;
+#X obj 414 449 alias \$0-sld;
+#X obj 430 252 alias \$0-sld;
+#X obj 14 31 route show float hide;
+#X msg 165 52 hide;
+#X obj 260 259 seg \$1 \$0-sld;
+#X msg 85 199 show \, width 1 \, color white;
+#X obj 303 167 rect \$1 \$0-cadre 10 10 20 20;
+#X obj 325 71 + 15;
+#X obj 426 363 + 15;
+#X msg 63 244 show \, color Blue \, width 3;
+#X obj 14 78 \$3;
+#X obj 100 102 \$4;
+#X obj 180 127 \$5;
+#X obj 344 115 + \$5;
+#X obj 22 177 -;
+#X obj 22 200 * -1;
+#X obj 35 154 r \$0-y_max;
+#X connect 1 0 32 0;
+#X connect 3 0 36 0;
+#X connect 4 0 20 0;
+#X connect 5 0 31 0;
+#X connect 6 0 30 0;
+#X connect 7 0 31 0;
+#X connect 8 1 18 0;
+#X connect 10 0 12 0;
+#X connect 11 0 10 0;
+#X connect 12 0 2 0;
+#X connect 16 2 18 0;
+#X connect 17 0 7 1;
+#X connect 18 0 11 0;
+#X connect 18 0 6 1;
+#X connect 18 0 6 3;
+#X connect 21 0 3 1;
+#X connect 21 0 43 0;
+#X connect 23 0 11 1;
+#X connect 24 0 6 3;
+#X connect 24 0 6 1;
+#X connect 25 0 3 0;
+#X connect 25 0 37 0;
+#X connect 26 0 6 0;
+#X connect 26 0 38 0;
+#X connect 27 0 40 0;
+#X connect 27 1 41 0;
+#X connect 27 2 42 0;
+#X connect 27 3 39 0;
+#X connect 27 3 17 0;
+#X connect 27 4 35 0;
+#X connect 31 0 7 0;
+#X connect 31 0 5 0;
+#X connect 32 0 27 0;
+#X connect 32 1 44 0;
+#X connect 32 2 33 0;
+#X connect 33 0 34 0;
+#X connect 33 0 36 0;
+#X connect 34 0 8 0;
+#X connect 35 0 29 0;
+#X connect 36 0 16 0;
+#X connect 36 0 5 0;
+#X connect 37 0 3 2;
+#X connect 38 0 6 2;
+#X connect 39 0 28 0;
+#X connect 40 0 22 0;
+#X connect 41 0 4 0;
+#X connect 41 0 19 0;
+#X connect 42 0 4 1;
+#X connect 43 0 3 3;
+#X connect 44 0 45 0;
+#X connect 45 0 18 0;
+#X connect 46 0 44 1;
diff --git a/extensions/xgui/objects/my_slider2.pd b/extensions/xgui/objects/my_slider2.pd
new file mode 100644
index 00000000..36d906d8
--- /dev/null
+++ b/extensions/xgui/objects/my_slider2.pd
@@ -0,0 +1,112 @@
+#N canvas 53 59 648 533 10;
+#X text 95 7 my_slider1;
+#X obj 14 8 inlet;
+#X obj 147 446 outlet;
+#X obj 431 153 xy2coord;
+#X obj 350 448 xy2coord;
+#X obj 322 156 coord2xy;
+#X text 503 470 dh20020109;
+#X text 47 86 x pos;
+#X text 59 126 y pos;
+#X obj 431 199 click2bxy;
+#X obj 25 167 s \$0-y_min;
+#X obj 69 247 s \$0-y_max;
+#X obj 445 102 r \$0-y_min;
+#X obj 15 101 s \$0-x_pos;
+#X obj 392 408 r \$0-y_max;
+#X obj 431 52 r \$0-x_pos;
+#X obj 347 362 r \$0-x_pos;
+#X obj 14 55 t b b b b b;
+#X obj 14 31 route show float hide;
+#X msg 94 54 hide;
+#X obj 459 80 + 15;
+#X obj 362 386 + 15;
+#X obj 14 78 \$3;
+#X obj 32 127 \$4;
+#X obj 474 127 + \$5;
+#X obj 110 221 \$6;
+#X text 137 222 value size;
+#X obj 62 282 pack f f f;
+#X obj 59 192 + \$5;
+#X text 96 191 real size;
+#X msg 147 356 \$1 \, bang;
+#X obj 141 323 t b f;
+#X obj 360 279 t b f;
+#X obj 148 380 number \$0-value;
+#X obj 429 317 number \$0-value;
+#X msg 44 336 bound 0 \$1;
+#X text 513 480 dh20020523;
+#X obj 140 114 alias \$1-c;
+#X obj 137 160 alias \$1-sld;
+#X obj 350 472 alias \$1-sld;
+#X obj 323 107 make_obj_name \$2;
+#X obj 500 175 make_obj_name \$2;
+#X obj 431 176 rect \$1-c;
+#X obj 323 132 seg \$1-sld;
+#X obj 429 339 pack f 1000;
+#X obj 429 361 line;
+#X msg 141 91 show \, width 1 \, color black;
+#X msg 137 136 show \, color Blue \, width 5;
+#X msg 408 275 0 \, subspace 0 \$3 \$2 \$1 \, bang;
+#X obj 147 402 pack f 1000;
+#X obj 147 424 line;
+#X obj 279 180 route update;
+#X connect 1 0 18 0;
+#X connect 3 0 42 0;
+#X connect 4 0 39 0;
+#X connect 5 1 32 0;
+#X connect 9 0 34 0;
+#X connect 9 2 32 0;
+#X connect 12 0 3 1;
+#X connect 12 0 24 0;
+#X connect 14 0 4 3;
+#X connect 14 0 4 1;
+#X connect 15 0 3 0;
+#X connect 15 0 20 0;
+#X connect 16 0 4 0;
+#X connect 16 0 21 0;
+#X connect 17 0 22 0;
+#X connect 17 1 23 0;
+#X connect 17 3 47 0;
+#X connect 17 3 25 0;
+#X connect 17 4 46 0;
+#X connect 18 0 17 0;
+#X connect 18 1 31 0;
+#X connect 18 2 19 0;
+#X connect 19 0 37 0;
+#X connect 19 0 38 0;
+#X connect 20 0 3 2;
+#X connect 21 0 4 2;
+#X connect 22 0 13 0;
+#X connect 23 0 10 0;
+#X connect 23 0 28 0;
+#X connect 23 0 27 0;
+#X connect 24 0 3 3;
+#X connect 25 0 27 2;
+#X connect 25 0 35 0;
+#X connect 27 0 48 0;
+#X connect 28 0 11 0;
+#X connect 28 0 27 1;
+#X connect 30 0 33 0;
+#X connect 31 0 34 0;
+#X connect 31 1 30 0;
+#X connect 32 0 33 0;
+#X connect 32 0 34 0;
+#X connect 32 1 34 0;
+#X connect 33 0 49 0;
+#X connect 34 0 44 0;
+#X connect 35 0 33 0;
+#X connect 40 0 43 0;
+#X connect 41 0 42 0;
+#X connect 42 0 9 0;
+#X connect 43 0 5 0;
+#X connect 43 0 51 0;
+#X connect 44 0 45 0;
+#X connect 45 0 4 1;
+#X connect 45 0 4 3;
+#X connect 46 0 37 0;
+#X connect 47 0 38 0;
+#X connect 48 0 34 0;
+#X connect 49 0 50 0;
+#X connect 50 0 2 0;
+#X connect 51 0 5 0;
diff --git a/extensions/xgui/objects/my_slider3.pd b/extensions/xgui/objects/my_slider3.pd
new file mode 100644
index 00000000..66463cd7
--- /dev/null
+++ b/extensions/xgui/objects/my_slider3.pd
@@ -0,0 +1,160 @@
+#N canvas 115 125 610 479 10;
+#X obj 14 8 inlet;
+#X obj 245 414 outlet;
+#X obj 303 144 xy2coord;
+#X obj 135 154 + 200;
+#X obj 279 214 move_y;
+#X obj 160 336 xy2coord;
+#X obj 347 243 light_over;
+#X msg 59 393 color Blue;
+#X obj 279 267 coord2xy;
+#X obj 279 244 seg \$0-sld;
+#X obj 67 332 s \$0-cadre;
+#X obj 83 423 s \$0-sld;
+#X obj 245 368 * -1;
+#X obj 245 345 -;
+#X obj 245 391 +;
+#X obj 14 78 \$1;
+#X obj 85 103 \$2;
+#X obj 160 133 \$3;
+#X text 47 86 x pos;
+#X text 112 102 y pos;
+#X text 185 134 y size;
+#X msg 75 248 add;
+#X obj 303 190 click2bxy;
+#X obj 22 177 -;
+#X obj 22 200 * -1;
+#X msg 373 220 Blue;
+#N canvas 489 354 249 191 check_min_max 0;
+#X obj 51 110 max;
+#X obj 51 86 min;
+#X obj 51 34 inlet;
+#X obj 51 134 outlet;
+#X obj 75 57 r \$0-y_max;
+#X obj 82 80 r \$0-y_min;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X connect 4 0 1 1;
+#X connect 5 0 0 1;
+#X restore 245 299 pd check_min_max;
+#X obj 85 127 s \$0-y_min;
+#X obj 135 178 s \$0-y_max;
+#X obj 317 100 r \$0-y_min;
+#X obj 346 122 r \$0-y_max;
+#X obj 15 101 s \$0-x_pos;
+#X obj 35 154 r \$0-y_max;
+#X obj 258 321 r \$0-y_max;
+#X obj 192 248 r \$0-y_max;
+#X obj 303 77 r \$0-x_pos;
+#X obj 159 225 r \$0-x_pos;
+#X obj 14 55 t b b b b b;
+#X obj 351 266 r \$0-sld;
+#X obj 368 144 r \$0-cadre;
+#X obj 303 167 seg cadre;
+#X msg 59 370 width 20;
+#X msg 452 29 bang;
+#X obj 456 91 t b b;
+#X obj 456 139 s bangl;
+#X obj 481 117 s bangm;
+#X msg 486 29 stop;
+#X obj 393 368 ma 100;
+#X obj 456 65 metro 50;
+#X text 95 7 my_slider3 mass;
+#X obj 160 361 coord2xy;
+#X obj 154 420 xy2coord;
+#X msg 59 299 width 22;
+#N canvas 489 354 249 191 check_min_max 0;
+#X obj 51 110 max;
+#X obj 51 86 min;
+#X obj 51 34 inlet;
+#X obj 51 134 outlet;
+#X obj 75 57 r \$0-y_max;
+#X obj 82 80 r \$0-y_min;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X connect 4 0 1 1;
+#X connect 5 0 0 1;
+#X restore 354 296 pd check_min_max;
+#X obj 520 30 loadbang;
+#X text 364 420 dh20020210;
+#X obj 319 397 lia 50 20 0 0 0 0 0;
+#X msg 419 172 caps butt;
+#X obj 14 31 route add float del;
+#X msg 100 54 del;
+#X connect 0 0 58 0;
+#X connect 2 0 40 0;
+#X connect 3 0 28 0;
+#X connect 4 0 9 0;
+#X connect 5 0 50 0;
+#X connect 6 0 9 0;
+#X connect 7 0 11 0;
+#X connect 8 1 53 0;
+#X connect 9 0 4 0;
+#X connect 9 0 6 0;
+#X connect 9 0 8 0;
+#X connect 12 0 14 0;
+#X connect 13 0 12 0;
+#X connect 14 0 1 0;
+#X connect 15 0 31 0;
+#X connect 16 0 3 0;
+#X connect 16 0 27 0;
+#X connect 17 0 3 1;
+#X connect 21 0 10 0;
+#X connect 21 0 11 0;
+#X connect 22 2 26 0;
+#X connect 23 0 24 0;
+#X connect 24 0 26 0;
+#X connect 25 0 6 1;
+#X connect 26 0 5 1;
+#X connect 26 0 5 3;
+#X connect 29 0 2 1;
+#X connect 30 0 2 3;
+#X connect 32 0 23 1;
+#X connect 33 0 13 1;
+#X connect 34 0 5 3;
+#X connect 34 0 5 1;
+#X connect 35 0 2 0;
+#X connect 35 0 2 2;
+#X connect 36 0 5 0;
+#X connect 36 0 5 2;
+#X connect 37 0 15 0;
+#X connect 37 1 16 0;
+#X connect 37 2 17 0;
+#X connect 37 3 52 0;
+#X connect 37 3 41 0;
+#X connect 37 3 7 0;
+#X connect 37 3 25 0;
+#X connect 37 4 21 0;
+#X connect 38 0 9 0;
+#X connect 39 0 40 0;
+#X connect 40 0 22 0;
+#X connect 40 0 4 0;
+#X connect 41 0 11 0;
+#X connect 42 0 48 0;
+#X connect 43 0 44 0;
+#X connect 43 1 45 0;
+#X connect 46 0 48 0;
+#X connect 47 0 51 1;
+#X connect 47 0 13 0;
+#X connect 47 0 56 4;
+#X connect 47 1 56 5;
+#X connect 48 0 43 0;
+#X connect 50 0 51 0;
+#X connect 50 1 56 2;
+#X connect 50 2 51 2;
+#X connect 50 3 51 3;
+#X connect 51 0 9 0;
+#X connect 52 0 10 0;
+#X connect 53 0 56 2;
+#X connect 53 0 51 1;
+#X connect 53 0 51 3;
+#X connect 54 0 48 0;
+#X connect 56 1 47 1;
+#X connect 57 0 40 0;
+#X connect 58 0 37 0;
+#X connect 58 1 23 0;
+#X connect 58 2 59 0;
+#X connect 59 0 10 0;
+#X connect 59 0 11 0;
diff --git a/extensions/xgui/objects/pad.pd b/extensions/xgui/objects/pad.pd
new file mode 100644
index 00000000..655b6f7d
--- /dev/null
+++ b/extensions/xgui/objects/pad.pd
@@ -0,0 +1,85 @@
+#N canvas 349 58 590 576 10;
+#X text 95 15 my_slider1;
+#X obj 21 16 inlet;
+#X obj 21 40 route show float hide;
+#X obj 200 185 pack f f f f;
+#X msg 102 123 hide;
+#X obj 293 194 pack f f;
+#X obj 21 64 t b b b b b;
+#X msg 21 108 raise;
+#X obj 210 478 outlet;
+#X obj 336 170 moy;
+#X obj 293 170 moy;
+#X obj 193 331 symbol \$3;
+#X msg 193 355 text \$1;
+#X text 442 445 dh20020428;
+#X obj 210 113 \$3;
+#X obj 235 113 \$4;
+#X msg 200 270 show \, coord \$1 \$2 \$3 \$4 \, width 1 \, color white
+;
+#X msg 22 295 coord \$1 \$2 \$1 \$2;
+#X msg 293 218 show \, coord \$1 \$2 \$1 \$2 \, color blue \, width
+5;
+#X msg 100 323 move \$1 \$2;
+#X obj 50 381 route coord;
+#X obj 21 132 t a a;
+#X obj 264 113 \$5;
+#X obj 293 113 \$6;
+#X msg 30 414 xy \$1 \$2;
+#X msg 27 474 coord \$1 \$2 \$1 \$2;
+#X obj 35 446 subspace \$3 \$4 \$5 \$6 0 \$8 \$7 0;
+#X text 452 455 dh20020523;
+#X obj 200 294 alias \$1-bord;
+#X obj 193 379 alias \$1-value;
+#X obj 66 231 rect \$1-bord;
+#X obj 28 205 seg \$1-pos;
+#X obj 293 242 alias \$1-pos;
+#X obj 62 353 alias \$1-pos;
+#X obj 49 182 make_obj_name \$2;
+#X obj 98 209 make_obj_name \$2;
+#X obj 52 263 route click drag;
+#X connect 1 0 2 0;
+#X connect 2 0 6 0;
+#X connect 2 2 4 0;
+#X connect 3 0 16 0;
+#X connect 4 0 30 0;
+#X connect 4 0 31 0;
+#X connect 5 0 18 0;
+#X connect 6 0 7 0;
+#X connect 6 0 11 0;
+#X connect 6 1 14 0;
+#X connect 6 2 15 0;
+#X connect 6 3 22 0;
+#X connect 6 4 23 0;
+#X connect 7 0 21 0;
+#X connect 9 0 5 1;
+#X connect 10 0 5 0;
+#X connect 11 0 12 0;
+#X connect 12 0 29 0;
+#X connect 14 0 3 0;
+#X connect 14 0 10 0;
+#X connect 15 0 3 1;
+#X connect 15 0 9 0;
+#X connect 16 0 28 0;
+#X connect 17 0 20 0;
+#X connect 18 0 32 0;
+#X connect 19 0 33 0;
+#X connect 20 0 24 0;
+#X connect 21 0 31 0;
+#X connect 21 1 30 0;
+#X connect 22 0 10 1;
+#X connect 22 0 3 2;
+#X connect 23 0 9 1;
+#X connect 23 0 3 3;
+#X connect 24 0 26 0;
+#X connect 25 0 33 0;
+#X connect 26 0 25 0;
+#X connect 26 1 8 0;
+#X connect 30 0 36 0;
+#X connect 31 0 36 0;
+#X connect 33 0 20 0;
+#X connect 34 0 31 0;
+#X connect 35 0 30 0;
+#X connect 36 0 17 0;
+#X connect 36 0 24 0;
+#X connect 36 1 19 0;
diff --git a/extensions/xgui/objects/potar.pd b/extensions/xgui/objects/potar.pd
new file mode 100644
index 00000000..dfc3ea11
--- /dev/null
+++ b/extensions/xgui/objects/potar.pd
@@ -0,0 +1,103 @@
+#N canvas 127 104 714 625 10;
+#X text 95 15 my_slider1;
+#X obj 21 16 inlet;
+#X obj 21 40 route show float hide;
+#X obj 288 132 \$3;
+#X obj 322 132 \$4;
+#X obj 249 185 pack f f f f;
+#X msg 87 181 hide;
+#X obj 359 132 pack f f;
+#X obj 359 84 \$3;
+#X obj 390 84 \$4;
+#X obj 21 64 t b b b b b;
+#X msg 36 515 text \$1;
+#X msg 21 403 sub \$2 \, bang;
+#X msg 159 505 angle \$1;
+#X msg 21 108 raise;
+#X msg 249 270 show \, coord \$1 \$2 \$3 \$4 \, width 1 \, style chord
+\, angle 359 \, color white;
+#X obj 21 132 t a a a a;
+#X msg 249 209 show \, coord \$1 \$2 \$3 \$4 \, width 1 \, style arc
+\, angle 359 \, border black;
+#X obj 22 573 outlet;
+#X obj 60 431 t b f;
+#X text 595 572 dh20020427;
+#X obj 36 494 int;
+#X obj 288 156 + 28;
+#X obj 359 108 + 14;
+#X obj 390 108 + 14;
+#X obj 322 156 + 28;
+#X msg 359 156 show \, pos \$1 \$2 \, color blue \, anchor center \,
+text 0;
+#X obj 249 246 alias \$1-dessus;
+#X obj 249 307 alias \$1-bord;
+#X obj 249 368 alias \$1-fond;
+#X obj 37 283 text \$1-value;
+#X obj 21 254 arc \$1-dessus;
+#X obj 51 316 arc \$1-fond;
+#X obj 76 343 arc \$1-bord;
+#X obj 159 530 alias \$1-fond;
+#X obj 34 539 alias \$1-value;
+#X obj 22 472 bounded \$1-value 0 0 127 0 -359;
+#X obj 359 180 alias \$1-value;
+#X obj 98 226 make_obj_name \$2;
+#X obj 107 251 make_obj_name \$2;
+#X obj 119 293 make_obj_name \$2;
+#X obj 125 320 make_obj_name \$2;
+#X msg 249 331 show \, coord \$1 \$2 \$3 \$4 \, width 0 \, start -90
+\, color grey \, border grey \, angle 0 \, start -90;
+#X obj 21 379 route drag;
+#X connect 1 0 2 0;
+#X connect 2 0 10 0;
+#X connect 2 1 19 0;
+#X connect 2 2 6 0;
+#X connect 3 0 22 0;
+#X connect 3 0 5 0;
+#X connect 4 0 5 1;
+#X connect 4 0 25 0;
+#X connect 5 0 15 0;
+#X connect 5 0 42 0;
+#X connect 5 0 17 0;
+#X connect 6 0 30 0;
+#X connect 6 0 31 0;
+#X connect 6 0 32 0;
+#X connect 6 0 33 0;
+#X connect 7 0 26 0;
+#X connect 8 0 23 0;
+#X connect 9 0 24 0;
+#X connect 10 0 14 0;
+#X connect 10 1 8 0;
+#X connect 10 2 9 0;
+#X connect 10 3 3 0;
+#X connect 10 4 4 0;
+#X connect 11 0 35 0;
+#X connect 12 0 36 0;
+#X connect 13 0 34 0;
+#X connect 14 0 16 0;
+#X connect 15 0 28 0;
+#X connect 16 0 31 0;
+#X connect 16 1 30 0;
+#X connect 16 2 32 0;
+#X connect 16 3 33 0;
+#X connect 17 0 27 0;
+#X connect 19 0 36 0;
+#X connect 19 1 36 0;
+#X connect 21 0 11 0;
+#X connect 22 0 5 2;
+#X connect 23 0 7 0;
+#X connect 24 0 7 1;
+#X connect 25 0 5 3;
+#X connect 26 0 37 0;
+#X connect 30 0 43 0;
+#X connect 31 0 43 0;
+#X connect 32 0 43 0;
+#X connect 33 0 43 0;
+#X connect 36 0 18 0;
+#X connect 36 0 21 0;
+#X connect 36 1 13 0;
+#X connect 38 0 31 0;
+#X connect 39 0 30 0;
+#X connect 40 0 32 0;
+#X connect 41 0 33 0;
+#X connect 42 0 29 0;
+#X connect 43 0 12 0;
diff --git a/extensions/xgui/objects/preset.pd b/extensions/xgui/objects/preset.pd
new file mode 100644
index 00000000..a86ba0a2
--- /dev/null
+++ b/extensions/xgui/objects/preset.pd
@@ -0,0 +1,112 @@
+#N canvas 245 101 589 563 10;
+#X obj 21 16 inlet;
+#X obj 21 40 route show float hide;
+#X obj 200 185 pack f f f f;
+#X msg 87 181 hide;
+#X obj 295 193 pack f f;
+#X obj 46 65 t b b b b b;
+#X msg 295 217 show \, pos \$1 \$2 \, color blue \, anchor center;
+#X obj 32 522 outlet;
+#X msg 62 465 color grey;
+#X msg 61 439 color white;
+#X obj 60 414 delay 100;
+#X obj 336 164 moy;
+#X obj 293 170 moy;
+#X obj 194 138 \$4;
+#X obj 219 138 \$5;
+#X text 391 484 dh20020428;
+#X msg 200 270 show \, coord \$1 \$2 \$3 \$4 \, width 1 \, color white
+;
+#X obj 243 93 \$4;
+#X obj 277 93 \$5;
+#X obj 243 116 + \$6;
+#X obj 274 117 + \$7;
+#X obj 21 132 t b b;
+#X msg 49 161 raise;
+#X msg 25 188 raise;
+#X obj 323 307 symbol \$3;
+#X msg 323 332 text \$1;
+#X text 95 15 button canvas name text posX posY dX dY;
+#X obj 76 343 rect \$1-c;
+#X obj 56 256 make_obj_name \$2;
+#X obj 88 320 make_obj_name \$2;
+#X obj 37 283 text \$1-t;
+#X obj 200 307 alias \$1-c;
+#X obj 323 357 alias \$1-t;
+#X obj 295 241 alias \$1-t;
+#X obj 63 490 alias \$1-c;
+#X obj 52 377 route click c-click;
+#X obj 238 533 send to_node;
+#X text 401 494 dh20020723;
+#X msg 140 441 color white;
+#X obj 139 416 delay 100;
+#X obj 142 492 alias \$1-c;
+#X msg 141 467 color red;
+#X msg 252 508 do */ load_coord \$1;
+#X obj 252 465 bang;
+#X obj 238 387 symbol \$3;
+#X obj 252 486 symbol \$3;
+#X obj 302 387 symbol \$2;
+#X obj 238 363 t b b;
+#X obj 238 410 pack s s;
+#X msg 238 432 do */ save_coord \$2 \$1;
+#X obj 472 422 print;
+#X connect 0 0 1 0;
+#X connect 1 0 5 0;
+#X connect 1 2 3 0;
+#X connect 2 0 16 0;
+#X connect 3 0 27 0;
+#X connect 3 0 30 0;
+#X connect 4 0 6 0;
+#X connect 5 0 21 0;
+#X connect 5 0 24 0;
+#X connect 5 1 13 0;
+#X connect 5 2 14 0;
+#X connect 5 3 17 0;
+#X connect 5 4 18 0;
+#X connect 6 0 33 0;
+#X connect 8 0 34 0;
+#X connect 9 0 34 0;
+#X connect 10 0 9 0;
+#X connect 11 0 4 1;
+#X connect 12 0 4 0;
+#X connect 13 0 2 0;
+#X connect 13 0 12 0;
+#X connect 14 0 2 1;
+#X connect 14 0 11 0;
+#X connect 16 0 31 0;
+#X connect 17 0 19 0;
+#X connect 18 0 20 0;
+#X connect 19 0 2 2;
+#X connect 19 0 12 1;
+#X connect 20 0 2 3;
+#X connect 20 0 11 1;
+#X connect 21 0 23 0;
+#X connect 21 1 22 0;
+#X connect 22 0 27 0;
+#X connect 23 0 30 0;
+#X connect 24 0 25 0;
+#X connect 25 0 32 0;
+#X connect 27 0 35 0;
+#X connect 28 0 30 0;
+#X connect 29 0 27 0;
+#X connect 30 0 35 0;
+#X connect 35 0 10 0;
+#X connect 35 0 8 0;
+#X connect 35 0 7 0;
+#X connect 35 0 43 0;
+#X connect 35 1 41 0;
+#X connect 35 1 39 0;
+#X connect 35 1 47 0;
+#X connect 38 0 40 0;
+#X connect 39 0 38 0;
+#X connect 41 0 40 0;
+#X connect 42 0 36 0;
+#X connect 43 0 45 0;
+#X connect 44 0 48 0;
+#X connect 45 0 42 0;
+#X connect 46 0 48 1;
+#X connect 47 0 44 0;
+#X connect 47 1 46 0;
+#X connect 48 0 49 0;
+#X connect 49 0 36 0;
diff --git a/extensions/xgui/objects/slider2.pd b/extensions/xgui/objects/slider2.pd
new file mode 100644
index 00000000..cbbeaddf
--- /dev/null
+++ b/extensions/xgui/objects/slider2.pd
@@ -0,0 +1,141 @@
+#N canvas 248 68 637 564 10;
+#X text 95 7 my_slider1;
+#X obj 14 8 inlet;
+#X obj 146 409 outlet;
+#X obj 431 153 xy2coord;
+#X obj 521 145 move_y;
+#X obj 350 448 xy2coord;
+#X obj 521 100 light_over;
+#X obj 359 213 coord2xy;
+#X text 503 470 dh20020109;
+#X text 47 86 x pos;
+#X text 59 126 y pos;
+#X obj 431 199 click2bxy;
+#X msg 553 78 Blue;
+#X obj 25 167 s \$0-y_min;
+#X obj 69 247 s \$0-y_max;
+#X obj 445 102 r \$0-y_min;
+#X obj 15 101 s \$0-x_pos;
+#X obj 392 408 r \$0-y_max;
+#X obj 431 52 r \$0-x_pos;
+#X obj 349 358 r \$0-x_pos;
+#X obj 14 55 t b b b b b;
+#X obj 14 31 route show float hide;
+#X msg 94 54 hide;
+#X msg 141 91 show \, width 1 \, color white;
+#X obj 459 80 + 15;
+#X obj 362 386 + 15;
+#X msg 137 136 show \, color Blue \, width 3;
+#X obj 14 78 \$3;
+#X obj 32 127 \$4;
+#X obj 474 127 + \$5;
+#X obj 110 221 \$6;
+#X text 137 222 value size;
+#X obj 62 282 pack f f f;
+#X obj 59 192 + \$5;
+#X text 96 191 real size;
+#X obj 553 57 loadbang;
+#X msg 147 356 \$1 \, bang;
+#X obj 141 323 t b f;
+#X obj 360 279 t b f;
+#X floatatom 200 411 5 0 0;
+#X obj 148 380 number \$0-value;
+#X obj 385 327 number \$0-value;
+#X msg 408 275 0 \, subspace 0 \$3 \$2 \$1;
+#X msg 44 336 bound 0 \$1;
+#X obj 359 167 move_y;
+#X text 513 480 dh20020523;
+#X obj 359 144 alias \$1-c;
+#X obj 521 122 alias \$1-sld;
+#X obj 140 114 alias \$1-c;
+#X obj 137 160 alias \$1-sld;
+#X obj 350 472 alias \$1-sld;
+#X obj 431 176 rect \$1-c;
+#X obj 340 235 route update;
+#X msg 324 166 @ \$1;
+#X obj 359 190 seg \$1-sld;
+#X obj 324 53 symbol \$1;
+#X obj 347 74 symbol \$2;
+#X obj 324 145 a2s;
+#X obj 326 102 pack s s;
+#X obj 324 10 loadbang;
+#X obj 324 31 t b b;
+#X msg 501 221 @ \$1;
+#X obj 501 200 a2s;
+#X msg 502 178 list \$2 / \$1;
+#X msg 325 123 list \$2 / \$1 sdl;
+#X connect 1 0 21 0;
+#X connect 3 0 51 0;
+#X connect 4 0 47 0;
+#X connect 5 0 50 0;
+#X connect 6 0 47 0;
+#X connect 7 1 38 0;
+#X connect 11 0 41 0;
+#X connect 11 2 38 0;
+#X connect 12 0 6 1;
+#X connect 15 0 3 1;
+#X connect 15 0 29 0;
+#X connect 17 0 5 3;
+#X connect 17 0 5 1;
+#X connect 18 0 3 0;
+#X connect 18 0 24 0;
+#X connect 19 0 5 0;
+#X connect 19 0 25 0;
+#X connect 20 0 27 0;
+#X connect 20 1 28 0;
+#X connect 20 3 26 0;
+#X connect 20 3 30 0;
+#X connect 20 4 23 0;
+#X connect 21 0 20 0;
+#X connect 21 1 37 0;
+#X connect 21 2 22 0;
+#X connect 22 0 48 0;
+#X connect 22 0 49 0;
+#X connect 23 0 48 0;
+#X connect 24 0 3 2;
+#X connect 25 0 5 2;
+#X connect 26 0 49 0;
+#X connect 27 0 16 0;
+#X connect 28 0 13 0;
+#X connect 28 0 33 0;
+#X connect 28 0 32 0;
+#X connect 29 0 3 3;
+#X connect 30 0 32 2;
+#X connect 30 0 43 0;
+#X connect 32 0 42 0;
+#X connect 33 0 14 0;
+#X connect 33 0 32 1;
+#X connect 35 0 12 0;
+#X connect 36 0 40 0;
+#X connect 37 0 41 0;
+#X connect 37 1 36 0;
+#X connect 38 0 40 0;
+#X connect 38 0 41 0;
+#X connect 38 1 41 0;
+#X connect 40 0 2 0;
+#X connect 40 0 39 0;
+#X connect 41 0 5 1;
+#X connect 41 0 5 3;
+#X connect 42 0 41 0;
+#X connect 43 0 40 0;
+#X connect 44 0 54 0;
+#X connect 46 0 44 0;
+#X connect 47 0 6 0;
+#X connect 47 0 4 0;
+#X connect 51 0 11 0;
+#X connect 52 0 7 0;
+#X connect 53 0 54 0;
+#X connect 54 0 7 0;
+#X connect 54 0 52 0;
+#X connect 55 0 58 0;
+#X connect 56 0 58 1;
+#X connect 57 0 53 0;
+#X connect 58 0 64 0;
+#X connect 58 0 63 0;
+#X connect 59 0 60 0;
+#X connect 60 0 55 0;
+#X connect 60 1 56 0;
+#X connect 61 0 51 0;
+#X connect 62 0 61 0;
+#X connect 63 0 62 0;
+#X connect 64 0 57 0;
diff --git a/extensions/xgui/objects/slider_prob.pd b/extensions/xgui/objects/slider_prob.pd
new file mode 100644
index 00000000..5e3fa11d
--- /dev/null
+++ b/extensions/xgui/objects/slider_prob.pd
@@ -0,0 +1,118 @@
+#N canvas 254 54 551 524 10;
+#X text 95 7 my_slider1;
+#X obj 14 8 inlet;
+#X obj 276 461 outlet;
+#X obj 303 144 xy2coord;
+#X obj 150 153 + 200;
+#X obj 389 294 move_y;
+#X obj 414 425 xy2coord;
+#X obj 430 230 light_over;
+#X obj 260 282 coord2xy;
+#X text 445 493 dh20020109;
+#X obj 277 411 * -1;
+#X obj 277 388 -;
+#X obj 277 434 +;
+#X text 47 86 x pos;
+#X text 127 101 y pos;
+#X text 210 125 y size;
+#X obj 303 190 click2bxy;
+#X msg 462 208 Blue;
+#N canvas 489 354 249 191 check_min_max 0;
+#X obj 51 110 max;
+#X obj 51 86 min;
+#X obj 51 34 inlet;
+#X obj 51 134 outlet;
+#X obj 75 57 r \$0-y_max;
+#X obj 82 80 r \$0-y_min;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 2 0 1 0;
+#X connect 4 0 1 1;
+#X connect 5 0 0 1;
+#X restore 277 342 pd check_min_max;
+#X obj 100 126 s \$0-y_min;
+#X obj 150 177 s \$0-y_max;
+#X obj 316 93 r \$0-y_min;
+#X obj 15 101 s \$0-x_pos;
+#X obj 293 365 r \$0-y_max;
+#X obj 456 385 r \$0-y_max;
+#X obj 293 45 r \$0-x_pos;
+#X obj 413 335 r \$0-x_pos;
+#X obj 14 55 t b b b b b;
+#X obj 64 269 alias \$0-sld;
+#X obj 84 222 alias \$0-cadre;
+#X obj 414 449 alias \$0-sld;
+#X obj 430 252 alias \$0-sld;
+#X obj 14 31 route show float hide;
+#X msg 165 52 hide;
+#X msg 85 199 show \, width 1 \, color white;
+#X obj 303 167 rect \$1 \$0-cadre 10 10 20 20;
+#X obj 325 71 + 15;
+#X obj 426 363 + 15;
+#X obj 14 78 \$3;
+#X obj 100 102 \$4;
+#X obj 180 127 \$5;
+#X obj 344 115 + \$5;
+#X obj 22 177 -;
+#X obj 22 200 * -1;
+#X obj 35 154 r \$0-y_max;
+#X obj 260 259 rect \$1 \$0-sld;
+#X obj 135 352 route move2;
+#X obj 138 388 print;
+#X msg 63 244 show \, color blue \, width 1;
+#X connect 1 0 32 0;
+#X connect 3 0 35 0;
+#X connect 4 0 20 0;
+#X connect 5 0 31 0;
+#X connect 6 0 30 0;
+#X connect 7 0 31 0;
+#X connect 8 1 18 0;
+#X connect 10 0 12 0;
+#X connect 11 0 10 0;
+#X connect 12 0 2 0;
+#X connect 16 2 18 0;
+#X connect 17 0 7 1;
+#X connect 18 0 11 0;
+#X connect 18 0 6 1;
+#X connect 18 0 6 3;
+#X connect 21 0 3 1;
+#X connect 21 0 41 0;
+#X connect 23 0 11 1;
+#X connect 24 0 6 3;
+#X connect 24 0 6 1;
+#X connect 25 0 3 0;
+#X connect 25 0 36 0;
+#X connect 26 0 6 0;
+#X connect 26 0 37 0;
+#X connect 27 0 38 0;
+#X connect 27 1 39 0;
+#X connect 27 2 40 0;
+#X connect 27 3 48 0;
+#X connect 27 3 17 0;
+#X connect 27 4 34 0;
+#X connect 29 0 47 0;
+#X connect 31 0 7 0;
+#X connect 31 0 5 0;
+#X connect 32 0 27 0;
+#X connect 32 1 42 0;
+#X connect 32 2 33 0;
+#X connect 33 0 35 0;
+#X connect 33 0 45 0;
+#X connect 34 0 29 0;
+#X connect 35 0 16 0;
+#X connect 35 0 5 0;
+#X connect 36 0 3 2;
+#X connect 37 0 6 2;
+#X connect 38 0 22 0;
+#X connect 39 0 4 0;
+#X connect 39 0 19 0;
+#X connect 40 0 4 1;
+#X connect 41 0 3 3;
+#X connect 42 0 43 0;
+#X connect 43 0 18 0;
+#X connect 44 0 42 1;
+#X connect 45 0 8 0;
+#X connect 45 0 46 0;
+#X connect 46 0 47 0;
+#X connect 46 1 47 0;
+#X connect 48 0 28 0;
diff --git a/extensions/xgui/pdx.bat b/extensions/xgui/pdx.bat
new file mode 100644
index 00000000..bbe34e59
--- /dev/null
+++ b/extensions/xgui/pdx.bat
@@ -0,0 +1,5 @@
+title pdx
+start ..\bin\wish83.exe .\bin\xgui.sh
+..\bin\pd.exe -audiobuf 100 -open .\main\pdx_connect.pd -path ..\externs -path .\main -path .\adapters_in -path .\adapters_out -path .\behaviors -path .\filters -path .\objects -path .\utils -path .\physics
+
+
diff --git a/extensions/xgui/pdx.sh b/extensions/xgui/pdx.sh
new file mode 100755
index 00000000..ed8fbbff
--- /dev/null
+++ b/extensions/xgui/pdx.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+./bin/xgui.sh &
+../bin/pd -open ./main/pdx_connect.pd \
+ -path ./main/ \
+ -path ./adapters_in \
+ -path ./adapters_out \
+ -path ./behaviors \
+ -path ./filters \
+ -path ./objects \
+ -path ./utils \
+ -path ./physics \
+ -path ./bin
+
+
diff --git a/extensions/xgui/physics/atom.pd b/extensions/xgui/physics/atom.pd
new file mode 100644
index 00000000..2defe2ff
--- /dev/null
+++ b/extensions/xgui/physics/atom.pd
@@ -0,0 +1,21 @@
+#N canvas 579 401 301 287 10;
+#X obj 22 35 inlet;
+#X text 199 245 dh20020401;
+#X text 22 10 atom name x y;
+#X obj 21 85 concat !xy;
+#X obj 75 109 concat ?xy;
+#X obj 129 133 concat add;
+#X obj 18 212 convert xy= coord=;
+#X obj 18 183 vector \$1-pos \$2 \$3;
+#X obj 18 239 outlet;
+#X obj 21 62 route !coord ?coord move drag;
+#X connect 0 0 9 0;
+#X connect 3 0 7 0;
+#X connect 4 0 7 0;
+#X connect 5 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 6 0;
+#X connect 9 0 3 0;
+#X connect 9 1 4 0;
+#X connect 9 2 5 0;
+#X connect 9 3 5 0;
diff --git a/extensions/xgui/physics/damping.pd b/extensions/xgui/physics/damping.pd
new file mode 100644
index 00000000..1e8a0973
--- /dev/null
+++ b/extensions/xgui/physics/damping.pd
@@ -0,0 +1,59 @@
+#N canvas 605 407 505 422 10;
+#X obj 26 45 inlet;
+#X text 237 8 force = -c.v;
+#X obj 93 45 valueinit \$1_c \$2;
+#X text 23 8 damping name c;
+#X obj 62 120 value \$1_c;
+#X msg 62 95 bang;
+#X obj 243 78 inlet;
+#X obj 248 261 value \$1_c;
+#X obj 248 310 *;
+#X msg 243 128 ?abs;
+#X obj 266 284 * -1;
+#X obj 248 360 force \$1_s;
+#X obj 337 389 outlet;
+#X obj 248 211 r b_spring;
+#X text 405 368 dh20020404;
+#X obj 64 222 outlet;
+#X msg 248 335 !abs \$1;
+#X obj 122 150 force \$1_s;
+#X obj 26 70 route !c ?c ?force;
+#X msg 120 95 ?force;
+#X obj 264 184 route abs=;
+#X msg 284 128 !xy \$3 \$4;
+#X obj 264 159 vector \$1_calcul;
+#X obj 243 103 t b a a;
+#X obj 332 286 vector \$1_speed;
+#X msg 362 132 !xy \$3 \$4;
+#X obj 385 159 vector \$1_speed;
+#X obj 248 236 t b b;
+#X msg 332 264 ?xy;
+#X msg 332 311 !force \$1 \$2;
+#X connect 0 0 18 0;
+#X connect 4 0 15 0;
+#X connect 5 0 4 0;
+#X connect 6 0 23 0;
+#X connect 7 0 8 0;
+#X connect 8 0 16 0;
+#X connect 9 0 22 0;
+#X connect 10 0 8 1;
+#X connect 11 1 12 0;
+#X connect 13 0 27 0;
+#X connect 16 0 11 0;
+#X connect 17 0 15 0;
+#X connect 18 0 4 0;
+#X connect 18 1 5 0;
+#X connect 18 2 19 0;
+#X connect 19 0 17 0;
+#X connect 20 0 10 0;
+#X connect 21 0 22 0;
+#X connect 22 0 20 0;
+#X connect 23 0 9 0;
+#X connect 23 1 21 0;
+#X connect 23 2 25 0;
+#X connect 24 0 29 0;
+#X connect 25 0 26 0;
+#X connect 27 0 7 0;
+#X connect 27 1 28 0;
+#X connect 28 0 24 0;
+#X connect 29 0 11 0;
diff --git a/extensions/xgui/physics/force.pd b/extensions/xgui/physics/force.pd
new file mode 100644
index 00000000..7371eb9c
--- /dev/null
+++ b/extensions/xgui/physics/force.pd
@@ -0,0 +1,29 @@
+#N canvas 534 341 718 332 12;
+#X obj 25 78 inlet;
+#X obj 25 254 outlet;
+#X text 580 265 dh20020401;
+#X obj 388 143 r b_force;
+#X text 17 8 force name x y;
+#X obj 25 200 vector \$1_force \$2 \$3;
+#X msg 388 170 ?xy;
+#X obj 388 199 vector \$1_force \$2 \$3;
+#X obj 388 254 outlet;
+#X obj 388 226 convert xy= force;
+#X obj 25 104 route !force ?force !abs;
+#X obj 25 227 convert xy= force=;
+#X msg 25 133 !xy \$1 \$2;
+#X msg 119 132 ?xy;
+#X msg 166 131 !abs \$1;
+#X connect 0 0 10 0;
+#X connect 3 0 6 0;
+#X connect 5 0 11 0;
+#X connect 6 0 7 0;
+#X connect 7 0 9 0;
+#X connect 9 0 8 0;
+#X connect 10 0 12 0;
+#X connect 10 1 13 0;
+#X connect 10 2 14 0;
+#X connect 11 0 1 0;
+#X connect 12 0 5 0;
+#X connect 13 0 5 0;
+#X connect 14 0 5 0;
diff --git a/extensions/xgui/physics/lia_2d.pd b/extensions/xgui/physics/lia_2d.pd
new file mode 100644
index 00000000..8b21948a
--- /dev/null
+++ b/extensions/xgui/physics/lia_2d.pd
@@ -0,0 +1,206 @@
+#N canvas 100 156 652 628 10;
+#X obj 217 36 inlet;
+#X obj 443 33 inlet;
+#X obj 402 32 inlet;
+#X obj 259 35 inlet;
+#X text 225 -17 X1;
+#X text 285 -39 masse 1;
+#X text 449 -43 masse 2;
+#X text 412 -19 X2;
+#X obj 173 552 outlet;
+#X obj 384 553 outlet;
+#X floatatom 616 65 0 0 0;
+#X text 552 -62 longeur du resort;
+#X obj -19 -9 loadbang;
+#X text 276 -99 modele de liaison;
+#X floatatom 218 82 0 0 0;
+#X floatatom 388 61 0 0 0;
+#X obj 324 186 -;
+#X obj 286 184 -;
+#X floatatom 66 61 0 0 0;
+#X floatatom 131 60 0 0 0;
+#X text 74 -43 K;
+#X text 135 -41 C;
+#X obj 322 353 *;
+#X obj 337 328 -;
+#X obj 460 422 *;
+#X obj 343 464 +;
+#X floatatom 259 62 0 0 0;
+#X floatatom 446 62 0 0 0;
+#X obj 291 499 * -1;
+#X obj 67 36 inlet;
+#X obj 132 35 inlet;
+#X obj 36 109 float;
+#X obj 101 110 float;
+#X obj 187 107 float;
+#X obj 229 107 float;
+#X obj 372 107 float;
+#X obj 413 106 float;
+#X text 53 -61 raideur;
+#X text 110 -60 viscosite;
+#X obj 66 -12 r lk;
+#X obj 132 -12 r lc;
+#X obj 67 13 \$1;
+#X obj 133 12 \$2;
+#X obj 216 9 \$3;
+#X obj 307 9 \$5;
+#X obj 616 38 inlet;
+#X obj 599 107 f;
+#X text 596 -32 L0;
+#X text 579 -49 a vide;
+#X obj 306 35 inlet;
+#X obj 348 35 inlet;
+#X floatatom 306 83 0 0 0;
+#X floatatom 348 62 0 0 0;
+#X obj 276 107 float;
+#X obj 318 107 float;
+#X obj 529 32 inlet;
+#X obj 488 31 inlet;
+#X floatatom 486 61 0 0 0;
+#X floatatom 526 63 0 0 0;
+#X obj 458 106 float;
+#X obj 499 105 float;
+#X text 272 -17 Vx1;
+#X text 314 -17 Y1;
+#X text 361 -17 Vy1;
+#X text 453 -20 Vx2;
+#X text 498 -20 Y2;
+#X text 539 -21 Vy2;
+#X obj 260 9 \$4;
+#X obj 349 8 \$6;
+#X obj 403 6 \$7;
+#X obj 445 6 \$8;
+#X obj 488 5 \$9;
+#X obj 528 6 \$10;
+#X obj 612 14 \$11;
+#X obj 417 185 -;
+#X obj 377 185 -;
+#X text 288 202 Dx;
+#X text 323 205 DVx;
+#X text 380 206 Dy;
+#X text 416 204 DVy;
+#X obj 287 230 *;
+#X obj 377 230 *;
+#X obj 320 258 +;
+#X text 360 285 l;
+#X text 352 353 FK;
+#X obj 325 392 *;
+#X obj 371 392 *;
+#X obj 325 421 /;
+#X obj 373 422 /;
+#X obj 421 420 *;
+#X obj 408 469 +;
+#X text 321 439 FKx;
+#X text 371 441 FKy;
+#X text 416 442 FCx;
+#X text 465 439 FCy;
+#X text 190 573 F1x;
+#X text 400 571 F2x;
+#X obj 281 551 outlet;
+#X obj 466 552 outlet;
+#X obj 373 499 * -1;
+#X text 286 570 F1y;
+#X text 478 572 F2y;
+#X obj -154 89 t b b b b b b b b b b b b;
+#X obj 322 284 sqrt;
+#X text 565 558 ch20020120;
+#X obj -155 60 r b_spring;
+#X connect 0 0 14 0;
+#X connect 1 0 36 0;
+#X connect 2 0 35 0;
+#X connect 3 0 26 0;
+#X connect 10 0 46 1;
+#X connect 12 0 41 0;
+#X connect 12 0 42 0;
+#X connect 12 0 43 0;
+#X connect 12 0 67 0;
+#X connect 12 0 44 0;
+#X connect 12 0 68 0;
+#X connect 12 0 69 0;
+#X connect 12 0 70 0;
+#X connect 12 0 71 0;
+#X connect 12 0 72 0;
+#X connect 12 0 73 0;
+#X connect 14 0 33 1;
+#X connect 15 0 35 1;
+#X connect 16 0 89 1;
+#X connect 17 0 80 1;
+#X connect 17 0 80 0;
+#X connect 17 0 85 1;
+#X connect 18 0 31 1;
+#X connect 19 0 32 1;
+#X connect 22 0 85 0;
+#X connect 22 0 86 0;
+#X connect 23 0 22 1;
+#X connect 24 0 90 1;
+#X connect 25 0 28 0;
+#X connect 25 0 9 0;
+#X connect 26 0 34 1;
+#X connect 27 0 36 1;
+#X connect 28 0 8 0;
+#X connect 29 0 18 0;
+#X connect 30 0 19 0;
+#X connect 31 0 22 0;
+#X connect 32 0 89 0;
+#X connect 32 0 24 0;
+#X connect 33 0 17 0;
+#X connect 34 0 16 0;
+#X connect 35 0 17 1;
+#X connect 36 0 16 1;
+#X connect 39 0 18 0;
+#X connect 40 0 19 0;
+#X connect 41 0 18 0;
+#X connect 42 0 19 0;
+#X connect 43 0 14 0;
+#X connect 44 0 51 0;
+#X connect 45 0 10 0;
+#X connect 46 0 23 1;
+#X connect 49 0 51 0;
+#X connect 50 0 52 0;
+#X connect 51 0 53 1;
+#X connect 52 0 54 1;
+#X connect 53 0 75 0;
+#X connect 54 0 74 0;
+#X connect 55 0 60 0;
+#X connect 56 0 59 0;
+#X connect 57 0 59 1;
+#X connect 58 0 60 1;
+#X connect 59 0 75 1;
+#X connect 60 0 74 1;
+#X connect 67 0 26 0;
+#X connect 68 0 52 0;
+#X connect 69 0 15 0;
+#X connect 70 0 27 0;
+#X connect 71 0 57 0;
+#X connect 72 0 58 0;
+#X connect 73 0 10 0;
+#X connect 74 0 24 1;
+#X connect 75 0 81 1;
+#X connect 75 0 81 0;
+#X connect 75 0 86 1;
+#X connect 80 0 82 0;
+#X connect 81 0 82 1;
+#X connect 82 0 103 0;
+#X connect 85 0 87 0;
+#X connect 86 0 88 0;
+#X connect 87 0 25 0;
+#X connect 88 0 90 0;
+#X connect 89 0 25 1;
+#X connect 90 0 99 0;
+#X connect 90 0 98 0;
+#X connect 99 0 97 0;
+#X connect 102 1 31 0;
+#X connect 102 2 32 0;
+#X connect 102 3 33 0;
+#X connect 102 4 35 0;
+#X connect 102 5 34 0;
+#X connect 102 6 36 0;
+#X connect 102 7 53 0;
+#X connect 102 8 59 0;
+#X connect 102 9 54 0;
+#X connect 102 10 60 0;
+#X connect 102 11 46 0;
+#X connect 103 0 88 1;
+#X connect 103 0 23 0;
+#X connect 103 0 87 1;
+#X connect 105 0 102 0;
diff --git a/extensions/xgui/physics/mass.pd b/extensions/xgui/physics/mass.pd
new file mode 100644
index 00000000..bed61e42
--- /dev/null
+++ b/extensions/xgui/physics/mass.pd
@@ -0,0 +1,118 @@
+#N canvas 336 189 834 719 10;
+#X obj 24 35 inlet;
+#X obj 30 631 outlet;
+#X text 591 652 dh20020401;
+#X obj 77 86 bang;
+#X msg 24 142 mass= \$1;
+#X obj 466 162 r b_mass;
+#X obj 561 22 valueinit \$1_m \$2;
+#X obj 24 119 value \$1_m;
+#X obj 126 119 concat !xy;
+#X text 23 10 mass name m x y speed_x speed_y;
+#X obj 291 276 concat add;
+#X obj 371 275 value \$1_m;
+#X msg 371 299 divide \$1 \$1;
+#X msg 590 273 ?xy;
+#X obj 222 276 r b_init;
+#X msg 222 301 !xy 0 0;
+#X obj 125 171 convert xy= speed=;
+#X msg 143 87 ?xy;
+#X obj 290 395 vector \$1_speed \$3 \$4;
+#X obj 293 363 convert xy= add;
+#X msg 620 274 ?xy;
+#X obj 291 336 vector \$1_calcul1;
+#X obj 288 423 unpack s f f;
+#X obj 326 451 * 0.01;
+#X obj 386 453 * 0.01;
+#X obj 303 493 pack s f f;
+#X msg 470 273 mult 0.01 0.01;
+#X obj 304 517 route list;
+#X msg 289 451 move;
+#X obj 295 119 atom \$1_pos \$3 \$4;
+#X obj 304 550 atom \$1_pos \$3 \$4;
+#X msg 723 273 ?coord;
+#X obj 124 145 vector \$1_speed \$5 \$6;
+#X obj 337 669 outlet;
+#X obj 297 158 inlet;
+#X obj 297 184 route force;
+#X msg 256 87 1;
+#X msg 289 87 0;
+#X obj 466 188 spigot;
+#X obj 24 62 route !mass ?mass !speed ?speed speed on off;
+#X msg 187 88 !abs \$1;
+#X obj 668 301 vector \$1_speed \$5 \$6;
+#X obj 466 212 t b b b b b b;
+#X obj 387 597 unpack f f;
+#X obj 304 597 unpack f f;
+#X obj 304 574 route coord=;
+#X msg 340 647 mass \$1 \$2 \$3 \$4;
+#X text 507 596 mass x y speed_x speed_y;
+#X obj 339 622 pack f f f f;
+#X msg 668 274 ?xy;
+#X obj 668 328 route xy=;
+#X obj 461 394 value time_interval;
+#X obj 461 371 loadbang;
+#X connect 0 0 39 0;
+#X connect 3 0 7 0;
+#X connect 4 0 1 0;
+#X connect 5 0 38 0;
+#X connect 7 0 4 0;
+#X connect 8 0 32 0;
+#X connect 10 0 21 0;
+#X connect 11 0 12 0;
+#X connect 12 0 21 0;
+#X connect 13 0 21 0;
+#X connect 14 0 15 0;
+#X connect 15 0 21 0;
+#X connect 16 0 1 0;
+#X connect 17 0 32 0;
+#X connect 18 0 22 0;
+#X connect 19 0 18 0;
+#X connect 20 0 18 0;
+#X connect 21 0 19 0;
+#X connect 22 0 28 0;
+#X connect 22 1 23 0;
+#X connect 22 2 24 0;
+#X connect 23 0 25 1;
+#X connect 24 0 25 2;
+#X connect 25 0 27 0;
+#X connect 26 0 21 0;
+#X connect 27 0 30 0;
+#X connect 28 0 25 0;
+#X connect 29 0 1 0;
+#X connect 30 0 45 0;
+#X connect 31 0 30 0;
+#X connect 32 0 16 0;
+#X connect 34 0 35 0;
+#X connect 35 0 10 0;
+#X connect 36 0 38 1;
+#X connect 37 0 38 1;
+#X connect 38 0 42 0;
+#X connect 39 0 7 0;
+#X connect 39 1 3 0;
+#X connect 39 2 8 0;
+#X connect 39 3 17 0;
+#X connect 39 4 40 0;
+#X connect 39 5 36 0;
+#X connect 39 6 37 0;
+#X connect 39 7 29 0;
+#X connect 40 0 32 0;
+#X connect 41 0 50 0;
+#X connect 42 0 31 0;
+#X connect 42 1 49 0;
+#X connect 42 2 20 0;
+#X connect 42 3 13 0;
+#X connect 42 4 26 0;
+#X connect 42 5 11 0;
+#X connect 43 0 48 2;
+#X connect 43 1 48 3;
+#X connect 44 0 48 0;
+#X connect 44 1 48 1;
+#X connect 45 0 44 0;
+#X connect 46 0 33 0;
+#X connect 48 0 46 0;
+#X connect 49 0 41 0;
+#X connect 50 0 43 0;
+#X connect 51 0 23 1;
+#X connect 51 0 24 1;
+#X connect 52 0 51 0;
diff --git a/extensions/xgui/physics/spring.pd b/extensions/xgui/physics/spring.pd
new file mode 100644
index 00000000..b5f75d28
--- /dev/null
+++ b/extensions/xgui/physics/spring.pd
@@ -0,0 +1,155 @@
+#N canvas 207 165 1045 677 10;
+#X obj 13 33 inlet;
+#X obj 21 119 concat !xy;
+#X obj 40 144 concat ?xy;
+#X obj 97 120 concat !xy;
+#X obj 118 143 concat ?xy;
+#X text 912 34 k : N/m;
+#X obj 899 64 inlet;
+#X obj 175 319 outlet;
+#X obj 16 206 convert xy= xy1=;
+#X obj 157 206 convert xy= xy1=;
+#X obj 899 87 route mass;
+#X obj 338 358 vector \$1_calcul_l;
+#X obj 411 270 convert xy= add;
+#X obj 353 190 t b b b b;
+#X msg 453 222 !xy 0 0;
+#X obj 337 405 value \$1_l;
+#X obj 198 120 value \$1_l;
+#X msg 198 143 l= \$1;
+#X msg 375 224 ?xy;
+#X msg 413 223 ?xy;
+#X msg 337 225 ?abs;
+#X obj 338 382 route abs=;
+#X obj 292 121 value \$1_k;
+#X obj 374 15 valueinit \$1_k \$2;
+#X obj 292 144 concat k=;
+#X msg 714 565 !abs \$1;
+#X text 642 29 k : N/m;
+#X obj 653 61 inlet;
+#X obj 653 84 route mass;
+#X obj 607 600 force \$1_s1;
+#X msg 653 571 !abs \$1;
+#X obj 701 632 outlet;
+#X obj 376 146 force \$1_s1;
+#X obj 724 537 * -1;
+#X text 10 7 spring name k l x1 y1 x2 y2;
+#X obj 374 40 valueinit \$1_l \$3;
+#X obj 483 146 force \$1_s2;
+#X msg 376 124 ?force;
+#X msg 482 125 ?force;
+#X obj 13 53 route !xy1 ?xy1 !xy2 ?xy2 !l ?l l !k ?k ?force1 ?force2;
+#X msg 653 108 !xy \$1 \$2;
+#X msg 899 111 !xy \$1 \$2;
+#X obj 653 162 r b_spring;
+#X obj 719 598 force \$1_s2;
+#X obj 774 284 convert xy= add;
+#X msg 816 236 !xy 0 0;
+#X msg 738 238 ?xy;
+#X msg 776 237 ?xy;
+#X msg 665 236 ?abs;
+#X obj 701 372 vector \$1_calcul_kl;
+#X obj 683 442 value \$1_l;
+#X obj 683 466 -;
+#X obj 661 514 *;
+#X obj 661 484 value \$1_k;
+#X obj 651 193 t b b b b b b b;
+#X msg 705 237 ?xy;
+#X obj 700 394 route abs= xy=;
+#X obj 813 625 outlet;
+#X text 853 515 dh20020404;
+#X obj 16 178 vector \$1_p1 \$4 \$5;
+#X obj 157 179 vector \$1_p2 \$6 \$7;
+#X obj 410 247 vector \$1_p1 \$4 \$5;
+#X obj 376 296 vector \$1_p2 \$6 \$7;
+#X obj 773 261 vector \$1_p1 \$4 \$5;
+#X obj 739 310 vector \$1_p2 \$6 \$7;
+#X obj 653 130 vector \$1_p1 \$4 \$5;
+#X obj 899 133 vector \$1_p2 \$6 \$7;
+#X msg 292 98 bang;
+#X msg 198 96 bang;
+#X msg 746 418 !force \$1 \$2;
+#X obj 376 318 convert xy= substract;
+#X obj 739 332 convert xy= substract;
+#X connect 0 0 39 0;
+#X connect 1 0 59 0;
+#X connect 2 0 59 0;
+#X connect 3 0 60 0;
+#X connect 4 0 60 0;
+#X connect 6 0 10 0;
+#X connect 8 0 7 0;
+#X connect 9 0 7 0;
+#X connect 10 0 41 0;
+#X connect 11 0 21 0;
+#X connect 12 0 11 0;
+#X connect 13 0 20 0;
+#X connect 13 1 18 0;
+#X connect 13 2 19 0;
+#X connect 13 3 14 0;
+#X connect 14 0 11 0;
+#X connect 16 0 17 0;
+#X connect 17 0 7 0;
+#X connect 18 0 62 0;
+#X connect 19 0 61 0;
+#X connect 20 0 11 0;
+#X connect 21 0 15 0;
+#X connect 22 0 24 0;
+#X connect 24 0 7 0;
+#X connect 25 0 43 0;
+#X connect 27 0 28 0;
+#X connect 28 0 40 0;
+#X connect 29 1 31 0;
+#X connect 30 0 29 0;
+#X connect 32 0 7 0;
+#X connect 33 0 25 0;
+#X connect 36 0 7 0;
+#X connect 37 0 32 0;
+#X connect 38 0 36 0;
+#X connect 39 0 1 0;
+#X connect 39 1 2 0;
+#X connect 39 2 3 0;
+#X connect 39 3 4 0;
+#X connect 39 4 16 0;
+#X connect 39 5 68 0;
+#X connect 39 6 13 0;
+#X connect 39 7 22 0;
+#X connect 39 8 67 0;
+#X connect 39 9 37 0;
+#X connect 39 10 38 0;
+#X connect 40 0 65 0;
+#X connect 41 0 66 0;
+#X connect 42 0 54 0;
+#X connect 43 1 57 0;
+#X connect 44 0 49 0;
+#X connect 45 0 49 0;
+#X connect 46 0 64 0;
+#X connect 47 0 63 0;
+#X connect 48 0 49 0;
+#X connect 49 0 56 0;
+#X connect 50 0 51 0;
+#X connect 51 0 52 1;
+#X connect 52 0 33 0;
+#X connect 52 0 30 0;
+#X connect 53 0 52 0;
+#X connect 54 0 53 0;
+#X connect 54 1 50 0;
+#X connect 54 2 48 0;
+#X connect 54 3 55 0;
+#X connect 54 4 46 0;
+#X connect 54 5 47 0;
+#X connect 54 6 45 0;
+#X connect 55 0 49 0;
+#X connect 56 0 51 1;
+#X connect 56 1 69 0;
+#X connect 59 0 8 0;
+#X connect 60 0 9 0;
+#X connect 61 0 12 0;
+#X connect 62 0 70 0;
+#X connect 63 0 44 0;
+#X connect 64 0 71 0;
+#X connect 67 0 22 0;
+#X connect 68 0 16 0;
+#X connect 69 0 29 0;
+#X connect 69 0 43 0;
+#X connect 70 0 11 0;
+#X connect 71 0 49 0;
diff --git a/extensions/xgui/physics/vector.pd b/extensions/xgui/physics/vector.pd
new file mode 100644
index 00000000..1195cad9
--- /dev/null
+++ b/extensions/xgui/physics/vector.pd
@@ -0,0 +1,162 @@
+#N canvas 46 212 1098 676 12;
+#X obj 23 75 inlet;
+#X obj 102 619 outlet;
+#X obj 24 157 unpack f f;
+#X obj 42 247 pack f f;
+#X obj 122 157 t b b;
+#X msg 42 270 xy= \$1 \$2;
+#X text 625 537 dh20020401;
+#X text 19 10 vector name x y;
+#X obj 24 206 value \$1_x;
+#X obj 125 206 value \$1_y;
+#X obj 203 244 value \$1_x;
+#X obj 299 244 value \$1_y;
+#X obj 305 279 +;
+#X obj 206 279 +;
+#X obj 256 216 unpack f f;
+#X obj 203 303 value \$1_x;
+#X obj 305 304 value \$1_y;
+#X obj 236 185 t a b;
+#X obj 285 16 valueinit \$1_x \$2;
+#X obj 412 245 value \$1_x;
+#X obj 508 245 value \$1_y;
+#X obj 465 217 unpack f f;
+#X obj 412 304 value \$1_x;
+#X obj 514 305 value \$1_y;
+#X obj 445 185 t a b;
+#X obj 514 280 *;
+#X obj 412 279 *;
+#X text 635 547 dh20020402;
+#X obj 420 401 value \$1_x;
+#X obj 516 401 value \$1_y;
+#X obj 473 373 unpack f f;
+#X obj 420 460 value \$1_x;
+#X obj 522 461 value \$1_y;
+#X obj 521 436 /;
+#X obj 420 435 /;
+#X obj 417 337 t b b a;
+#X obj 287 45 valueinit \$1_y \$3;
+#X obj 629 338 value \$1_x;
+#X obj 669 282 value \$1_y;
+#X obj 664 315 *;
+#X obj 622 373 *;
+#X obj 629 258 t b b;
+#X obj 639 403 +;
+#X obj 639 431 sqrt;
+#X obj 208 396 value \$1_x;
+#X obj 304 396 value \$1_y;
+#X obj 261 368 unpack f f;
+#X obj 208 455 value \$1_x;
+#X obj 310 455 value \$1_y;
+#X obj 205 332 t b b a;
+#X obj 309 430 -;
+#X obj 208 430 -;
+#X obj 756 537 value \$1_x;
+#X obj 852 537 value \$1_y;
+#X obj 756 596 value \$1_x;
+#X obj 852 595 value \$1_y;
+#X obj 784 303 value \$1_x;
+#X obj 824 247 value \$1_y;
+#X obj 819 280 *;
+#X obj 777 338 *;
+#X obj 784 223 t b b;
+#X obj 776 368 +;
+#X obj 776 396 sqrt;
+#X obj 815 498 /;
+#X obj 857 426 t b b;
+#X obj 796 183 t b f b;
+#X obj 852 569 *;
+#X obj 755 571 *;
+#X obj 639 459 concat abs=;
+#X obj 24 106 route !xy ?xy add substract mult divide ?teta ?abs !teta
+!abs rotate;
+#X obj 776 425 select 0;
+#X msg 785 456 0.7;
+#X connect 0 0 69 0;
+#X connect 2 0 8 0;
+#X connect 2 1 9 0;
+#X connect 3 0 5 0;
+#X connect 4 0 8 0;
+#X connect 4 1 9 0;
+#X connect 5 0 1 0;
+#X connect 8 0 3 0;
+#X connect 9 0 3 1;
+#X connect 10 0 13 1;
+#X connect 11 0 12 1;
+#X connect 12 0 16 0;
+#X connect 13 0 15 0;
+#X connect 14 0 13 0;
+#X connect 14 1 12 0;
+#X connect 17 0 14 0;
+#X connect 17 1 11 0;
+#X connect 17 1 10 0;
+#X connect 19 0 26 1;
+#X connect 20 0 25 1;
+#X connect 21 0 26 0;
+#X connect 21 1 25 0;
+#X connect 24 0 21 0;
+#X connect 24 1 20 0;
+#X connect 24 1 19 0;
+#X connect 25 0 23 0;
+#X connect 26 0 22 0;
+#X connect 28 0 34 0;
+#X connect 29 0 33 0;
+#X connect 30 0 34 1;
+#X connect 30 1 33 1;
+#X connect 33 0 32 0;
+#X connect 34 0 31 0;
+#X connect 35 0 28 0;
+#X connect 35 1 29 0;
+#X connect 35 2 30 0;
+#X connect 37 0 40 1;
+#X connect 37 0 40 0;
+#X connect 38 0 39 1;
+#X connect 38 0 39 0;
+#X connect 39 0 42 1;
+#X connect 40 0 42 0;
+#X connect 41 0 37 0;
+#X connect 41 1 38 0;
+#X connect 42 0 43 0;
+#X connect 43 0 68 0;
+#X connect 44 0 51 0;
+#X connect 45 0 50 0;
+#X connect 46 0 51 1;
+#X connect 46 1 50 1;
+#X connect 49 0 44 0;
+#X connect 49 1 45 0;
+#X connect 49 2 46 0;
+#X connect 50 0 48 0;
+#X connect 51 0 47 0;
+#X connect 52 0 67 0;
+#X connect 53 0 66 0;
+#X connect 56 0 59 1;
+#X connect 56 0 59 0;
+#X connect 57 0 58 1;
+#X connect 57 0 58 0;
+#X connect 58 0 61 1;
+#X connect 59 0 61 0;
+#X connect 60 0 56 0;
+#X connect 60 1 57 0;
+#X connect 61 0 62 0;
+#X connect 62 0 70 0;
+#X connect 63 0 67 1;
+#X connect 63 0 66 1;
+#X connect 64 0 52 0;
+#X connect 64 1 53 0;
+#X connect 65 0 64 0;
+#X connect 65 1 63 0;
+#X connect 65 2 60 0;
+#X connect 66 0 55 0;
+#X connect 67 0 54 0;
+#X connect 68 0 1 0;
+#X connect 69 0 2 0;
+#X connect 69 1 4 0;
+#X connect 69 2 17 0;
+#X connect 69 3 49 0;
+#X connect 69 4 24 0;
+#X connect 69 5 35 0;
+#X connect 69 7 41 0;
+#X connect 69 9 65 0;
+#X connect 70 0 71 0;
+#X connect 70 1 63 1;
+#X connect 71 0 63 1;
diff --git a/extensions/xgui/preset1.txt b/extensions/xgui/preset1.txt
new file mode 100644
index 00000000..d8dd1192
--- /dev/null
+++ b/extensions/xgui/preset1.txt
@@ -0,0 +1,12 @@
+~/sliders/sl1 coord 20 20 35 147
+~/sliders/sl1sdl coord 20 30 35 30
+~/sliders/sl2 coord 50 20 65 147
+~/sliders/sl2sdl coord 50 47 65 47
+~/sliders/sl3 coord 80 20 95 147
+~/sliders/sl3sdl coord 80 56 95 56
+~/sliders/sl4 coord 110 20 125 147
+~/sliders/sl4sdl coord 110 35 125 35
+~/sliders/o1074 coord 140 20 210 40
+~/sliders/o1092 coord 140 50 210 70
+~/sliders/o1110 coord 140 80 210 100
+~/sliders/o1128 coord 140 110 210 130
diff --git a/extensions/xgui/preset2.txt b/extensions/xgui/preset2.txt
new file mode 100644
index 00000000..87ac92d7
--- /dev/null
+++ b/extensions/xgui/preset2.txt
@@ -0,0 +1,12 @@
+~/sliders/sl1 coord 20 20 35 147
+~/sliders/sl1sdl coord 20 50 35 50
+~/sliders/sl2 coord 50 20 65 147
+~/sliders/sl2sdl coord 50 63 65 63
+~/sliders/sl3 coord 80 20 95 147
+~/sliders/sl3sdl coord 80 86 95 86
+~/sliders/sl4 coord 110 20 125 147
+~/sliders/sl4sdl coord 110 108 125 108
+~/sliders/o3505 coord 140 20 210 40
+~/sliders/o3523 coord 140 50 210 70
+~/sliders/o3541 coord 140 80 210 100
+~/sliders/o3559 coord 140 110 210 130
diff --git a/extensions/xgui/preset3.txt b/extensions/xgui/preset3.txt
new file mode 100644
index 00000000..158588a0
--- /dev/null
+++ b/extensions/xgui/preset3.txt
@@ -0,0 +1,12 @@
+~/sliders/sl1 coord 20 20 35 147
+~/sliders/sl1sdl coord 20 99 35 99
+~/sliders/sl2 coord 50 20 65 147
+~/sliders/sl2sdl coord 50 83 65 83
+~/sliders/sl3 coord 80 20 95 147
+~/sliders/sl3sdl coord 80 69 95 69
+~/sliders/sl4 coord 110 20 125 147
+~/sliders/sl4sdl coord 110 55 125 55
+~/sliders/o3505 coord 140 20 210 40
+~/sliders/o3523 coord 140 50 210 70
+~/sliders/o3541 coord 140 80 210 100
+~/sliders/o3559 coord 140 110 210 130
diff --git a/extensions/xgui/preset4.txt b/extensions/xgui/preset4.txt
new file mode 100644
index 00000000..4e5dfd4f
--- /dev/null
+++ b/extensions/xgui/preset4.txt
@@ -0,0 +1,12 @@
+~/sliders/sl1 coord 20 20 35 147
+~/sliders/sl1sdl coord 20 131 35 131
+~/sliders/sl2 coord 50 20 65 147
+~/sliders/sl2sdl coord 50 108 65 108
+~/sliders/sl3 coord 80 20 95 147
+~/sliders/sl3sdl coord 80 101 95 101
+~/sliders/sl4 coord 110 20 125 147
+~/sliders/sl4sdl coord 110 112 125 112
+~/sliders/o1074 coord 140 20 210 40
+~/sliders/o1092 coord 140 50 210 70
+~/sliders/o1110 coord 140 80 210 100
+~/sliders/o1128 coord 140 110 210 130
diff --git a/extensions/xgui/utils/bounded.pd b/extensions/xgui/utils/bounded.pd
new file mode 100644
index 00000000..b2526983
--- /dev/null
+++ b/extensions/xgui/utils/bounded.pd
@@ -0,0 +1,43 @@
+#N canvas 392 177 383 289 10;
+#X obj 16 39 inlet;
+#X obj 16 229 outlet;
+#X text 16 4 the bounded object : Number $name $value $min $max $smin
+$smax;
+#X obj 96 229 outlet;
+#X text 199 228 dh20020427;
+#X obj 130 64 loadbang;
+#X obj 131 114 \$3;
+#X obj 154 114 \$4;
+#X obj 177 114 \$5;
+#X obj 201 114 \$6;
+#X obj 16 205 number \$1;
+#X obj 96 205 number \$1;
+#X obj 130 88 t b b b b b;
+#X obj 225 114 \$2;
+#X obj 130 136 pack f f f f f;
+#X obj 48 91 bang;
+#X text 209 237 dh20020523;
+#X msg 130 160 \$5 \, subspace \$1 \$2 \$3 \$4 \, bound \$1 \$2;
+#X obj 93 39 inlet;
+#X obj 48 115 bang;
+#X connect 0 0 10 0;
+#X connect 0 0 15 0;
+#X connect 5 0 12 0;
+#X connect 6 0 14 0;
+#X connect 7 0 14 1;
+#X connect 8 0 14 2;
+#X connect 9 0 14 3;
+#X connect 10 0 1 0;
+#X connect 11 0 3 0;
+#X connect 12 0 6 0;
+#X connect 12 1 7 0;
+#X connect 12 2 8 0;
+#X connect 12 3 9 0;
+#X connect 12 4 13 0;
+#X connect 13 0 14 4;
+#X connect 14 0 17 0;
+#X connect 15 0 11 0;
+#X connect 17 0 11 0;
+#X connect 18 0 11 0;
+#X connect 18 0 19 0;
+#X connect 19 0 10 0;
diff --git a/extensions/xgui/utils/concat_set_bang.pd b/extensions/xgui/utils/concat_set_bang.pd
new file mode 100644
index 00000000..d617e596
--- /dev/null
+++ b/extensions/xgui/utils/concat_set_bang.pd
@@ -0,0 +1,22 @@
+#N canvas 273 213 466 323 12;
+#X text 11 6 concat;
+#X obj 14 39 inlet;
+#X text 67 38 left;
+#X obj 60 115 drip;
+#X msg 60 140 add2 \$1;
+#X obj 142 112 bang;
+#X obj 90 237 outlet;
+#X msg 90 210 color blue;
+#X obj 236 241 outlet;
+#X obj 5 138 t b b;
+#X msg 142 138 set set;
+#X connect 1 0 5 0;
+#X connect 1 0 3 0;
+#X connect 1 0 9 0;
+#X connect 3 0 4 0;
+#X connect 4 0 7 0;
+#X connect 5 0 10 0;
+#X connect 7 0 6 0;
+#X connect 9 0 8 0;
+#X connect 9 1 7 0;
+#X connect 10 0 7 0;
diff --git a/extensions/xgui/utils/concat_value.pd b/extensions/xgui/utils/concat_value.pd
new file mode 100644
index 00000000..a9e3b83d
--- /dev/null
+++ b/extensions/xgui/utils/concat_value.pd
@@ -0,0 +1,26 @@
+#N canvas 269 200 470 320 12;
+#X text 11 6 concat;
+#X obj 14 39 inlet;
+#X text 67 38 left;
+#X obj 60 115 drip;
+#X msg 60 140 add2 \$1;
+#X obj 97 78 bang;
+#X msg 157 151 set my_text_x;
+#X obj 90 237 outlet;
+#X msg 157 125 set set \$1;
+#X obj 12 114 bang;
+#X obj 157 71 loadbang;
+#X msg 90 210 my_text test;
+#X obj 157 98 value \$1;
+#X connect 1 0 5 0;
+#X connect 1 0 3 0;
+#X connect 1 0 9 0;
+#X connect 3 0 4 0;
+#X connect 4 0 11 0;
+#X connect 5 0 6 0;
+#X connect 6 0 11 0;
+#X connect 8 0 6 0;
+#X connect 9 0 11 0;
+#X connect 10 0 12 0;
+#X connect 11 0 7 0;
+#X connect 12 0 8 0;
diff --git a/extensions/xgui/utils/convert.pd b/extensions/xgui/utils/convert.pd
new file mode 100644
index 00000000..6affbcef
--- /dev/null
+++ b/extensions/xgui/utils/convert.pd
@@ -0,0 +1,10 @@
+#N canvas 343 358 450 300 12;
+#X text 18 10 convert truc machin;
+#X obj 19 43 inlet;
+#X obj 19 71 route \$1;
+#X obj 19 122 outlet;
+#X obj 19 96 concat \$2;
+#X text 173 127 dh20020401;
+#X connect 1 0 2 0;
+#X connect 2 0 4 0;
+#X connect 4 0 3 0;
diff --git a/extensions/xgui/utils/in.pd b/extensions/xgui/utils/in.pd
new file mode 100644
index 00000000..2d2c84dd
--- /dev/null
+++ b/extensions/xgui/utils/in.pd
@@ -0,0 +1,37 @@
+#N canvas 330 344 290 248 10;
+#X obj 13 18 inlet;
+#X obj 64 18 inlet;
+#X obj 144 18 inlet;
+#X obj 21 149 >=;
+#X obj 64 41 init2 \$1 0;
+#X obj 144 41 init2 \$2 0;
+#X obj 101 148 <=;
+#X obj 13 41 t f f;
+#X obj 59 181 &&;
+#X obj 59 212 outlet;
+#X text 117 212 dh20010815;
+#X obj 148 92 max;
+#X obj 58 109 min;
+#X obj 150 122 max;
+#X obj 60 82 min;
+#X text 127 222 dh20020216;
+#X connect 0 0 7 0;
+#X connect 1 0 4 0;
+#X connect 2 0 5 0;
+#X connect 3 0 8 0;
+#X connect 4 0 13 1;
+#X connect 4 0 11 0;
+#X connect 4 0 14 0;
+#X connect 4 0 12 1;
+#X connect 5 0 14 1;
+#X connect 5 0 13 0;
+#X connect 5 0 11 1;
+#X connect 5 0 12 0;
+#X connect 6 0 8 1;
+#X connect 7 0 3 0;
+#X connect 7 1 6 0;
+#X connect 8 0 9 0;
+#X connect 11 0 6 1;
+#X connect 12 0 3 1;
+#X connect 13 0 6 1;
+#X connect 14 0 3 1;
diff --git a/extensions/xgui/utils/init2.pd b/extensions/xgui/utils/init2.pd
new file mode 100644
index 00000000..97a8bd25
--- /dev/null
+++ b/extensions/xgui/utils/init2.pd
@@ -0,0 +1,27 @@
+#N canvas 544 230 405 255 10;
+#X text 205 173 (c) musil@iem.kug.ac.at;
+#X text 246 186 IEM KUG;
+#X text 221 200 graz \, austria 2001;
+#X obj 154 37 inlet;
+#X obj 67 86 f \$1;
+#X obj 88 34 loadbang;
+#X obj 67 110 t f f;
+#X obj 67 139 spigot;
+#X text 225 83 dh20010325;
+#X obj 87 57 t b b;
+#X obj 116 86 f \$2;
+#X text 136 6 exemple : init \$1 0;
+#X obj 154 183 f;
+#X obj 154 208 outlet;
+#X text 65 185 dh20010429;
+#X text 267 157 tanks to;
+#X connect 3 0 12 0;
+#X connect 4 0 6 0;
+#X connect 5 0 9 0;
+#X connect 6 0 7 0;
+#X connect 6 1 7 1;
+#X connect 7 0 12 0;
+#X connect 9 0 4 0;
+#X connect 9 1 10 0;
+#X connect 10 0 12 0;
+#X connect 12 0 13 0;
diff --git a/extensions/xgui/utils/moy.pd b/extensions/xgui/utils/moy.pd
new file mode 100644
index 00000000..774fef0f
--- /dev/null
+++ b/extensions/xgui/utils/moy.pd
@@ -0,0 +1,13 @@
+#N canvas 176 223 452 302 12;
+#X text 11 7 Moy;
+#X obj 34 44 inlet;
+#X obj 86 44 inlet;
+#X obj 51 115 / 2;
+#X obj 48 80 +;
+#X obj 53 142 outlet;
+#X text 51 177 dh20020428;
+#X text 80 193 ethanol = 2g/l;
+#X connect 1 0 4 0;
+#X connect 2 0 4 1;
+#X connect 3 0 5 0;
+#X connect 4 0 3 0;
diff --git a/extensions/xgui/utils/subspace.pd b/extensions/xgui/utils/subspace.pd
new file mode 100644
index 00000000..3f847316
--- /dev/null
+++ b/extensions/xgui/utils/subspace.pd
@@ -0,0 +1,50 @@
+#N canvas 84 46 443 487 12;
+#X text 21 7 subspace x1 y2 x3 y4 x5 y6 x7 y8;
+#X text 44 66 sub;
+#X text 52 390 sub;
+#X text 239 61 space;
+#X text 241 388 space;
+#X text 21 26 subspace define a region as subspace with their own coords
+;
+#X obj 40 91 inlet;
+#X obj 221 365 outlet;
+#X obj 221 309 pack f f;
+#X obj 40 119 route xy;
+#X msg 221 337 xy \$1 \$2;
+#X obj 40 147 unpack f f;
+#X obj 40 177 t b f;
+#X obj 39 234 t b f;
+#X obj 36 362 outlet;
+#X obj 36 306 pack f f;
+#X msg 36 334 xy \$1 \$2;
+#X obj 40 206 bounded \$0-b1 0 \$1 \$3 \$5 \$7;
+#X obj 237 87 inlet;
+#X obj 237 115 route xy;
+#X obj 237 143 unpack f f;
+#X obj 237 173 t b f;
+#X obj 38 258 bounded \$0-b2 0 \$2 \$4 \$6 \$8;
+#X obj 258 233 t b f;
+#X connect 6 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 11 0;
+#X connect 10 0 7 0;
+#X connect 11 0 12 0;
+#X connect 11 1 13 0;
+#X connect 12 0 17 0;
+#X connect 12 1 17 0;
+#X connect 13 0 22 0;
+#X connect 13 1 22 0;
+#X connect 15 0 16 0;
+#X connect 16 0 14 0;
+#X connect 17 0 15 0;
+#X connect 17 1 8 0;
+#X connect 18 0 19 0;
+#X connect 19 0 20 0;
+#X connect 20 0 21 0;
+#X connect 20 1 23 0;
+#X connect 21 0 17 1;
+#X connect 21 1 17 1;
+#X connect 22 0 15 1;
+#X connect 22 1 8 1;
+#X connect 23 0 22 1;
+#X connect 23 1 22 1;
diff --git a/extensions/xgui/utils/unique.pd b/extensions/xgui/utils/unique.pd
new file mode 100644
index 00000000..10b59a32
--- /dev/null
+++ b/extensions/xgui/utils/unique.pd
@@ -0,0 +1,10 @@
+#N canvas 161 175 452 302 8;
+#X obj 14 15 inlet;
+#X text 14 0 unique;
+#X obj 14 55 \$0;
+#X obj 14 75 outlet;
+#X obj 14 35 bang;
+#X text 13 94 dh20200128;
+#X connect 0 0 4 0;
+#X connect 2 0 3 0;
+#X connect 4 0 2 0;
diff --git a/extensions/xgui/utils/value2.pd b/extensions/xgui/utils/value2.pd
new file mode 100644
index 00000000..dc77c858
--- /dev/null
+++ b/extensions/xgui/utils/value2.pd
@@ -0,0 +1,13 @@
+#N canvas 374 432 450 300 12;
+#X obj 21 43 inlet;
+#X obj 78 44 inlet;
+#X text 17 9 value name value;
+#X obj 56 123 \$2;
+#X obj 78 69 s \$1-value;
+#X obj 78 96 r \$1-value;
+#X obj 56 151 outlet;
+#X text 342 264 dh20020401;
+#X connect 0 0 3 0;
+#X connect 1 0 4 0;
+#X connect 3 0 6 0;
+#X connect 5 0 3 1;
diff --git a/extensions/xgui/utils/valueinit.pd b/extensions/xgui/utils/valueinit.pd
new file mode 100644
index 00000000..04ef3260
--- /dev/null
+++ b/extensions/xgui/utils/valueinit.pd
@@ -0,0 +1,8 @@
+#N canvas 382 472 450 300 12;
+#X text 339 262 dh20020401;
+#X obj 19 87 value \$1;
+#X obj 19 61 \$2;
+#X obj 19 34 loadbang;
+#X text 17 10 valueinit name value;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
diff --git a/extensions/xgui/xgui-lib/a2s.c b/extensions/xgui/xgui-lib/a2s.c
new file mode 100644
index 00000000..55a9bc47
--- /dev/null
+++ b/extensions/xgui/xgui-lib/a2s.c
@@ -0,0 +1,66 @@
+/* Copyright (c) 2002 Damien HENRY.
+* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
+
+/* code for a2s pd class */
+
+#include "m_pd.h"
+#include <string.h>
+
+typedef struct s_pd_obj_a2s
+{
+ t_object x_obj;
+} t_pd_obj_a2s;
+
+
+void a2s_help(t_pd_obj_a2s *x)
+{
+ post(" ");
+ post("a2s v001");
+ post("+ selector list :");
+ post("++ help : this help !!!");
+ post("++ symbol : will return the canvas & the obj");
+ post(" ");
+}
+
+void a2s_list(t_pd_obj_a2s *x, t_symbol *s, int argc, t_atom *argv)
+{
+ char buffer[MAXPDSTRING] ;
+ char *a_string ;
+ int a_string_l ;
+ t_binbuf *bbuf ;
+ int i,l=0,k=0 ;
+
+ bbuf = binbuf_new() ;
+ for (i=0;i<argc;i++)
+ {
+ binbuf_clear(bbuf);
+ binbuf_add(bbuf, 1, argv++);
+ binbuf_gettext(bbuf, &a_string, &a_string_l);
+ memcpy(&buffer[k],a_string,a_string_l) ;
+ freebytes(a_string,a_string_l);
+ k+=a_string_l ;
+ }
+ buffer[k]=0;
+ outlet_symbol(x->x_obj.ob_outlet,gensym(&buffer[0]));
+ binbuf_free(bbuf);
+}
+
+void a2s_free(void) { }
+
+t_class *a2s_class;
+
+void *a2s_new(void)
+{
+ t_pd_obj_a2s *x = (t_pd_obj_a2s *)pd_new(a2s_class);
+ outlet_new(&x->x_obj, &s_float);
+ return (void *)x;
+}
+
+void a2s_setup(void)
+{
+ a2s_class = class_new(gensym("a2s"), (t_newmethod)a2s_new,(t_method)a2s_free, sizeof( t_pd_obj_a2s), 0,A_DEFSYMBOL, 0);
+ class_addlist(a2s_class, (t_method)a2s_list);
+ class_addmethod(a2s_class, (t_method)a2s_help, gensym("help"), 0);
+ class_sethelpsymbol(a2s_class, gensym("xgui/help_a2s"));
+}
diff --git a/extensions/xgui/xgui-lib/concat.c b/extensions/xgui/xgui-lib/concat.c
new file mode 100644
index 00000000..59a70986
--- /dev/null
+++ b/extensions/xgui/xgui-lib/concat.c
@@ -0,0 +1,68 @@
+/* Copyright (c) 2002 Damien HENRY.
+* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
+
+/* code for concat pd class */
+
+#include "m_pd.h"
+#include <string.h>
+
+typedef struct s_pd_obj_concat
+{
+ t_object x_obj;
+ t_symbol *selector ;
+} t_pd_obj_concat;
+
+
+void concat_help(t_pd_obj_concat *x)
+{
+ post(" ");
+ post("concat v001");
+ post("+ selector list :");
+ post("++ help : this help !!!");
+ post("++ anything : will return anything + the $arg1 in first ");
+}
+
+void concat_any_method(t_pd_obj_concat *x,t_symbol *s, int argc, t_atom *argv)
+{
+ int n = argc+1;
+ if ((s==gensym("float"))||(s==gensym("symbol"))||(s==gensym("list")))
+ {
+ outlet_anything(x->x_obj.ob_outlet,x->selector, argc,argv);
+ } else {
+ t_atom *my_message = (t_atom *)getbytes(n * sizeof(t_atom));
+ SETSYMBOL(my_message, s);
+ my_message++;
+ memcpy(my_message, argv, argc * sizeof(t_atom));
+ outlet_anything(x->x_obj.ob_outlet,x->selector, n,--my_message);
+ freebytes(my_message, n * sizeof(t_atom));
+ }
+}
+
+void concat_set2add(t_pd_obj_concat *x, t_symbol *s)
+{
+ x->selector = s ;
+}
+
+void concat_free(void) { }
+
+t_class *concat_class;
+
+void *concat_new(t_symbol *s)
+{
+ t_pd_obj_concat *x = (t_pd_obj_concat *)pd_new(concat_class);
+ x->selector = s;
+ outlet_new(&x->x_obj, &s_float);
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("symbol"), gensym("s2add"));
+ return (void *)x;
+}
+
+void concat_setup(void)
+{
+ concat_class = class_new(gensym("concat"), (t_newmethod)concat_new,(t_method)concat_free, sizeof( t_pd_obj_concat), 0,A_DEFSYMBOL, 0);
+ class_addanything(concat_class, concat_any_method);
+ class_addmethod(concat_class, (t_method)concat_set2add, gensym("s2add"), A_SYMBOL, 0);
+ class_addmethod(concat_class, (t_method)concat_help, gensym("help"), 0);
+ class_sethelpsymbol(concat_class, gensym("xgui/help_concat"));
+}
+
diff --git a/extensions/xgui/xgui-lib/help_number.pd b/extensions/xgui/xgui-lib/help_number.pd
new file mode 100644
index 00000000..01951510
--- /dev/null
+++ b/extensions/xgui/xgui-lib/help_number.pd
@@ -0,0 +1,60 @@
+#N canvas 125 117 754 468 10;
+#X floatatom 35 99 5 0 0;
+#X msg 35 76 bang;
+#X msg 124 94 mult 2 \, bang;
+#X msg 124 140 sub 1 \, bang;
+#X msg 124 163 div 2 \, bang;
+#X msg 124 117 inv \, bang;
+#X msg 124 71 add 1 \, bang;
+#X msg 240 63 add 1 \, if >= 10 0 \, bang;
+#X msg 241 123 \$1 \, if < 0 0 \, if >= 10 10 \, bang;
+#X floatatom 241 100 5 0 0;
+#X msg 35 30 help;
+#X floatatom 124 25 5 0 0;
+#X msg 124 48 !x \$1 \, ?x;
+#X floatatom 422 151 5 0 0;
+#X floatatom 70 327 5 0 0;
+#X msg 70 350 !x \$1 \, ?x;
+#X msg 143 331 bang;
+#X obj 35 216 number my_first_number;
+#X msg 210 302 set my_first_number;
+#X obj 70 373 number my_second_number;
+#X msg 210 325 get my_first_number \, bang;
+#X floatatom 422 220 5 0 0;
+#X obj 35 240 print;
+#X obj 422 197 x my_first_number;
+#X msg 35 53 post;
+#X msg 643 211 bound 0;
+#X obj 70 396 print;
+#X msg 422 174 \$1 \, bang;
+#X msg 575 166 subspace 0 1 100 10;
+#X msg 646 237 bound 1 10;
+#X msg 181 26 bound 1 10;
+#X connect 0 0 17 0;
+#X connect 1 0 17 0;
+#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 6 0 17 0;
+#X connect 7 0 17 0;
+#X connect 8 0 17 0;
+#X connect 9 0 8 0;
+#X connect 10 0 17 0;
+#X connect 11 0 12 0;
+#X connect 12 0 17 0;
+#X connect 13 0 27 0;
+#X connect 14 0 15 0;
+#X connect 15 0 19 0;
+#X connect 16 0 19 0;
+#X connect 17 0 22 0;
+#X connect 18 0 19 0;
+#X connect 19 0 26 0;
+#X connect 20 0 19 0;
+#X connect 23 0 21 0;
+#X connect 24 0 17 0;
+#X connect 25 0 23 0;
+#X connect 27 0 23 0;
+#X connect 28 0 23 0;
+#X connect 29 0 23 0;
+#X connect 30 0 17 0;
diff --git a/extensions/xgui/xgui-lib/m_pd.h b/extensions/xgui/xgui-lib/m_pd.h
new file mode 100644
index 00000000..bbbb491a
--- /dev/null
+++ b/extensions/xgui/xgui-lib/m_pd.h
@@ -0,0 +1,579 @@
+/* Copyright (c) 1997-1999 Miller Puckette.
+* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
+
+#if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus)
+extern "C" {
+#endif
+
+#ifdef NT
+// #pragma warning( disable : 4091 )
+#pragma warning( disable : 4305 ) /* uncast const double to float */
+#pragma warning( disable : 4244 ) /* uncast float/int conversion etc. */
+#pragma warning( disable : 4101 ) /* unused automatic variables */
+#endif /* NT */
+
+ /* the external storage class is "extern" in UNIX; in NT it's ugly. */
+#ifdef NT
+#ifdef PD_INTERNAL
+#define EXTERN __declspec(dllexport) extern
+#else
+#define EXTERN __declspec(dllimport) extern
+#endif /* PD_INTERNAL */
+#else
+#define EXTERN extern
+#endif /* NT */
+
+ /* and depending on the compiler, hidden data structures are
+ declared differently: */
+#ifdef __GNUC__
+#define EXTERN_STRUCT struct
+#else
+#define EXTERN_STRUCT extern struct
+#endif
+
+
+#if !defined(_SIZE_T) && !defined(_SIZE_T_)
+#include <stddef.h> /* just for size_t -- how lame! */
+#endif
+
+#define MAXPDSTRING 1000 /* use this for anything you want */
+#define MAXPDARG 5 /* max number of args we can typecheck today */
+
+ /* signed and unsigned integer types the size of a pointer: */
+#ifdef __alpha__
+typedef long t_int;
+#else
+typedef int t_int;
+#endif
+
+typedef float t_float; /* a floating-point number at most the same size */
+typedef float t_floatarg; /* floating-point type for function calls */
+
+typedef struct _symbol
+{
+ char *s_name;
+ struct _class **s_thing;
+ struct _symbol *s_next;
+} t_symbol;
+
+EXTERN_STRUCT _array;
+#define t_array struct _array /* g_canvas.h */
+
+/* pointers to glist and array elements go through a "stub" which sticks
+around after the glist or array is freed. The stub itself is deleted when
+both the glist/array is gone and the refcount is zero, ensuring that no
+gpointers are pointing here. */
+
+#define GP_NONE 0 /* the stub points nowhere (has been cut off) */
+#define GP_GLIST 1 /* the stub points to a glist element */
+#define GP_ARRAY 2 /* ... or array */
+
+typedef struct _gstub
+{
+ union
+ {
+ struct _glist *gs_glist; /* glist we're in */
+ struct _array *gs_array; /* array we're in */
+ } gs_un;
+ int gs_which; /* GP_GLIST/GP_ARRAY */
+ int gs_refcount; /* number of gpointers pointing here */
+} t_gstub;
+
+typedef struct _gpointer /* pointer to a gobj in a glist */
+{
+ union
+ {
+ struct _scalar *gp_scalar; /* scalar we're in (if glist) */
+ union word *gp_w; /* raw data (if array) */
+ } gp_un;
+ int gp_valid; /* number which must match gpointee */
+ t_gstub *gp_stub; /* stub which points to glist/array */
+} t_gpointer;
+
+typedef union word
+{
+ t_float w_float;
+ t_symbol *w_symbol;
+ t_gpointer *w_gpointer;
+ t_array *w_array;
+ struct _glist *w_list;
+ int w_index;
+} t_word;
+
+typedef enum
+{
+ A_NULL,
+ A_FLOAT,
+ A_SYMBOL,
+ A_POINTER,
+ A_SEMI,
+ A_COMMA,
+ A_DEFFLOAT,
+ A_DEFSYM,
+ A_DOLLAR,
+ A_DOLLSYM,
+ A_GIMME,
+ A_CANT
+} t_atomtype;
+
+#define A_DEFSYMBOL A_DEFSYM /* better name for this */
+
+typedef struct _atom
+{
+ t_atomtype a_type;
+ union word a_w;
+} t_atom;
+
+EXTERN_STRUCT _class;
+#define t_class struct _class
+
+EXTERN_STRUCT _outlet;
+#define t_outlet struct _outlet
+
+EXTERN_STRUCT _inlet;
+#define t_inlet struct _inlet
+
+EXTERN_STRUCT _binbuf;
+#define t_binbuf struct _binbuf
+
+EXTERN_STRUCT _clock;
+#define t_clock struct _clock
+
+EXTERN_STRUCT _outconnect;
+#define t_outconnect struct _outconnect
+
+EXTERN_STRUCT _glist;
+#define t_glist struct _glist
+#define t_canvas struct _glist /* LATER lose this */
+
+typedef t_class *t_pd; /* pure datum: nothing but a class pointer */
+
+typedef struct _gobj /* a graphical object */
+{
+ t_pd g_pd; /* pure datum header (class) */
+ struct _gobj *g_next; /* next in list */
+} t_gobj;
+
+typedef struct _scalar /* a graphical object holding data */
+{
+ t_gobj sc_gobj; /* header for graphical object */
+ t_symbol *sc_template; /* template name (LATER replace with pointer) */
+ t_word sc_vec[1]; /* indeterminate-length array of words */
+} t_scalar;
+
+typedef struct _text /* patchable object - graphical, with text */
+{
+ t_gobj te_g; /* header for graphical object */
+ t_binbuf *te_binbuf; /* holder for the text */
+ t_outlet *te_outlet; /* linked list of outlets */
+ t_inlet *te_inlet; /* linked list of inlets */
+ short te_xpix; /* x&y location (within the toplevel) */
+ short te_ypix;
+ short te_width; /* requested width in chars, 0 if auto */
+ unsigned int te_type:2; /* from defs below */
+} t_text;
+
+#define T_TEXT 0 /* just a textual comment */
+#define T_OBJECT 1 /* a MAX style patchable object */
+#define T_MESSAGE 2 /* a MAX stype message */
+#define T_ATOM 3 /* a cell to display a number or symbol */
+
+#define te_pd te_g.g_pd
+
+ /* t_object is synonym for t_text (LATER unify them) */
+
+typedef struct _text t_object;
+
+#define ob_outlet te_outlet
+#define ob_inlet te_inlet
+#define ob_binbuf te_binbuf
+#define ob_pd te_g.g_pd
+#define ob_g te_g
+
+typedef void (*t_method)(void);
+typedef void *(*t_newmethod)( void);
+typedef void (*t_gotfn)(void *x, ...);
+
+/* ---------------- pre-defined objects and symbols --------------*/
+EXTERN t_pd pd_objectmaker; /* factory for creating "object" boxes */
+EXTERN t_pd pd_canvasmaker; /* factory for creating canvases */
+EXTERN t_symbol s_pointer;
+EXTERN t_symbol s_float;
+EXTERN t_symbol s_symbol;
+EXTERN t_symbol s_bang;
+EXTERN t_symbol s_list;
+EXTERN t_symbol s_anything;
+EXTERN t_symbol s_signal;
+EXTERN t_symbol s__N;
+EXTERN t_symbol s__X;
+EXTERN t_symbol s_x;
+EXTERN t_symbol s_y;
+EXTERN t_symbol s_;
+
+/* --------- prototypes from the central message system ----------- */
+EXTERN void pd_typedmess(t_pd *x, t_symbol *s, int argc, t_atom *argv);
+EXTERN void pd_forwardmess(t_pd *x, int argc, t_atom *argv);
+EXTERN t_symbol *gensym(char *s);
+EXTERN t_gotfn getfn(t_pd *x, t_symbol *s);
+EXTERN t_gotfn zgetfn(t_pd *x, t_symbol *s);
+EXTERN void nullfn(void);
+EXTERN void pd_vmess(t_pd *x, t_symbol *s, char *fmt, ...);
+#define mess0(x, s) ((*getfn((x), (s)))((x)))
+#define mess1(x, s, a) ((*getfn((x), (s)))((x), (a)))
+#define mess2(x, s, a,b) ((*getfn((x), (s)))((x), (a),(b)))
+#define mess3(x, s, a,b,c) ((*getfn((x), (s)))((x), (a),(b),(c)))
+#define mess4(x, s, a,b,c,d) ((*getfn((x), (s)))((x), (a),(b),(c),(d)))
+#define mess5(x, s, a,b,c,d,e) ((*getfn((x), (s)))((x), (a),(b),(c),(d),(e)))
+void obj_list(t_object *x, t_symbol *s, int argc, t_atom *argv);
+
+/* --------------- memory management -------------------- */
+EXTERN void *getbytes(size_t nbytes);
+EXTERN void *getzbytes(size_t nbytes);
+EXTERN void *copybytes(void *src, size_t nbytes);
+EXTERN void freebytes(void *x, size_t nbytes);
+EXTERN void *resizebytes(void *x, size_t oldsize, size_t newsize);
+
+/* -------------------- atoms ----------------------------- */
+
+#define SETSEMI(atom) ((atom)->a_type = A_SEMI, (atom)->a_w.w_index = 0)
+#define SETCOMMA(atom) ((atom)->a_type = A_COMMA, (atom)->a_w.w_index = 0)
+#define SETPOINTER(atom, gp) ((atom)->a_type = A_POINTER, \
+ (atom)->a_w.w_gpointer = (gp))
+#define SETFLOAT(atom, f) ((atom)->a_type = A_FLOAT, (atom)->a_w.w_float = (f))
+#define SETSYMBOL(atom, s) ((atom)->a_type = A_SYMBOL, \
+ (atom)->a_w.w_symbol = (s))
+#define SETDOLLAR(atom, n) ((atom)->a_type = A_DOLLAR, \
+ (atom)->a_w.w_index = (n))
+#define SETDOLLSYM(atom, s) ((atom)->a_type = A_DOLLSYM, \
+ (atom)->a_w.w_symbol= (s))
+
+EXTERN t_float atom_getfloat(t_atom *a);
+EXTERN t_int atom_getint(t_atom *a);
+EXTERN t_symbol *atom_getsymbol(t_atom *a);
+EXTERN t_symbol *atom_gensym(t_atom *a);
+EXTERN t_float atom_getfloatarg(int which, int argc, t_atom *argv);
+EXTERN t_int atom_getintarg(int which, int argc, t_atom *argv);
+EXTERN t_symbol *atom_getsymbolarg(int which, int argc, t_atom *argv);
+
+EXTERN void atom_string(t_atom *a, char *buf, unsigned int bufsize);
+
+/* ------------------ binbufs --------------- */
+
+EXTERN t_binbuf *binbuf_new(void);
+EXTERN void binbuf_free(t_binbuf *x);
+
+EXTERN void binbuf_text(t_binbuf *x, char *text, size_t size);
+EXTERN void binbuf_gettext(t_binbuf *x, char **bufp, int *lengthp);
+EXTERN void binbuf_clear(t_binbuf *x);
+EXTERN void binbuf_add(t_binbuf *x, int argc, t_atom *argv);
+EXTERN void binbuf_addv(t_binbuf *x, char *fmt, ...);
+EXTERN void binbuf_addbinbuf(t_binbuf *x, t_binbuf *y);
+EXTERN void binbuf_addsemi(t_binbuf *x);
+EXTERN void binbuf_restore(t_binbuf *x, int argc, t_atom *argv);
+EXTERN void binbuf_print(t_binbuf *x);
+EXTERN int binbuf_getnatom(t_binbuf *x);
+EXTERN t_atom *binbuf_getvec(t_binbuf *x);
+EXTERN void binbuf_eval(t_binbuf *x, t_pd *target, int argc, t_atom *argv);
+EXTERN int binbuf_read(t_binbuf *b, char *filename, char *dirname,
+ int crflag);
+EXTERN int binbuf_read_via_path(t_binbuf *b, char *filename, char *dirname,
+ int crflag);
+EXTERN int binbuf_write(t_binbuf *x, char *filename, char *dir,
+ int crflag);
+EXTERN void binbuf_evalfile(t_symbol *name, t_symbol *dir);
+
+/* ------------------ clocks --------------- */
+
+EXTERN t_clock *clock_new(void *owner, t_method fn);
+EXTERN void clock_set(t_clock *x, double systime);
+EXTERN void clock_delay(t_clock *x, double delaytime);
+EXTERN void clock_unset(t_clock *x);
+EXTERN double clock_getlogicaltime(void);
+EXTERN double clock_getsystime(void); /* OBSOLETE; use clock_getlogicaltime() */
+EXTERN double clock_gettimesince(double prevsystime);
+EXTERN double clock_getsystimeafter(double delaytime);
+EXTERN void clock_free(t_clock *x);
+
+/* ----------------- pure data ---------------- */
+EXTERN t_pd *pd_new(t_class *cls);
+EXTERN void pd_free(t_pd *x);
+EXTERN void pd_bind(t_pd *x, t_symbol *s);
+EXTERN void pd_unbind(t_pd *x, t_symbol *s);
+EXTERN t_pd *pd_findbyclass(t_symbol *s, t_class *c);
+EXTERN void pd_pushsym(t_pd *x);
+EXTERN void pd_popsym(t_pd *x);
+EXTERN t_symbol *pd_getfilename(void);
+EXTERN t_symbol *pd_getdirname(void);
+EXTERN void pd_bang(t_pd *x);
+EXTERN void pd_pointer(t_pd *x, t_gpointer *gp);
+EXTERN void pd_float(t_pd *x, t_float f);
+EXTERN void pd_symbol(t_pd *x, t_symbol *s);
+EXTERN void pd_list(t_pd *x, t_symbol *s, int argc, t_atom *argv);
+EXTERN void pd_anything(t_pd *x, t_symbol *s, int argc, t_atom *argv);
+#define pd_class(x) (*(x))
+
+/* ----------------- pointers ---------------- */
+EXTERN void gpointer_init(t_gpointer *gp);
+EXTERN void gpointer_copy(const t_gpointer *gpfrom, t_gpointer *gpto);
+EXTERN void gpointer_unset(t_gpointer *gp);
+EXTERN int gpointer_check(const t_gpointer *gp, int headok);
+
+/* ----------------- patchable "objects" -------------- */
+EXTERN_STRUCT _inlet;
+#define t_inlet struct _inlet
+EXTERN_STRUCT _outlet;
+#define t_outlet struct _outlet
+
+EXTERN t_inlet *inlet_new(t_object *owner, t_pd *dest, t_symbol *s1,
+ t_symbol *s2);
+EXTERN t_inlet *pointerinlet_new(t_object *owner, t_gpointer *gp);
+EXTERN t_inlet *floatinlet_new(t_object *owner, t_float *fp);
+EXTERN t_inlet *symbolinlet_new(t_object *owner, t_symbol **sp);
+EXTERN void inlet_free(t_inlet *x);
+
+EXTERN t_outlet *outlet_new(t_object *owner, t_symbol *s);
+EXTERN void outlet_bang(t_outlet *x);
+EXTERN void outlet_pointer(t_outlet *x, t_gpointer *gp);
+EXTERN void outlet_float(t_outlet *x, t_float f);
+EXTERN void outlet_symbol(t_outlet *x, t_symbol *s);
+EXTERN void outlet_list(t_outlet *x, t_symbol *s, int argc, t_atom *argv);
+EXTERN void outlet_anything(t_outlet *x, t_symbol *s, int argc, t_atom *argv);
+EXTERN void outlet_free(t_outlet *x);
+
+/* -------------------- canvases -------------- */
+
+EXTERN void glob_setfilename(void *dummy, t_symbol *name, t_symbol *dir);
+
+EXTERN void canvas_setargs(int argc, t_atom *argv);
+EXTERN t_atom *canvas_getarg(int which);
+EXTERN t_symbol *canvas_getcurrentdir(void);
+EXTERN t_glist *canvas_getcurrent(void);
+EXTERN void canvas_makefilename(t_glist *c, char *file,
+ char *result,int resultsize);
+EXTERN t_symbol *canvas_getdir(t_glist *x);
+EXTERN int sys_fontwidth(int fontsize);
+EXTERN int sys_fontheight(int fontsize);
+EXTERN void canvas_dataproperties(t_glist *x, t_scalar *sc, t_binbuf *b);
+
+/* ---------------- widget behaviors ---------------------- */
+
+EXTERN_STRUCT _widgetbehavior;
+#define t_widgetbehavior struct _widgetbehavior
+
+EXTERN_STRUCT _parentwidgetbehavior;
+#define t_parentwidgetbehavior struct _parentwidgetbehavior
+EXTERN t_parentwidgetbehavior *pd_getparentwidget(t_pd *x);
+
+/* -------------------- classes -------------- */
+
+#define CLASS_DEFAULT 0 /* flags for new classes below */
+#define CLASS_PD 1
+#define CLASS_GOBJ 2
+#define CLASS_PATCHABLE 3
+#define CLASS_NOINLET 8
+
+#define CLASS_TYPEMASK 3
+
+
+EXTERN t_class *class_new(t_symbol *name, t_newmethod newmethod,
+ t_method freemethod, size_t size, int flags, t_atomtype arg1, ...);
+EXTERN void class_addcreator(t_newmethod newmethod, t_symbol *s,
+ t_atomtype type1, ...);
+EXTERN void class_addmethod(t_class *c, t_method fn, t_symbol *sel,
+ t_atomtype arg1, ...);
+EXTERN void class_addbang(t_class *c, t_method fn);
+EXTERN void class_addpointer(t_class *c, t_method fn);
+EXTERN void class_doaddfloat(t_class *c, t_method fn);
+EXTERN void class_addsymbol(t_class *c, t_method fn);
+EXTERN void class_addlist(t_class *c, t_method fn);
+EXTERN void class_addanything(t_class *c, t_method fn);
+EXTERN void class_sethelpsymbol(t_class *c, t_symbol *s);
+EXTERN void class_setwidget(t_class *c, t_widgetbehavior *w);
+EXTERN void class_setparentwidget(t_class *c, t_parentwidgetbehavior *w);
+EXTERN t_parentwidgetbehavior *class_parentwidget(t_class *c);
+EXTERN char *class_getname(t_class *c);
+EXTERN char *class_gethelpname(t_class *c);
+EXTERN void class_setdrawcommand(t_class *c);
+EXTERN int class_isdrawcommand(t_class *c);
+EXTERN void class_domainsignalin(t_class *c, int onset);
+#define CLASS_MAINSIGNALIN(c, type, field) \
+ class_domainsignalin(c, (char *)(&((type *)0)->field) - (char *)0)
+
+#ifndef PD_CLASS_DEF
+#define class_addbang(x, y) class_addbang((x), (t_method)(y))
+#define class_addpointer(x, y) class_addpointer((x), (t_method)(y))
+#define class_addfloat(x, y) class_doaddfloat((x), (t_method)(y))
+#define class_addsymbol(x, y) class_addsymbol((x), (t_method)(y))
+#define class_addlist(x, y) class_addlist((x), (t_method)(y))
+#define class_addanything(x, y) class_addanything((x), (t_method)(y))
+#endif
+
+/* ------------ printing --------------------------------- */
+EXTERN void post(char *fmt, ...);
+EXTERN void startpost(char *fmt, ...);
+EXTERN void poststring(char *s);
+EXTERN void postfloat(float f);
+EXTERN void postatom(int argc, t_atom *argv);
+EXTERN void endpost(void);
+EXTERN void error(char *fmt, ...);
+EXTERN void bug(char *fmt, ...);
+EXTERN void pd_error(void *object, char *fmt, ...);
+EXTERN void sys_logerror(char *object, char *s);
+EXTERN void sys_unixerror(char *object);
+EXTERN void sys_ouch(void);
+
+#ifdef __linux__
+EXTERN char* sys_get_path( void);
+#endif
+EXTERN void sys_addpath(const char* p);
+
+
+/* ------------ system interface routines ------------------- */
+EXTERN int sys_isreadablefile(const char *name);
+EXTERN void sys_bashfilename(const char *from, char *to);
+EXTERN void sys_unbashfilename(const char *from, char *to);
+EXTERN int open_via_path(const char *name, const char *ext, const char *dir,
+ char *dirresult, char **nameresult, unsigned int size, int bin);
+
+/* --------------- signals ----------------------------------- */
+
+typedef float t_sample;
+#define MAXLOGSIG 32
+#define MAXSIGSIZE (1 << MAXLOGSIG)
+
+typedef struct _signal
+{
+ int s_n; /* number of points in the array */
+ t_sample *s_vec; /* the array */
+ float s_sr; /* sample rate */
+ int s_refcount; /* number of times used */
+ int s_isborrowed; /* whether we're going to borrow our array */
+ struct _signal *s_borrowedfrom; /* signal to borrow it from */
+ struct _signal *s_nextfree; /* next in freelist */
+ struct _signal *s_nextused; /* next in used list */
+} t_signal;
+
+
+typedef t_int *(*t_perfroutine)(t_int *args);
+
+EXTERN t_int *plus_perform(t_int *args);
+EXTERN t_int *zero_perform(t_int *args);
+EXTERN t_int *copy_perform(t_int *args);
+
+EXTERN void dsp_add_plus(t_sample *in1, t_sample *in2, t_sample *out, int n);
+EXTERN void dsp_add_copy(t_sample *in, t_sample *out, int n);
+EXTERN void dsp_add_scalarcopy(t_sample *in, t_sample *out, int n);
+EXTERN void dsp_add_zero(t_sample *out, int n);
+
+EXTERN int sys_getblksize(void);
+EXTERN float sys_getsr(void);
+EXTERN int sys_get_inchannels(void);
+EXTERN int sys_get_outchannels(void);
+
+EXTERN void dsp_add(t_perfroutine f, int n, ...);
+EXTERN void dsp_addv(t_perfroutine f, int n, t_int *vec);
+EXTERN void pd_fft(float *buf, int npoints, int inverse);
+EXTERN int ilog2(int n);
+
+EXTERN void mayer_fht(float *fz, int n);
+EXTERN void mayer_fft(int n, float *real, float *imag);
+EXTERN void mayer_ifft(int n, float *real, float *imag);
+EXTERN void mayer_realfft(int n, float *real);
+EXTERN void mayer_realifft(int n, float *real);
+
+EXTERN float *cos_table;
+#define LOGCOSTABSIZE 9
+#define COSTABSIZE (1<<LOGCOSTABSIZE)
+
+EXTERN int canvas_suspend_dsp(void);
+EXTERN void canvas_resume_dsp(int oldstate);
+EXTERN void canvas_update_dsp(void);
+
+/* IOhannes { (up/downsampling) */
+typedef struct _resample
+{
+ int method; /* up/downsampling method ID */
+
+ t_int downsample; /* downsampling factor */
+ t_int upsample; /* upsampling factor */
+
+ t_float *s_vec; /* here we hold the resampled data */
+ int s_n;
+
+ t_float *coeffs; /* coefficients for filtering... */
+ int coefsize;
+
+ t_float *buffer; /* buffer for filtering */
+ int bufsize;
+} t_resample;
+
+EXTERN void resample_init(t_resample *x);
+EXTERN void resample_free(t_resample *x);
+
+EXTERN void resample_dsp(t_resample *x, t_sample *in, int insize, t_sample *out, int outsize, int method);
+EXTERN void resamplefrom_dsp(t_resample *x, t_sample *in, int insize, int outsize, int method);
+EXTERN void resampleto_dsp(t_resample *x, t_sample *out, int insize, int outsize, int method);
+/* } IOhannes */
+
+/* ----------------------- utility functions for signals -------------- */
+EXTERN float mtof(float);
+EXTERN float ftom(float);
+EXTERN float rmstodb(float);
+EXTERN float powtodb(float);
+EXTERN float dbtorms(float);
+EXTERN float dbtopow(float);
+
+EXTERN float q8_sqrt(float);
+EXTERN float q8_rsqrt(float);
+#ifndef N32
+EXTERN float qsqrt(float); /* old names kept for extern compatibility */
+EXTERN float qrsqrt(float);
+#endif
+/* --------------------- data --------------------------------- */
+
+ /* graphical arrays */
+EXTERN_STRUCT _garray;
+#define t_garray struct _garray
+
+EXTERN t_class *garray_class;
+EXTERN int garray_getfloatarray(t_garray *x, int *size, t_float **vec);
+EXTERN float garray_get(t_garray *x, t_symbol *s, t_int indx);
+EXTERN void garray_redraw(t_garray *x);
+EXTERN int garray_npoints(t_garray *x);
+EXTERN char *garray_vec(t_garray *x);
+EXTERN void garray_resize(t_garray *x, t_floatarg f);
+EXTERN void garray_usedindsp(t_garray *x);
+EXTERN void garray_setsaveit(t_garray *x, int saveit);
+EXTERN t_class *scalar_class;
+
+EXTERN t_float *value_get(t_symbol *s);
+EXTERN void value_release(t_symbol *s);
+
+/* ------- GUI interface - functions to send strings to TK --------- */
+EXTERN void sys_vgui(char *fmt, ...);
+EXTERN void sys_gui(char *s);
+
+EXTERN void gfxstub_new(t_pd *owner, void *key, const char *cmd);
+EXTERN void gfxstub_deleteforkey(void *key);
+
+/*------------- Max 0.26 compatibility --------------------*/
+
+/* the following reflects the new way classes are laid out, with the class
+ pointing to the messlist and not vice versa. Externs shouldn't feel it. */
+typedef t_class *t_externclass;
+
+EXTERN void c_extern(t_externclass *cls, t_newmethod newroutine,
+ t_method freeroutine, t_symbol *name, size_t size, int tiny, \
+ t_atomtype arg1, ...);
+EXTERN void c_addmess(t_method fn, t_symbol *sel, t_atomtype arg1, ...);
+
+#define t_getbytes getbytes
+#define t_freebytes freebytes
+#define t_resizebytes resizebytes
+#define typedmess pd_typedmess
+#define vmess pd_vmess
+
+#if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus)
+}
+#endif
diff --git a/extensions/xgui/xgui-lib/makefile b/extensions/xgui/xgui-lib/makefile
new file mode 100644
index 00000000..56b5000c
--- /dev/null
+++ b/extensions/xgui/xgui-lib/makefile
@@ -0,0 +1,86 @@
+current:
+ echo make pd_linux, pd_nt, pd_irix5, or pd_irix6
+
+clean: ; rm -f *.pd_linux *.o *.obj *.bak *.dll
+
+# ----------------------- NT -----------------------------
+
+pd_nt: number.dll concat.dll oname2l.dll \
+ a2s.dll recv2.dll send2.dll replace_selector.dll
+
+.SUFFIXES: .dll
+
+PDNTCFLAGS = /W3 /WX /DNT /DPD /nologo
+VC="C:\Program Files\Microsoft Visual Studio\Vc98"
+
+PDNTINCLUDE = /I. /I\tcl\include /I\pds\pd35-9\src /I$(VC)\include
+
+PDNTLDIR = $(VC)\lib
+PDNTLIB = $(PDNTLDIR)\libc.lib \
+ $(PDNTLDIR)\oldnames.lib \
+ $(PDNTLDIR)\kernel32.lib \
+ \pds\pd35-9\bin\pd.lib
+
+.c.dll:
+ cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c $*.c
+ link /dll /export:$*_setup $*.obj $(PDNTLIB)
+ del $*.obj
+ del $*.exp
+ del $*.lib
+ move /Y $*.dll ../../extra/
+
+# ----------------------- IRIX 5.x -----------------------
+
+pd_irix5: number.pd_irix5 concat.pd_irix5 oname2l.pd_irix5 \
+ a2s.pd_irix5 recv2.pd_irix5 send2.pd_irix5 replace_selector.pd_irix5
+
+.SUFFIXES: .pd_irix5
+
+SGICFLAGS5 = -o32 -DPD -DUNIX -DIRIX -O2
+
+
+SGIINCLUDE = -I../../src/
+
+.c.pd_irix5:
+ cc $(SGICFLAGS5) $(SGIINCLUDE) -o $*.o -c $*.c
+ ld -elf -shared -rdata_shared -o $*.pd_irix5 $*.o
+ rm $*.o
+
+# ----------------------- IRIX 6.x -----------------------
+
+pd_irix6: number.pd_irix6 concat.pd_irix6 oname2l.pd_irix6 \
+ a2s.pd_irix6 recv2.pd_irix6 send2.pd_irix6 replace_selector.pd_irix6
+
+.SUFFIXES: .pd_irix6
+
+SGICFLAGS6 = -n32 -DPD -DUNIX -DIRIX -DN32 -woff 1080,1064,1185 \
+ -OPT:roundoff=3 -OPT:IEEE_arithmetic=3 -OPT:cray_ivdep=true \
+ -Ofast=ip32
+
+.c.pd_irix6:
+ cc $(SGICFLAGS6) $(SGIINCLUDE) -o $*.o -c $*.c
+ ld -IPA -n32 -shared -rdata_shared -o $*.pd_irix6 $*.o
+ rm $*.o
+
+# ----------------------- LINUX i386 -----------------------
+
+pd_linux: number.pd_linux concat.pd_linux oname2l.pd_linux \
+ a2s.pd_linux recv2.pd_linux send2.pd_linux replace_selector.pd_linux
+
+.SUFFIXES: .pd_linux
+
+LINUXCFLAGS = -DPD -O2 -funroll-loops -fomit-frame-pointer \
+ -Wall -W -Wshadow -Wstrict-prototypes -Werror \
+ -Wno-unused -Wno-parentheses -Wno-switch
+
+LINUXINCLUDE = -I../../src
+
+.c.pd_linux:
+ cc $(LINUXCFLAGS) $(LINUXINCLUDE) -o $*.o -c $*.c
+ ld -export_dynamic -shared -o $*.pd_linux $*.o -lc -lm
+ strip --strip-unneeded $*.pd_linux
+ rm $*.o
+ cp $*.pd_linux ../bin/
+ mv $*.pd_linux ../../extra/
+
+
diff --git a/extensions/xgui/xgui-lib/message.c b/extensions/xgui/xgui-lib/message.c
new file mode 100644
index 00000000..57edc16b
--- /dev/null
+++ b/extensions/xgui/xgui-lib/message.c
@@ -0,0 +1,116 @@
+/* Copyright (c) 2002 Damien HENRY.
+* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
+
+/* message : NOT WORKING YET */
+
+
+/*#include "m_pd.h"*/
+
+t_class *message_class ;
+typedef struct s_message
+{ t_pd o_pd;
+ int o_refcount;
+ t_message ??? o_message;
+} t_message;
+
+t_class *pd_obj_message_class ;
+typedef struct s_pd_obj_message
+{
+ t_object x_obj;
+ t_symbol *x_sym;
+ t_float *x_message;
+} t_pd_obj_message;
+
+t_float *message_get(t_symbol *s)
+{ t_message *num = (t_message *)pd_findbyclass(s,message_class);
+ if (!num) {
+ num = (t_message *)pd_new(message_class);
+ num->o_message = 0;
+ num->o_refcount = 0;
+ pd_bind(&num->o_pd, s);
+ }
+ num->o_refcount++;
+ return (&num->o_message);
+}
+
+void message_release(t_symbol *s)
+{ t_message *num = (t_message *)pd_findbyclass(s,message_class);
+ if (num) {
+ if (!--num->o_refcount) {
+ pd_unbind(&num->o_pd, s);
+ pd_free(&num->o_pd);
+ }
+ }
+ else bug("value_release");
+}
+
+void message_help(t_seg *x)
+{
+ post(" ");
+ post("message v001");
+ post("+ symbol list :");
+ post("++ help : this help !!!");
+ post("++ float : set the float ");
+ post("++ bang : send the message");
+ post(" ");
+}
+
+void message_float(t_pd_obj_message *x, t_floatarg f)
+{ *x->x_message = f ;}
+
+void message_q_x(t_pd_obj_message *x)
+{
+ t_atom my_atom ;
+ t_atom *my_pointer = &my_atom;
+ SETFLOAT(my_pointer, *x->x_message);
+ outlet_anything(x->x_obj.ob_outlet, gensym("x="), 1,my_pointer);
+}
+
+void message_bang(t_pd_obj_message *x)
+{ outlet_float(x->x_obj.ob_outlet, *x->x_message);}
+
+void message_get_(t_pd_obj_message *x,t_symbol *s)
+{*x->x_message = *message_get(s);}
+
+void message_set_(t_pd_obj_message *x,t_symbol *s)
+{ x->x_message = message_get(s);}
+
+void message_to(t_pd_obj_message *x,t_floatarg f1,t_floatarg f2)
+{ post("not implemented yet"); }
+
+void message_free(t_pd_obj_message *x){ message_release(x->x_sym); }
+
+void *message_new(t_symbol *s,t_floatarg f)
+{
+ t_pd_obj_message *x = (t_pd_obj_message *)pd_new(pd_obj_message_class);
+ x->x_sym = s;
+ x->x_message = message_get(s);
+ outlet_new(&x->x_obj, &s_float);
+ return (void *)x;
+}
+
+void message_setup(void)
+{
+ pd_obj_message_class = class_new(gensym("message"), (t_newmethod)message_new,
+ (t_method)message_free, sizeof(t_pd_obj_message), 0,A_DEFSYMBOL, 0);
+ class_addcreator((t_newmethod)message_new, gensym("x"), A_DEFSYM, 0);
+ class_addfloat(pd_obj_message_class,message_float);
+ class_addbang(pd_obj_message_class,message_bang);
+ class_addmethod(pd_obj_message_class, (t_method)message_float, gensym("!x"), A_FLOAT, 0);
+ class_addmethod(pd_obj_message_class, (t_method)message_q_x, gensym("?x"), 0);
+ class_addmethod(pd_obj_message_class, (t_method)message_add, gensym("add"),A_FLOAT, 0);
+ class_addmethod(pd_obj_message_class, (t_method)message_sub, gensym("sub"),A_FLOAT, 0);
+ class_addmethod(pd_obj_message_class, (t_method)message_mult, gensym("mult"),A_FLOAT, 0);
+ class_addmethod(pd_obj_message_class, (t_method)message_div, gensym("div"),A_FLOAT, 0);
+ class_addmethod(pd_obj_message_class, (t_method)message_inv, gensym("inv"),0);
+ class_addmethod(pd_obj_message_class, (t_method)message_if, gensym("if"),A_DEFSYMBOL,A_FLOAT,A_FLOAT,0);
+ class_addmethod(pd_obj_message_class, (t_method)message_to, gensym("to"),A_FLOAT,A_FLOAT, 0);
+ class_addmethod(pd_obj_message_class, (t_method)message_set_, gensym("set"),A_DEFSYMBOL, 0);
+ class_addmethod(pd_obj_message_class, (t_method)message_get_, gensym("get"),A_DEFSYMBOL, 0);
+ class_addmethod(pd_obj_message_class, (t_method)message_help, gensym("help"), 0);
+ class_sethelpsymbol(pd_obj_message_class, gensym("xgui/help_message"));
+ /* Declare the class that will contain the value */
+ message_class = class_new(gensym("message"), 0, 0, sizeof(t_message), CLASS_PD, 0);
+
+}
diff --git a/extensions/xgui/xgui-lib/number.c b/extensions/xgui/xgui-lib/number.c
new file mode 100644
index 00000000..f30d10da
--- /dev/null
+++ b/extensions/xgui/xgui-lib/number.c
@@ -0,0 +1,249 @@
+/* Copyright (c) 2002 Damien HENRY.
+* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
+
+/* number NOT FINISHED BUT FUNCTIONAL*/
+
+#include "m_pd.h"
+
+t_class *number_class ;
+typedef struct s_number
+{
+ t_pd o_pd;
+ t_int o_refcount;
+ t_float number;
+ t_float b_min;
+ t_float b_max;
+ t_int bound;
+} t_number;
+
+t_class *pd_obj_number_class ;
+typedef struct s_pd_obj_number
+{
+ t_object x_obj;
+ t_symbol *x_sym;
+ t_number *x_num;
+ t_float *x_number;
+ t_float *b_min;
+ t_float *b_max;
+ t_int *bound;
+ t_float min;
+ t_float max;
+ t_float out_min;
+ t_float out_max;
+} t_pd_obj_number;
+
+t_number *number_get(t_symbol *s)
+{
+ t_number *num = (t_number *)pd_findbyclass(s,number_class);
+ if (!num) {
+ num = (t_number *)pd_new(number_class);
+ num->number = 0;
+ num->bound = 0;
+ num->b_min = 0;
+ num->b_max = 0;
+ num->o_refcount = 0;
+ pd_bind(&num->o_pd, s);
+ }
+ num->o_refcount++;
+ return (num);
+}
+
+void number_release(t_symbol *s)
+{ t_number *num = (t_number *)pd_findbyclass(s,number_class);
+ if (num) {
+ if (!--num->o_refcount) {
+ pd_unbind(&num->o_pd, s);
+ pd_free(&num->o_pd);
+ }
+ }
+ else bug("value_release");
+}
+
+void number_check_bound(t_pd_obj_number *x)
+{
+ if (*x->bound != 0)
+ {
+ if (*x->x_number>*x->b_max) *x->x_number = *x->b_max ;
+ if (*x->x_number<*x->b_min) *x->x_number = *x->b_min ;
+ }
+}
+
+void number_help(t_pd_obj_number *x)
+{
+ post(" ");
+ post("number v001");
+ post("+ use : number $variable_name");
+ post("+ symbol list :");
+ post("+l+ help : this help !!!");
+ post("+g+ float $f: set the value to $f ");
+ post("+l+ bang : send the number");
+ post("+g+ !x $f : set the value to $f");
+ post("+l+ ?x : ask for the value the number");
+ post("+g+ if $condition $f1 $f2 : ex.: if => 10 0");
+ post("+l+ do_if $condition $value $selector : ex.: do_if => 10 test");
+ post("+g+ add,sub,mult,div,inv : do some basic calculation");
+ post("+l+ get : get a value from another number");
+ post("+l+ set : set the name of the number");
+ post("+l+ subspace $internal1 $internal2 $external1 $external1");
+ post("+gl?+ round $round_value");
+ post("+g+ bound $min $max");
+ post("+l+ post");
+ post(" ");
+}
+
+void number_post(t_pd_obj_number *x)
+{
+ startpost("%s",*x->x_sym);
+ postfloat(*x->x_number);
+ endpost();
+}
+
+void number_x_equal(t_pd_obj_number *x, t_floatarg f)
+{
+ *x->x_number = f ;
+ number_check_bound(x);
+}
+void number_q_x(t_pd_obj_number *x)
+{
+ t_atom my_atom ;
+ t_atom *my_pointer = &my_atom;
+ SETFLOAT(my_pointer, *x->x_number);
+ outlet_anything(x->x_obj.ob_outlet, gensym("x="), 1,my_pointer);
+}
+
+void number_float(t_pd_obj_number *x, t_floatarg f)
+{
+ *x->x_number = (f - x->out_min)*(x->max-x->min)/(x->out_max-x->out_min)+x->min ;
+ number_check_bound(x);
+}
+
+void number_bang(t_pd_obj_number *x)
+{ t_float temp ;
+ temp = (*x->x_number-x->min)/(x->max-x->min)*(x->out_max-x->out_min)+x->out_min;
+ outlet_float(x->x_obj.ob_outlet,temp) ;
+}
+
+void number_bound(t_pd_obj_number *x, t_floatarg fmin, t_floatarg fmax)
+{
+ *x->bound = 1 ;
+ *x->b_min = fmin;
+ *x->b_max = fmax;
+}
+
+void number_add(t_pd_obj_number *x, t_floatarg f)
+{
+ *(x->x_number) += f ;
+ number_check_bound(x);
+}
+
+void number_sub(t_pd_obj_number *x, t_floatarg f)
+{
+ *(x->x_number) -= f ;
+ number_check_bound(x);
+}
+
+void number_mult(t_pd_obj_number *x, t_floatarg f)
+{
+ *(x->x_number) *= f ;
+ number_check_bound(x);
+}
+
+void number_div(t_pd_obj_number *x, t_floatarg f)
+{
+ *(x->x_number) /= f ;
+ number_check_bound(x);
+}
+
+void number_inv(t_pd_obj_number *x)
+{
+ *x->x_number = 1 / *(x->x_number) ;
+ number_check_bound(x);
+}
+
+void number_subspace(t_pd_obj_number *x, t_floatarg f1, t_floatarg f2, t_floatarg f3, t_floatarg f4)
+{
+ if ((f1==f2)|(f3==f4))
+ {
+ x->min = 0 ; x->max = 1 ; x->out_min = 0 ; x->out_max = 1 ;
+ post("%s ERROR wrong Subspace",*x->x_sym);
+ }
+ else
+ {
+ x->min = f1 ; x->max = f2 ; x->out_min = f3 ; x->out_max = f4 ;
+ }
+}
+
+void number_if(t_pd_obj_number *x,t_symbol *s,t_floatarg f1,t_floatarg f2)
+{
+ if (s == gensym("==")) {if(*x->x_number == f1) *x->x_number = f2 ;}
+ if (s == gensym("!=")) {if(*x->x_number != f1) *x->x_number = f2 ;}
+ if (s == gensym(">")) {if(*x->x_number > f1) *x->x_number = f2 ;}
+ if (s == gensym(">=")) {if(*x->x_number >= f1) *x->x_number = f2 ;}
+ if (s == gensym("<")) {if(*x->x_number < f1) *x->x_number = f2 ;}
+ if (s == gensym("<=")) {if(*x->x_number <= f1) *x->x_number = f2 ;}
+}
+
+void number_do_if(t_pd_obj_number *x,t_symbol *cond,t_floatarg f1,t_symbol *sel)
+{
+ t_atom my_atom ;
+ t_atom *my_pointer = &my_atom;
+ SETFLOAT(my_pointer, *x->x_number);
+ post("t1 %f",f1);
+ if (cond == gensym("==")) {if(*x->x_number == f1) outlet_anything(x->x_obj.ob_outlet, sel, 1,my_pointer);}
+ if (cond == gensym("!=")) {if(*x->x_number != f1) outlet_anything(x->x_obj.ob_outlet, sel, 1,my_pointer);}
+ if (cond == gensym(">")) {if(*x->x_number > f1) outlet_anything(x->x_obj.ob_outlet, sel, 1,my_pointer);}
+ if (cond == gensym(">=")) {if(*x->x_number >= f1) post("test %f",f1);}
+ if (cond == gensym("<")) {if(*x->x_number < f1) outlet_anything(x->x_obj.ob_outlet, sel, 1,my_pointer);}
+ if (cond == gensym("<=")) {if(*x->x_number <= f1) outlet_anything(x->x_obj.ob_outlet, sel, 1,my_pointer);}
+}
+
+void number_get_(t_pd_obj_number *x,t_symbol *s)
+{*x->x_num = *number_get(s);}
+
+void number_set_(t_pd_obj_number *x,t_symbol *s)
+{ x->x_num = number_get(s);}
+
+void number_free(t_pd_obj_number *x){ number_release(x->x_sym); }
+
+void *number_new(t_symbol *s)
+{
+ t_pd_obj_number *x = (t_pd_obj_number *)pd_new(pd_obj_number_class);
+ x->x_sym = s;
+ x->x_num = number_get(s);
+ x->x_number=&(x->x_num->number) ;
+ x->min = 0 ; x->max = 1 ; x->out_min = 0 ; x->out_max = 1 ;
+ x->b_min =&x->x_num->b_min ;
+ x->b_max =&x->x_num->b_max ;
+ x->bound =&x->x_num->bound ;
+ outlet_new(&x->x_obj, &s_float);
+ return (void *)x;
+}
+
+void number_setup(void)
+{
+ pd_obj_number_class = class_new(gensym("number"), (t_newmethod)number_new,
+ (t_method)number_free, sizeof(t_pd_obj_number), 0,A_DEFSYMBOL, 0);
+ class_addcreator((t_newmethod)number_new, gensym("x"), A_DEFSYM, 0);
+ class_addfloat(pd_obj_number_class,number_float);
+ class_addbang(pd_obj_number_class,number_bang);
+ class_addmethod(pd_obj_number_class, (t_method)number_x_equal, gensym("!x"), A_FLOAT, 0);
+ class_addmethod(pd_obj_number_class, (t_method)number_q_x, gensym("?x"), 0);
+ class_addmethod(pd_obj_number_class, (t_method)number_post, gensym("post"), 0);
+ class_addmethod(pd_obj_number_class, (t_method)number_add, gensym("add"),A_FLOAT, 0);
+ class_addmethod(pd_obj_number_class, (t_method)number_sub, gensym("sub"),A_FLOAT, 0);
+ class_addmethod(pd_obj_number_class, (t_method)number_mult, gensym("mult"),A_FLOAT, 0);
+ class_addmethod(pd_obj_number_class, (t_method)number_div, gensym("div"),A_FLOAT, 0);
+ class_addmethod(pd_obj_number_class, (t_method)number_inv, gensym("inv"),0);
+ class_addmethod(pd_obj_number_class, (t_method)number_if, gensym("if"),A_DEFSYMBOL,A_FLOAT,A_FLOAT,0);
+ class_addmethod(pd_obj_number_class, (t_method)number_set_, gensym("set"),A_DEFSYMBOL, 0);
+ class_addmethod(pd_obj_number_class, (t_method)number_get_, gensym("get"),A_DEFSYMBOL, 0);
+ class_addmethod(pd_obj_number_class, (t_method)number_do_if, gensym("do_if"),A_DEFSYMBOL,A_FLOAT,A_DEFSYMBOL,0);
+ class_addmethod(pd_obj_number_class, (t_method)number_subspace, gensym("subspace"),A_FLOAT,A_FLOAT,A_FLOAT,A_FLOAT, 0);
+ class_addmethod(pd_obj_number_class, (t_method)number_bound, gensym("bound"),A_FLOAT,A_FLOAT, 0);
+ class_addmethod(pd_obj_number_class, (t_method)number_help, gensym("help"), 0);
+ class_sethelpsymbol(pd_obj_number_class, gensym("xgui/help_number"));
+ /* Declare the class that will contain the value */
+ number_class = class_new(gensym("number"), 0, 0, sizeof(t_number), CLASS_PD, 0);
+
+}
diff --git a/extensions/xgui/xgui-lib/oname2l.c b/extensions/xgui/xgui-lib/oname2l.c
new file mode 100644
index 00000000..1b46e8a3
--- /dev/null
+++ b/extensions/xgui/xgui-lib/oname2l.c
@@ -0,0 +1,73 @@
+/* Copyright (c) 2002 Damien HENRY.
+* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
+
+/* oname2l */
+
+#include "m_pd.h"
+#include <string.h>
+
+typedef struct s_pd_obj_oname2l
+{
+ t_object x_obj;
+} t_pd_obj_oname2l;
+
+
+void oname2l_help(t_pd_obj_oname2l *x)
+{
+ post(" ");
+ post("oname2l v001");
+ post("+ selector list :");
+ post("++ help : this help !!!");
+ post("++ symbol : will return a list of symbol");
+ post(" ");
+}
+
+void oname2l_symbol(t_pd_obj_oname2l *x,t_symbol *s)
+{
+ int i,j,l,n=1,k=0;
+ t_atom *my_message ;
+ char *s2split ;
+ t_symbol *a_symbol ;
+ t_atom *an_atom ;
+ for (l=0;s->s_name[l]!=0;l++)
+ {
+ if (s->s_name[l]=='/') {n++;} ;
+ }
+ s2split = (char *)getbytes(l+1) ;
+ memcpy(s2split, s->s_name, l+1) ;
+ my_message = (t_atom *)getbytes(n * sizeof(t_atom));
+ an_atom = my_message ;
+ for (i=0;i<n;i++)
+ {
+ for (j=k;(s2split[j]!='/')&&(j<l);j++) {} ;
+ s2split[j]=0 ;
+ a_symbol = gensym(&(s2split[k]));
+ SETSYMBOL(an_atom,a_symbol);
+ an_atom++;
+ k=j+1;
+ }
+ outlet_anything(x->x_obj.ob_outlet,gensym("list"), n,my_message);
+ freebytes(my_message, n * sizeof(t_atom));
+ freebytes(s2split, l );
+}
+
+void oname2l_free(void) { }
+
+t_class *oname2l_class;
+
+void *oname2l_new(void)
+{
+ t_pd_obj_oname2l *x = (t_pd_obj_oname2l *)pd_new(oname2l_class);
+ outlet_new(&x->x_obj, &s_float);
+ return (void *)x;
+}
+
+void oname2l_setup(void)
+{
+ oname2l_class = class_new(gensym("oname2l"), (t_newmethod)oname2l_new,(t_method)oname2l_free, sizeof( t_pd_obj_oname2l), 0,A_DEFSYMBOL, 0);
+ class_addsymbol(oname2l_class, (t_method)oname2l_symbol);
+ class_addmethod(oname2l_class, (t_method)oname2l_help, gensym("help"), 0);
+ class_sethelpsymbol(oname2l_class, gensym("xgui/help_oname2l"));
+}
+
diff --git a/extensions/xgui/xgui-lib/recv2.c b/extensions/xgui/xgui-lib/recv2.c
new file mode 100644
index 00000000..f49e374c
--- /dev/null
+++ b/extensions/xgui/xgui-lib/recv2.c
@@ -0,0 +1,80 @@
+/* Copyright (c) 2002 Damien HENRY.
+* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
+
+/* recv2 */
+
+#include "m_pd.h"
+
+static t_class *recv2_class;
+
+typedef struct _recv2
+{
+ t_object x_obj;
+ t_symbol *x_sym;
+} t_recv2;
+
+static void recv2_bang(t_recv2 *x)
+{
+ outlet_bang(x->x_obj.ob_outlet);
+}
+
+static void recv2_float(t_recv2 *x, t_float f)
+{
+ outlet_float(x->x_obj.ob_outlet, f);
+}
+
+static void recv2_symbol(t_recv2 *x, t_symbol *s)
+{
+ outlet_symbol(x->x_obj.ob_outlet, s);
+}
+
+static void recv2_pointer(t_recv2 *x, t_gpointer *gp)
+{
+ outlet_pointer(x->x_obj.ob_outlet, gp);
+}
+
+static void recv2_list(t_recv2 *x, t_symbol *s, int argc, t_atom *argv)
+{
+ outlet_list(x->x_obj.ob_outlet, s, argc, argv);
+}
+
+static void recv2_anything(t_recv2 *x, t_symbol *s, int argc, t_atom *argv)
+{
+ outlet_anything(x->x_obj.ob_outlet, s, argc, argv);
+}
+
+static void recv2_set(t_recv2 *x, t_symbol *s)
+{
+ pd_unbind(&x->x_obj.ob_pd, x->x_sym);
+ x->x_sym = s;
+ pd_bind(&x->x_obj.ob_pd, s);
+}
+
+static void *recv2_new(t_symbol *s)
+{
+ t_recv2 *x = (t_recv2 *)pd_new(recv2_class);
+ x->x_sym = s;
+ pd_bind(&x->x_obj.ob_pd, s);
+ outlet_new(&x->x_obj, 0);
+ return (x);
+}
+
+static void recv2_free(t_recv2 *x)
+{
+ pd_unbind(&x->x_obj.ob_pd, x->x_sym);
+}
+
+void recv2_setup(void)
+{
+ recv2_class = class_new(gensym("recv2"), (t_newmethod)recv2_new,
+ (t_method)recv2_free, sizeof(t_recv2), 0, A_DEFSYM, 0);
+ class_addbang(recv2_class, recv2_bang);
+ class_addfloat(recv2_class, (t_method)recv2_float);
+ class_addsymbol(recv2_class, recv2_symbol);
+ class_addpointer(recv2_class, recv2_pointer);
+ class_addlist(recv2_class, recv2_list);
+ class_addanything(recv2_class, recv2_anything);
+ class_addmethod(recv2_class, (t_method)recv2_set, gensym("@"),A_DEFSYMBOL, 0);
+ class_sethelpsymbol(recv2_class, gensym("xgui/help_recv2"));
+}
diff --git a/extensions/xgui/xgui-lib/replace_selector.c b/extensions/xgui/xgui-lib/replace_selector.c
new file mode 100644
index 00000000..3c78aa6b
--- /dev/null
+++ b/extensions/xgui/xgui-lib/replace_selector.c
@@ -0,0 +1,60 @@
+/* Copyright (c) 2002 Damien HENRY.
+* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
+
+/* code for replace_selector pd class */
+
+#include "m_pd.h"
+#include <string.h>
+
+typedef struct s_pd_obj_replace_selector
+{
+ t_object x_obj;
+ t_symbol *selector ;
+} t_pd_obj_replace_selector;
+
+
+void replace_selector_help(t_pd_obj_replace_selector *x)
+{
+ post(" ");
+ post("replace_selector v001");
+ post("+ selector list :");
+ post("++ help : this help !!!");
+ post("++ anything : will return anything with a diferent selector");
+}
+
+void replace_selector_any_method(t_pd_obj_replace_selector *x,t_symbol *s, int argc, t_atom *argv)
+{
+ t_atom *my_message = (t_atom *)getbytes(argc * sizeof(t_atom));
+ memcpy(my_message, argv, argc * sizeof(t_atom));
+ outlet_anything(x->x_obj.ob_outlet,x->selector, argc,my_message);
+ freebytes(my_message, argc * sizeof(t_atom));
+}
+
+void replace_selector_set2add(t_pd_obj_replace_selector *x, t_symbol *s)
+{
+ x->selector = s ;
+}
+
+void replace_selector_free(void) { }
+
+t_class *replace_selector_class;
+
+void *replace_selector_new(t_symbol *s)
+{
+ t_pd_obj_replace_selector *x = (t_pd_obj_replace_selector *)pd_new(replace_selector_class);
+ x->selector = s;
+ outlet_new(&x->x_obj, &s_float);
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("symbol"), gensym("s2add"));
+ return (void *)x;
+}
+
+void replace_selector_setup(void)
+{
+ replace_selector_class = class_new(gensym("replace_selector"), (t_newmethod)replace_selector_new,(t_method)replace_selector_free, sizeof( t_pd_obj_replace_selector), 0,A_DEFSYMBOL, 0);
+ class_addanything(replace_selector_class, replace_selector_any_method);
+ class_addmethod(replace_selector_class, (t_method)replace_selector_set2add, gensym("s2add"), A_SYMBOL, 0);
+ class_addmethod(replace_selector_class, (t_method)replace_selector_help, gensym("help"), 0);
+ class_sethelpsymbol(replace_selector_class, gensym("xgui/help_replace_selector"));
+}
+
diff --git a/extensions/xgui/xgui-lib/seg.c b/extensions/xgui/xgui-lib/seg.c
new file mode 100644
index 00000000..2f1a9bed
--- /dev/null
+++ b/extensions/xgui/xgui-lib/seg.c
@@ -0,0 +1,96 @@
+/* Copyright (c) 2002 Damien HENRY.
+* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
+
+/* code for seg pd class NOT WORKING YET*/
+
+#include "m_pd.h"
+#include "g_canvas.h"
+#include "t_tk.h"
+
+typedef struct s_pd_obj_seg
+{
+ t_object t_ob;
+ t_symbol *seg_name;
+ t_float *posx;
+ t_float *posy;
+ t_float *x1;
+ t_float *y1;
+ t_float *x2;
+ t_float *y2;
+ t_float *width;
+ t_symbol *color;
+} t_seg;
+
+typedef struct s_seg
+{
+ t_object t_ob;
+ t_symbol* seg_name;
+ t_float posx;
+ t_float posy;
+ t_float x1;
+ t_float y1;
+ t_float x2;
+ t_float y2;
+ t_float width;
+ t_symbol color;
+} t_seg;
+
+void seg_help(t_seg *x)
+{
+ post(" ");
+ post("seg v001");
+ post("+ symbol list :");
+ post("++ help : this help !!!");
+ post(" ");
+}
+
+void seg_width(t_seg *x, t_floatarg f)
+{
+ post("seg: width %f",f);
+ t_atom my_atom ;
+ t_atom *my_pointer = &my_atom;
+ SETFLOAT(my_pointer, *f);
+ outlet_anything(x->x_obj.ob_outlet, gensym("!width"), 1,my_pointer);
+}
+
+
+void seg_pos(t_seg *x, t_floatarg f1, t_floatarg f2)
+{
+ outlet_float(x->x_outlet1, (t_float)f1+(t_float)f2);
+}
+
+void seg_free(void)
+{
+ post("seg_free");
+}
+
+t_class *seg_class;
+
+void *seg_new(void)
+{
+ t_seg *x = (t_seg *)pd_new(seg_class);
+ post("seg created");
+
+ sys_vgui(".x%x.c create oval 10 10 20 20\n",glist_getcanvas(glist),
+ x->x_obj.te_xpos+1,x->x_obj.te_ypos+1,
+ x->x_obj.te_xpos + x->x_width -1,
+ x->x_obj.te_ypos + x->x_height -1,x->x_color->s_name,x);
+ x->posx = 0; x->posy = 0;
+ x->x1 = 10; x->y1 = 10;
+ x->x1 = 20; x->y1 = 20;
+ x->x_outlet1 = outlet_new(&x->t_ob, &s_float);
+
+ return (void *)x;
+}
+
+void seg_setup(void)
+{
+ post("seg_setup");
+ seg_class = class_new(gensym("seg"), (t_newmethod)seg_new,(t_method)seg_free, sizeof(t_seg), 0, A_GIMME, 0);
+ class_addmethod(seg_class, (t_method)seg_width, gensym("width"),A_FLOAT, 0);
+ class_addmethod(seg_class, (t_method)seg_pos, gensym("pos"),A_FLOAT,A_FLOAT, 0);
+ class_addmethod(seg_class, (t_method)seg_help, gensym("help"), 0);
+ class_sethelpsymbol(seg_class, gensym("xgui/help_seg"));
+}
+
diff --git a/extensions/xgui/xgui-lib/send2.c b/extensions/xgui/xgui-lib/send2.c
new file mode 100644
index 00000000..a58b87c6
--- /dev/null
+++ b/extensions/xgui/xgui-lib/send2.c
@@ -0,0 +1,67 @@
+/* Copyright (c) 2002 Damien HENRY.
+* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
+
+/* ------------------------ based on remote --------------------------------- */
+/* */
+/* Send data to receive obejct <name>. */
+/* Written by Olaf Matthes (olaf.matthes@gmx.de) */
+
+#include "m_pd.h"
+
+/*dh :
+#include <string.h>
+#include <stdio.h> */
+
+#define MAX_REC 64 /* maximum number of receive objects */
+#define MAX_ARG 32 /* maximum number of arguments to pass on */
+
+static t_class *send2_class;
+
+/*dh: I've removed the static *char */
+
+typedef struct _send2
+{
+ t_object x_obj;
+} t_send2;
+
+ /* send 'anything' to receiver */
+static void send2_anything(t_send2 *x, t_symbol *s, int argc, t_atom *argv)
+{
+ int i;
+ t_atom av[MAX_ARG]; /* the 'new' t_atom without first element */
+ t_int ac = argc - 1; /* the 'new' number of arguments */
+
+ if(argc < 1) /* need <name> <data> */
+ {
+ post("send2: too few arguments!");
+ return;
+ }
+ if(ac > MAX_ARG)
+ {
+ post("send2: too many arguments!");
+ return;
+ }
+
+ for(i = 1; i < argc; i++)
+ {
+ av[i - 1] = argv[i]; /* just copy, don't care about types */
+ }
+ /* send only argument-part to receivers */
+ if (s->s_thing) pd_forwardmess(s->s_thing, argc, argv);
+}
+
+static void *send2_new(void)
+{
+ t_send2 *x = (t_send2 *)pd_new(send2_class);
+ /*dh: I've removed the post here */
+ return (x);
+}
+
+void send2_setup(void)
+{
+ send2_class = class_new(gensym("send2"), (t_newmethod)send2_new, 0,
+ sizeof(t_send2), 0, 0);
+ class_addanything(send2_class, send2_anything);
+ class_sethelpsymbol(send2_class, gensym("xgui/help_send2.pd"));
+}
diff --git a/extensions/xgui/xgui-lib/test_xgui_lib.pd b/extensions/xgui/xgui-lib/test_xgui_lib.pd
new file mode 100644
index 00000000..dc280859
--- /dev/null
+++ b/extensions/xgui/xgui-lib/test_xgui_lib.pd
@@ -0,0 +1,134 @@
+#N canvas 30 89 933 636 10;
+#X obj 60 123 seg;
+#X msg 92 114 width \$1;
+#X floatatom 92 91 5 0 0;
+#X obj 60 146 print seg;
+#X msg 22 91 pos 11 13;
+#X floatatom 29 58 5 0 0;
+#X msg 128 233 help;
+#X msg 89 10 pos 1 13;
+#X floatatom 235 93 5 0 0;
+#X msg 235 70 bang;
+#X msg 324 88 mult 2 \, bang;
+#X msg 324 134 sub 1 \, bang;
+#X msg 324 157 div 2 \, bang;
+#X msg 324 111 inv \, bang;
+#X msg 324 65 add 1 \, bang;
+#X msg 421 68 add 1 \, if >= 10 0 \, bang;
+#X msg 422 128 \$1 \, if < 0 0 \, if >= 10 10 \, bang;
+#X floatatom 422 105 5 0 0;
+#X msg 235 24 help;
+#X floatatom 324 19 5 0 0;
+#X msg 324 42 !x \$1 \, ?x;
+#X floatatom 422 151 5 0 0;
+#X floatatom 425 266 5 0 0;
+#X msg 425 289 !x \$1 \, ?x;
+#X msg 498 270 bang;
+#X obj 235 210 number my_first_number;
+#X msg 565 241 set my_first_number;
+#X obj 425 312 number my_second_number;
+#X msg 565 264 get my_first_number \, bang;
+#X floatatom 422 220 5 0 0;
+#X msg 251 273 do_if => 10 ok;
+#X obj 244 241 print;
+#X obj 422 197 x my_first_number;
+#X msg 235 47 post;
+#X msg 643 211 bound 0;
+#X obj 425 335 print;
+#X msg 422 174 \$1 \, bang;
+#X msg 575 166 subspace 0 1 100 10;
+#X msg 564 202 bound 1 10;
+#X msg 381 20 bound 1 10;
+#X obj 41 351 concat test;
+#X obj 40 381 print;
+#X msg 33 274 1 2 3;
+#X floatatom 93 257 5 0 0;
+#X symbolatom 12 244 10 0 0;
+#X msg 75 306 bonjour truc et bidule;
+#X msg 148 274 symbol alors;
+#X obj 485 538 oname2l;
+#X obj 486 574 print on2l;
+#X msg 540 537 help;
+#X msg 485 510 symbol */test1/test2;
+#X obj 308 540 a2s;
+#X msg 308 518 list * / test / test;
+#X obj 309 562 print a2s;
+#X msg 306 492 list test 1 2 3;
+#X obj 523 397 print;
+#X obj 525 372 recv2 test;
+#X obj 614 400 send test;
+#X msg 617 371 foo;
+#X msg 528 350 test?;
+#X msg 586 336 @ truc;
+#X msg 680 376 test;
+#X obj 685 402 send truc;
+#X msg 637 336 @ test;
+#X msg 161 443 help;
+#X obj 73 591 print;
+#X msg 66 484 1 2 3;
+#X floatatom 126 467 5 0 0;
+#X symbolatom 45 454 10 0 0;
+#X msg 108 516 bonjour truc et bidule;
+#X msg 181 484 symbol alors;
+#X obj 74 561 replace_selector test;
+#X obj 799 411 send2;
+#X msg 819 363 test 2;
+#X msg 756 358 truc 1;
+#X connect 2 0 1 0;
+#X connect 6 0 40 0;
+#X connect 8 0 25 0;
+#X connect 9 0 25 0;
+#X connect 10 0 25 0;
+#X connect 11 0 25 0;
+#X connect 12 0 25 0;
+#X connect 13 0 25 0;
+#X connect 14 0 25 0;
+#X connect 15 0 25 0;
+#X connect 16 0 25 0;
+#X connect 17 0 16 0;
+#X connect 18 0 25 0;
+#X connect 19 0 20 0;
+#X connect 20 0 25 0;
+#X connect 21 0 36 0;
+#X connect 22 0 23 0;
+#X connect 23 0 27 0;
+#X connect 24 0 27 0;
+#X connect 25 0 31 0;
+#X connect 26 0 27 0;
+#X connect 27 0 35 0;
+#X connect 28 0 27 0;
+#X connect 30 0 25 0;
+#X connect 32 0 29 0;
+#X connect 33 0 25 0;
+#X connect 34 0 32 0;
+#X connect 36 0 32 0;
+#X connect 37 0 32 0;
+#X connect 38 0 32 0;
+#X connect 39 0 25 0;
+#X connect 40 0 41 0;
+#X connect 42 0 40 0;
+#X connect 43 0 40 0;
+#X connect 44 0 40 0;
+#X connect 45 0 40 0;
+#X connect 46 0 40 1;
+#X connect 47 0 48 0;
+#X connect 49 0 47 0;
+#X connect 50 0 47 0;
+#X connect 51 0 53 0;
+#X connect 52 0 51 0;
+#X connect 54 0 51 0;
+#X connect 56 0 55 0;
+#X connect 58 0 57 0;
+#X connect 59 0 56 0;
+#X connect 60 0 56 0;
+#X connect 61 0 62 0;
+#X connect 63 0 62 0;
+#X connect 64 0 71 0;
+#X connect 66 0 71 0;
+#X connect 67 0 71 0;
+#X connect 68 0 71 0;
+#X connect 69 0 71 0;
+#X connect 70 0 71 1;
+#X connect 71 0 65 0;
+#X connect 73 0 72 0;
+#X connect 74 0 72 0;
diff --git a/extensions/xgui/xgui-lib/try.sh b/extensions/xgui/xgui-lib/try.sh
new file mode 100644
index 00000000..707f6bab
--- /dev/null
+++ b/extensions/xgui/xgui-lib/try.sh
@@ -0,0 +1 @@
+../../bin/pd -open ./test_xgui_lib.pd -verbose
diff --git a/extensions/xgui/xgui-lib/xgui_lib.c b/extensions/xgui/xgui-lib/xgui_lib.c
new file mode 100644
index 00000000..62940bc2
--- /dev/null
+++ b/extensions/xgui/xgui-lib/xgui_lib.c
@@ -0,0 +1,17 @@
+/* xgui */
+
+#include "m_pd.h"
+#include "seg.c"
+#include "number.c"
+
+void seg_setup();
+void number_setup();
+
+void xgui_lib_setup(void)
+{
+ post("++ Xgui - Damien HENRY");
+ post("++ v0.08");
+ seg_setup();
+ number_setup();
+}
+