From e523762cc0f4b1e9421e4427013f18422a7cb8ac Mon Sep 17 00:00:00 2001
From: Sojourner Truth <jon.w.wilkes@gmail.com>
Date: Wed, 17 Aug 2016 17:55:41 -0400
Subject: [PATCH] remove old, unused extensions/ directory

---
 extensions/Makefile                           |  124 -
 extensions/gripd/.xvpics/joystickA.xpm        |  Bin 337 -> 0 bytes
 extensions/gripd/.xvpics/midiA.xpm            |  Bin 337 -> 0 bytes
 extensions/gripd/README.txt                   |  181 --
 extensions/gripd/connect.xpm                  |   27 -
 extensions/gripd/connectX.xpm                 |   24 -
 extensions/gripd/examples/clickme.jpg         |  Bin 2798 -> 0 bytes
 extensions/gripd/examples/fmlogo.gif          |  Bin 6459 -> 0 bytes
 extensions/gripd/examples/fmsynth.gpd         |  442 ----
 extensions/gripd/examples/gripd.gpd           |  380 ---
 extensions/gripd/examples/gripd.pd            |   73 -
 extensions/gripd/examples/gripdExamples.pd    |  247 --
 extensions/gripd/examples/gripdFM.pd          |  135 -
 extensions/gripd/examples/poof.jpg            |  Bin 2065 -> 0 bytes
 extensions/gripd/examples/scale.gif           |  Bin 2240 -> 0 bytes
 extensions/gripd/examples/scale2.gif          |  Bin 2296 -> 0 bytes
 extensions/gripd/examples/screw.gif           |  Bin 1181 -> 0 bytes
 extensions/gripd/gripd                        |   42 -
 extensions/gripd/gripd.opt                    |    2 -
 extensions/gripd/gripd.py                     |   43 -
 extensions/gripd/gripd.spec                   |   16 -
 extensions/gripd/gripdControls.py             | 1675 ------------
 extensions/gripd/gripdFunctions.py            |  191 --
 extensions/gripd/gripdMain.py                 | 2337 -----------------
 extensions/gripd/icon.pic                     |  Bin 3774 -> 0 bytes
 extensions/gripd/joystick.xpm                 |   68 -
 extensions/gripd/joystickA.xpm                |   45 -
 extensions/gripd/joystickX.xpm                |   57 -
 extensions/gripd/log.txt                      |    0
 extensions/gripd/midi.xpm                     |   24 -
 extensions/gripd/midiA.xpm                    |   24 -
 extensions/gripd/midiX.xpm                    |   26 -
 extensions/gripd/src/Makefile.Linux           |   48 -
 extensions/gripd/src/Makefile.NT              |   86 -
 .../gripd/src/Makefile.midiioLibrary.ALSA     |  205 --
 .../gripd/src/Makefile.midiioLibrary.NT       |  462 ----
 .../gripd/src/Makefile.midiioLibrary.OSS      |  205 --
 extensions/gripd/src/gripd.c                  | 1031 --------
 extensions/gripd/src/gripd.h                  |  227 --
 extensions/gripd/src/joystick.c               |  296 ---
 extensions/gripd/src/joystick_wrap.c          |  692 -----
 extensions/gripd/src/makefile                 |   44 -
 extensions/gripd/src/midi.cpp                 |  146 -
 extensions/gripd/src/midi_wrap.c              |  723 -----
 extensions/gripd/src/midiio/include/Array.cpp |  379 ---
 extensions/gripd/src/midiio/include/Array.h   |   67 -
 .../src/midiio/include/CircularBuffer.cpp     |  291 --
 .../gripd/src/midiio/include/CircularBuffer.h |   66 -
 .../gripd/src/midiio/include/Collection.cpp   |  355 ---
 .../gripd/src/midiio/include/Collection.h     |   70 -
 extensions/gripd/src/midiio/include/FileIO.h  |  148 --
 .../gripd/src/midiio/include/MidiFile.h       |  108 -
 .../gripd/src/midiio/include/MidiFileWrite.h  |   61 -
 extensions/gripd/src/midiio/include/MidiIO.h  |   58 -
 .../gripd/src/midiio/include/MidiInPort.h     |   98 -
 .../src/midiio/include/MidiInPort_alsa.h      |  108 -
 .../src/midiio/include/MidiInPort_alsa05.h    |  107 -
 .../src/midiio/include/MidiInPort_linux.h     |   94 -
 .../gripd/src/midiio/include/MidiInPort_oss.h |  106 -
 .../midiio/include/MidiInPort_unsupported.h   |   89 -
 .../src/midiio/include/MidiInPort_visual.h    |  114 -
 .../gripd/src/midiio/include/MidiInput.h      |   53 -
 .../gripd/src/midiio/include/MidiMessage.h    |   78 -
 .../gripd/src/midiio/include/MidiOutPort.h    |   92 -
 .../src/midiio/include/MidiOutPort_alsa.h     |   79 -
 .../src/midiio/include/MidiOutPort_linux.h    |   80 -
 .../src/midiio/include/MidiOutPort_oss.h      |   75 -
 .../midiio/include/MidiOutPort_unsupported.h  |   71 -
 .../src/midiio/include/MidiOutPort_visual.h   |   75 -
 .../gripd/src/midiio/include/MidiOutput.h     |  140 -
 .../gripd/src/midiio/include/MidiPort.h       |   49 -
 extensions/gripd/src/midiio/include/Options.h |  106 -
 .../src/midiio/include/Options_private.h      |   73 -
 .../gripd/src/midiio/include/Sequencer_alsa.h |  139 -
 .../gripd/src/midiio/include/Sequencer_oss.h  |   92 -
 .../gripd/src/midiio/include/SigTimer.h       |  104 -
 extensions/gripd/src/midiio/include/Voice.h   |   70 -
 .../gripd/src/midiio/include/gminstruments.h  |  251 --
 .../gripd/src/midiio/include/midichannels.h   |   42 -
 .../gripd/src/midiio/include/mididefines.h    |   34 -
 .../gripd/src/midiio/include/midiiolib.h      |   57 -
 .../gripd/src/midiio/include/notenames.h      |  219 --
 .../src/midiio/include/sigConfiguration.h     |  100 -
 extensions/gripd/src/midiio/src/FileIO.cpp    |  761 ------
 extensions/gripd/src/midiio/src/MidiFile.cpp  | 1200 ---------
 .../gripd/src/midiio/src/MidiFileWrite.cpp    |  259 --
 extensions/gripd/src/midiio/src/MidiIO.cpp    |  283 --
 .../gripd/src/midiio/src/MidiInPort_alsa.cpp  | 1038 --------
 .../src/midiio/src/MidiInPort_alsa05.cpp      |  995 -------
 .../gripd/src/midiio/src/MidiInPort_linux.cpp |  491 ----
 .../gripd/src/midiio/src/MidiInPort_oss.cpp   | 1036 --------
 .../src/midiio/src/MidiInPort_unsupported.cpp |  487 ----
 .../src/midiio/src/MidiInPort_visual.cpp      | 1267 ---------
 extensions/gripd/src/midiio/src/MidiInput.cpp |  224 --
 .../gripd/src/midiio/src/MidiMessage.cpp      |  406 ---
 .../gripd/src/midiio/src/MidiOutPort_alsa.cpp |  469 ----
 .../src/midiio/src/MidiOutPort_linux.cpp      |  381 ---
 .../gripd/src/midiio/src/MidiOutPort_oss.cpp  |  462 ----
 .../midiio/src/MidiOutPort_unsupported.cpp    |  402 ---
 .../src/midiio/src/MidiOutPort_visual.cpp     |  532 ----
 .../gripd/src/midiio/src/MidiOutput.cpp       | 1082 --------
 extensions/gripd/src/midiio/src/MidiPort.cpp  |  189 --
 extensions/gripd/src/midiio/src/Options.cpp   |  887 -------
 .../gripd/src/midiio/src/Options_private.cpp  |  358 ---
 .../gripd/src/midiio/src/Sequencer_alsa.cpp   |  643 -----
 .../gripd/src/midiio/src/Sequencer_alsa05.cpp |  518 ----
 .../gripd/src/midiio/src/Sequencer_oss.cpp    |  809 ------
 extensions/gripd/src/midiio/src/SigTimer.cpp  |  498 ----
 extensions/gripd/src/midiio/src/Voice.cpp     |  334 ---
 extensions/gui/ix/README                      |   13 -
 extensions/gui/ix/index.psp                   |   88 -
 extensions/gui/ix/osc.tcl                     |   43 -
 extensions/gui/ix/pd_base.tk                  |  398 ---
 extensions/gui/ix/pd_objects.tk               |  730 -----
 extensions/gui/ix/toxy/dd-demo.pd             |   33 -
 extensions/gui/ix/toxy/dd.wid                 |   32 -
 extensions/gui/ix/toxy/dm-demo.pd             |   32 -
 extensions/gui/ix/toxy/dm.wid                 |   84 -
 extensions/gui/ix/toxy/filter-demo.pd         |   72 -
 extensions/gui/ix/toxy/filter.wid             |  286 --
 extensions/gui/ix/toxy/grid-demo.pd           |   69 -
 extensions/gui/ix/toxy/grid.wid               |   46 -
 extensions/gui/ix/toxy/img-demo.pd            |   60 -
 extensions/gui/ix/toxy/img.wid                |   41 -
 extensions/gui/ix/toxy/kbd-demo.pd            |   61 -
 extensions/gui/ix/toxy/kbd.wid                |   48 -
 extensions/gui/ix/toxy/knob-demo.pd           |   43 -
 extensions/gui/ix/toxy/knob.wid               |  102 -
 extensions/gui/ix/toxy/lg-demo.pd             |   68 -
 extensions/gui/ix/toxy/lg.wid                 |  237 --
 extensions/gui/ix/toxy/mat-demo.pd            |   53 -
 extensions/gui/ix/toxy/mat.wid                |  688 -----
 extensions/gui/ix/toxy/ngrid-demo.pd          |  310 ---
 extensions/gui/ix/toxy/ngrid.wid              |  150 --
 extensions/gui/ix/toxy/nob-demo.pd            |   74 -
 extensions/gui/ix/toxy/nob.wid                |  105 -
 extensions/gui/ix/toxy/q-demo.pd              |   90 -
 extensions/gui/ix/toxy/q.wid                  |   84 -
 extensions/gui/ix/toxy/sp-demo.pd             |  325 ---
 extensions/gui/ix/toxy/sp.wid                 |   36 -
 extensions/gui/ix/toxy/spectrum-demo.pd       |  171 --
 extensions/gui/ix/toxy/spectrum.wid           |   42 -
 extensions/gui/ix/toxy/tile-demo.pd           |   74 -
 extensions/gui/ix/toxy/tile.wid               |   87 -
 extensions/gui/ix/toxy/tree-demo.pd           |  184 --
 extensions/gui/ix/toxy/tree.wid               |  184 --
 extensions/xgui/AUTHORS.txt                   |    3 -
 extensions/xgui/INSTALL.txt                   |   34 -
 extensions/xgui/LICENSE.txt                   |   26 -
 extensions/xgui/README.txt                    |  150 --
 extensions/xgui/adapters_in/xy2coord.pd       |   38 -
 extensions/xgui/adapters_in/xy2move.pd        |   12 -
 extensions/xgui/adapters_in/xy2xy1.pd         |   15 -
 extensions/xgui/adapters_in/xy2xy2.pd         |   15 -
 extensions/xgui/adapters_out/click2bxy.pd     |   16 -
 extensions/xgui/adapters_out/coord2xy.pd      |   16 -
 extensions/xgui/adapters_out/drag2move.pd     |   10 -
 extensions/xgui/adapters_out/drag2strength.pd |   10 -
 extensions/xgui/adapters_out/move2xy.pd       |   12 -
 extensions/xgui/behaviors/dragable.pd         |   10 -
 extensions/xgui/behaviors/light_over.pd       |   34 -
 extensions/xgui/behaviors/ma_2d.pd            |  130 -
 extensions/xgui/behaviors/move.pd             |   10 -
 extensions/xgui/behaviors/move_x.pd           |   10 -
 extensions/xgui/behaviors/move_y.pd           |   10 -
 extensions/xgui/behaviors/width_over.pd       |   30 -
 extensions/xgui/bin/pdx.sh                    |    6 -
 extensions/xgui/bin/xgui-client.sh            |  867 ------
 extensions/xgui/bin/xgui.bat                  |    1 -
 extensions/xgui/bin/xgui.sh                   |  908 -------
 extensions/xgui/doc/01_first_seg.pd           |  123 -
 extensions/xgui/doc/02_behaviors.pd           |   49 -
 extensions/xgui/doc/03_low_level.pd           |   28 -
 extensions/xgui/doc/04_classic.pd             |   98 -
 extensions/xgui/doc/05_xseq.pd                |  315 ---
 extensions/xgui/doc/06_physics.pd             |   24 -
 extensions/xgui/doc/07_speak.pd               |   54 -
 extensions/xgui/doc/08_more_physics.pd        |   89 -
 extensions/xgui/doc/09_more_physics2.pd       |  199 --
 extensions/xgui/doc/10_sliders.pd             |   83 -
 extensions/xgui/doc/Kroonde/K_jongle.pd       |   44 -
 extensions/xgui/doc/Kroonde/K_konfig.pd       |   81 -
 extensions/xgui/doc/Kroonde/K_panel.pd        |   81 -
 extensions/xgui/doc/Kroonde/K_send.pd         |   70 -
 .../xgui/doc/Kroonde/Koonfig_ip_dest.pd       |   72 -
 extensions/xgui/doc/Kroonde/Koonfig_my_ip.pd  |   72 -
 extensions/xgui/doc/Kroonde/Kroonde.pd        |    8 -
 extensions/xgui/doc/Kroonde/calibration.pd    |   47 -
 extensions/xgui/doc/Kroonde/inv1024.pd        |    8 -
 .../xgui/doc/Kroonde/kroonde_dest_ip.pd       |   49 -
 extensions/xgui/doc/Kroonde/kroonde_ip.pd     |   49 -
 extensions/xgui/doc/Kroonde/range.pd          |   43 -
 extensions/xgui/doc/Kroonde/stom.pd           |    6 -
 extensions/xgui/doc/Kroonde/tst.pd            |   18 -
 extensions/xgui/doc/direct_test.pd            |   18 -
 extensions/xgui/doc/help-send2.pd             |   18 -
 extensions/xgui/doc/help_atom.pd              |   11 -
 extensions/xgui/doc/help_convert.pd           |    8 -
 extensions/xgui/doc/help_damping.pd           |   15 -
 extensions/xgui/doc/help_mass.pd              |   14 -
 extensions/xgui/doc/help_object_arc.pd        |   75 -
 extensions/xgui/doc/help_object_rect.pd       |   51 -
 extensions/xgui/doc/help_object_text.pd       |   78 -
 extensions/xgui/doc/help_spring.pd            |   34 -
 extensions/xgui/doc/help_valueinit.pd         |    8 -
 extensions/xgui/doc/help_vector.pd            |   34 -
 extensions/xgui/doc/sound/09_more_physics3.pd |  217 --
 extensions/xgui/doc/sound/09_more_physics4.pd |  219 --
 extensions/xgui/doc/sound/09_more_physics5.pd |  238 --
 extensions/xgui/doc/sound/09_more_physics6.pd |  462 ----
 extensions/xgui/doc/sound/09_more_physics7.pd |  458 ----
 extensions/xgui/doc/sound/2yoyo.pd            |  464 ----
 extensions/xgui/doc/sound/2yoyos.pd           |  462 ----
 extensions/xgui/doc/sound/atom.pd             |   33 -
 extensions/xgui/doc/sound/sound.pd            |  136 -
 extensions/xgui/filters/coord.pd              |   10 -
 extensions/xgui/filters/xy1.pd                |   10 -
 extensions/xgui/filters/xy2.pd                |   10 -
 extensions/xgui/install.bat                   |    7 -
 extensions/xgui/main/alias.pd                 |    9 -
 extensions/xgui/main/arc.pd                   |   59 -
 extensions/xgui/main/canvas.pd                |   28 -
 extensions/xgui/main/make4seg_ss.pd           |   31 -
 extensions/xgui/main/make4seg_sss.pd          |   33 -
 extensions/xgui/main/make_obj_name.pd         |   23 -
 extensions/xgui/main/node.pd                  |  100 -
 extensions/xgui/main/pdx_connect.pd           |   77 -
 extensions/xgui/main/rect.pd                  |   59 -
 extensions/xgui/main/seg.pd                   |   60 -
 extensions/xgui/main/text.pd                  |   59 -
 extensions/xgui/makefile                      |   64 -
 extensions/xgui/objects/button.pd             |   81 -
 extensions/xgui/objects/i-point.pd            |    6 -
 extensions/xgui/objects/i-rect.pd             |  142 -
 extensions/xgui/objects/i-seg.pd              |  152 --
 extensions/xgui/objects/i-seg_mp.pd           |  140 -
 extensions/xgui/objects/my_slider1.pd         |  112 -
 extensions/xgui/objects/my_slider2.pd         |  112 -
 extensions/xgui/objects/my_slider3.pd         |  160 --
 extensions/xgui/objects/pad.pd                |   85 -
 extensions/xgui/objects/potar.pd              |  103 -
 extensions/xgui/objects/preset.pd             |  112 -
 extensions/xgui/objects/slider2.pd            |  141 -
 extensions/xgui/objects/slider_prob.pd        |  118 -
 extensions/xgui/pdx.bat                       |    5 -
 extensions/xgui/pdx.sh                        |   17 -
 extensions/xgui/physics/atom.pd               |   21 -
 extensions/xgui/physics/damping.pd            |   59 -
 extensions/xgui/physics/force.pd              |   29 -
 extensions/xgui/physics/lia_2d.pd             |  206 --
 extensions/xgui/physics/mass.pd               |  118 -
 extensions/xgui/physics/spring.pd             |  155 --
 extensions/xgui/physics/vector.pd             |  162 --
 extensions/xgui/preset1.txt                   |   12 -
 extensions/xgui/preset2.txt                   |   12 -
 extensions/xgui/preset3.txt                   |   12 -
 extensions/xgui/preset4.txt                   |   12 -
 extensions/xgui/utils/bounded.pd              |   43 -
 extensions/xgui/utils/concat_set_bang.pd      |   22 -
 extensions/xgui/utils/concat_value.pd         |   26 -
 extensions/xgui/utils/convert.pd              |   10 -
 extensions/xgui/utils/in.pd                   |   37 -
 extensions/xgui/utils/init2.pd                |   27 -
 extensions/xgui/utils/moy.pd                  |   13 -
 extensions/xgui/utils/subspace.pd             |   50 -
 extensions/xgui/utils/unique.pd               |   10 -
 extensions/xgui/utils/value2.pd               |   13 -
 extensions/xgui/utils/valueinit.pd            |    8 -
 extensions/xgui/xgui-lib/a2s.c                |   66 -
 extensions/xgui/xgui-lib/concat.c             |   68 -
 extensions/xgui/xgui-lib/help_number.pd       |   60 -
 extensions/xgui/xgui-lib/m_pd.h               |  579 ----
 extensions/xgui/xgui-lib/makefile             |   86 -
 extensions/xgui/xgui-lib/message.c            |  116 -
 extensions/xgui/xgui-lib/number.c             |  249 --
 extensions/xgui/xgui-lib/oname2l.c            |   73 -
 extensions/xgui/xgui-lib/recv2.c              |   80 -
 extensions/xgui/xgui-lib/replace_selector.c   |   60 -
 extensions/xgui/xgui-lib/seg.c                |   96 -
 extensions/xgui/xgui-lib/send2.c              |   67 -
 extensions/xgui/xgui-lib/test_xgui_lib.pd     |  134 -
 extensions/xgui/xgui-lib/try.sh               |    1 -
 extensions/xgui/xgui-lib/xgui_lib.c           |   17 -
 283 files changed, 48070 deletions(-)
 delete mode 100644 extensions/Makefile
 delete mode 100644 extensions/gripd/.xvpics/joystickA.xpm
 delete mode 100644 extensions/gripd/.xvpics/midiA.xpm
 delete mode 100644 extensions/gripd/README.txt
 delete mode 100644 extensions/gripd/connect.xpm
 delete mode 100644 extensions/gripd/connectX.xpm
 delete mode 100644 extensions/gripd/examples/clickme.jpg
 delete mode 100644 extensions/gripd/examples/fmlogo.gif
 delete mode 100644 extensions/gripd/examples/fmsynth.gpd
 delete mode 100644 extensions/gripd/examples/gripd.gpd
 delete mode 100644 extensions/gripd/examples/gripd.pd
 delete mode 100644 extensions/gripd/examples/gripdExamples.pd
 delete mode 100644 extensions/gripd/examples/gripdFM.pd
 delete mode 100644 extensions/gripd/examples/poof.jpg
 delete mode 100644 extensions/gripd/examples/scale.gif
 delete mode 100644 extensions/gripd/examples/scale2.gif
 delete mode 100644 extensions/gripd/examples/screw.gif
 delete mode 100755 extensions/gripd/gripd
 delete mode 100644 extensions/gripd/gripd.opt
 delete mode 100644 extensions/gripd/gripd.py
 delete mode 100644 extensions/gripd/gripd.spec
 delete mode 100644 extensions/gripd/gripdControls.py
 delete mode 100644 extensions/gripd/gripdFunctions.py
 delete mode 100644 extensions/gripd/gripdMain.py
 delete mode 100644 extensions/gripd/icon.pic
 delete mode 100644 extensions/gripd/joystick.xpm
 delete mode 100644 extensions/gripd/joystickA.xpm
 delete mode 100644 extensions/gripd/joystickX.xpm
 delete mode 100644 extensions/gripd/log.txt
 delete mode 100644 extensions/gripd/midi.xpm
 delete mode 100644 extensions/gripd/midiA.xpm
 delete mode 100644 extensions/gripd/midiX.xpm
 delete mode 100644 extensions/gripd/src/Makefile.Linux
 delete mode 100644 extensions/gripd/src/Makefile.NT
 delete mode 100644 extensions/gripd/src/Makefile.midiioLibrary.ALSA
 delete mode 100644 extensions/gripd/src/Makefile.midiioLibrary.NT
 delete mode 100644 extensions/gripd/src/Makefile.midiioLibrary.OSS
 delete mode 100644 extensions/gripd/src/gripd.c
 delete mode 100644 extensions/gripd/src/gripd.h
 delete mode 100644 extensions/gripd/src/joystick.c
 delete mode 100644 extensions/gripd/src/joystick_wrap.c
 delete mode 100644 extensions/gripd/src/makefile
 delete mode 100644 extensions/gripd/src/midi.cpp
 delete mode 100644 extensions/gripd/src/midi_wrap.c
 delete mode 100644 extensions/gripd/src/midiio/include/Array.cpp
 delete mode 100644 extensions/gripd/src/midiio/include/Array.h
 delete mode 100644 extensions/gripd/src/midiio/include/CircularBuffer.cpp
 delete mode 100644 extensions/gripd/src/midiio/include/CircularBuffer.h
 delete mode 100644 extensions/gripd/src/midiio/include/Collection.cpp
 delete mode 100644 extensions/gripd/src/midiio/include/Collection.h
 delete mode 100644 extensions/gripd/src/midiio/include/FileIO.h
 delete mode 100644 extensions/gripd/src/midiio/include/MidiFile.h
 delete mode 100644 extensions/gripd/src/midiio/include/MidiFileWrite.h
 delete mode 100644 extensions/gripd/src/midiio/include/MidiIO.h
 delete mode 100644 extensions/gripd/src/midiio/include/MidiInPort.h
 delete mode 100644 extensions/gripd/src/midiio/include/MidiInPort_alsa.h
 delete mode 100644 extensions/gripd/src/midiio/include/MidiInPort_alsa05.h
 delete mode 100644 extensions/gripd/src/midiio/include/MidiInPort_linux.h
 delete mode 100644 extensions/gripd/src/midiio/include/MidiInPort_oss.h
 delete mode 100644 extensions/gripd/src/midiio/include/MidiInPort_unsupported.h
 delete mode 100644 extensions/gripd/src/midiio/include/MidiInPort_visual.h
 delete mode 100644 extensions/gripd/src/midiio/include/MidiInput.h
 delete mode 100644 extensions/gripd/src/midiio/include/MidiMessage.h
 delete mode 100644 extensions/gripd/src/midiio/include/MidiOutPort.h
 delete mode 100644 extensions/gripd/src/midiio/include/MidiOutPort_alsa.h
 delete mode 100644 extensions/gripd/src/midiio/include/MidiOutPort_linux.h
 delete mode 100644 extensions/gripd/src/midiio/include/MidiOutPort_oss.h
 delete mode 100644 extensions/gripd/src/midiio/include/MidiOutPort_unsupported.h
 delete mode 100644 extensions/gripd/src/midiio/include/MidiOutPort_visual.h
 delete mode 100644 extensions/gripd/src/midiio/include/MidiOutput.h
 delete mode 100644 extensions/gripd/src/midiio/include/MidiPort.h
 delete mode 100644 extensions/gripd/src/midiio/include/Options.h
 delete mode 100644 extensions/gripd/src/midiio/include/Options_private.h
 delete mode 100644 extensions/gripd/src/midiio/include/Sequencer_alsa.h
 delete mode 100644 extensions/gripd/src/midiio/include/Sequencer_oss.h
 delete mode 100644 extensions/gripd/src/midiio/include/SigTimer.h
 delete mode 100644 extensions/gripd/src/midiio/include/Voice.h
 delete mode 100644 extensions/gripd/src/midiio/include/gminstruments.h
 delete mode 100644 extensions/gripd/src/midiio/include/midichannels.h
 delete mode 100644 extensions/gripd/src/midiio/include/mididefines.h
 delete mode 100644 extensions/gripd/src/midiio/include/midiiolib.h
 delete mode 100644 extensions/gripd/src/midiio/include/notenames.h
 delete mode 100644 extensions/gripd/src/midiio/include/sigConfiguration.h
 delete mode 100644 extensions/gripd/src/midiio/src/FileIO.cpp
 delete mode 100644 extensions/gripd/src/midiio/src/MidiFile.cpp
 delete mode 100644 extensions/gripd/src/midiio/src/MidiFileWrite.cpp
 delete mode 100644 extensions/gripd/src/midiio/src/MidiIO.cpp
 delete mode 100644 extensions/gripd/src/midiio/src/MidiInPort_alsa.cpp
 delete mode 100644 extensions/gripd/src/midiio/src/MidiInPort_alsa05.cpp
 delete mode 100644 extensions/gripd/src/midiio/src/MidiInPort_linux.cpp
 delete mode 100644 extensions/gripd/src/midiio/src/MidiInPort_oss.cpp
 delete mode 100644 extensions/gripd/src/midiio/src/MidiInPort_unsupported.cpp
 delete mode 100644 extensions/gripd/src/midiio/src/MidiInPort_visual.cpp
 delete mode 100644 extensions/gripd/src/midiio/src/MidiInput.cpp
 delete mode 100644 extensions/gripd/src/midiio/src/MidiMessage.cpp
 delete mode 100644 extensions/gripd/src/midiio/src/MidiOutPort_alsa.cpp
 delete mode 100644 extensions/gripd/src/midiio/src/MidiOutPort_linux.cpp
 delete mode 100644 extensions/gripd/src/midiio/src/MidiOutPort_oss.cpp
 delete mode 100644 extensions/gripd/src/midiio/src/MidiOutPort_unsupported.cpp
 delete mode 100644 extensions/gripd/src/midiio/src/MidiOutPort_visual.cpp
 delete mode 100644 extensions/gripd/src/midiio/src/MidiOutput.cpp
 delete mode 100644 extensions/gripd/src/midiio/src/MidiPort.cpp
 delete mode 100644 extensions/gripd/src/midiio/src/Options.cpp
 delete mode 100644 extensions/gripd/src/midiio/src/Options_private.cpp
 delete mode 100644 extensions/gripd/src/midiio/src/Sequencer_alsa.cpp
 delete mode 100644 extensions/gripd/src/midiio/src/Sequencer_alsa05.cpp
 delete mode 100644 extensions/gripd/src/midiio/src/Sequencer_oss.cpp
 delete mode 100644 extensions/gripd/src/midiio/src/SigTimer.cpp
 delete mode 100644 extensions/gripd/src/midiio/src/Voice.cpp
 delete mode 100644 extensions/gui/ix/README
 delete mode 100644 extensions/gui/ix/index.psp
 delete mode 100644 extensions/gui/ix/osc.tcl
 delete mode 100755 extensions/gui/ix/pd_base.tk
 delete mode 100755 extensions/gui/ix/pd_objects.tk
 delete mode 100644 extensions/gui/ix/toxy/dd-demo.pd
 delete mode 100755 extensions/gui/ix/toxy/dd.wid
 delete mode 100644 extensions/gui/ix/toxy/dm-demo.pd
 delete mode 100755 extensions/gui/ix/toxy/dm.wid
 delete mode 100644 extensions/gui/ix/toxy/filter-demo.pd
 delete mode 100755 extensions/gui/ix/toxy/filter.wid
 delete mode 100644 extensions/gui/ix/toxy/grid-demo.pd
 delete mode 100755 extensions/gui/ix/toxy/grid.wid
 delete mode 100644 extensions/gui/ix/toxy/img-demo.pd
 delete mode 100755 extensions/gui/ix/toxy/img.wid
 delete mode 100644 extensions/gui/ix/toxy/kbd-demo.pd
 delete mode 100755 extensions/gui/ix/toxy/kbd.wid
 delete mode 100644 extensions/gui/ix/toxy/knob-demo.pd
 delete mode 100755 extensions/gui/ix/toxy/knob.wid
 delete mode 100644 extensions/gui/ix/toxy/lg-demo.pd
 delete mode 100755 extensions/gui/ix/toxy/lg.wid
 delete mode 100644 extensions/gui/ix/toxy/mat-demo.pd
 delete mode 100755 extensions/gui/ix/toxy/mat.wid
 delete mode 100644 extensions/gui/ix/toxy/ngrid-demo.pd
 delete mode 100755 extensions/gui/ix/toxy/ngrid.wid
 delete mode 100644 extensions/gui/ix/toxy/nob-demo.pd
 delete mode 100755 extensions/gui/ix/toxy/nob.wid
 delete mode 100644 extensions/gui/ix/toxy/q-demo.pd
 delete mode 100755 extensions/gui/ix/toxy/q.wid
 delete mode 100644 extensions/gui/ix/toxy/sp-demo.pd
 delete mode 100755 extensions/gui/ix/toxy/sp.wid
 delete mode 100644 extensions/gui/ix/toxy/spectrum-demo.pd
 delete mode 100755 extensions/gui/ix/toxy/spectrum.wid
 delete mode 100644 extensions/gui/ix/toxy/tile-demo.pd
 delete mode 100755 extensions/gui/ix/toxy/tile.wid
 delete mode 100644 extensions/gui/ix/toxy/tree-demo.pd
 delete mode 100755 extensions/gui/ix/toxy/tree.wid
 delete mode 100644 extensions/xgui/AUTHORS.txt
 delete mode 100644 extensions/xgui/INSTALL.txt
 delete mode 100644 extensions/xgui/LICENSE.txt
 delete mode 100644 extensions/xgui/README.txt
 delete mode 100644 extensions/xgui/adapters_in/xy2coord.pd
 delete mode 100644 extensions/xgui/adapters_in/xy2move.pd
 delete mode 100644 extensions/xgui/adapters_in/xy2xy1.pd
 delete mode 100644 extensions/xgui/adapters_in/xy2xy2.pd
 delete mode 100644 extensions/xgui/adapters_out/click2bxy.pd
 delete mode 100644 extensions/xgui/adapters_out/coord2xy.pd
 delete mode 100644 extensions/xgui/adapters_out/drag2move.pd
 delete mode 100644 extensions/xgui/adapters_out/drag2strength.pd
 delete mode 100644 extensions/xgui/adapters_out/move2xy.pd
 delete mode 100644 extensions/xgui/behaviors/dragable.pd
 delete mode 100644 extensions/xgui/behaviors/light_over.pd
 delete mode 100644 extensions/xgui/behaviors/ma_2d.pd
 delete mode 100644 extensions/xgui/behaviors/move.pd
 delete mode 100644 extensions/xgui/behaviors/move_x.pd
 delete mode 100644 extensions/xgui/behaviors/move_y.pd
 delete mode 100644 extensions/xgui/behaviors/width_over.pd
 delete mode 100755 extensions/xgui/bin/pdx.sh
 delete mode 100644 extensions/xgui/bin/xgui-client.sh
 delete mode 100644 extensions/xgui/bin/xgui.bat
 delete mode 100755 extensions/xgui/bin/xgui.sh
 delete mode 100644 extensions/xgui/doc/01_first_seg.pd
 delete mode 100644 extensions/xgui/doc/02_behaviors.pd
 delete mode 100644 extensions/xgui/doc/03_low_level.pd
 delete mode 100644 extensions/xgui/doc/04_classic.pd
 delete mode 100644 extensions/xgui/doc/05_xseq.pd
 delete mode 100644 extensions/xgui/doc/06_physics.pd
 delete mode 100644 extensions/xgui/doc/07_speak.pd
 delete mode 100644 extensions/xgui/doc/08_more_physics.pd
 delete mode 100644 extensions/xgui/doc/09_more_physics2.pd
 delete mode 100644 extensions/xgui/doc/10_sliders.pd
 delete mode 100644 extensions/xgui/doc/Kroonde/K_jongle.pd
 delete mode 100644 extensions/xgui/doc/Kroonde/K_konfig.pd
 delete mode 100644 extensions/xgui/doc/Kroonde/K_panel.pd
 delete mode 100644 extensions/xgui/doc/Kroonde/K_send.pd
 delete mode 100644 extensions/xgui/doc/Kroonde/Koonfig_ip_dest.pd
 delete mode 100644 extensions/xgui/doc/Kroonde/Koonfig_my_ip.pd
 delete mode 100644 extensions/xgui/doc/Kroonde/Kroonde.pd
 delete mode 100644 extensions/xgui/doc/Kroonde/calibration.pd
 delete mode 100644 extensions/xgui/doc/Kroonde/inv1024.pd
 delete mode 100644 extensions/xgui/doc/Kroonde/kroonde_dest_ip.pd
 delete mode 100644 extensions/xgui/doc/Kroonde/kroonde_ip.pd
 delete mode 100644 extensions/xgui/doc/Kroonde/range.pd
 delete mode 100644 extensions/xgui/doc/Kroonde/stom.pd
 delete mode 100644 extensions/xgui/doc/Kroonde/tst.pd
 delete mode 100644 extensions/xgui/doc/direct_test.pd
 delete mode 100644 extensions/xgui/doc/help-send2.pd
 delete mode 100644 extensions/xgui/doc/help_atom.pd
 delete mode 100644 extensions/xgui/doc/help_convert.pd
 delete mode 100644 extensions/xgui/doc/help_damping.pd
 delete mode 100644 extensions/xgui/doc/help_mass.pd
 delete mode 100644 extensions/xgui/doc/help_object_arc.pd
 delete mode 100644 extensions/xgui/doc/help_object_rect.pd
 delete mode 100644 extensions/xgui/doc/help_object_text.pd
 delete mode 100644 extensions/xgui/doc/help_spring.pd
 delete mode 100644 extensions/xgui/doc/help_valueinit.pd
 delete mode 100644 extensions/xgui/doc/help_vector.pd
 delete mode 100644 extensions/xgui/doc/sound/09_more_physics3.pd
 delete mode 100644 extensions/xgui/doc/sound/09_more_physics4.pd
 delete mode 100644 extensions/xgui/doc/sound/09_more_physics5.pd
 delete mode 100644 extensions/xgui/doc/sound/09_more_physics6.pd
 delete mode 100644 extensions/xgui/doc/sound/09_more_physics7.pd
 delete mode 100644 extensions/xgui/doc/sound/2yoyo.pd
 delete mode 100644 extensions/xgui/doc/sound/2yoyos.pd
 delete mode 100644 extensions/xgui/doc/sound/atom.pd
 delete mode 100644 extensions/xgui/doc/sound/sound.pd
 delete mode 100644 extensions/xgui/filters/coord.pd
 delete mode 100644 extensions/xgui/filters/xy1.pd
 delete mode 100644 extensions/xgui/filters/xy2.pd
 delete mode 100644 extensions/xgui/install.bat
 delete mode 100644 extensions/xgui/main/alias.pd
 delete mode 100644 extensions/xgui/main/arc.pd
 delete mode 100644 extensions/xgui/main/canvas.pd
 delete mode 100644 extensions/xgui/main/make4seg_ss.pd
 delete mode 100644 extensions/xgui/main/make4seg_sss.pd
 delete mode 100644 extensions/xgui/main/make_obj_name.pd
 delete mode 100644 extensions/xgui/main/node.pd
 delete mode 100644 extensions/xgui/main/pdx_connect.pd
 delete mode 100644 extensions/xgui/main/rect.pd
 delete mode 100644 extensions/xgui/main/seg.pd
 delete mode 100644 extensions/xgui/main/text.pd
 delete mode 100644 extensions/xgui/makefile
 delete mode 100644 extensions/xgui/objects/button.pd
 delete mode 100644 extensions/xgui/objects/i-point.pd
 delete mode 100644 extensions/xgui/objects/i-rect.pd
 delete mode 100644 extensions/xgui/objects/i-seg.pd
 delete mode 100644 extensions/xgui/objects/i-seg_mp.pd
 delete mode 100644 extensions/xgui/objects/my_slider1.pd
 delete mode 100644 extensions/xgui/objects/my_slider2.pd
 delete mode 100644 extensions/xgui/objects/my_slider3.pd
 delete mode 100644 extensions/xgui/objects/pad.pd
 delete mode 100644 extensions/xgui/objects/potar.pd
 delete mode 100644 extensions/xgui/objects/preset.pd
 delete mode 100644 extensions/xgui/objects/slider2.pd
 delete mode 100644 extensions/xgui/objects/slider_prob.pd
 delete mode 100644 extensions/xgui/pdx.bat
 delete mode 100755 extensions/xgui/pdx.sh
 delete mode 100644 extensions/xgui/physics/atom.pd
 delete mode 100644 extensions/xgui/physics/damping.pd
 delete mode 100644 extensions/xgui/physics/force.pd
 delete mode 100644 extensions/xgui/physics/lia_2d.pd
 delete mode 100644 extensions/xgui/physics/mass.pd
 delete mode 100644 extensions/xgui/physics/spring.pd
 delete mode 100644 extensions/xgui/physics/vector.pd
 delete mode 100644 extensions/xgui/preset1.txt
 delete mode 100644 extensions/xgui/preset2.txt
 delete mode 100644 extensions/xgui/preset3.txt
 delete mode 100644 extensions/xgui/preset4.txt
 delete mode 100644 extensions/xgui/utils/bounded.pd
 delete mode 100644 extensions/xgui/utils/concat_set_bang.pd
 delete mode 100644 extensions/xgui/utils/concat_value.pd
 delete mode 100644 extensions/xgui/utils/convert.pd
 delete mode 100644 extensions/xgui/utils/in.pd
 delete mode 100644 extensions/xgui/utils/init2.pd
 delete mode 100644 extensions/xgui/utils/moy.pd
 delete mode 100644 extensions/xgui/utils/subspace.pd
 delete mode 100644 extensions/xgui/utils/unique.pd
 delete mode 100644 extensions/xgui/utils/value2.pd
 delete mode 100644 extensions/xgui/utils/valueinit.pd
 delete mode 100644 extensions/xgui/xgui-lib/a2s.c
 delete mode 100644 extensions/xgui/xgui-lib/concat.c
 delete mode 100644 extensions/xgui/xgui-lib/help_number.pd
 delete mode 100644 extensions/xgui/xgui-lib/m_pd.h
 delete mode 100644 extensions/xgui/xgui-lib/makefile
 delete mode 100644 extensions/xgui/xgui-lib/message.c
 delete mode 100644 extensions/xgui/xgui-lib/number.c
 delete mode 100644 extensions/xgui/xgui-lib/oname2l.c
 delete mode 100644 extensions/xgui/xgui-lib/recv2.c
 delete mode 100644 extensions/xgui/xgui-lib/replace_selector.c
 delete mode 100644 extensions/xgui/xgui-lib/seg.c
 delete mode 100644 extensions/xgui/xgui-lib/send2.c
 delete mode 100644 extensions/xgui/xgui-lib/test_xgui_lib.pd
 delete mode 100644 extensions/xgui/xgui-lib/try.sh
 delete mode 100644 extensions/xgui/xgui-lib/xgui_lib.c

diff --git a/extensions/Makefile b/extensions/Makefile
deleted file mode 100644
index 0c54b2fef..000000000
--- a/extensions/Makefile
+++ /dev/null
@@ -1,124 +0,0 @@
-#==============================================================================#
-#
-# Centralized build system for "extensions".  
-#
-# see for instructions: http://puredata.org/docs/developer/build
-#  <hans@at.or.at>
-#
-#==============================================================================#
-
-CWD := $(shell pwd)
-
-# these are designed to be overridden by the packages/Makefile
-cvs_root_dir := $(shell cd $(CWD)/.. && pwd)
-DESTDIR = $(CWD)/build/
-BUILDLAYOUT_DIR = $(cvs_root_dir)/packages
-
-# default target
-all: gripd
-
-include $(BUILDLAYOUT_DIR)/Makefile.buildlayout
-
-#==============================================================================#
-#
-# OVERARCHING BUILD TARGETS
-#
-#==============================================================================#
-
-# clean up after everything is installed
-final_setup:
-	chmod -R ugo-w $(pddocdir)
-
-install: $(examplesdir) $(helpdir) $(manualsdir) $(objectsdir) $(readmesdir) \
-gripd_install ix_install
-	@echo " "
-	@echo "extensions install succeeded!"
-
-#==============================================================================#
-#
-# PROJECT-SPECIFIC TARGETS
-#
-#==============================================================================#
-
-#------------------------------------------------------------------------------#
-# GRIPD
-GRIPD_NAME = gripd
-gripd:
-	make -C $(extensions_src)/gripd/src -f Makefile.Linux all
-
-gripd_install: 
-	install -d $(helpdir)
-	install -d $(objectsdir)
-# it doesn't compile automatically yet <hans@at.or.at>
-#	install -p $(extensions_src)/gripd/*.$(EXTENSION) \
-#		$(extensions_src)/gripd/*.so \
-#		$(objectsdir)
-	install -p $(extensions_src)/gripd/examples/gripd.pd \
-		$(helpdir)/gripd-help.pd
-#	install -d $(manualsdir)/$(GRIPD_NAME)
-	install -p $(extensions_src)/gripd/README.txt \
-		$(readmesdir)/$(GRIPD_NAME).txt
-	install -d $(examplesdir)/$(GRIPD_NAME)
-	install -p $(extensions_src)/gripd/examples/*.* \
-		$(examplesdir)/$(GRIPD_NAME) 
-
-
-gripd_clean:
-	make -C $(extensions_src)/gripd/src clean
-
-
-
-#------------------------------------------------------------------------------#
-# IX
-IX_NAME = ix
-ix_install:
-	install -d $(objectsdir)/$(IX_NAME)
-	install -p $(extensions_src)/gui/ix/toxy/*.wid $(objectsdir)/$(IX_NAME) 
-#	install -d $(manualsdir)/$(IX_NAME)
-#	install -d $(readmesdir)/$(IX_NAME)
-#	install -p $(extensions_src)/gui/ix/toxy/README \
-#		$(readmesdir)/$(IX_NAME).txt
-	install -d $(examplesdir)/$(IX_NAME)
-	install -p $(extensions_src)/gui/ix/toxy/*.pd $(examplesdir)/$(IX_NAME) 
-
-
-
-#==============================================================================#
-#
-# DEVELOPER'S TARGETS
-#
-#==============================================================================#
-
-# make the symlinks necessary to simulate the installed environment
-devsymlinks:
-
-#==============================================================================#
-#
-# CLEAN TARGETS
-#
-#==============================================================================#
-
-# the destination-specific clean targets are in Makefile.buildlayout
-clean: install_clean
-
-distclean: clean cruft_clean
-
-
-
-
-
-test_locations:
-	@echo "PD_VERSION: $(PD_VERSION)"
-	@echo "PACKAGE_VERSION: $(PACKAGE_VERSION)"
-	@echo "CWD $(CWD)"
-	@echo "DESTDIR $(DESTDIR)"
-	@echo "PREFIX $(prefix)"
-	@echo "BINDIR  $(bindir)"
-	@echo "LIBDIR  $(libdir)"
-	@echo "OBJECTSDIR  $(objectsdir)"
-	@echo "PDDOCDIR  $(pddocdir)"
-	@echo "LIBPDDIR  $(libpddir)"
-	@echo "LIBPDBINDIR  $(libpdbindir)"
-	@echo "HELPDIR  $(helpdir)"
-	@echo "MANUALSDIR  $(manualsdir)"
-	@echo "EXAMPLESDIR  $(examplesdir)"
diff --git a/extensions/gripd/.xvpics/joystickA.xpm b/extensions/gripd/.xvpics/joystickA.xpm
deleted file mode 100644
index 4b12dd600d23a4a01feb80a717c3d5ebd9241187..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 337
zcmZ{fu};G<6h+_Q!HPV1@ZjMgS!yEDF{w%rBak+4NP=khN=SSG46yYZy6`8?&<{as
zeuis6Vxe!be0=Zoy$^L*EUIiK-CFw9a8uTA<yClG--gTjx(ZM4ug@>@Y}WMmyJ5Av
z8@jIPx0|f217y{5nMp1(#TbdC9ZzG-e}QEtiFo+~>KsUZ*eolWu&y2d2W^oQ5EgQR
zqAi#K6mucr2<)9_Vj|uLe12eOOiIC?_YE5o##rZ_!}*~siB~2uoz`e$;lxFQT?B26
gA&mA=YeU*<G(1l6KxBUq3eP{klcGEZ(Q}!;0K7|B^#A|>

diff --git a/extensions/gripd/.xvpics/midiA.xpm b/extensions/gripd/.xvpics/midiA.xpm
deleted file mode 100644
index 9865cbad56f76f549daf3e48707d28bb32dd836f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 337
zcmWGAS1>j<;!^hXb@%jh^S3fIuP`)I2y%B)&@eGGQb?*SNiEjoQg-!oiT8JlclP)7
zb@dAg<}x%_04g&wHRbYD@$|gCZQC|a4^<F-OBE=<z`$@Dh{5zW6%HN_AO{Y3I5}iw
zfIJZ(76oDn84g+r$S{bC$S{bQ0<kFA7N7voZV?~`(jaR|6<`2)hKG}ffkOvK^P+eR
G;zIy;t|qns

diff --git a/extensions/gripd/README.txt b/extensions/gripd/README.txt
deleted file mode 100644
index d00f57753..000000000
--- a/extensions/gripd/README.txt
+++ /dev/null
@@ -1,181 +0,0 @@
-GrIPD: Graphical Interface for Pure Data 
----------------------------------------- 
-
-v0.1.1
-
--What is GrIPD-
-GrIPD is a cross-platform extension to Miller Puckette's Pure Data
-software that allows the one to design custom graphical user
-interfaces for Pd patches.  GrIPD is not a replacement for the Pd
-Tcl/Tk GUI, but instead is intended to allow one to create a front end
-to a Pd patch.  The concept is to create your PD patch normally and
-then your GUI using GrIPD.  You can then lauch Pd using the -nogui
-command line argument (although this is certainly not necessary) so
-only your custom front end will be displayed.  GrIPD, itself, consists
-of two parts: the "gripd" Pd object and an external GUI
-window/editor. The Pd object was written in C and the external GUI was
-written in Python using the wxWindows.  GrIPD is released under the
-GNU General Public License.
-
-
--How GrIPD works-
-The two parts of GrIPD communicate via TCP/IP sockets so they can run
-on one machine or on separate machines over a network; so, for
-example, the GUI could be on a laptop on stage controlling or
-displaying info from the Pd audio engine in the house next to the
-mixer. The communication works through Pd's implimentation of
-"send" and "receive" objects. Basically, each GrIPD control object has
-a send and receive symbol associated with it.
-
-
--Supported platforms-
-GrIPD is currently available for Linux/GTK+ and MS Windows
-platforms. It may work on other Unix's, but as of yet it has not been
-tested. Since wxPython and C are both highly portable, most of GrIPD
-is as well. The only issues should be the C socket and multi-process
-code.
-
-
--Requirements-
-    For Win32:
-    * Pd
-    For Linux:
-    * Pd
-    * GTK+
-
-    To compile under Win32:
-    * Python (v2.2 or later)
-    * wxPython- wxWindows for Python (v2.4.0 or later)
-    * a C/C++ compiler
-    * to make a stand-alone .exe file you'll also need
-      py2exe v0.3.1 (http://starship.python.net/crew/theller/py2exe/)
-
-    To compile under Linux:
-    * Python (v2.2 or later)
-    * wxPython- wxWindows for Python (v2.4.0 or later)
-    * GTK+ and wxGTK
-    * C/C++ compiler
-    * to make a stand-alone binary executable you'll also need
-      Installer v5b4 (http://www.mcmillan-inc.com/install5_ann.html)
-
-All of the above are, of course, free. 
-For Windows: the package includes compiled binaries of the gripd.dll Pd object 
-             and the gripd.exe GUI executeable. 
-For Linux: stand-alone binary packages are available for x86 the architecture
-           with either OSS or ALSA MIDI support.
-
-
--Installation-
-
-Windows:
-   1) Unzip contents of gripd-*.zip to .\pd\gripd\
-   2) Put gripd.dll where Pd can find it
- To compile from source
-   1) In .\pd\gripd\src:
-      a) edit makefile
-      b) run: nmake gripd_nt
-   2) gripd.exe is included, but to recompile run:
-      python gripdSetup.py py2exe -w -O2 --icon icon.pic
-
-Linux:
-   1) Ungzip/untar contents of gripd-*.tar.gz to ./pd/gripd/
-   2) Put gripd.pd_linux where Pd can find it
- To compile from source:
-   2) In ./pd/gripd/src
-      a) edit makefile
-      b) run: make gripd_linux
-   3) to build a stand-alone binary executable of the GrIPD GUI run:
-      python -OO Build.py gripd.spec (Build.py is part of Installer v5b4)
-
-Be sure to have gripd.dll or gripd.pd_linux in your Pd path
-
--Using GrIPD- 
-To use GrIPD, launch Pd with the -lib gripd command line
-argument, and put the gripd Pd object on your patch; it's scope will be
-global throughout all canvases.  Then send it an "open <optional
-filename>" message to launch the GUI (gripd.exe or gripd.py).  
-You can also send a "open_locked <filename>" message which will open the 
-GUI in locked mode. This will prevent any changes from being made to
-the GUI itself. 
-
-You may need to set the path to gripd.py or gripd.exe by sending a 
-"set_path <path>" message to the gripd Pd object.  For Windows users not using
-gripd.exe, you may also have to set the path to python.exe by sending a
-"set_python_path <path>" message. 
-
-You may also send a "connect" message to set the gripd Pd object to wait for 
-an incomming connection and launch gripd.exe or gripd.py separately.
-
-If the path supplied to either an "open" message or a "set_path" message
-is relative (i.e. begins with ./ or ../) they will be considered relative
-to the directory containing the Pd executable file (pd.exe for Windows and 
-pd for Linux). This keeps behavior consistent no matter where Pd is launched
-from.
-
-If the GUI is launched from PD, When the GUI window is closed you can re-open
-it by sending the gripd Pd object a "show" message. You can also hide it by
-sending the gripd Pd object a "hide" message.
-
-The GrIPD GUI itself has two modes: "Performance Mode" and "Edit
-Mode".  In "Edit Mode" you can add and remove controls using the
-"Edit" menu, move them around by selecting them and dragging them by
-their tag with the mouse or use the arrow keys (note: ctrl+<arrow key>
-will move controls a greater distance).  You can edit a controls
-properties by either selecting "Edit" from the "Edit" menu or
-right-clicking the control's tab.  In "Performance Mode" the controls
-properties are locked and when activated (e.g. clicked, slid, checked,
-etc.) they will send a message via their send symbol.  Conversely,
-they will receive messages sent within the Pd patch using their
-receive symbol.  Look at gripd.pd and gripdExamples.pd.
-
-GrIPD can forward MIDI input to Pd from up to two devices. To enable MIDI 
-function, select "Enable MIDI" from the "Configure" menu. GrIPD will send 
-note information via the "midi<n>note" symbol where <n> is either 0 or 1.
-It will also send controller information via "midi<n>ctl" and program change
-information via "midi<n>pgm".
-
-GrIPD also allows for the use of up to two joysticks. To enable joystick 
-function, select "Enable Joystick" from the "Configure" menu. Joystick 
-axis and button information are sent to Pd with the send symbols
-"joy<n>axis<m>" and "joy<n>button<m>" where <n> is 0 or 1 and ,<m> is 
-0,1,... for the number of axes and buttons your joystick supports. For
-example, to read from joystick 0 axis 0, put a "r joy0axis0" object in your
-Pd patch. Axes will send integers in a range that will depend on your 
-joystick, and buttons will send 1 when depressed and 0 when released.
-
-GrIPD will also catch keystrokes and send the ASCII value to Pd while in 
-performance mode via a "keystroke" send symbol. Simply put a "r keystroke" 
-object in your Pd patch.
-
-Note about duplicating radio buttons:
-When creating radio buttons, the first button created in a group is the 
-group marker.  Duplicating any of the buttons in a group other than the 
-group marker button will add a button of the last group created. 
-Duplicating the group marker button will start a new group.
-
-Note about image paths:
-When a path to an image is relative (i.e. begins with ./ or ../), it is 
-considered relative to the .gpd file containing the image. If no file 
-has been opened or saved, the path is considered relative to the directory
-containing the gripd executable file (gripd.exe for Windows and gripd.py 
-for Linux). It is therefore recommended that all images used in a GUI be
-placed in a directory directly lower than the directory containing the .gpd
-file. For example if your .gpd file is in c:\pd-guis put all images in 
-c:\pd-guis\images. This will make distributing GUIs much simpler.
-
-Note about MIDI and joystick input:
-If problems occur due to MIDI or joystick input, you can disable them by
-editing gripd.opt
-
--New in 0.1.1
-Added graph control
-Added openpanel and savepanel
-added MIDI and joystick activity blinking
-Fixed zombie bug
-Fixed multiple opens bug
-Fixed checkbox and radio buttons bug
-Fixed rectangle redrawing problem
-Fixed selecting inside rectangle problem
-
--Contact-
-Drop me a line at jsarlo@ucsd.edu
diff --git a/extensions/gripd/connect.xpm b/extensions/gripd/connect.xpm
deleted file mode 100644
index 34f282ca4..000000000
--- a/extensions/gripd/connect.xpm
+++ /dev/null
@@ -1,27 +0,0 @@
-/* XPM */
-static char * connect_xpm[] = {
-"21 16 8 1",
-" 	c None",
-".	c #000000",
-"+	c #00FF04",
-"@	c #BFBFBF",
-"#	c #FEFEFE",
-"$	c #00FEFE",
-"%	c #FF0000",
-"&	c #0000FE",
-"      ..    ........ ",
-"      .+.  .@@@@@@@@.",
-"  .....++. .@......@.",
-"  .+++++++..@.##$$.@.",
-"  .+...++. .@.#%&#.@.",
-"  .+. .+.  .@.$#%#.@.",
-"  .+. ..   .@......@.",
-" ........  .@@@@@@@@.",
-".@@@@@@@@.  ........ ",
-".@......@.   .. .+.  ",
-".@.#&$$.@.  .+. .+.  ",
-".@.#%&#.@. .++...+.  ",
-".@.$###.@..+++++++.  ",
-".@......@. .++.....  ",
-".@@@@@@@@.  .+.      ",
-" ........    ..      "};
diff --git a/extensions/gripd/connectX.xpm b/extensions/gripd/connectX.xpm
deleted file mode 100644
index fd4f27b6c..000000000
--- a/extensions/gripd/connectX.xpm
+++ /dev/null
@@ -1,24 +0,0 @@
-/* XPM */
-static char * connectX_xpm[] = {
-"21 16 5 1",
-" 	c None",
-".	c #000000",
-"+	c #BFBFBF",
-"@	c #FF0000",
-"#	c #3F3F3F",
-"            ........ ",
-"      ..   .++++++++.",
-"  ....@@.  .+......+.",
-"  .@@@@@.  .+.####.+.",
-"  .@..@@.  .+.####.+.",
-"  .@. ..   .+.####.+.",
-"  .@.      .+......+.",
-" ........  .++++++++.",
-".++++++++.  ........ ",
-".+......+.      .@.  ",
-".+.####.+.   .. .@.  ",
-".+.####.+.  .@@..@.  ",
-".+.####.+.  .@@@@@.  ",
-".+......+.  .@@....  ",
-".++++++++.   ..      ",
-" ........            "};
diff --git a/extensions/gripd/examples/clickme.jpg b/extensions/gripd/examples/clickme.jpg
deleted file mode 100644
index 50419c31a24f5da4ae2ba0b8e774c0faa9528d06..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2798
zcmb7Gc{J3G8vc#Jn6ZS6bueSZSf;WMQ6bAr84)99QVOBSjHQoK%916^Oh%DCWKsz;
zmdqE~hb+m~P<_6!3z61KuI@Sa+;jiB=RWT_?>X;z-uHRV``@!YzWo;<O|Zw?10WCx
zaNH?i`xl^KOY`#y_wz+w4h#=Kx&`<l9q>-aw<iEwKulB=A}S&Vfk2>8F_?s$q=dM*
zgp%y;U2>|*>T0UW2n14duQpOcAB{j@%yjhk8yFiKt81HE;S4SJ8W|h@76Cz_PziAf
zMM+6TLlgpK_<v)&1&|Q~9Do)uNCOa(0fA*e+wFh~00@D9zwsZ4fQ3at5TPB?LK*;p
z!9v1dVF*OzUke~1urMGZBa0F>uy)z)LxpG<-jK6#r8A1B;PPmrv$X1)FI!&^?c6Hv
zi2k=OAOr#n?=TuNfY6TT@Ahv~kdO>m7PTX(;Um2J(>5QF_|40JWq?D#x1X4jSWHPV
zeXpg<-4DUs_2I|<X=6pXDV6d9senWFnG^9LHblY9amq?xi~h6tTmFs~p67AA6=&<Y
z!v-aE`%`?C)n4u-Dk;$3M%g~|&Mfh}dO={qiv{I5xZ&9b`JrTBeVR(P*Y@LMAjTwR
zId{FZzWX#XOr+~QDbdrR{ckR}setLN`*fB{3lh|;5c^CT2XZuS=Z_4IrljpnP-Y~E
zz)5~Rl8vYn{sss&Z@nAl8v_<Mt$w}1e!Z6#n*RCeoQ=v!7o5@oDKd=jKiHWvYv)mT
z(4<DZR?9-!r<#e`25wA_DteaG9y_&f%+8Jp(?2;nmPC3u>^9{<qd)6jDBv#HsNr#a
zXCvJnu=c=PXnLt$D%Ru_!f`sI3<2`Of3dq-97u(F$;l-EuGZrzKZ{_PM`lqUYM*2{
zDvpZE6tbgSo}1`}CzbZmj&Q8wix7uJ=BhKttsr3(`S1F1tSs)-_q;zYxW4c&;?$w|
z_g$NFKdq6R4V@QGm>%t65q`D_ie<5cTkWtMC2tAe6&2@E%`+K9j+aE-q1)5P!ouww
z65mIwo&NcRlAZa=L+x}cAI6*)y`a-}TZH`n{zF*Qo6q1cS~a;>rHEZ&lV>R&IgHXo
zc?Oe-0IV)7et@R>9x;%4miS}&O9m}Em-kMZLqT>#TT>UL&N(U)>>W_wR%g7f{Q0)>
zRO8sj&ExyyH+1K9M+dTqz0Jj}d^Np53QKZ7BUEm&)!M4Qve^2tv^6Bu?(F-i@+uOt
zDXz>zfg!K%qTR}a5L~4U(pZH<<f&h3gG^>U%%Jt|@Sa0u;nXzU7z0yuEze!R-!nu@
zFGp&!$2JOYU83l3F7yo~W3v~;&R+a_k~)x}NBX`xZMh`=attl?s-aqL;_ijGM_v&X
zfx%G4;isi@q_)Dl77;3O%Tfm?bCM{m<Z#PIDgBuaDM7YnwRhh5TGt+@wXnj~+N{X2
zPaBgC`0-g5)mgf>4RLUbH=OVUXX~`ZDX`tVGc8G+jH`h4UpX?>duz8R%D!G$;eHkq
zgL|R_9kM1}tvO`z`K(JA!CTdrPtn@q)jMjPTE0Zlw#a+Vd0two#)G1vh}f$Ax3Ep;
z+4rj2oD)P&ApGJNwRPTcr@xt3xjc8i*4CPSKxg{-rene9*fUrkoQm2UeAdz(+AHS`
zb&X4C_ao+=7avY2h@q8*EuTV8FMBF!W1gyY$WJ3k&?*bT(cuDg6Zy#+5y}0Q*map`
zbF_IP|M2xdtDt3G*NT~O=%z^)<iyi3-U0Ri7X6di`$mgtqto~g@9-KRE+AvdIDS)S
zFyG?ZQP+%~hO*Xept|Fcl?hL>E4blf8YUP8b(|M%ZSe0*jBhd|8w@^(eV8XE{FV23
z<m)<C{;in^z%kv=hknnF1g~zg;OqQ{ID@P{n}<}pS9NuD-`*<0Q0PUZru5bRFUGxY
z?~F$8ySl}*bYXZUVZ=>6XqT*0SMtX^3x0E66@2=eebnYnQefAvx+d&R5zd&UgJQs*
zAOt52x6b3&MgmRE?8>c$mZSR_sOo~0aZE;QRfi|$W5q(6=0vmPdTE(33I|*S7D#08
z(pmaV3jOoLW7=ZyhZ<fy>NL~nQc8S<B$4U+W7jB$otmm2^x|!*M1x8upTmC8op%n>
zy$y^|e;q-r;kt&_Mtk0=W~~!5<5tcDZd5*VSpj=rlDY(+IG#j%T<(z=Ue<=fv|jE1
z>u*k`N)tu8kT2_%tp50qcxEM!sCIe*Jo?Do)LTVAy4fY{c6qsi_)*ehh0wtt`P+d0
zP=Er4dXY4L5vR_mv)R<DN0X*2Ki)1lzxk%OFIRQ;6*e8t?jaDw9l{0KMl+nf{;#D5
z6zyYMf)T?{gFIK9y`C=r#Nqy|Gdk9vrp=e_9biv{p7h{y0BEP+T8G1@5pRR0F2=Al
zfApNidOFuf50LDP%D9qmk?}IJI+7j{Q?F^cxOw=NBgT3~)a=LXi`6_U^(1sz@}ABf
zcovrHcj!7{zWj~z{OlUOqjO8u>A78;O6MI^U9P$(q2*wHA5x%~;?mOJjeY()i_Okz
zFs>AyqrTC><33(4`Ox|)*x7jgXwB&WAE|Cq&5bQI<C;z0<i*T}8x?(%vh_+n(QVcz
zVYtq%D_dVuoFY_Dv7_eXJToN7AI*}S;w@XHb3g}zyiI%s&0H%nctdS}$kj++_T#!m
z8^+Z%ufN5;_L;tw_Er;gqjCLr1~=0s&wMweqzZTaL0jEa$gHX8@o0S(6?@%aG4PI2
zuukS|v1TD}$z>c546kt8Lo=89>fCE0DkOgTGgF5hH4HVmS$l0+fu(a1n7o(~)o%${
zuC-3i?lF`%EHrUwR@#g=p?ZDXt$xF;bTi}R-Q?U$N!o4I?bLlp?%g>#M43d<v?hIo
z00wvG+AjM;uZ@Jby4I9BVw5kx!_O>nLZ)8E`KO;F3-)C5c%3s2joP%B3(HjUz4GBD
zyk~Iq>x%P)XZ8*S(6XMSY%`qkmcQwQ3`ym}XDz+<d-HBNA!?60LoH*+qg}82zgE~F
zm-PwmmU3nBb6+#wyZ<1qEc-e2pkGsT393ZKiC3-xlS;6mp7_gilH>{~jCfs2ms~LU
z35UmfBsp~1QXKVl?6BDNvb;#eZGisdbb?T4>kM`)qydtOo$(_^DlLyoR!%J;$fa@}
zF?s~@FE7Sr;`ma3rAgcI<rUK+L`?9<1j{F0RuGgs?ekw%y_dw73C@EfrmpU)#m#Hx
zg7S9*ArWS~OhEFdA~#r=h#+$AFOAw)l><zo2FG+ay?{ujTDYg=BwZwzlw10<ks;BH
zD|d!RXsPuPpPb-%jk!Ve8*U}EN%zGzn+AKk$P|!ox3^9=94te6+hLAWo~83+A5Unj
zjCsKIW_3p~MS5Z^Xs6z^?P2o{a!G7ygO1CLs~H@Fc+@8+ENX$DA*{+PnvpEc>B=$a
zZ1!}9?NI)hm}qtBh>^0>34=@=>2=7x9PD9yl%^c3gB4BfRZi{*lwQxKl9;Nx3pOXA
zmX&D5u6AD^#dY1J7wHO(tjuo58COusvWvsZV6EavLyBUDXGv`Nr168y;_krHgho4%
odj-pZKtCoD&Z;Ov+xj3L5imQc;CGrz0ZLLZLMi`iJhc7xpOMz)AOHXW

diff --git a/extensions/gripd/examples/fmlogo.gif b/extensions/gripd/examples/fmlogo.gif
deleted file mode 100644
index 9fe550386489aac699eeef5e05448e349f817c01..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6459
zcmWleXH-*()5dS^z3J^zr4vf%O6VOEYA8bJD69lj1VlDS5fC(VP)evGw$K!@1w@UC
zZfJrlYE%SNb~h*}mep7gaQ(~c`)%gTInRfgc|QDReEobJo#OieD`0sIppX?1s>+d;
z6N(CIm-?<fnS6e4;<2)lR&r9hj<)IcZNEQ%`gvsd!L6I)h6dIa=5A)D&YPq5MMdO9
zgk`O_a5ph_*sy-1xtYtEQ?tCZx{<-<jqZW1E#eSPd|<$qnW^vTyrTUDwON@ZX}kB8
zl{TF?-qU|c(kr?dv-yClOL%A7d~<^|HKm!mwREF<bnk^F(fO|z&wajd_S3mDA9_x|
z>+X7Uy7Tp^j#pjn^PO!k+fT}b$Ny?Q{G_q&UVZJKHHSv3DhCf$NGi*27V$6d&%c<T
zcP@8tcTV=HjP#Sdw4-UMElG)jxZjF51@7|n_|4rd($yu*as#XH;?nt^k7v8zpE>pB
z#L;I*k4ztKdRSY1yS(&9X|b5Uzjt45&)%%g?97hLJ;Icv`UGydAA5(dPlAtkyay|0
zqkELI6UWhE(<RYTfd5W!uQ=w$=>FcNGpAl%?)!GRZ^_*){K}<oSNp$-FMm7V^SZh5
z&b2GwE}mPAjL5it_1ksvx7L=s1J}OwURbQDx?XtT%&i;CH*YN88dxqZJ}0@kJa}vQ
zKtadQAItTE8^e<2g!qD(Et#XkE4N2h#8>9;jIEqJK79Ai3h(#Ii9c5!K3J`-Is5qG
z>eS@-#)fm(uT7mk^~dOlZ0gA;*+2i?zc&{ani(9F)-IgenOM7HdsReuc35ae2#2>T
zrLpQzUsh(*;bzJGd#h)ACMF+$pMCzHnwmb1wq99T%g)Z<!orQg@UXG*UbjwHSy_WX
zAX`{CYH1n3FxuMM-O|$8+dJIc+}6lwLuO_b8jYdTEu5Xb3=B-^baP|l^)wp&;K7r6
zdPbU>x|=sA>gyY0u{bVwS8eUdrlw9+RkhB}zP!AWUAr>RpT8~?o(%}#^z`%}J=z%=
z88bY5Pa^sA#*NY2w;v1*{V5hpIy!n16H`V;?lv{G#>U3w=H~zP*NeKk#yfZJIXXJo
z*x0^*|MAtUH>IWJK0dz7%d20$EJ-Ai(9lp8i{<9#=IrcjZf<U5WJIIU)Ya8hR8#-}
z&|8I30I&pD{EC79_XHES2E4;-u|>kcVw{p$?6|0HxEwL?53dOJY-eR8g!g_PW}gY$
zk@Tcz)Vx(vP)3T+A5`?I*6|8uX^MAmHYDfIN|K!X57it0sj=tfq*=Y5U367Hd)Pwb
zf@NfaxGvOStQ%`=l(IwZ<1jX`$(C#T`K-{*cirn5$>)ynr{yY-gVZm-C@)UIFKpIQ
zE-xc%#Ua{HL%gdkp{H!E&q`ys4t<-1f$=$|q~Rq07b77`o_(!O+5F0!(~MR%=d8|i
zCg7`oB$*d%k-Xk6Wz7`mFKy=%1uR0}1(1GVw^6k1ocb~q=&535N8aS@czsFarJ^69
z-+pSxatmXvUrnsBC~#H7PUvMqV_k=@f{_YOyT$ut+y}39@n2WkM(sof>65H-<#4&=
zpY?jF+lX43(h%<*EWfWcHWalsZ`J53k5c6{i5{A=dC{Yl`Qv@>n3mll69PUm7)1tU
z6DTj!#6=H|`@VY*8x*(O8gtwabza_93!zL6OVDRdcLaO=R5SE(*<vK9w>>8<Rl^=@
z5ae0n=DZazJW&D-^5tzl)VPwt0Q;q5vO-#k{F5wLVS{qDVWry87|}Jg(1QWdn=5FU
zQrYl26D^vA`Dn2htCJ~iE7RONF;_<R5QO?z`n_`OtX)#W(;I{bow1aS`K;Sk=r>u0
zwO#IO*9?yj>nRkfhg8`r0`CmJ)}BvX+!D~T6q|7fPJaJvm)lcATA9h6P|hKXX}1wF
z&?lUO)pupa+*Z2EekTD?sToq&H{pHkAgc+6KhheyOM3CD538{MGvO<hxb(Nn?#o~u
zP;H?SPD@>X6&5XSR66&m<mL)E@cSPMzwh`os<!jor`yyn=<b;Afd1$4i~J^>PL+Vh
ziK5k3`I%Qr(@|TY(Jyz5MJ29%^cq?E$OdXDbRTp)@Wh|aHgNMZtbzLi9JPFJ3dU$(
zs>&6Z!%YS%(aMD$z+IirVEuu6D9@eNfxVup8%26W%*8-`O)aZ&WcX>wlwU}V!^#>5
zUXLT4_Et1$tix!ehV#hyD%Vgy^O{L3e+@m7ZIGSr_JlinjMxy=y@l=idqQfHfJ(!&
zUW#`N**0!$?OfP1*lj_%t57$Ctp};t#rBRO@hjF{m>t0(5tJzQoUeXu_lN76u8UxB
zp3@Letc;>4&Y$qbSxVjZ`K6B%Ham*$LE+sjEbTA=jww5?0E70bJT+f3+ZnD>Vn>UM
zC^j5jT?`B7!R10`<`r1w-g4&&8u8cUad1NIqt$pUm*H*k!b*^>^@43-0(C!Q*_+^5
zc>RIkr+Gs~%8Tc9{1f5{XpbS46C8iWL`YMW{IW>BQ#&|skh)gEg{PHis7#5c_M`~X
zQ)ZC{y0P~BLhMFae2`=KxIK;uq=tI}hGGn3zyY+Mm7!Av9x9O%G#xS5x-Ee^CxvAj
z_)NG*HmsG+gYhH!yvcnL4IcEf!7672tHk+kZq|6zoWMVFsJ<B)qU#y5NFymeM<xZP
z#>$?wmy663^NsA%0nc@gB9=-Dr`S|7NHt)NIa??+JIlDZz?>oo<RH7wB_Mf?V8B*R
zsSYh36a$_5JMGwE|5lJsDzi7v=V<-iyN9F?_&O$**RXNcku~{klee!~ad~ruSQE6_
zEqZ<3`$yXIRi`~>;`w=Ho?0st#_ogZYel=mp_C<@uN#>coWFmY*35XBEg_U&ST?M+
z`lAeg#j3j0rxPI4unt#PHK{xUoj0^W`%}gb>ZgiNd}}oEUjG)^*Pq5ImP5KUmGX7(
zxkO*~Fb;07ev*5MU!n$Ur^+GY%xyFbt&o1O9w#IWHE&4*&#GD1X61mY7h6j7W`)HT
zNqRVQaiQinV4}(}9x^H&cVZ4s1*HzD)N@LfF^{SbPqkq-R{-4_?Vak;EMh#L?{b|r
zGqj;c$0Vfk={YQ97Rw@fF-|f)WCwk<^zEujS$}Ih3cLF(6lWpg+m~gawWHgxF*8Hd
zaRx~-sa<1+y=Yzbuu5U=iKq7S6(1;&Q@x{vtET!J*0IdxVM@4x=9}(vr}04`IR6E7
zT*e0#yJs=s9V)eQNNYP2(%2qP)~BJ4zI{mU=WfUJ%!3RKUbSNCiyqyX5&FDUbx>Cq
z)02zZK-q`nkDKid7Y<T<3eh@AZBBE@pn>8bRt*=A2@^k0RBxwx;EJfc78K<iw-nCt
zr0I)&Yzez&@_uZ?WONS`XD^k-kUFo{M#I{90@#RI-1$LLtM?Wu)`sVB2>_GPE-%*L
zvB`EKkUGO)0jVt4qk4#MJrhHe>bF*o;>h1iO1$tdRox|nM8nIs^=3U#cT=ZHTLCO}
zc6d$ao1ok^+YE^!50RZXeM(FbMpMG4RLR$y%VlL|0v5bUfYSJ#<6pW6;-XD<t8isy
zhTjLNYCsv78X(}Uv{Q0giYc^x>k1no#e_3M`)G_Uh4U-y_@v?RcMqu>0UJt($j}!1
zg6h5!PZeX%WfAIMs(_JG1K;d)c?BNpCjI;vjK3+7K#5*vE~&r84zc_UTC4!L3#(&9
z(5w93*EDqC48LfWrekq1Lyw>am^E@>njFAdb98l9c>45AK8>C<(lIH4wh=6~3@WU2
zA|+tRVv)ACm!ZM&ulIa5SRZma=QwKl^ZofxeByc_#$&4+PAw-3cVSJTP$$%thL8(!
z4uAV-EJ~SsW8Q1uW)7?70g`p>_`6#iORX^aMI>7e!A3BoamuPXVlkQEnZ!arV+qvi
z|9mk48;|{aV?5FSN1bzjD6y}<>*fFr=aW>;%zs$E=`$b46?@Bq08-4y!B-@`L8F0$
zN;WA0b7p*tn=68&-!3GaHAQa_TOnMaz3^drG2#f|oELrZ?R?D0;pFk^o!alNor-wk
zmX-A&*zx6-8pEfi$=P~*JyLx8e?|v{a3Em>)@FDelixyan_3M=N`_Q<R!Ew7$i%sa
ztZo~Oq{!L|!|FiocrIF>F$ms~eSf{_V}trsN16C6YE6|dftd=On#2#+r*@Wl9$?2S
z@85<}ngY;U=_CJ>V~62m0x)59i1=FuAqgQa(vYv)pxROJv<y}O7(^7Mmj}o3U@riU
zVxrT4lr)C+cVk6FN;I@X&_Y0ii^~yWECI+`2*uDasX!6B@WB2r3PDWN1Ot)MAbAvQ
zn}Z55M0B_W76bO>!)zYx&4oQhAi^gv0e~$Jy;)LBOe%KlF18W#$t{twV)9=+>OG|F
zo|L>G%Ek0jj!N-@Vyuk>VoK0lDHz01oER(3&MD7fBX1Z9hCa~?B8py1d68p<k`?tW
zuL3PeE)iGkoB_zcpvVY`sW+*7LL(a@;8Fy2$UC-POr|qpCMC(wrNBQxWkWRiF~cb1
z3G$ZtD<ya}*c_obH;eF(WTYt}r7FqlovcDoaj*xcupn@{C?z!Ts>T*wD*<c-u=Ug_
zo7*i_8r*>0%$-XN>Te3xzQt8FBCG=qv#$%mFenaRPz8r^`#IPw3ARLl)8MP_mt({n
z;07Ck8I+ey;JJkSj!PzRs~?y+3x=_F9Kx&D$g&Ja7kjaN*9Dcp>qVIDG9W3EdhyD(
zG(lYoKgWwlz^;-F8TeWzuCBc<LJqOHn2(7FSwL=8!ta+eeYu(;B6y<^3SDDh(-FvC
z2#ti+zT?|Cg(;UX;Iq-xXB=mjvYZ$Mg}oEyG^FzZr7LFYMsDU;bZKWW0vSvwngM&;
zBCjPV;uWmPxKec)GR4bxWI_E782eD_O9{~#f!J4}NFkIg3z=b1{-IH10**xl^`neK
zmIjOH2-p-lY!?fDqNrz4J|WcC04EQpTEoNz*rMa)s!#|kS&thjLvM(rl0{@tL}|D~
zE_8HVUP=$7?ZFi)?r7M&Uj>d4VDKe?05HgugL{h|l5>&ILV@8Ch{=bkT*dDo%UeJ&
zk-z~0%-&3VGtIh5RJD$~;cphjI}BgO#OAGWoR$O>UBJ3U6n=q0Hs(8R{X}SH;16+e
zjgp)tg!+V6V{8H;*^nm_(+!YZy<OF;&=E|?48Umv`035o{hg=-49sL{UWUZ(qZQDQ
ziF^>@c7!>EG0-0#L2k(2C4h?KDeaeGbW<E!?T%r3+sgPZ5j^xp8s@|*HHnA9bDJ)4
z6lDS+hl{I}RkH+`X{OR+o^2%nv1DjGlalo+Y;onN<wNK<E|e+TWxasOZUA#o?p9l{
zVOD5+E?T%`@#?hZ!G#T}ZRp+Gp%hV#wF<T%gE%D$y!sT4=YV*W`?|V#Td7N-1nQzg
z_K#w2sl%mm?%p*|_4ccXwh(7?xdC-5{stE$%@Ms2Y$gJ^bK!2DKu>~V4EY7nP$TV{
zJGMdYGIXGv*P29hl<0*@b+#}t;9KG?DLSdq$Bs+y77^oTQhqRT2S<D2Brw1Pmbm0(
z0n|^>_Yr`euUp@RKpi}lpbBI(SK)9y<iaG}7s5_5e{DXQCP7_<AVq|1!az?KLmRdr
zhBDZW3E40pYrdQ9YwTG$adRPJD23lHVxoX%DdQKp;*a375(MBlPdB*^@<1@be4Xze
z8720F1uM+MaO#M_E1?x)Nx)$r<hw{yjn%7qsMp9I>pzdV)(j`|il^36?Ca|aOQfy|
zDBSr-YW8g}R}q+mfQcM*C=*)>fIT8?Y!CEh8;Zd&wP##JTY($~yhR2@@u1MUuKhGz
z5rQjEM;^n!swMpbrb?!ZBM(-f5hqp)R;<h{WPVT^)wJ!mwyV30Lzwx*=wx}Z+4ieJ
zNUw44RUVSZJ*+yF;h<IT5-DxOzKL6>hej_$__IW7PI9IY-F$ebg`D^tL8l<tiKNSz
zUX&__;KzhF^3ZmY#65(-DjDhK_RJgrnhzr+c~ciT&iOpFACCY@;tV^}OF9ScPbNh=
zq-SadC0|j{{-m&*q1eY18!m(M2JnS+qURcb1&7pKM7qHY@ZA(`U>SKSC7E)6`3mhS
zfc(a2bsp$Va(gfyxGgtH7eTHJ!i9K>rJ{{Hg4rZ*cz$ZXFe>lvjjWEbfw<}P<hdw5
zJ-VPf&=3o`(|(EUF*l}#_kvp(a36>KoJq8}dP^aMe4R`1ltar`E~YThkplEiZZ)wV
zn@NN0Xiz_cGK+wRn79-nI)O>dD>hJ^9YH2?DYFB$J%*~!Jn_8}4_nw<rZK}Knl@{6
z$e~y%I(7i{U$%FTIU*NQc2!k)d?An4gYH5ojD}9>2UqQsKr1p>j!oyeRWrdy3{nXn
zYcI3I^P3#jp65~r3aaz-4rz@l4FtNBfY$_Vn8A@^ImqO|TM;8b*qb7A@kI!HYwyF^
zdy`|Svr_!R%-($*_(Ubq6~Mj>p?e{iUdic4U-RqQF)=)Rs}N^A4zYOz6#veHcUeIb
z`z`w?-tEm3WYW)0$0e3$vk@ar0C#jd-JeU$c#SHi;d*{_6HuD$FF5)%v@mAU$i#^~
z(QaHgK@<mBf!AGh8ryMA*3d=?h(A|QWidK2(AOM(2|ah3G*J+yl|5N?Cw7`1CjsNF
zjgB^=*&G7IpzMBuLVNkYI))hVan^R&t){TOGcrRX*CHqEnES?$wVkjJ`(w@3G|Y<N
z$szPJ#dV~cu$xDg3%0-$?nY|-o=!Y^FRc&Ho;8BiwT<R@#G^1w7!O$D?=wX`QY%O3
zQcOeWumcaWW?(jl0I#Kci}=cM3{<kbVM&%F*g2N%3Pl4~@w{+_0cq`frBuL7Mb((c
zL<6qyH4gGu$z<g`WgX@hZH-wlP-@P54i%u8iG-0NQl!uzj`nNS&l_>}nq2`eTz^cN
zBgPBR?jkUX3#Cc0hh(nhOso?>z?4J0#GkgrfM)4h>(imNS@@eTa<DqyUVy&v9j=I>
zeg^`pcFzX#F&p*~y_t|^89G{UI7$ldk&$#yk;~R({i6l5cW%y({5#uu-jdM^(+V-F
z9O7UBvL^U@6OU-XvbfK{@XQraywgh@vWf`JmB2fg|ExYjrX<8}<oJbMa4Z9km7xQ;
zgy|R}1psC@BMY)kPVsK&1XzJdJQj+4+62G-3j+s<*92(8{RE?*mTVQEOA0DU;Y~Ec
zX&OO^L%>Un)|kH<O;~^8=5X5!dXP-<3zdCh-tU8_{)Kt}t@%Mg7PH6#`vaehqAm)F
z*LgrMjkt9K@e%`&BESL{`Oc=i<KxF)Z;0abZDXRYx><(*r1}OeL{g}KNlDk43pcG_
zXS!=;q%ABZl^f9TE@hC1DG!d9z)DQazsj$Rb>7rpK>iS55K)J#GXO}5C_!w)&o@Gy
zw?--m;L`G)skA1g;6-Fj4#}yMbW1Y2oI^^z=h*Rc_o<q<|1v1k((s@s;CdeTP0)2f
zG40d(%J>fvxvQa|rrLsX-MRvm*Gk*ijbvEFKmC*XR$fd~vi=$l_&6XAEya7~)@xs_
za|D#Rt&4<(Iq#N519#^AaV@%>`jH#?pNPs-pN+VL*Ntd=DqgpSyo`hF`{YXBw^EN2
zl;?OPb!10xJn5MLh{!)qS!r35lSXN^Ln6|BBs{g8H1T9=jd$}U=hMu!14sLTqmP{|
z<Tn}M<^QdLuTYO8F!xRQ>D|)%$EXeNu@bb;cB`$7uZc{I_M3kTWz^#1CR4ppCP(UX
zxtzd<bLIEv<hM+}(?IWxkb8spS|MH$LA_gD{PA=1baZ2*J96|Zsh3X(%teWdi2d9f
zmjarQj|L`x+V}J~#pd2GFsPMs{*();5BQGy2b$G?-<#rOnYP^g-!Z4-!=9RyP1XnA
zf4BLEyc&Tui2QxO%4Gpg@GMfbGEci0^A55uWJWC)A+Ga>(j?9$N3iB@OJ!T_T)yD+
z-Oc{T0Nb-04h!)26?|Kz*W5iO1@}#-^|mB$L_Q(A>HN_6V)NiPL%T1T|H1q94an{r
zZJJ&CA8|ywJTCeq6;ggky-I#xF<1*Q=jlB`ET<*SX>V5cRFZ+vpDX&i38uRp){IxE
zh#aOEMhk=k`&NJc&vW{G5vBqmHvTtldD5*|ec^x4CuL-9*WAzS?+%tPC8eej8sSf^
zU%D2oO?H`wTuOA#T>F4ez1GKl(5Ugx(tl$?g+<%Oio81_^kc6dTzN}Awp^p@xrcCq
z?xwoF72M;sv}wJXl8IYk#Km@l!`xDo7}H*D@cQFFGYz>*9~PcZe~gn9&W*midNx?g
zG0g)EEf0}z8?U1WpNf6@dB?<&rO%pruNlXj^;YK|$3FX-Jb5PK;)Qdyd>xkz*P_|3
iUq`{+v)8gdzB>Le^}+s|rBvgsvn%QIcXF{X;PQWZAy}sX

diff --git a/extensions/gripd/examples/fmsynth.gpd b/extensions/gripd/examples/fmsynth.gpd
deleted file mode 100644
index e6b25b437..000000000
--- a/extensions/gripd/examples/fmsynth.gpd
+++ /dev/null
@@ -1,442 +0,0 @@
-328
-467
-#c0c0c0
-localhost
-32781|1|2|5|10|0|1|FM Synth|0|0|0|0|1|5|0
-4
-
-16
-57
-294
-259
-srectangle0
-rrectangle0
-#c0c0c0
-#000080
-22
-74
-93
-90
-0
-Arial
-!END-CONTROL
-5
-Carrier Freq
-38
-105
-67
-20
-stext0
-rtext0
-#c0c0c0
-#000000
-12
-74
-90
-90
-0
-Arial
-!END-CONTROL
-2
-100
-34
-124
-24
-139
-carrier
-rslider0
-#c0c0c0
-#000000
-8
-74
-90
-90
-0
-MS Sans Serif
-100
-5000
-1
-!END-CONTROL
-5
-Mod Freq
-141
-105
-59
-20
-stext0
-rtext0
-#c0c0c0
-#000000
-12
-74
-90
-90
-0
-Arial
-!END-CONTROL
-2
-0
-140
-124
-24
-139
-mod
-rslider0
-#c0c0c0
-#000000
-8
-74
-90
-90
-0
-MS Sans Serif
-0
-500
-1
-!END-CONTROL
-5
-Index
-235
-105
-52
-20
-stext0
-rtext0
-#c0c0c0
-#000000
-12
-74
-90
-90
-0
-Arial
-!END-CONTROL
-2
-0
-243
-124
-24
-139
-index
-rslider0
-#c0c0c0
-#000000
-8
-74
-90
-90
-0
-MS Sans Serif
-0
-1000
-1
-!END-CONTROL
-5
-Amplitude:
-34
-340
-73
-20
-stext2
-rtext2
-#c0c0c0
-#000000
-12
-74
-90
-90
-0
-Arial
-!END-CONTROL
-3
-0
-35
-364
-140
-24
-amp
-rslider1
-#c0c0c0
-#000000
-8
-74
-90
-90
-0
-MS Sans Serif
-0
-100
-1
-!END-CONTROL
-14
-./fmlogo.gif
-77
-5
-180
-48
-simage3
-rimage3
-#c0c0c0
-#000000
-8
-74
-90
-90
-0
-MS Shell Dlg
-!END-CONTROL
-14
-./scale.gif
-58
-124
-23
-139
-simage7
-rimage7
-#c0c0c0
-#000000
-8
-74
-90
-90
-0
-MS Shell Dlg
-!END-CONTROL
-14
-./scale.gif
-164
-124
-23
-139
-simage7
-rimage7
-#c0c0c0
-#000000
-8
-74
-90
-90
-0
-MS Shell Dlg
-!END-CONTROL
-14
-./scale.gif
-268
-124
-23
-139
-simage7
-rimage7
-#c0c0c0
-#000000
-8
-74
-90
-90
-0
-MS Shell Dlg
-!END-CONTROL
-14
-./scale2.gif
-36
-389
-139
-23
-simage48
-rimage48
-#c0c0c0
-#000000
-8
-74
-90
-90
-0
-MS Shell Dlg
-!END-CONTROL
-4
-
-16
-309
-294
-124
-srectangle10
-rrectangle10
-#c0c0c0
-#000000
-8
-74
-90
-90
-0
-MS Shell Dlg
-!END-CONTROL
-9
-100
-36
-267
-34
-20
-stextbox0
-carrier
-#d6dcf8
-#000000
-8
-74
-90
-90
-0
-MS Shell Dlg
-!END-CONTROL
-9
-0
-142
-267
-34
-20
-stextbox0
-mod
-#d6dcf8
-#000000
-8
-74
-90
-90
-0
-MS Shell Dlg
-!END-CONTROL
-9
-0
-245
-267
-34
-20
-stextbox0
-index
-#d6dcf8
-#000000
-8
-74
-90
-90
-0
-MS Shell Dlg
-!END-CONTROL
-9
-0
-113
-337
-34
-20
-stextbox0
-amp
-#d6dcf8
-#000000
-8
-74
-90
-90
-0
-MS Shell Dlg
-!END-CONTROL
-14
-./screw.gif
-3
-2
-19
-19
-simage5
-rimage5
-#c0c0c0
-#000000
-8
-74
-90
-90
-0
-MS Shell Dlg
-!END-CONTROL
-14
-./screw.gif
-305
-2
-19
-19
-simage5
-rimage5
-#c0c0c0
-#000000
-8
-74
-90
-90
-0
-MS Shell Dlg
-!END-CONTROL
-14
-./screw.gif
-305
-438
-19
-19
-simage5
-rimage5
-#c0c0c0
-#000000
-8
-74
-90
-90
-0
-MS Shell Dlg
-!END-CONTROL
-14
-./screw.gif
-3
-438
-19
-19
-simage5
-rimage5
-#c0c0c0
-#000000
-8
-74
-90
-90
-0
-MS Shell Dlg
-!END-CONTROL
-1
-Mute
-216
-381
-81
-35
-mute
-rtoggle0
-#c0c0c0
-#000000
-14
-74
-90
-90
-0
-Arial
-!END-CONTROL
-1
-On/Off
-216
-333
-81
-35
-onoff
-rtoggle0
-#c0c0c0
-#000000
-14
-74
-90
-90
-0
-Arial
-!END-CONTROL
diff --git a/extensions/gripd/examples/gripd.gpd b/extensions/gripd/examples/gripd.gpd
deleted file mode 100644
index 4aa7645c8..000000000
--- a/extensions/gripd/examples/gripd.gpd
+++ /dev/null
@@ -1,380 +0,0 @@
-493
-433
-#c3c3c3
-localhost
-3490|/dev/js0|/dev/js1|5|10|1|1|GrIPD|0|0|0|0|1|5|1
-4
-rectangle0
-15
-5
-462
-358
-srectangle0
-rrectangle0
-#828282
-#303030
-12
-74
-90
-90
-0
-
-!END-CONTROL
-0
-button0
-37
-37
-80
-22
-sbutton0
-rbutton0
-#828282
-#303030
-12
-74
-90
-90
-0
-
-!END-CONTROL
-1
-toggle0
-59
-75
-80
-22
-stoggle0
-rtoggle0
-#828282
-#303030
-12
-74
-90
-90
-0
-
-!END-CONTROL
-2
-100
-271
-31
-30
-80
-sslider0
-rslider0
-#828282
-#303030
-12
-74
-90
-90
-0
-
-0
-100
-1
-!END-CONTROL
-3
-0
-276
-110
-80
-30
-sslider1
-rslider1
-#828282
-#303030
-12
-74
-90
-90
-0
-
-0
-100
-1
-!END-CONTROL
-6
-0
-33
-225
-30
-80
-sgauge0
-rgauge0
-#a2a2a2
-#303030
-12
-74
-90
-90
-0
-
-0
-100
-0
-!END-CONTROL
-7
-0
-34
-313
-80
-30
-sgauge1
-rgauge1
-#a2a2a2
-#303030
-12
-74
-90
-90
-0
-
-0
-100
-0
-!END-CONTROL
-8
-checkbox0
-109
-232
-85
-24
-scheckbox0
-rcheckbox0
-#828282
-#303030
-12
-74
-90
-90
-0
-
-!END-CONTROL
-5
-text0
-167
-34
-79
-14
-stext0
-rtext0
-#828282
-#303030
-12
-74
-90
-90
-0
-
-!END-CONTROL
-10
-0
-96
-113
-15
-26
-sspinbutton0
-rspinbutton0
-#c3c3c3
-#000000
-12
-74
-90
-90
-0
-
-0
-100
-0
-!END-CONTROL
-9
-
-41
-183
-80
-22
-stextbox0
-rtextbox0
-#ffffff
-#000000
-12
-74
-90
-90
-0
-
-!END-CONTROL
-5
-<- "Enter" to send
-118
-185
-120
-15
-stext1
-rtext1
-#c3c3c3
-#000000
-12
-74
-90
-90
-0
-
-!END-CONTROL
-11
-
-265
-155
-100
-100
-smousearea0
-rmousearea0
-#9a9a9a
-#000000
-12
-74
-90
-90
-0
-
-!END-CONTROL
-5
-<- Left click and
-363
-170
-96
-19
-stext2
-rtext2
-#c3c3c3
-#000000
-12
-74
-90
-90
-0
-
-!END-CONTROL
-5
-drag to track
-380
-185
-80
-16
-stext4
-rtext4
-#c3c3c3
-#000000
-12
-74
-90
-90
-0
-
-!END-CONTROL
-5
-mouse position
-384
-200
-83
-22
-stext5
-rtext5
-#c3c3c3
-#000000
-12
-74
-90
-90
-0
-
-!END-CONTROL
-13
-radiobutton0
-164
-87
-93
-24
-sradiobutton0
-rradiobutton0
-#c3c3c3
-#000000
-12
-74
-90
-90
-0
-
-!END-CONTROL
-12
-radiobutton1
-164
-112
-93
-24
-sradiobutton1
-rradiobutton1
-#c3c3c3
-#000000
-12
-74
-90
-90
-0
-
-!END-CONTROL
-12
-radiobutton2
-164
-137
-93
-24
-sradiobutton2
-rradiobutton2
-#c3c3c3
-#000000
-12
-74
-90
-90
-0
-
-!END-CONTROL
-14
-./clickme.jpg
-178
-276
-192
-71
-simage0
-rimage0
-#dddddd
-#000000
-12
-74
-90
-90
-0
-
-!END-CONTROL
-15
-
-366
-26
-100
-100
-sgraph0
-rgraph0
-#000000
-#00ff00
-12
-74
-90
-90
-0
-
--1.0
-1.0
-[100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
-!END-CONTROL
diff --git a/extensions/gripd/examples/gripd.pd b/extensions/gripd/examples/gripd.pd
deleted file mode 100644
index 42c75edca..000000000
--- a/extensions/gripd/examples/gripd.pd
+++ /dev/null
@@ -1,73 +0,0 @@
-#N canvas 420 51 695 867 10;
-#X obj 22 747 gripd;
-#X msg 23 40 connect;
-#X msg 38 75 disconnect;
-#X msg 117 445 poll_send 5;
-#X msg 124 470 poll_receive 5;
-#X msg 126 501 set_path ../gripd;
-#X msg 89 631 set_python_path c:/program files/python;
-#X text 369 661 "c:/program files/python" by default.;
-#X text 372 678 Linux: Does nothing.;
-#X text 229 471 Time in ms to poll for info from GUI.;
-#X text 199 446 Time in ms to poll for sending info to GUI.;
-#X text 62 747 Takes one optional argument to specify a port.;
-#X text 82 15 all backslashes must be "/".;
-#X text 19 2 Windows: For paths \, spaces are ok \, but;
-#X text 120 67 Set gripd object to stop waiting for a connection.;
-#X text 121 80 Also closes gripd GUI opened by "open <filename>".;
-#X text 86 34 Set gripd object to wait for a connection (Not needed
-with "open" message.);
-#X floatatom 22 802 5 0 0 0 - - -;
-#X msg 105 376 lock;
-#X msg 115 407 unlock;
-#X msg 49 112 open ../gripd/examples/gripd.gpd;
-#X msg 52 219 open_locked ../gripd/examples/gripd.gpd;
-#X text 144 376 Set GUI to lock mode;
-#X text 164 407 Set GUI to normal (editable) mode;
-#X text 283 168 Relative paths are relative to the directory;
-#X text 283 180 containing PD executable.;
-#X text 255 568 Relative paths are relative to the directory;
-#X text 254 583 containing PD executable.;
-#X text 68 803 left outlet: 1 on connect \, 0 on disconnect;
-#X floatatom 52 780 5 0 0 0 - - -;
-#X text 96 781 right outlet: 1 when shown \, 0 when hidden;
-#X msg 59 248 show;
-#X msg 68 276 hide;
-#X text 96 249 show GUI window when hidden;
-#X text 106 275 hide GUI window when shown;
-#X text 372 645 Normally not needed (used for gripd.py);
-#X text 371 629 Windows: Path to directory containing python.exe.;
-#X text 283 108 Open gripd GUI and optional .gpd file \, and connect.
-;
-#X text 330 219 Open gripd GUI in locked mode;
-#X text 348 135 If it fails tries gripd.py via python.exe.;
-#X text 284 121 Windows: first tries to execute gripd.exe.;
-#X text 255 503 Path to directory containing gripd executable;
-#X text 255 519 "../gripd" by default;
-#X text 254 535 Windows: sets path to file gripd.exe (and gripd.py).
-;
-#X text 255 552 Linux: sets path to file gripd (symlink to gripd.py).
-;
-#X text 284 155 Linux: executes file gripd;
-#X msg 79 309 openpanel;
-#X msg 89 340 savepanel;
-#X text 156 340 open a save file dialog and send file to savepanel
-receive symbol;
-#X text 152 303 open an open file dialog and send file to openpanel
-receive symbol;
-#X connect 0 0 17 0;
-#X connect 0 1 29 0;
-#X connect 1 0 0 0;
-#X connect 2 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 18 0 0 0;
-#X connect 19 0 0 0;
-#X connect 20 0 0 0;
-#X connect 21 0 0 0;
-#X connect 31 0 0 0;
-#X connect 32 0 0 0;
-#X connect 46 0 0 0;
-#X connect 47 0 0 0;
diff --git a/extensions/gripd/examples/gripdExamples.pd b/extensions/gripd/examples/gripdExamples.pd
deleted file mode 100644
index 950cfa3f1..000000000
--- a/extensions/gripd/examples/gripdExamples.pd
+++ /dev/null
@@ -1,247 +0,0 @@
-#N canvas 249 58 823 654 10;
-#X obj 19 198 r sbutton0;
-#X obj 19 177 s rbutton0;
-#X obj 138 176 s rtoggle0;
-#X obj 138 197 r stoggle0;
-#X msg 205 151 bang;
-#X msg 243 151 New label;
-#X msg 19 154 New label;
-#X msg 170 151 1;
-#X msg 138 151 0;
-#X obj 23 278 s rslider0;
-#X obj 23 299 r sslider0;
-#X floatatom 23 257 4 0 0 0 - - -;
-#X floatatom 23 320 4 0 0 0 - - -;
-#X floatatom 110 257 4 0 0 0 - - -;
-#X floatatom 110 320 4 0 0 0 - - -;
-#X obj 110 278 s rslider1;
-#X obj 110 299 r sslider1;
-#X floatatom 215 257 4 0 0 0 - - -;
-#X floatatom 215 299 4 0 0 0 - - -;
-#X obj 215 278 s rgauge0;
-#X obj 215 320 s rgauge1;
-#X obj 293 283 s rtext0;
-#X msg 334 262 New label;
-#X floatatom 25 361 4 0 0 0 - - -;
-#X floatatom 25 424 4 0 0 0 - - -;
-#X obj 25 382 s rspinbutton0;
-#X obj 25 403 r sspinbutton0;
-#X floatatom 152 360 4 0 0 0 - - -;
-#X obj 152 381 s rtextbox0;
-#X msg 194 360 New text;
-#X obj 152 403 r stextbox0;
-#X floatatom 286 262 4 0 0 0 - - -;
-#X obj 378 356 r smousearea0;
-#X obj 324 406 change;
-#X obj 375 405 change;
-#X floatatom 324 427 4 0 0 0 - - -;
-#X floatatom 375 426 4 0 0 0 - - -;
-#X floatatom 697 45 7 0 0 0 - - -;
-#X floatatom 698 83 5 0 0 0 - - -;
-#X obj 17 480 r sradiobutton0;
-#X obj 137 501 s rradiobutton0;
-#X msg 137 480 bang;
-#X msg 137 522 bang;
-#X msg 137 564 bang;
-#X obj 137 597 s rradiobutton2;
-#X obj 137 543 s rradiobutton1;
-#X obj 17 522 r sradiobutton1;
-#X obj 17 566 r sradiobutton2;
-#X obj 698 62 r joy0button0;
-#X floatatom 21 131 5 0 0 0 - - -;
-#X obj 697 24 r joy0axis0;
-#X obj 588 23 r keystroke;
-#X obj 616 519 s rimage0;
-#X msg 628 495 ./clickme.jpg;
-#X text 615 558 relative to directory;
-#X text 615 576 containing .gpd file;
-#X msg 616 472 ./poof.jpg;
-#X text 615 594 Must use ./ or ../ to;
-#X text 615 612 specify a relative path;
-#X text 252 6 <- click here to open GUI;
-#X text 615 539 Relative image paths are;
-#X text 256 45 relative to directory;
-#X text 256 81 Must use ./ or ../ to;
-#X text 256 99 specify a relative path;
-#X text 256 26 Relative paths are;
-#X text 255 62 containing PD executable;
-#X obj 378 377 unpack f f f f;
-#X floatatom 426 405 4 0 0 0 - - -;
-#X floatatom 503 405 4 0 0 0 - - -;
-#X text 324 442 x \, y position;
-#X text 426 421 0 - left;
-#X text 426 432 1 - middle;
-#X text 426 443 2 - right;
-#X text 504 421 1 - down;
-#X text 504 432 0 - up;
-#X floatatom 76 110 5 0 0 0 - - -;
-#X obj 588 45 unpack;
-#X floatatom 588 72 7 0 0 0 - - -;
-#X floatatom 644 72 5 0 0 0 - - -;
-#X msg 39 29 show;
-#X msg 76 29 hide;
-#X obj 532 225 r midi0note;
-#X obj 532 250 unpack f f f;
-#X floatatom 532 275 5 0 0 0 - - -;
-#X floatatom 575 275 5 0 0 0 - - -;
-#X floatatom 618 275 5 0 0 0 - - -;
-#X floatatom 659 274 5 0 0 0 - - -;
-#X floatatom 702 274 5 0 0 0 - - -;
-#X obj 659 224 r midi0ctl;
-#X floatatom 533 200 5 0 0 0 - - -;
-#X floatatom 576 200 5 0 0 0 - - -;
-#X obj 533 175 unpack;
-#X obj 533 150 r midi0pgm;
-#X text 63 131 <- connection status;
-#X text 116 108 <- shown or hidden;
-#X msg 262 360 bang;
-#X text 298 361 <- clear;
-#X obj 326 536 change;
-#X obj 377 535 change;
-#X floatatom 326 557 4 0 0 0 - - -;
-#X floatatom 377 556 4 0 0 0 - - -;
-#X obj 380 507 unpack f f f f;
-#X floatatom 428 535 4 0 0 0 - - -;
-#X floatatom 505 535 4 0 0 0 - - -;
-#X text 326 572 x \, y position;
-#X text 428 551 0 - left;
-#X text 428 562 1 - middle;
-#X text 428 573 2 - right;
-#X text 506 551 1 - down;
-#X text 506 562 0 - up;
-#X obj 380 483 r simage0;
-#X msg 21 6 open ../gripd/examples/gripd.gpd;
-#X obj 659 249 unpack f f f;
-#X floatatom 742 274 5 0 0 0 - - -;
-#X msg 549 498 show;
-#X msg 576 472 hide;
-#X msg 386 151 bang;
-#X msg 436 151 New label;
-#X msg 349 151 1;
-#X msg 319 151 0;
-#X obj 319 178 s rcheckbox0;
-#X obj 319 200 r scheckbox0;
-#X msg 17 501 0;
-#X msg 17 543 1;
-#X msg 17 587 2;
-#X floatatom 17 617 5 0 0 0 - - -;
-#X obj 19 219 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 138 221 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 319 224 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
-1;
-#X obj 631 416 s rgraph0;
-#X floatatom 631 343 5 0 0 0 - - -;
-#X obj 631 383 pack;
-#X floatatom 674 343 5 0 0 0 - - -;
-#X floatatom 682 390 5 0 0 0 - - -;
-#X obj 21 86 gripd 3490;
-#X text 724 390 <- set size;
-#X obj 631 361 i;
-#X obj 674 364 t b f;
-#X obj 547 344 r sgraph0;
-#X obj 547 367 unpack;
-#X floatatom 547 392 5 0 0 0 - - -;
-#X floatatom 587 392 5 0 0 0 - - -;
-#X msg 124 33 openpanel;
-#X msg 124 57 savepanel;
-#X text 629 325 set data: index \, value;
-#X obj 152 425 print textbox;
-#X obj 456 71 r openpanel;
-#X obj 456 98 print openpanel;
-#X obj 458 21 r savepanel;
-#X obj 458 48 print savepanel;
-#X msg 453 263 New label;
-#X floatatom 405 263 4 0 0 0 - - -;
-#X obj 412 284 s rrectangle0;
-#X connect 0 0 126 0;
-#X connect 3 0 127 0;
-#X connect 4 0 2 0;
-#X connect 5 0 2 0;
-#X connect 6 0 1 0;
-#X connect 7 0 2 0;
-#X connect 8 0 2 0;
-#X connect 10 0 12 0;
-#X connect 11 0 9 0;
-#X connect 13 0 15 0;
-#X connect 16 0 14 0;
-#X connect 17 0 19 0;
-#X connect 18 0 20 0;
-#X connect 22 0 21 0;
-#X connect 23 0 25 0;
-#X connect 26 0 24 0;
-#X connect 27 0 28 0;
-#X connect 29 0 28 0;
-#X connect 30 0 145 0;
-#X connect 31 0 21 0;
-#X connect 32 0 66 0;
-#X connect 33 0 35 0;
-#X connect 34 0 36 0;
-#X connect 39 0 122 0;
-#X connect 41 0 40 0;
-#X connect 42 0 45 0;
-#X connect 43 0 44 0;
-#X connect 46 0 123 0;
-#X connect 47 0 124 0;
-#X connect 48 0 38 0;
-#X connect 50 0 37 0;
-#X connect 51 0 76 0;
-#X connect 53 0 52 0;
-#X connect 56 0 52 0;
-#X connect 66 0 33 0;
-#X connect 66 1 34 0;
-#X connect 66 2 67 0;
-#X connect 66 3 68 0;
-#X connect 76 0 77 0;
-#X connect 76 1 78 0;
-#X connect 79 0 134 0;
-#X connect 80 0 134 0;
-#X connect 81 0 82 0;
-#X connect 82 0 83 0;
-#X connect 82 1 84 0;
-#X connect 82 2 85 0;
-#X connect 88 0 112 0;
-#X connect 91 0 89 0;
-#X connect 91 1 90 0;
-#X connect 92 0 91 0;
-#X connect 95 0 28 0;
-#X connect 97 0 99 0;
-#X connect 98 0 100 0;
-#X connect 101 0 97 0;
-#X connect 101 1 98 0;
-#X connect 101 2 102 0;
-#X connect 101 3 103 0;
-#X connect 110 0 101 0;
-#X connect 111 0 134 0;
-#X connect 112 0 86 0;
-#X connect 112 1 87 0;
-#X connect 112 2 113 0;
-#X connect 114 0 52 0;
-#X connect 115 0 52 0;
-#X connect 116 0 120 0;
-#X connect 117 0 120 0;
-#X connect 118 0 120 0;
-#X connect 119 0 120 0;
-#X connect 121 0 128 0;
-#X connect 122 0 125 0;
-#X connect 123 0 125 0;
-#X connect 124 0 125 0;
-#X connect 130 0 136 0;
-#X connect 131 0 129 0;
-#X connect 132 0 137 0;
-#X connect 133 0 129 0;
-#X connect 134 0 49 0;
-#X connect 134 1 75 0;
-#X connect 136 0 131 0;
-#X connect 137 0 136 0;
-#X connect 137 1 131 1;
-#X connect 138 0 139 0;
-#X connect 139 0 140 0;
-#X connect 139 1 141 0;
-#X connect 142 0 134 0;
-#X connect 143 0 134 0;
-#X connect 146 0 147 0;
-#X connect 148 0 149 0;
-#X connect 150 0 152 0;
-#X connect 151 0 152 0;
diff --git a/extensions/gripd/examples/gripdFM.pd b/extensions/gripd/examples/gripdFM.pd
deleted file mode 100644
index 28cccf615..000000000
--- a/extensions/gripd/examples/gripdFM.pd
+++ /dev/null
@@ -1,135 +0,0 @@
-#N canvas 660 45 549 445 10;
-#X obj 202 183 *~;
-#X floatatom 202 126 0 0 0 0 - - -;
-#X obj 267 161 line~;
-#X floatatom 114 146 0 0 0 0 - - -;
-#X obj 114 268 cos~;
-#X obj 114 216 +~;
-#X floatatom 143 316 0 0 0 0 - - -;
-#N canvas 159 26 495 270 output 0;
-#X obj 338 160 t b;
-#X obj 338 110 f;
-#X obj 338 60 inlet;
-#X text 344 29 mute;
-#X obj 338 185 f;
-#X msg 425 178 0;
-#X msg 338 85 bang;
-#X obj 338 135 moses 1;
-#X obj 425 153 t b f;
-#X obj 397 117 moses 1;
-#X obj 83 148 dbtorms;
-#X obj 397 92 r master-lvl;
-#X obj 83 42 r master-lvl;
-#X obj 338 210 s master-lvl;
-#X obj 22 182 inlet~;
-#X obj 199 41 inlet;
-#X text 199 18 level;
-#X obj 199 100 s master-lvl;
-#X msg 96 65 set \$1;
-#X obj 96 89 outlet;
-#X msg 214 64 \; pd dsp 1;
-#X obj 83 194 line~;
-#X obj 22 212 *~;
-#X obj 22 241 dac~;
-#X obj 83 171 pack 0 50;
-#X text 20 159 audio;
-#X text 93 110 show level;
-#X connect 0 0 4 0;
-#X connect 1 0 7 0;
-#X connect 2 0 6 0;
-#X connect 4 0 13 0;
-#X connect 5 0 13 0;
-#X connect 6 0 1 0;
-#X connect 7 0 0 0;
-#X connect 7 1 8 0;
-#X connect 8 0 5 0;
-#X connect 9 1 4 1;
-#X connect 10 0 24 0;
-#X connect 11 0 1 1;
-#X connect 11 0 9 0;
-#X connect 12 0 10 0;
-#X connect 12 0 18 0;
-#X connect 14 0 22 0;
-#X connect 15 0 17 0;
-#X connect 15 0 20 0;
-#X connect 18 0 19 0;
-#X connect 21 0 22 1;
-#X connect 22 0 23 0;
-#X connect 22 0 23 1;
-#X connect 24 0 21 0;
-#X restore 114 344 pd output;
-#X msg 172 316 MUTE;
-#X text 213 316 <-- output amplitude;
-#X msg 229 262 bang;
-#X text 266 263 <-- click to graph;
-#X obj 114 173 phasor~ 0;
-#X obj 202 151 osc~ 0;
-#X text 33 8 PHASE MODULATION ("FM") USING TWO OSCILLATORS;
-#X obj 229 286 tabwrite~ fm-output;
-#X obj 267 135 pack 0 50;
-#X floatatom 267 82 0 0 0 0 - - -;
-#X obj 267 109 / 100;
-#X text 263 50 modulation index;
-#X text 263 65 in hundredths;
-#X text 111 103 carrier;
-#X text 110 121 frequency;
-#X text 187 102 frequency;
-#X text 188 85 modulation;
-#X text 310 160 <-- signal with smoothed;
-#X text 312 176 modulation index to avoid clicks;
-#X text 188 345 <-- as in previous patch;
-#X text 199 205 amplitude-controlled modulation;
-#X text 200 222 oscillator output;
-#X text 37 158 carrier;
-#X text 37 173 phase -->;
-#X text 18 201 phase;
-#X text 17 216 modulation-->;
-#X text 14 252 output;
-#X text 15 268 waveform -->;
-#X obj 51 81 r carrier;
-#X obj 148 65 r mod;
-#X obj 207 30 r index;
-#X obj 129 291 r amp;
-#X obj 172 245 r mute;
-#X msg 438 85 \; pd dsp \$1;
-#X obj 438 52 r onoff;
-#X obj 27 402 gripd;
-#X text 329 377 <-- Click;
-#X text 341 402 open GUI;
-#X text 347 389 here to;
-#N canvas 132 85 450 293 array 0;
-#N canvas 0 0 450 300 graph1 0;
-#X array fm-output 100 float 0;
-#X coords 0 1 99 -1 200 140 1;
-#X restore 100 20 graph;
-#X restore 417 256 pd array;
-#X msg 27 374 open_locked ../gripd/examples/fmsynth.gpd;
-#X msg 67 402 show;
-#X msg 100 402 unlock;
-#X msg 150 402 lock;
-#X connect 0 0 5 1;
-#X connect 1 0 13 0;
-#X connect 2 0 0 1;
-#X connect 3 0 12 0;
-#X connect 4 0 15 0;
-#X connect 4 0 7 0;
-#X connect 5 0 4 0;
-#X connect 6 0 7 1;
-#X connect 7 0 6 0;
-#X connect 8 0 7 2;
-#X connect 10 0 15 0;
-#X connect 12 0 5 0;
-#X connect 13 0 0 0;
-#X connect 16 0 2 0;
-#X connect 17 0 18 0;
-#X connect 18 0 16 0;
-#X connect 36 0 3 0;
-#X connect 37 0 1 0;
-#X connect 38 0 17 0;
-#X connect 39 0 6 0;
-#X connect 40 0 8 0;
-#X connect 42 0 41 0;
-#X connect 48 0 43 0;
-#X connect 49 0 43 0;
-#X connect 50 0 43 0;
-#X connect 51 0 43 0;
diff --git a/extensions/gripd/examples/poof.jpg b/extensions/gripd/examples/poof.jpg
deleted file mode 100644
index d15a262dcdb4307ce1c58fe0d24f271cbd17f65c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2065
zcmb7<dpOe#8^?b;*c@gI<q%^IkIWp#CY2FtP9ZrJBf^7H*_fp$PdTT9P==^Ca#$lV
zbB>&PhG<q~5mAZ?Ii|xN-ap>=y59fZ?|t2WeeV1Fy}qIm(F7ptNOm9tAP@+!-yA^n
z8&I^Rg#<>21ZyzDqr)^j!a_9c9Gnk{gn%s|4uipAV&ZT(TtY%z5}_cCkdi_u%gM_q
zsHv!<)l^hfHM9+NH8gQrs;WD8>EVp=1Oh=_cQ?u0#KO>&V6tTbl8}%<NFkJ@rIk!D
zsu+|1TcS1qB@WmDZ4i(q07iizD3GWV*Z}}w$X1R23IY{_fkE(1NRS1<AP5*Lwz=?s
zAArCB1d0-qgJJO2@|tdeRQO+++wLitR<~=J*wCV0Om2QDgMj~W1VG?T(@lg%ZLzJy
z|HOg7D2N<J9&c?T8U+wr5CuU2R=|1^o=1WnmcT&!%Tu*p93ONb-2OxIvffZ1(<S-5
z>#4ALOa9mKJ_J_Xs;c;kuUcHgY(qr8YMZ*Qd{0e)X~y*+W-<50_}#zVnO)Dbm&yCI
z<Sa^t7rd2K1o%<wa#wi=x-G4`TZz7w%^8w+6jJ;e&a%{wQyl1uFfx@u)2vUW>X>Ja
zOOOMf<9aOIu1Qj!%HPcx16?%?+`Dj$56il~+(9-^++zdS$R_w`-?&LM<=H#r2PfYA
z_$)QJf-G0@t8#fl`O=THd;GBZN-2h^QMh{$3wig$vDbboo_6`S-4^j&A%AjtV*nXe
zYdB<(HX|F^b|_Bs@%8=hOe0X9jW=}Gw$J6Tqr2D+b-T+H&EdCXsyfRS7xjPU%qd%z
zEV1p9jWYWk9dq{0mc@;%=bq1Q*H|q&ILK-0C;x82av<0T3qSU?KT~?Y^y467o3DYv
zg-KaB13TjOG8Y^h*E{1EGQRZl^^J$d!QMqq{8nb`z5QMSA~q&JIZoT}v!zR<RqPJG
zjev-c9OqpgPASToIi8ZP9ihtKJNZHAxZV#{TFp6B#}dgZ#|nkA6hv_p?8uSGU%oGW
za%Rse2upF*>ZpSgq5hGw4e!6_b0<zZ3NE$_nAoWj4>8xN(s>iEk7rk1sgo-^{roHz
zuG;>0cYLSY9(M_qT}b~E6D^Gud^p<R;6zaX++66d*xLH4vX)2xlwQ|?8!;zYeLeNC
zs*>;vS;!2UEb)o1Gl)-^Y^t-Qg)m?g|Ix)5*5PU5Sd{C@);Fg+kY{g~z1nePNIz_p
zeNytPN{K;(enHfsx8pX*j(euIJq&4jH)AEQD7k;~dpzFRZk0I#5u<#I6koaQuJk5F
zYvaIxXL>;@x;ZhZOuywE1DzSElVsMJoosEZJrt|N*TEw)ogW1g!dAj^q_9MMTId-X
zAUU=dC2+*j@!BO3j4a}?t6{4Fi9M7qSQS7|t1XVl8*Wq<zDjRo@d*sDg-<^DGy3~-
z-#SN%&G}TY9Qf<cCm9^;sAB$sfPIxRMys{@l<;A0c849clR_#Mn%A1~T4D}$m=<x@
za$8ima~7`Dct4s=Ui$q)84W9N@T}KBY*5FZittfB@kF7TWXDqmNs%NoEi)dD^yT%W
z(|_ctWQ`1-%l_o<`DR-x&VFDDO1n`X<=f1v^gSwIu*o%0g|W2uFGPw%+sl=_x!54O
zZ4Va0woRC-hK3fnBIB(D1eQQhIp@1x`#5~)f$$MkP}FBS{`l>Yq^bqx1>B4B#ss4)
zaOJrg=<gocseGBiQ*5tP@nNyY?F|X_Kk0K{^vzSQobY(p>nLEIEibKu=+pij$cGP3
zAo^iVr<|@t3(wW9TwCrv9P`n7R;JW?Ju`|mQ@4@Sm9+n1#)`rtBj+?s57n$7q$ADA
z#`%CA$*g#mH@0wbP0li_-J5u3@EAv%O97+O3`wNcka>Z>w)Z2IBXsk<b7G(22dsua
zYroR%rjra%mf3m9*{jVcr^9w-InE{6{L8A-Ni#*wtPMu&p_2@{|2;!NY)wJd2f3#r
z;Aj(TdEMtFg}*&I(`65!D6jX_s+_b!eZYAvSoqmp9}%SWU~g}CD0TG8HKQk|eXpnV
zUF@#eX$^-zY#qM!g(ysFJ>g6<n<vz8f8JLbu*}UKmP&yO?2fKol1Rkh#`qCtGPXQg
zFDG@mknB0bY1xku;CXyw^9-+>#hqdAW2JqFKCoO4BA_DJc<Ips$;qe7USmmhx`}=K
z+qZ=K{$(cuxd6(}@=i)K>#g*{jz4O;YFwnAD^EC`N9(?<<!N4R5uVlhmpKC7ea?l5
z#JxK6k)y(`to6;(vD&FMIK@QsnR$A7Q00<qIi234&XmzNBwUek8}_XR?^YOlBp_Zh
zcPOp9acLIGJt}Q9bwI}=t>mD-`V+U+&by6`<x%~2a^<t?r?ckt=PnxmSjxEXfvUdV
zneV=`JtyfD!<|(s0)VyMbt8J87X-0()&-%pWM=u>@NIeQt7jy}VyZ{knQJgy@q+dR
z`=PJ%r|J4VO-<$Ryvwil*CHl>-AF&+Mx_fy#v0vMJFHt3h^g6r+|^yO`+0#yB8Grh
z5&=B>dS3G-qq~2#6kblXam?_#>XoRWmV75AQR57wBMt*hH&54Mzy^5+d9n$58Apv1
z!?Sh_*zck~>#{+m#c=MNQ}6ru#)H(ho~Zc@hr8+G(DzL?L)=Cd`KfXSeYs#!7?mZy
KPXwroUjGB@f0C5|

diff --git a/extensions/gripd/examples/scale.gif b/extensions/gripd/examples/scale.gif
deleted file mode 100644
index 61c6def462d0c2a4f98d529975e84855112c5a3c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2240
zcmV;x2tW5nNk%w1VHW_40Qdg@0s#UC1_&D(9TXB8PE1r}V`rtLs1*|&85bdNY=F48
zyg4;YDJC{iOlW*}l4fIcqo1}O94RU%IUE`$T~~gxr}40*?wgU(m5a!YguaM>w}gAK
zcW<C-V~=QIj9gZHSyOmeQg%>FY(G0yFfBnWDLcBZ`M0e0wyX8Dsq(U?@35uquA}Ou
zo8F?B+MkuylZwWYiN%nI!is^pf_krjc&vSOsC;y$bZwk$WszT5fL>UBTUB~5EI+ud
z_o$xXrkvlEjL46Mzjbb%a%-7mU4>FjZZa=J4-OP`ZJVW=+qSFle08A_5EdgLEkr?6
zv#i&ppT(P&x2&egySCL>R%4r)rmLy7fPaOsueHFx#ULImH8M#?LSR5VSGcYDwyXB1
zo#K^^%ZY)ygL|=aY@B6ZiC0o~BqA}oulu>K`nj(8x2^cIsq(R>@2{oot)uF!qUfuk
z=c%COs-WempX8^W;-{VArJUfVoZz9D+Mt)%pO)91l+>J))0vRYmygYsjmnXU#E*x<
zj)uUDguRP{yo!RliGjI@fVhT#wuXMSg?+PudarwQrg(9pc5k0`Zk}#vm2GE~Yh{sV
zVT)v5hg(*AR#9|QPH;;{W<^0=LOxl#u=};E^t7t;vZ(N{rtPq%?XINitD@(uqUWif
z<D{G2qng~FmDHP((3p?RmX6Dih{B75yNZIjiGsO@fVYEuv3_@|ach}yYL{(ilWJs-
zW?+e7T!UIwd0A9=S5kFNNoYz&WJp9|H#AB#F-C}hwsUQpY-W*QTY*kWX-7j}L_k|Q
zH%?7SXA%(@CL}VOlgp)@*A)~SuczR)uI8VZ$diq?siV?RO=5+Cp0cmTN=Z<>y2y@=
zlq)GaVO)exN@_hiQzs=gkBGv2cBpxCq;_ziXk(3KV2N8-d{j_!J2+4l6&^!CTP-U+
z7Zx9EXo<SC<&u!28W|%30s{;T5ef<p1qBBP2nz!P1Ox;HG&DItKtpkHbXQkdzP`Y~
zz`y|k0RR91A^8LW008{}EC2ui02cs@06+-;0Q(6XNU)&6fhkh7QK+y@g*FfyLR=Va
zAf1aCGisbOhYl2iFJABwDRN}UlP9MXgu$|<%a<@z7F<M=rlOmQ7UjIT=*mHHK!XYu
z>hqwjqeyK{N@^?1L4mn)af?bd>Qn_!1!CIDwJRomSq1tUOO|YdumioRU8}Yl+JPkE
z$|X_d?Lahm^VYR15P@I61^5m`LKulY!2<&*#)5d@zkk{q4`kz`@`)2ZC}XB<8FOVS
z0^f)pO}aGcYy(@IYQeg->(?z%5Bx*Bw(Z-r!4k~CJ42z~zkT->a<GQ+<H(T<dx~Qi
zjxx@Zl))k0xwWj7vRCquoxAqySub7x`e5$E_z&nmfX^zTz5Dl((W*m+Y<~Uv@zDa?
z&wu|rz7hl|pacd87QulCIwjZu3=WWvZi3Atp#YNg6Hh!&RM?Li9CEmZ8f$#m;fQLO
zpoTjFp@4!Xo~+oSiYvzWqKaAw<i?FE+^FM@Jh}mzKyknk$B;o1X{3>*5cI<xKP(x>
z9bwq<gB^A-d50Zg{P3edF6iOHmtcme$CzF^Q;;8Mrm5zdXkJs07-9s%3M+xsX=fmD
z)+voaGPE*?41l%*PAi1^DJVEt6*R^nGt4kXqlnCa$SY&OatJI^97M*Z8;~K3r<;QM
zX`%($VCt#igmdbtnI1F_Bph)60LeJ9#tO-;96(r5Exh*XYp+&hb;~Us3~Ma0#M%;;
zCCr+^?6c1Xo0SgKR%@*e?Vz>GE+A~nt+%@r7*;0amTPVTZ}rlPGV7}AuDD?xb4(ZW
z$~!N*Z+W5bzWXYORx$tw3^2ZL1!M5R2J0HuIt(|w4r6?MBk{x}AhyND7(>k01RQgW
zPh;tX9CChqHDPiS`A8<u%JRS~SUoUfQ{g={`-_-A{_LaS&H|<3a~hreEOgL73yoqw
zm3`rZ(n>G=#Trk45w+Amf^pdiR%3nj)?CZ>i6@_g{YeU9mmN0PpDZyDC~SjL!P{-K
z4R_o}_allZE39xg-YbOvVu2_Y{JpmYTf#9494sJ?_~C{#emDy()F_Y~lvi%K9HmfB
z3MrIBLy#$Tm|{ohrhpDQm8FyZ(Lg}t;d&meyN(C!uLIG#YyzR8`|iB=uDcQi?IHZ|
z#1}6-H3jvd{PKOIk_z+BKkp_%7gVoG^%q>9{r1_bg1bO~gfIU1;jgj^AgeTEP!K_2
zfC2mOyU+goK}2DYAo$0CfByULAH(znA%p-2NC+VePzVMzpu+lL2v;=lfev(F106Vx
zgJ|G_8i>UO6Oq9UY7hbkVT1@rNWv1@Y#@!GfeLAm!W6Rbg*14|EM`c<8rHCa2XTZB
z9dUyl-k^s&1mQvd9znz+8qtWPDo7-T5Q!!-afwW1A``Mggenq&7FV<)7K!kmr%2+9
zU<@M|g?Nx0P$CD!$N?HDK@3W`F$YO32s!3R$2!i@0b#*~8T42VJ?e3fX6WKmia^Lh
z8j_Gjc}g)B$;d_)BNu3)00nj+$x2odk73~f4|JhPPIi(9f_%yuLU4vshJY6#AY}+n
zXpnQb@|CbG##@X)%UaqJlVRzGF1uljUGh>|VbO#zhe^yh9^@CuOlC44V3$oe^O?`o
zSXekg&1zQDWmy@4Hn*uwWbg$Y;0z}?nQ4~=nDd<GBw1Lvz=dG6lbu{hBwCI@&w3u=
z34-Z?KKI#!19IAB8vreVKue&`urT1D2xWjVv%-vqI#gzYae_oAdKkfA3}e8wOUF2t
zA;iGrqaP(eW7t7bl1kGq2YALa4sZZ$zGWFOT?R8GQy3)ZtT8N;$4TuXAqg!MEikLc
z$0Vbe00c%d^hjz!?P3pm$U{Q_06@wr^q7iD<}og{OF#esJ78SHVoO!1Q^z`1uO-F=
OKcGMY4gr9G002Ae{t!a|

diff --git a/extensions/gripd/examples/scale2.gif b/extensions/gripd/examples/scale2.gif
deleted file mode 100644
index 95d1e95ade48d2be944d163f724cbd349292bad5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2296
zcmV<U2nY8^Nk%w1VT%A40Qdg@0s#UC1_&D(9TXB8PE1r}V`rtLs1*|&85bdNY=F48
zyg4;YDJC{iOlW*}l4fIcqo1}O94RU%IUE`$T~~gxr}40*?wgU(m5a!YguaM>w}gAK
zcW<C-V~=QIj9gZHSyOmeQg%>FY(G0yFfBnWDLcBZ`M0e0wyX8Dsq(U?@35uquA}Ou
zo8F?B+MkuylZwWYiN%nI!is^pf_krjc&vSOsC;y$bZwk$WszT5fL>UBTUB~5EI+ud
z_o$xXrkvlEjL46Mzjbb%a%-7mU4>FjZZa=J4-OP`ZJVW=+qSFle08A_5EdgLEkr?6
zv#i&ppT(P&x2&egySCL>R%4r)rmLy7fPaOsueHFx#ULImH8M#?LSR5VSGcYDwyXB1
zo#K^^%ZY)ygL|=aY@B6ZiC0o~BqA}oulu>K`nj(8x2^cIsq(R>@2{oot)uF!qUfuk
z=c%COs-WempX8^W;-{VArJUfVoZz9D+Mt)%pO)91l+>J))0vRYmygYsjmnXU#E*x<
zj)uUDguRP{yo!RliGjI@fVhT#wuXMSg?+PudarwQrg(9pc5k0`Zk}#vm2GE~Yh{sV
zVT)v5hg(*AR#9|QPH;;{W<^0=LOxl#u=};E^t7t;vZ(N{rtPq%?XINitD@(uqUWif
z<D{G2qng~FmDHP((3p?RmX6Dih{B75yNZIjiGsO@fVYEuv3_@|ach}yYL{(ilWJs-
zW?+e7T!UIwd0A9=S5kFNNoYz&WJp9|H#AB#F-C}hwsUQpY-W*QTY*kWX-7j}L_k|Q
zH%?7SXA%(@CL}VOlgp)@*A)~SuczR)uI8VZ$diq?siV?RO=5+Cp0cmTN=Z<>y2y@=
zlq)GaVO)exN@_hiQzs=gkBGv2cBpxCq;_ziXk(3KV2N8-d{j_!J2+4l6&^!CTP-U+
z7Zx9EXo<SC<&u!28W|%30s{;T5ef<p1qBBP2nz!P1Ox;HG&DItKtpkHbXQkdzP`Y~
zz`y|k0RR91A^8LW008{}EC2ui0E++@06+-;0Q(6XNU)&6g9sBUT*$DY!-o(fN-U_r
zfHo`-syqqC1=xaQ=)8^a!U@@?W50Z9>eWqzkxb_>h1kX80|gz$auu<J%LBPvlqN~4
zMWjq54v)k+3OB1pBUy|TB|_vXgAj0nU<3&S=#MHtsrc-1fvQEGFsA6piNoT}3OAtI
zd_n<+jgK{HChFbG_o0F;S0G54CWH{U7+M3Z@(T9F9zA7&*r_vzRGd+7M8TEo>BNaI
zYC0v%a<Kq5d;;dllZOOJlVt-Aq+^Ew-h>Gewrp{NhS@g;5=yM=LE;EUk03>oRChAv
z%9bx<o}p>(X3ipJ%vAbG%+}DNN0U1LveA^r21biC%&1C824W1Xx_<5Bn5@|!cGR+U
zs{&MtPo4STgBp4DW#B~oWMRNN);Q2kE;?DF9XTCP;vG@L3;~IF<kdg}ROyXjNFhSB
zlGRpSUEl|OV?}01ex+QN*=7Kqz{VN`9;oAvJnE%IHdIjIPBcrPaDoq@75LAR{s0h<
zJ@?QPKmhgBGmmPlxdz)av(<K6ZoBpNn*`eoSKM(Qg)~x0&8ftaOEAeq(<RnLI3Z9M
z5|QDCN_9vB8R%(n2zw@KB}R%XItJM(dE8NlT5w>dnSY)bDPWF#@naDd1rUIb6JYY@
z8*suAXIw{VD#s>DZbBF5OuEqjiBp8QY<EizdEzj{I2<<hR8;D*C&P(c{h=a@_5p#G
zer;)1!GE0{iC2#XDtJ)>4>YinF>p$^i!L_Jy3>Re=9$D0NQrZUpMWkB3so5qQYZ$+
z9$Q~oc>IvoT5!A(3XMj7hAFiKPxKcARxrp!y5p4xl_IeW8gHRnEv8~Bik6j!zWViR
zfg2TYChfolmuzxE{A6>@HB(UIj1u?lyWga8S(@a@IOkmQlK(XMWRz1@dF5)Yy%t-S
zw&A9msAHCCDw@fy$sDWCb&JV#Jji+-PqyOv9S)K3+NZDWY9L~~!y1YxvXODj?~MM<
zRo8$8TBOfD`8XjD&{SIgiDl7SBK_skVgl#%nZY2ZCP^lB;hZwAN(TbCJK)64PPJ0#
zHBn$Q%x<7F7!vOwS<$<;SoUo!bH8uJRU?ulGgJ{4cjv=QI<nE0bf|>~XQpw9r@Ch2
zk8>N{)ii~>bvZuWdLb>tM8fB~<+U4&h=sIwVtmG~h`Pp(c06OqatkaPwOLp}dllG_
zK<e*MFV4x-&b@g&FCf%Z=eV|ZHxw;N2#->j;vqmOLOr6BSLy2Iy%w3}4*P;bzns;E
z6a?sIIx`4AuJ8_RV5=I)Sk5LK*D9;cM1SIvQ2%m;uB1?}fWQh}_FC~C24c*Cd6<lT
zFw?pU%;iXTDNqKt4Q2o<Xu|;sD2AL+Sd7bY?I#xcpHcYKFsB$$1FuLR#fmkbdznRt
zZ~K_*Y!<sAQcD3>NLYhxu{k1ujfx#=gaH!)i>e5LbcR|?7as$@{Hz5tAA8mhVRt?=
z8j>LVK%-!$A&fr-3KpWf3bEFfu?MEbG7|*YkuZ43PCg`&EQ^9Pn!y;hwLn>>n8Vv>
zRw>WmNQj<{<$<yRBq%@u8l`B982@846TniIz%<#9g5(Z&^dleuJ0OrK$rS_{$zTsc
zixr>74r>%+ixun;JVt{x4Vuz088`&k#HN7*5Wr+IIzkhk&<J@IWtd0QkrIDaiU2y%
zKyP~{S(3z^jb&J|VVRMOIY5aQX@sUPr2))07fKKe9O8@@_<#dm6agH}atd*{gDGAS
zv;h@R7*R}`GnSUH2|W!iQL12-!uSp?m6D+_ZHU)WGy)$;U`#Ne!4{TqhDwCu7E6ne
z)0`AgsddpVc^StjH5SvRZY`XKIDrUo@Bjfkzy?=X!V@xKieFg6VoO!1Q^z`1uO+4g
zKA=DX3;}?E0029DDF-uUmesm8l6;3ife3Q&00BJU23TMM6gGj1U|_>#bCs!G7t2_i
SErKy7_yGkHa0mbd1OPi~d>(fI

diff --git a/extensions/gripd/examples/screw.gif b/extensions/gripd/examples/screw.gif
deleted file mode 100644
index 1ebd9ae9a49c2eb7e214957a343f770f1a189483..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1181
zcmZ?wbhEHb6lM@+`2L?^*@_iAcI{ffapRhG>)yV5_vrEC2M-_KfAC<(&Yf&roE$vd
zJOccDLV|*#B0^%KqLLC~Qj+4*QW7%KlCm;Va<U34%F60$DjMqQ+FE)>h9(x~#^z?$
z_ICEpPR{ObUVgrwzCLbVo<0Ho-u`~!(NSShk-_0%L1Cfs$w{$^2~lye89CXhnHinE
zJuMyWlc!HRdh*2Hg9o<l+PP}o+V8)AF)%ZgRaO)f7xhl)Z|m$}U}9uqVP@y#;N|BN
zlMok|l#q~;lma?NT1rVpSyf$4-_StMK;P8d%-GZ<C?q&0E;b@6GQY4OH$N{eBfW1z
ze@|cU-~ay}K7RDz(ZhQW?r+<%oq>_zKLf+(&!0bi`t;$$hxhN_zkB!Y_3PI!U%q_t
z;>Gjl&!0Yh`uOqV>({Sey?XWh`ST}EoH%;)=)r>r_wV1oZ{NPXd-v|%y?e)w9b30<
z-LhrN#*G^{Y}l}V{rXj_RxMw?eA%*POP4NPv}n<S1q<fQn>T09oY}Ky&zLb|`t<2j
zr%s(bdGe%5lO{}<(BI$R)6>(^($d`ATwh;bS65eCTU%38Q(awMQBhG+Qc_e@R9IM;
zpP!$TlarmDot2f9k&%&>mX?^9n2?YVA0Hnb9UU1N84(c?9v&VV8X6oN926835D?(+
z@9*d5=k4w7>FMd=;o;`y=IZL|;^N}$?Cj*^WN&Y8XJ=<?Yina;V{L71Wo2b)X=!0$
zVQOk>Vq#)!Y;0s?WN2t;U|^uHudk=4r>m>0t*x!4rKO<(jB<4~H8oXLRTULrB2ZRR
zQc_e@l$V#6larH`m6ef^k(QPg7Z(>31Ew2M5fKq#VPQc*K>+~)US3{qZf-6vE>2EP
zc6N3)HZ~R(7KQ-=ia%Kx85qJDbU^ll@`MA&e}?rOA}3nUNISH#-Lzy*TX4YYz`Cca
zM0usRWnW(M^+sZ=W2cCu8;8i^=fYYs$7VP#Ubc8Kn+z-4s)t{AB3Ia#C_R)?<v1;3
z79bV6(<p6<aq97`y_dee4%1PwmoS;Zu<#H=WBj`utEXNfs;<pHzC?y-_KP>BdT2(s
zbzPLPS-inC+KJVTM^e{^<3;kBS!;r)$z|@E+A~8?T_>PrgTuokQ%$EwoSc;UI!rrw
zLz~FN0O#YZ41DgJK0fvkUZT#y(;_$H=$ZNMGaX6~rK}WGG>MeSy7_t4^)<eoT(Ykw
zv-Qk!XnXMF-KP^_8{#J2JHgrdcKSjMlO<;oHaYo7M_-?^v`XvhNnyRrvwbE%Cp>EH
z<}+uIT)pkoRD&!r-6+OK49)C(|8^#xHaUEuh*N3O454mKPYuT=4rzxE4ZMjGlTI1!
ze)H(G{^m7B-TXE-0*y@E4Fv~8qaPG<YOOk9G*M>{hoB2nn8O5SM!rJ9<0>nk1f7Yp
P7g*@T5XB=Rz+epkNCc+5

diff --git a/extensions/gripd/gripd b/extensions/gripd/gripd
deleted file mode 100755
index 3e9fb38cb..000000000
--- a/extensions/gripd/gripd
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/python -OO
-
-## GrIPD v0.1.1 - Graphical Interface for Pure Data
-## Copyright (C) 2003 Joseph A. Sarlo
-##
-## This program is free software; you can redistribute it and/or
-## modify it under the terms of the GNU General Public License
-## as published by the Free Software Foundation; either version 2
-## of the License, or (at your option) any later version.
-##
-## This program is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-## GNU General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with this program; if not, write to the Free Software
-## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-##
-## jsarlo@ucsd.edu
-
-from wxPython.wx import *
-from gripdMain import *
-import sys
-import signal
-import os
-
-def signalHandler(sigNum, frame):
-    print 'Caught signal', sigNum
-    try:
-        app.frame.eClose(wxEvent())
-    except:
-        app.ExitMainLoop()
-if (os.name == "posix"):
-    signal.signal(signal.SIGQUIT, signalHandler)
-    signal.signal(signal.SIGINT, signalHandler)
-    signal.signal(signal.SIGTERM, signalHandler)
-app = mainApp(sys.argv)
-app.MainLoop()
-
-
-    
diff --git a/extensions/gripd/gripd.opt b/extensions/gripd/gripd.opt
deleted file mode 100644
index 411fd79c4..000000000
--- a/extensions/gripd/gripd.opt
+++ /dev/null
@@ -1,2 +0,0 @@
-joystick = TRUE
-midi = TRUE
diff --git a/extensions/gripd/gripd.py b/extensions/gripd/gripd.py
deleted file mode 100644
index beb604735..000000000
--- a/extensions/gripd/gripd.py
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/usr/bin/python -OO
-
-## GrIPD v0.1.1 - Graphical Interface for Pure Data
-## Copyright (C) 2003 Joseph A. Sarlo
-##
-## This program is free software; you can redistribute it and/or
-## modify it under the terms of the GNU General Public License
-## as published by the Free Software Foundation; either version 2
-## of the License, or (at your option) any later version.
-##
-## This program is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-## GNU General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with this program; if not, write to the Free Software
-## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-##
-## jsarlo@ucsd.edu
-
-from wxPython.wx import *
-from gripdMain import *
-import sys
-import signal
-import os
-
-def signalHandler(sigNum, frame):
-    print 'Caught signal', sigNum
-    try:
-        app.frame.eClose(wxEvent())
-    except:
-        app.ExitMainLoop()
-if (os.name == "posix"):
-    signal.signal(signal.SIGQUIT, signalHandler)
-    signal.signal(signal.SIGINT, signalHandler)
-    signal.signal(signal.SIGTERM, signalHandler)
-app = mainApp(sys.argv)
-app.MainLoop()
-
-
-
-    
diff --git a/extensions/gripd/gripd.spec b/extensions/gripd/gripd.spec
deleted file mode 100644
index 453270c32..000000000
--- a/extensions/gripd/gripd.spec
+++ /dev/null
@@ -1,16 +0,0 @@
-a = Analysis(['../../support/_mountzlib.py',
-              '../../support/useUnicode.py',
-              'src/gripd.py'],
-              pathex=[])
-pyz = PYZ(a.pure)
-exe = EXE(pyz,
-          a.scripts + [('OO','','OPTION')] + [('f','','OPTION')],
-          exclude_binaries=1,
-          name='buildgripd/gripd',
-          debug=0,
-          strip=1,
-          console=1 )
-coll = COLLECT( exe,
-               a.binaries,
-               strip=1,
-               name='distgripd')
diff --git a/extensions/gripd/gripdControls.py b/extensions/gripd/gripdControls.py
deleted file mode 100644
index 10ebc1e86..000000000
--- a/extensions/gripd/gripdControls.py
+++ /dev/null
@@ -1,1675 +0,0 @@
-## GrIPD v0.1.1 - Graphical Interface for Pure Data
-## Copyright (C) 2003 Joseph A. Sarlo
-##
-## This program is free software; you can redistribute it and/or
-## modify it under the terms of the GNU General Public License
-## as published by the Free Software Foundation; either version 2
-## of the License, or (at your option) any later version.
-##
-## This program is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-## GNU General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with this program; if not, write to the Free Software
-## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-##
-## jsarlo@ucsd.edu
-
-from wxPython.wx import *
-from string import *
-from gripdFunctions import *
-import os
-import math
-
-MBUTTONTYPE       = 0
-MTOGGLETYPE       = 1
-MVSLIDERTYPE      = 2
-MHSLIDERTYPE      = 3
-MRECTTYPE         = 4
-MTEXTTYPE         = 5
-MVGAUGETYPE       = 6
-MHGAUGETYPE       = 7
-MCHECKBOXTYPE     = 8
-MTEXTBOXTYPE      = 9
-MSPINBUTTONTYPE   = 10
-MMOUSEAREATYPE    = 11
-MRADIOBUTTONTYPE  = 12
-MRADIONEWTYPE     = 13
-MIMAGETYPE        = 14
-MGRAPHTYPE        = 15
-PAIRSEPCHAR       = chr(29)
-SYMMSGSEP         = chr(31)
-DEFCONTROLID      = -1
-DEFEDITPOS        = (5,7)
-DEFSLIDERVALUE    = 0
-DEFSLIDERMIN      = 0
-DEFSLIDERMAX      = 100
-DEFVSLIDERSIZE    = (30, 80)
-DEFHSLIDERSIZE    = (80, 30)
-DEFRECTSIZE       = (200, 200)
-DEFVGAUGESIZE     = (30, 80)
-DEFHGAUGESIZE     = (80, 30)
-DEFGAUGEMIN       = 0
-DEFGAUGEMAX       = 100
-DEFTAGSIZE        = 9
-RESIZETAGCOLOR    = "#555555"
-DEFMOUSEAREASIZE  = 100
-SETRCVRCOMMAND    = "!setRcvr"
-SETARRAYCOMMAND   = "!setArray"
-TEXTEDITINPUT     = 0
-FONTEDITINPUT     = 1
-COLOREDITINPUT    = 2
-FILEEDITINPUT     = 3
-DROPDOWNEDITINPUT = 4
-MAXARRAYSENDSIZE  = 2000
-
-lastEditWindowPosition = (-1, -1)
-
-# Abstract class for controls (buttons, sliders, etc)
-class mControl(wxControl):
-    def __init__(self, parentApp, type, sSym, rSym, cnxtn):
-        self.editMode = False
-        self.selected = False
-        self.parentApp = parentApp
-        self.type = type
-        self.sendSymbol = sSym
-        self.receiveSymbol = rSym
-        self.connection = cnxtn
-        self.resetBackground = False
-        self.updateRSym()
-        self.clickedOn = False
-        self.grabbed = False
-        self.setEditMode(True)
-        EVT_CHAR(self, self.eChar)
-        EVT_KEY_UP(self, self.parentApp.eKeyUp)
-        EVT_KEY_DOWN(self, self.parentApp.eKeyDown)
-    def mDestroy(self):
-        if (self.editMode):
-            self.moveTag.Destroy()
-            self.BLResizeTag.Destroy()
-            self.BRResizeTag.Destroy()
-            self.TRResizeTag.Destroy()
-        self.Destroy()
-    def select(self):
-        if (not self.selected):
-            self.relocateTags()
-            self.moveTag.Show(True)
-            self.BLResizeTag.Show(True)
-            self.BRResizeTag.Show(True)
-            self.TRResizeTag.Show(True)
-            self.parentApp.selectedControlList.append(self)
-            # To keep tags above controls in Windows, repaints tags in idle time
-            # (i.e. after everything else has bee repainted)
-            self.selected = True
-            self.Connect(-1, -1, EVT_RAISE_TAGS_ID, self.eRepaintControlTags)
-        wxPostEvent(self, RaiseTagsEvent())
-    def deselect(self):
-        if (self.selected):
-            self.moveTag.Show(False)
-            self.BLResizeTag.Show(False)
-            self.BRResizeTag.Show(False)
-            self.TRResizeTag.Show(False)
-            self.parentApp.selectedControlList.remove(self)
-            self.Disconnect(-1, EVT_RAISE_TAGS_ID)
-        self.selected = False
-    def isSelected(self):
-        return self.selected
-    def grab(self):
-        if (not self.grabbed):
-            self.grabbed = True
-            self.parentApp.dragging = True
-            EVT_MOTION(self.moveTag, self.moveTag.eMove)
-            self.moveTag.lastPos = wxGetMousePosition()
-            self.moveTag.SetCursor(wxStockCursor(self.moveTag.pointerStyle))
-            self.parentApp.startMoveControls()
-            self.moveTag.CaptureMouse()
-    def ungrab(self):
-        if (self.grabbed):
-            self.grabbed = False
-            self.parentApp.dragging = False
-            self.moveTag.ReleaseMouse()
-            # this doesn't seem to actually disconnect
-            self.moveTag.Disconnect(-1, wxEVT_MOTION)
-            self.moveTag.SetCursor(wxSTANDARD_CURSOR)
-            self.parentApp.endDragMoveControls()
-            self.parentApp.mainFrame.mainPanel.Refresh()
-            self.Refresh()
-    def updateRSym(self):
-        self.connection.send(SETRCVRCOMMAND + SYMMSGSEP + \
-                             self.receiveSymbol + PAIRSEPCHAR)
-    def sendMessage(self, message):
-        try:
-            self.connection.send(self.sendSymbol + SYMMSGSEP + \
-                                 message + PAIRSEPCHAR)
-        except:
-            pass
-    def PDAction(self, value):
-        self.SetLabel(value)
-    def relocateTags(self):
-        self.moveTag.relocate()
-        self.BLResizeTag.relocate()
-        self.BRResizeTag.relocate()
-        self.TRResizeTag.relocate()
-    def refreshTags(self):
-        self.moveTag.Show(True)
-        self.BLResizeTag.Show(True)
-        self.BRResizeTag.Show(True)
-        self.TRResizeTag.Show(True)
-        self.moveTag.Refresh()
-        self.BLResizeTag.Refresh()
-        self.BRResizeTag.Refresh()
-        self.TRResizeTag.Refresh()
-    def startMove(self):
-        self.TRResizeTag.Show(False)
-        self.BRResizeTag.Show(False)
-        self.BLResizeTag.Show(False)
-    def move(self, deltaPos):
-        if (self.editMode and self.isSelected()):
-            xPos = self.GetPosition()[0] + deltaPos[0]
-            yPos = self.GetPosition()[1] + deltaPos[1]
-            deltaPosMTX = xPos - self.GetPosition()[0]
-            deltaPosMTY = yPos - self.GetPosition()[1]
-            xMTPos = self.moveTag.GetPosition()[0] + deltaPosMTX
-            yMTPos = self.moveTag.GetPosition()[1] + deltaPosMTY
-            self.MoveXY(xPos, yPos)
-            self.moveTag.MoveXY(xMTPos, yMTPos)
-    def endMove(self):
-        self.relocateTags()
-        self.TRResizeTag.Show(True)
-        self.BRResizeTag.Show(True)
-        self.BLResizeTag.Show(True)
-    def endDragMove(self):
-        if (self.parentApp.snapToGrid):
-            self.setPosition( \
-                   self.parentApp.getNearestGridPoint(self.GetPosition()))
-        self.endMove()
-    def resize(self, deltaPos):
-        if (self.editMode):
-            xSize = self.GetSize()[0] + deltaPos[0]
-            ySize = self.GetSize()[1] + deltaPos[1]
-            if (xSize > 0 and ySize > 0):
-                self.setSize((xSize, ySize))
-    def setEditMode(self, mode):
-        if (mode):
-            if (not self.editMode):
-                EVT_LEFT_DOWN(self, self.eLeftDown)
-                EVT_RIGHT_DOWN(self, self.eRightDown)
-                self.moveTag = controlEditTag(self,
-                                              (0,0),
-                                              wxBLACK,
-                                              wxCURSOR_CROSS)
-                self.BLResizeTag = controlResizeTag(self,
-                                                    (1,0),
-                                                    RESIZETAGCOLOR,
-                                                    wxCURSOR_SIZEWE)
-                self.TRResizeTag = controlResizeTag(self,
-                                                    (0,1),
-                                                    RESIZETAGCOLOR,
-                                                    wxCURSOR_SIZENS)
-                self.BRResizeTag = controlResizeTag(self,
-                                                    (1,1),
-                                                    RESIZETAGCOLOR,
-                                                    wxCURSOR_SIZENWSE)
-                self.editMode = True
-        elif (self.editMode):
-            self.deselect()            
-            self.moveTag.Destroy()
-            self.BLResizeTag.Destroy()
-            self.TRResizeTag.Destroy()
-            self.BRResizeTag.Destroy()
-            self.Disconnect(-1, wxEVT_LEFT_DOWN)
-            self.Disconnect(-1, wxEVT_RIGHT_DOWN)
-            self.editMode = False
-    def getEditMode(self):
-        return self.editMode
-    def setSendSymbol(self, sym):
-        self.sendSymbol = sym
-    def getSendSymbol(self):
-        return self.sendSymbol
-    def setReceiveSymbol(self, sym):
-        self.receiveSymbol = sym
-        self.updateRSym()
-    def getReceiveSymbol(self):
-        return self.receiveSymbol
-    def setConnection(self, cnxtn):
-        self.connection = cnxtn
-    def getConnection(self):
-        return self.connection
-    def getType(self):
-        return self.type
-    def setPosition(self, pos):
-        self.MoveXY(pos[0], pos[1])
-        self.relocateTags()
-    def setSize(self, size):
-        self.SetSize(size)
-        if (self.selected):
-            self.relocateTags()
-    # catch GTK bug
-    def GetBackgroundColour(self):
-        color = wxControl.GetBackgroundColour(self)
-        if (not color.Ok()):
-            color = wxBLACK
-        return color
-    def editCallback(self, editValues):
-        try:
-            self.setPosition((atoi(editValues[0]), atoi(editValues[1])))
-        except:
-            dlg = wxMessageDialog(self.parentApp.mainFrame,
-                                  "Invalid Position",
-                                  "Edit Error",
-                                  wxOK)
-            dlg.ShowModal()
-            dlg.Destroy()
-        try:
-            self.setSize(wxSize(atoi(editValues[2]), atoi(editValues[3])))
-        except:
-            dlg = wxMessageDialog(self.parentApp.mainFrame,
-                                  "Invalid Size",
-                                  "Edit Error",
-                                  wxOK)
-            dlg.ShowModal()
-            dlg.Destroy()
-        self.setSendSymbol(editValues[4])
-        self.setReceiveSymbol(editValues[5])
-        self.SetLabel(editValues[6])
-        self.SetForegroundColour(editValues[7])
-        self.SetBackgroundColour(editValues[8])
-        self.SetFont(editValues[9])
-    def eEdit(self, event):
-        editor = controlEditor(self)
-        editor.addEditItem("X Position:",
-                           TEXTEDITINPUT,
-                           self.GetPosition()[0])
-        editor.addEditItem("Y Position:",
-                           TEXTEDITINPUT,
-                           self.GetPosition()[1])
-        editor.addEditItem("Width:",
-                           TEXTEDITINPUT,
-                           self.GetSize()[0])
-        editor.addEditItem("Height:",
-                           TEXTEDITINPUT,
-                           self.GetSize()[1])
-        editor.addEditItem("S Symbol:",
-                           TEXTEDITINPUT,
-                           self.getSendSymbol())
-        editor.addEditItem("R Symbol:",
-                           TEXTEDITINPUT,
-                           self.getReceiveSymbol())
-        editor.addEditItem("Label:",
-                           TEXTEDITINPUT,
-                           self.GetLabel())
-        editor.addEditItem("F Color:",
-                           COLOREDITINPUT,
-                           self.GetForegroundColour())
-        editor.addEditItem("B Color:",
-                           COLOREDITINPUT,
-                           self.GetBackgroundColour())
-        editor.addEditItem("Font:",
-                           FONTEDITINPUT,
-                           self.GetFont())
-        editor.edit()
-    def eChar(self, event):
-        self.parentApp.eChar(event)
-    def eLeftDown(self, event):
-        if (self.editMode):
-            if (event.ControlDown()):
-                if (self.isSelected()):
-                    self.deselect()
-                else:
-                    self.select()
-            else:
-                self.parentApp.deselectOthers(self.GetId())
-                self.select()
-        else:
-            event.Skip()
-    def eRightDown(self, event):
-        if (self.editMode):
-            self.parentApp.deselectOthers(self.GetId())
-            self.select()
-            self.eEdit(event)
-        else:
-            event.Skip()
-    def eRepaintControlTags(self, event):
-        self.refreshTags()
-
-# Class for little box user grabs to move/edit control
-class controlEditTag(wxPanel):
-    def __init__(self, parentControl, position, color, pointerStyle):
-        wxPanel.__init__(self,
-                         parentControl.parentApp.mainFrame.mainPanel,
-                         -1, (0,0),
-                         (DEFTAGSIZE, DEFTAGSIZE), 0)
-        self.SetBackgroundColour(color)
-        self.parentControl = parentControl
-        self.pointerStyle = pointerStyle
-        self.leftDownOnTag = False
-        self.position = position
-        EVT_CHAR(self, self.parentControl.parentApp.eChar)
-        EVT_KEY_UP(self, self.parentControl.parentApp.eKeyUp)
-        EVT_KEY_DOWN(self, self.parentControl.parentApp.eKeyDown)
-        EVT_LEFT_DOWN(self, self.eLeftDown)
-        EVT_LEFT_UP(self, self.eRelease)
-        EVT_RIGHT_DOWN(self, self.eRightDown)
-        EVT_ENTER_WINDOW(self, self.eEnter)
-        EVT_LEAVE_WINDOW(self, self.eLeave)
-        self.Show(False)
-    def relocate(self):
-        nuPos = [0,0]
-        parentPos = self.parentControl.GetPosition()
-        parentSize = self.parentControl.GetSize()
-        if (self.position[0]):
-            nuPos[0] = parentPos[0] + parentSize[0]
-        else:
-            nuPos[0] = parentPos[0] - DEFTAGSIZE
-        if (self.position[1]):
-            nuPos[1] = parentPos[1] + parentSize[1]
-        else:
-            nuPos[1] = parentPos[1] - DEFTAGSIZE
-        self.MoveXY(nuPos[0], nuPos[1])
-    def eLeftDown(self, event):
-        self.leftDownOnTag = True
-        if (self.parentControl.grabbed):
-            self.parentControl.ungrab()
-            self.parentControl.deselect()
-            self.parentControl.parentApp.deselectOthers(-1)
-        else:
-            self.parentControl.grab()
-    def eRightDown(self, event):
-        if (not self.parentControl.grabbed):
-            self.parentControl.eEdit(event)
-    def eMove(self, event):
-        if (self.parentControl.grabbed):
-            self.newPos = wxGetMousePosition()
-            deltaPos = (self.newPos[0] - self.lastPos[0],
-                        self.newPos[1] - self.lastPos[1])
-            self.lastPos = self.newPos
-            self.parentControl.parentApp.moveSelectedControls(deltaPos)
-    def eRelease(self, event):
-        self.leftDownOnTag = False
-        self.parentControl.ungrab()
-    def eEnter(self, event):
-        self.SetCursor(wxStockCursor(self.pointerStyle))
-    def eLeave(self, event):
-        self.SetCursor(wxSTANDARD_CURSOR)
-# Class for little box user grabs to resize control
-class controlResizeTag(controlEditTag):
-    def eLeftDown(self, event):
-        EVT_MOTION(self, self.eMove)
-        self.leftDownOnTag = True
-        self.lastPos = wxGetMousePosition()
-        self.SetCursor(wxStockCursor(self.pointerStyle))
-        self.CaptureMouse()
-    def eMove(self, event):
-        if (event.LeftIsDown() and self.leftDownOnTag):
-            self.newPos = wxGetMousePosition()
-            deltaPos = ((self.newPos[0] - self.lastPos[0]) * self.position[0],
-                        (self.newPos[1] - self.lastPos[1]) * self.position[1])
-            self.lastPos = self.newPos
-            self.parentControl.parentApp.resizeSelectedControls(deltaPos)
-    def eRelease(self, event):
-        self.ReleaseMouse()
-        self.Disconnect(-1, wxEVT_MOTION)
-        self.SetCursor(wxSTANDARD_CURSOR)
-        self.leftDownOnTag = False
-        self.parentControl.parentApp.mainFrame.mainPanel.Refresh()
-
-# Class for regular buttons
-class mButton(mControl, wxButton):
-    def __init__(self, parentApp, type, id, text, pos, sSym, rSym, conn):
-        wxButton.__init__(self, parentApp.mainFrame.mainPanel,
-                          id, text, pos)
-        mControl.__init__(self, parentApp, type, sSym, rSym, conn)
-        EVT_BUTTON(parentApp.mainFrame.mainPanel,
-                   self.GetId(), self.eClicked)
-    def eClicked(self, event):
-        if (not self.editMode):
-            self.sendMessage("bang")
-
-# Class for toggle buttons
-# Problem with grabbing clicks with EVT_*_DOWN mouse events
-# in GTK on toggle button, seems to be a wxWindows thing
-class mToggle(mButton, wxToggleButton, wxButton):
-    def __init__(self, parentApp, type, id, text, pos, sSym, rSym, conn):
-        wxToggleButton.__init__(self, parentApp.mainFrame.mainPanel,
-                                id, text, pos)
-        mControl.__init__(self, parentApp, type, sSym, rSym, conn)
-        EVT_TOGGLEBUTTON(parentApp.mainFrame.mainPanel,
-                         self.GetId(), self.eClicked)
-    def toggle(self):
-        self.SetValue(1 - self.GetValue())
-    def PDAction(self, value):
-        try:
-            num = atof(value)
-            if (num == 0):
-                self.SetValue(0)
-            else:
-                self.SetValue(1)
-        except:
-            if (value == "bang"):
-                self.toggle()
-            else:
-                self.SetLabel(value)
-    def eClicked(self, event):
-        # checking edit mode due to above-mentioned problem
-        # checking for ctrl key (308)  
-        if (self.editMode):
-            try:
-                self.parentApp.keysDown.index(308)
-                if (self.selected):
-                    self.deselect()
-                else:
-                    self.select()
-            except:
-                self.parentApp.deselectOthers(-1)
-                self.select()
-        else:
-            self.sendMessage(repr(event.IsChecked()))
-
-# Class for sliders
-# Screwyness since wxSliders have a maximum at down position.
-# No way to change as far as I can tell.
-class mSlider(mControl, wxSlider):
-    def __init__(self, parentApp, type, id, label, 
-                 pos, style, sSym, rSym, conn):
-        if (style & wxSL_HORIZONTAL):
-            sSize = DEFHSLIDERSIZE
-        if (style & wxSL_VERTICAL):
-            sSize = DEFVSLIDERSIZE
-        if (isinstance(label, list)):
-            try:
-                value = atoi(label[0])
-            except:
-                value = 0
-            min = label[1]
-            max = label[2]
-            dir = label[3]
-        else:
-            try:
-                value = atoi(label)
-            except:
-                value = 0
-            min = DEFSLIDERMIN
-            max = DEFSLIDERMAX
-            dir = 1
-        wxSlider.__init__(self, parentApp.mainFrame.mainPanel,
-                          id, value, min, max, pos, sSize, style)
-        mControl.__init__(self, parentApp, type, sSym, rSym, conn)
-        EVT_COMMAND_SCROLL(parentApp, self.GetId(), self.eScrolled)
-        self.lastValue = value
-        self.setDirection(dir)
-        self.resetBackground = True
-        self.setSliderValue(value)
-    def PDAction(self, value):
-        try:
-            num = atof(value)
-            self.setSliderValue(num)
-        except:
-            pass
-    def setDirection(self, val):
-        if (val == 0):
-            self.direction = 0
-        else:
-            self.direction = 1
-    def getDirection(self):
-        return self.direction
-    def getSliderValue(self):
-        direction = self.direction
-        styleFlag = self.GetWindowStyleFlag()
-        if (((direction) and (styleFlag & wxSL_VERTICAL)) \
-        or ((not direction) and (styleFlag & wxSL_HORIZONTAL))):
-            value = self.GetMax() - self.GetValue() + self.GetMin()
-        else:
-            value = self.GetValue()
-        return value
-    def setSliderValue(self, num):
-        if (((self.direction == 1) and (self.GetWindowStyleFlag() \
-                                        & wxSL_VERTICAL)) \
-                                   or ((self.direction == 0) \
-                                        and (self.GetWindowStyleFlag() \
-                                             & wxSL_HORIZONTAL))):
-            value = self.GetMax() - num + self.GetMin()
-        else:
-            value = num
-        self.SetValue(value)
-    def GetLabel(self):
-        return repr(self.getSliderValue())
-    def SetLabel(self, value):
-        try:
-            self.setSliderValue(atoi(value))
-        except:
-            pass
-    def editCallback(self, editValues):
-        try:
-            self.setPosition((atoi(editValues[0]), atoi(editValues[1])))
-        except:
-            dlg = wxMessageDialog(self.parentApp.mainFrame,
-                                  "Invalid Position",
-                                  "Edit Error",
-                                  wxOK)
-            dlg.ShowModal()
-            dlg.Destroy()
-        try:
-            self.setSize(wxSize(atoi(editValues[2]), atoi(editValues[3])))
-        except:
-            dlg = wxMessageDialog(self.parentApp.mainFrame,
-                                  "Invalid Size",
-                                  "Edit Error",
-                                  wxOK)
-            dlg.ShowModal()
-            dlg.Destroy()
-        self.setSendSymbol(editValues[4])
-        self.setReceiveSymbol(editValues[5])
-        self.SetForegroundColour(editValues[6])
-        self.SetBackgroundColour(editValues[7])
-        try:
-            self.SetRange(atoi(editValues[8]),
-                          atoi(editValues[9]))
-        except:
-            dlg = wxMessageDialog(self.parentApp.mainFrame,
-                                  "Invalid Range",
-                                  "Edit Error",
-                                  wxOK)
-            dlg.ShowModal()
-            dlg.Destroy()
-        if (editValues[10] == "Up"):
-            self.setDirection(1)
-        elif (editValues[10] == "Down"):
-            self.setDirection(0)
-    def eEdit(self, event):
-        editor = controlEditor(self)
-        editor.addEditItem("X Position:",
-                           TEXTEDITINPUT,
-                           self.GetPosition()[0])
-        editor.addEditItem("Y Position:",
-                           TEXTEDITINPUT,
-                           self.GetPosition()[1])
-        editor.addEditItem("Width:",
-                           TEXTEDITINPUT,
-                           self.GetSize()[0])
-        editor.addEditItem("Height:",
-                           TEXTEDITINPUT,
-                           self.GetSize()[1])
-        editor.addEditItem("S Symbol:",
-                           TEXTEDITINPUT,
-                           self.getSendSymbol())
-        editor.addEditItem("R Symbol:",
-                           TEXTEDITINPUT,
-                           self.getReceiveSymbol())
-        editor.addEditItem("F Color:",
-                           COLOREDITINPUT,
-                           self.GetForegroundColour())
-        editor.addEditItem("B Color:",
-                           COLOREDITINPUT,
-                           self.GetBackgroundColour())
-        editor.addEditItem("Minimum:",
-                           TEXTEDITINPUT,
-                           self.GetMin())
-        editor.addEditItem("Maximum:",
-                           TEXTEDITINPUT,
-                           self.GetMax())
-        if (self.getDirection() == 1):
-            ddValues = ["Up", "Down"]
-        else:
-            ddValues = ["Down", "Up"]
-        editor.addEditItem("Direction:",
-                           DROPDOWNEDITINPUT,
-                           ddValues)
-        editor.edit()
-    def eScrolled(self, event):
-        if (not self.editMode):
-            value = self.getSliderValue()
-            if (self.lastValue != value):
-                self.lastValue = value
-                self.sendMessage(repr(value))
-
-#class for `decorative' rectangle
-class mRectangle(mControl, wxStaticBox):
-    def __init__(self, parentApp, type, id, text, pos, sSym, rSym, conn):
-        wxStaticBox.__init__(self, parentApp.mainFrame.mainPanel,
-                             id, text, pos, DEFRECTSIZE)
-        mControl.__init__(self, parentApp, type, sSym, rSym, conn)
-        self.resetBackground = True
-    def SetValue(self, value):
-        self.SetLabel(value)
-    def eLeftDown(self, event):
-        if (self.editMode):
-            if (event.GetPosition()[0] < 20 or \
-                event.GetPosition()[1] < 20 or \
-                event.GetPosition()[0] > self.GetSize()[0] - 20 or\
-                event.GetPosition()[1] > self.GetSize()[1] - 20):
-                if (event.ControlDown()):
-                    if (self.isSelected()):
-                        self.deselect()
-                    else:
-                        self.select()
-                else:
-                    self.parentApp.deselectOthers(self.GetId())
-                    self.select()
-            else:
-                self.parentApp.eLeftDown(event)
-        else:
-            event.Skip()
-
-
-# Class for `decorative' text
-class mText(mControl, wxStaticText):
-    def __init__(self, parentApp, type, id, text, pos, sSym, rSym, conn):
-        wxStaticText.__init__(self, parentApp.mainFrame.mainPanel,
-                              id, text, pos, wxDefaultSize,
-                              wxALIGN_CENTRE | wxST_NO_AUTORESIZE)
-        mControl.__init__(self, parentApp, type, sSym, rSym, conn)
-        self.resetBackground = True
-    def SetValue(self, value):
-        self.SetLabel(value)
-        self.Refresh()
-
-#Class for gauges
-class mGauge(wxGauge, mSlider):
-    def __init__(self, parentApp, type, id, label, pos,
-                 style, sSym, rSym, conn):
-        if (style & wxGA_HORIZONTAL):
-            size = DEFHGAUGESIZE
-        else:
-            size = DEFVGAUGESIZE
-        if (isinstance(label, list)):
-            try:
-                value = atoi(label[0])
-            except:
-                value = 0
-            max = label[2]
-        else:
-            try:
-                value = atoi(label)
-            except:
-                value = 0
-            max = DEFSLIDERMAX
-        wxGauge.__init__(self, parentApp.mainFrame.mainPanel,
-                         id, max, pos, size, style | wxGA_SMOOTH)
-        mControl.__init__(self, parentApp, type, sSym, rSym, conn)
-        try:
-            self.SetValue(value)
-        except:
-            pass
-    def GetMin(self):
-        return 0
-    def GetMax(self):
-        return self.GetRange()
-    def SetRange(self, min, max):
-        wxGauge.SetRange(self, max)
-    def getDirection(self):
-        return 0
-    def setDirection(self, x):
-        pass
-    def GetLabel(self):
-        return repr(self.GetValue())
-    def SetLabel(self, value):
-        try:
-            self.SetValue(atoi(value))
-        except:
-            pass
-    def PDAction(self, value):
-        try:
-            num = atof(value)
-            if (num > self.GetMax()):
-                num = self.GetMax()
-            if (num < 0):
-                num = 0
-            self.SetValue(num)
-        except:
-            self.SetLabel(value)
-    def editCallback(self, editValues):
-        try:
-            self.setPosition((atoi(editValues[0]), atoi(editValues[1])))
-        except:
-            dlg = wxMessageDialog(self.parentApp.mainFrame,
-                                  "Invalid Position",
-                                  "Edit Error",
-                                  wxOK)
-            dlg.ShowModal()
-            dlg.Destroy()
-        try:
-            self.setSize(wxSize(atoi(editValues[2]), atoi(editValues[3])))
-        except:
-            dlg = wxMessageDialog(self.parentApp.mainFrame,
-                                  "Invalid Size",
-                                  "Edit Error",
-                                  wxOK)
-            dlg.ShowModal()
-            dlg.Destroy()
-        self.setSendSymbol(editValues[4])
-        self.setReceiveSymbol(editValues[5])
-        try:
-            self.SetRange(0,
-                          atoi(editValues[6]))
-        except:
-            dlg = wxMessageDialog(self.parentApp.mainFrame,
-                                  "Invalid Maximum",
-                                  "Edit Error",
-                                  wxOK)
-            dlg.ShowModal()
-            dlg.Destroy()
-        self.SetForegroundColour(editValues[7])
-        self.SetBackgroundColour(editValues[8])
-    def eEdit(self, event):
-        editor = controlEditor(self)
-        editor.addEditItem("X Position:",
-                           TEXTEDITINPUT,
-                           self.GetPosition()[0])
-        editor.addEditItem("Y Position:",
-                           TEXTEDITINPUT,
-                           self.GetPosition()[1])
-        editor.addEditItem("Width:",
-                           TEXTEDITINPUT,
-                           self.GetSize()[0])
-        editor.addEditItem("Height:",
-                           TEXTEDITINPUT,
-                           self.GetSize()[1])
-        editor.addEditItem("S Symbol:",
-                           TEXTEDITINPUT,
-                           self.getSendSymbol())
-        editor.addEditItem("R Symbol:",
-                           TEXTEDITINPUT,
-                           self.getReceiveSymbol())
-        editor.addEditItem("Maximum:",
-                           TEXTEDITINPUT,
-                           self.GetMax())
-        editor.addEditItem("F Color:",
-                           COLOREDITINPUT,
-                           self.GetForegroundColour())
-        editor.addEditItem("B Color:",
-                           COLOREDITINPUT,
-                           self.GetBackgroundColour())
-        editor.edit()
-
-# Class for checkboxes
-class mCheckBox(wxCheckBox, mToggle):
-    def __init__(self, parentApp, type, id, text, pos, sSym, rSym, conn):
-        wxCheckBox.__init__(self, parentApp.mainFrame.mainPanel,
-                            id, text, pos)
-        mControl.__init__(self, parentApp, type, sSym, rSym, conn)
-        self.resetBackground = True
-        EVT_CHECKBOX(parentApp.mainFrame.mainPanel,
-                     self.GetId(), self.eClicked)
-
-# Class for radio buttons
-class mRadioButton(wxRadioButton, mToggle):
-    def __init__(self, parentApp, type, id, text,
-                 pos, sSym, rSym, style, conn):
-        wxRadioButton.__init__(self, parentApp.mainFrame.mainPanel,
-                               id, text, pos, wxDefaultSize, style)
-        mControl.__init__(self, parentApp, type, sSym, rSym, conn)
-        self.resetBackground = True
-        EVT_RADIOBUTTON(parentApp.mainFrame.mainPanel,
-                        self.GetId(), self.eClicked)
-        self.SetValue(False)        
-    def eClicked(self, event):
-        if (not self.editMode and (self.GetValue() > 0)):        
-            self.sendMessage("bang")
-
-# Class for textboxes
-class mTextBox(mControl, wxTextCtrl):
-    def __init__(self, parentApp, type, id, label, pos, sSym, rSym, conn):
-        wxTextCtrl.__init__(self, parentApp.mainFrame.mainPanel,
-                            id, "", pos, wxDefaultSize,
-                            wxTE_PROCESS_ENTER)
-        mControl.__init__(self, parentApp, type, sSym, rSym, conn)
-        self.SetValue(label)
-        EVT_TEXT_ENTER(parentApp.mainFrame.mainPanel, self.GetId(), self.eEnter)
-    def PDAction(self, value):
-        if (value == "bang"):
-            self.SetValue("")
-        else: 
-            self.SetValue(value)
-    def GetLabel(self):
-        return self.GetValue()
-    def SetLabel(self, value):
-        self.SetValue(value)
-    def eEnter(self, event):
-        value = self.GetValue()
-        if (not self.editMode):
-            self.sendMessage(value)
-
-# Class for spin buttons
-class mSpinButton(wxSpinButton, mSlider):
-    def __init__(self, parentApp, type, id, label, pos, sSym, rSym, conn):
-        wxSpinButton.__init__(self, parentApp.mainFrame.mainPanel,
-                              id, pos, wxDefaultSize,
-                              wxSP_VERTICAL)
-        mControl.__init__(self, parentApp, type, sSym, rSym, conn)
-        try:
-            self.SetValue(atoi(label))
-        except:
-            pass
-        EVT_SPIN(parentApp.mainFrame.mainPanel, self.GetId(), self.eSpin)
-    def getDirection(self):
-        return 0
-    def setDirection(self, x):
-        pass
-    def PDAction(self, value):
-        try:
-            num = atof(value)
-            if (num > self.GetMax()):
-                num = self.GetMax()
-            if (num < 0):
-                num = 0
-            self.SetValue(num)
-        except:
-            self.SetLabel(value)
-    def GetLabel(self):
-        return repr(self.GetValue())
-    def SetLabel(self, value):
-        try:
-            self.SetValue(atoi(value))
-        except:
-            pass
-    def eSpin(self, event):
-        value = repr(self.GetValue())
-        if (not self.editMode):
-            self.sendMessage(value)
-    def editCallback(self, editValues):
-        try:
-            self.setPosition((atoi(editValues[0]), atoi(editValues[1])))
-        except:
-            dlg = wxMessageDialog(self.parentApp.mainFrame,
-                                  "Invalid Position",
-                                  "Edit Error",
-                                  wxOK)
-            dlg.ShowModal()
-            dlg.Destroy()
-        try:
-            self.setSize(wxSize(atoi(editValues[2]), atoi(editValues[3])))
-        except:
-            dlg = wxMessageDialog(self.parentApp.mainFrame,
-                                  "Invalid Size",
-                                  "Edit Error",
-                                  wxOK)
-            dlg.ShowModal()
-            dlg.Destroy()
-        self.setSendSymbol(editValues[4])
-        self.setReceiveSymbol(editValues[5])
-        try:
-            self.SetRange(atoi(editValues[6]),
-                          atoi(editValues[7]))
-        except:
-            dlg = wxMessageDialog(self.parentApp.mainFrame,
-                                  "Invalid Range",
-                                  "Edit Error",
-                                  wxOK)
-            dlg.ShowModal()
-            dlg.Destroy()
-        self.SetForegroundColour(editValues[8])
-        self.SetBackgroundColour(editValues[9])
-    def eEdit(self, event):
-        editor = controlEditor(self)
-        editor.addEditItem("X Position:",
-                           TEXTEDITINPUT,
-                           self.GetPosition()[0])
-        editor.addEditItem("Y Position:",
-                           TEXTEDITINPUT,
-                           self.GetPosition()[1])
-        editor.addEditItem("Width:",
-                           TEXTEDITINPUT,
-                           self.GetSize()[0])
-        editor.addEditItem("Height:",
-                           TEXTEDITINPUT,
-                           self.GetSize()[1])
-        editor.addEditItem("S Symbol:",
-                           TEXTEDITINPUT,
-                           self.getSendSymbol())
-        editor.addEditItem("R Symbol:",
-                           TEXTEDITINPUT,
-                           self.getReceiveSymbol())
-        editor.addEditItem("Minimum:",
-                           TEXTEDITINPUT,
-                           self.GetMin())
-        editor.addEditItem("Maximum:",
-                           TEXTEDITINPUT,
-                           self.GetMax())
-        editor.addEditItem("F Color:",
-                           COLOREDITINPUT,
-                           self.GetForegroundColour())
-        editor.addEditItem("B Color:",
-                           COLOREDITINPUT,
-                           self.GetBackgroundColour())
-        editor.edit()
-
-# Class for mouse capture area
-class mMouseArea(wxPanel, mControl):
-    def __init__(self, parentApp, type, id, pos, sSym, rSym, conn):
-        wxPanel.__init__(self, parentApp.mainFrame.mainPanel, -1, pos,
-                         (DEFMOUSEAREASIZE, DEFMOUSEAREASIZE), wxBORDER)
-        mControl.__init__(self, parentApp, type, sSym, rSym, conn)
-        self.mouseCaptured = False
-        EVT_MIDDLE_DOWN(self, self.eMiddleDown)
-        EVT_MIDDLE_UP(self, self.eMiddleUp)
-        EVT_RIGHT_UP(self, self.eRightUp)
-    def sendMouseInfo(self, xPos, yPos, buttonNum, buttonStatus):
-        xPosStr = repr(xPos)
-        yPosStr = repr(yPos)
-        if (buttonNum > -1):
-            buttonNumStr = repr(buttonNum)
-            buttonStatusStr = repr(buttonStatus)
-            self.sendMessage(xPosStr + " " + \
-                             yPosStr + " " + \
-                             buttonNumStr + " " + \
-                             buttonStatusStr)
-        else:
-            self.sendMessage(xPosStr + " " + yPosStr)
-    def editCallback(self, editValues):
-        try:
-            self.setPosition((atoi(editValues[0]), atoi(editValues[1])))
-        except:
-            dlg = wxMessageDialog(self.parentApp.mainFrame,
-                                  "Invalid Position",
-                                  "Edit Error",
-                                  wxOK)
-            dlg.ShowModal()
-            dlg.Destroy()
-        try:
-            self.setSize(wxSize(atoi(editValues[2]), atoi(editValues[3])))
-        except:
-            dlg = wxMessageDialog(self.parentApp.mainFrame,
-                                  "Invalid Size",
-                                  "Edit Error",
-                                  wxOK)
-            dlg.ShowModal()
-            dlg.Destroy()
-        self.setSendSymbol(editValues[4])
-        self.setReceiveSymbol(editValues[5])
-        self.SetBackgroundColour(editValues[6])
-    def eEdit(self, event):
-        editor = controlEditor(self)
-        editor.addEditItem("X Position:",
-                           TEXTEDITINPUT,
-                           self.GetPosition()[0])
-        editor.addEditItem("Y Position:",
-                           TEXTEDITINPUT,
-                           self.GetPosition()[1])
-        editor.addEditItem("Width:",
-                           TEXTEDITINPUT,
-                           self.GetSize()[0])
-        editor.addEditItem("Height:",
-                           TEXTEDITINPUT,
-                           self.GetSize()[1])
-        editor.addEditItem("S Symbol:",
-                           TEXTEDITINPUT,
-                           self.getSendSymbol())
-        editor.addEditItem("R Symbol:",
-                           TEXTEDITINPUT,
-                           self.getReceiveSymbol())
-        editor.addEditItem("Color:",
-                           COLOREDITINPUT,
-                           self.GetBackgroundColour())
-        editor.edit()
-    def eLeftDown(self, event):
-        if (self.editMode):
-            if (event.ControlDown()):
-                if (self.isSelected()):
-                    self.deselect()
-                else:
-                    self.select()
-            else:
-                self.parentApp.deselectOthers(self.GetId())
-                self.select()
-        else:
-            self.sendMouseInfo(event.GetPosition()[0],
-                               event.GetPosition()[1],
-                               0,
-                               1)
-            event.Skip()
-            self.eStartCapture(event)
-    def eRightDown(self, event):
-        if (self.editMode):
-            self.parentApp.deselectOthers(self.GetId())
-            self.select()
-            self.eEdit(event)
-        else:
-            self.sendMouseInfo(event.GetPosition()[0],
-                               event.GetPosition()[1],
-                               2,
-                               1)
-    def eRightUp(self, event):
-        if (not self.editMode):
-            self.sendMouseInfo(event.GetPosition()[0],
-                               event.GetPosition()[1],
-                               2,
-                               0)           
-    def eMiddleDown(self, event):
-        if (not self.editMode):
-            self.sendMouseInfo(event.GetPosition()[0],
-                               event.GetPosition()[1],
-                               1,
-                               1)
-    def eMiddleUp(self, event):
-        if (not self.editMode):
-            self.sendMouseInfo(event.GetPosition()[0],
-                               event.GetPosition()[1],
-                               1,
-                               0) 
-    def eStartCapture(self, event):
-        if (not self.mouseCaptured):
-            self.CaptureMouse()
-            self.mouseCaptured = True
-            EVT_LEFT_UP(self, self.eEndCapture)
-            EVT_MOTION(self, self.eCaptureMouse)
-    def eEndCapture(self, event):
-        if (self.mouseCaptured):
-            self.ReleaseMouse()
-            self.mouseCaptured = False
-            self.sendMouseInfo(event.GetPosition()[0],
-                               event.GetPosition()[1],
-                               0,
-                               0)
-        self.Disconnect(-1, wxEVT_MOTION)
-        self.Disconnect(-1, wxEVT_LEFT_UP)
-    def eCaptureMouse(self, event):
-        if (event.LeftIsDown() and self.mouseCaptured):
-            self.sendMouseInfo(event.GetPosition()[0],
-                               event.GetPosition()[1],
-                               -1,
-                               -1)
-
-class mGraph(wxPanel, mSlider):
-    def __init__(self, parentApp, type, id, label, pos, sSym, rSym, conn):
-        wxPanel.__init__(self, parentApp.mainFrame.mainPanel, -1, pos,
-                         (DEFMOUSEAREASIZE, DEFMOUSEAREASIZE), wxSIMPLE_BORDER)
-        mControl.__init__(self, parentApp, type, sSym, rSym, conn)
-        self.arrayLength = 0
-        self.arrayRawData = []
-        self.arrayDrawData = []
-        self.min = -1
-        self.max = 1
-        self.mouseCaptured = False
-        if (isinstance(label, list)):
-            try:
-                value = atoi(label[0])
-            except:
-                value = 0
-            self.min = label[1]
-            self.max = label[2]
-            aData = label[3]
-            self.arrayLength = aData[0]
-            self.arrayRawData = aData[1:]
-        if (self.arrayLength == 0):
-            self.arrayLength = 100
-            for i in range(0, 100):
-                self.arrayRawData.append(0)
-        for i in range(0, self.arrayLength):
-            drawData = self.getDrawData(i, 0)
-            self.arrayDrawData.append(drawData)
-        EVT_PAINT(self, self.ePaint)
-    def GetMin(self):
-        return self.min
-    def GetMax(self):
-        return self.max
-    def getDirection(self):
-        return [self.arrayLength] + self.arrayRawData
-    def PDAction(self, value):
-        value = strip(value)
-        if (lower(value) == "bang"):
-            self.Refresh()
-        else:
-            isAnInt = False
-            try:
-                aLen = atoi(value)
-                isAnInt = True
-            except:
-                pass
-            if (isAnInt):
-                if (aLen > self.arrayLength):
-                    for i in range(self.arrayLength, aLen):
-                        self.arrayRawData.append(0)
-                        self.arrayDrawData.append(self.getDrawData(i, 0))
-                elif (aLen < self.arrayLength):
-                    del self.arrayRawData[aLen:]
-                    del self.arrayDrawData[aLen:]
-                self.arrayLength = aLen
-                for i in range(0, self.arrayLength):
-                    self.arrayDrawData[i] = self.getDrawData(i, 
-                                                             self.arrayRawData[i])
-            else:
-                try:
-                    [aIndex, aValue] = split(value, ' ')
-                    aIndex = atoi(aIndex)
-                    aValue = atof(aValue)
-                    if (self.arrayRawData[aIndex] != aValue and \
-                        aIndex >= 0 and \
-                        aIndex < self.arrayLength):
-                        self.arrayRawData[aIndex] = aValue
-                        self.arrayDrawData[aIndex] = self.getDrawData(aIndex,
-                                                                      aValue)
-                except:
-                    pass
-            self.Refresh()
-    def getDrawData(self, index, value):
-        (xSize, ySize) = self.GetSize()
-        div =  float(self.arrayLength - 1)
-        if (div != 0):
-            xScale = xSize / div
-        else:
-            xScale = 1
-        div = float(self.max - self.min)
-        if (div != 0): 
-            yScale = ySize / div 
-        else:
-            yScale = 1
-        yOffset = int(self.max * yScale)
-        x = int(xScale * index)
-        y = yOffset - int(yScale * value)
-        pnt = (x,y)
-        return pnt
-    def setSize(self, size):
-        self.SetSize(size)
-        if (self.selected):
-            self.relocateTags()
-        for i in range(0, len(self.arrayRawData)):
-            self.arrayDrawData[i] = self.getDrawData(i,
-                                                     self.arrayRawData[i])
-        self.Refresh()
-    def editCallback(self, editValues):
-        try:
-            self.setPosition((atoi(editValues[0]), atoi(editValues[1])))
-        except:
-            dlg = wxMessageDialog(self.parentApp.mainFrame,
-                                  "Invalid Position",
-                                  "Edit Error",
-                                  wxOK)
-            dlg.ShowModal()
-            dlg.Destroy()
-        try:
-            self.setSize(wxSize(atoi(editValues[2]), atoi(editValues[3])))
-        except:
-            dlg = wxMessageDialog(self.parentApp.mainFrame,
-                                  "Invalid Size",
-                                  "Edit Error",
-                                  wxOK)
-            dlg.ShowModal()
-            dlg.Destroy()
-        try:
-            self.min = atof(editValues[6])
-        except:
-            dlg = wxMessageDialog(self.parentApp.mainFrame,
-                                  "Invalid Minimum",
-                                  "Edit Error",
-                                  wxOK)
-            dlg.ShowModal()
-            dlg.Destroy()
-        try:
-            self.max = atof(editValues[7])
-        except:
-            dlg = wxMessageDialog(self.parentApp.mainFrame,
-                                  "Invalid Maximum",
-                                  "Edit Error",
-                                  wxOK)
-            dlg.ShowModal()
-            dlg.Destroy()
-        self.setSendSymbol(editValues[4])
-        self.setReceiveSymbol(editValues[5])
-        self.SetBackgroundColour(editValues[8])
-        self.SetForegroundColour(editValues[9])
-    def eEdit(self, event):
-        editor = controlEditor(self)
-        editor.addEditItem("X Position:",
-                           TEXTEDITINPUT,
-                           self.GetPosition()[0])
-        editor.addEditItem("Y Position:",
-                           TEXTEDITINPUT,
-                           self.GetPosition()[1])
-        editor.addEditItem("Width:",
-                           TEXTEDITINPUT,
-                           self.GetSize()[0])
-        editor.addEditItem("Height:",
-                           TEXTEDITINPUT,
-                           self.GetSize()[1])
-        editor.addEditItem("S Symbol:",
-                           TEXTEDITINPUT,
-                           self.getSendSymbol())
-        editor.addEditItem("R Symbol:",
-                           TEXTEDITINPUT,
-                           self.getReceiveSymbol())
-        editor.addEditItem("Minumum:",
-                           TEXTEDITINPUT,
-                           repr(self.min))
-        editor.addEditItem("Maximum:",
-                           TEXTEDITINPUT,
-                           repr(self.max))      
-        editor.addEditItem("B Color:",
-                           COLOREDITINPUT,
-                           self.GetBackgroundColour())
-        editor.addEditItem("F Color:",
-                           COLOREDITINPUT,
-                           self.GetForegroundColour())
-        editor.edit()
-    def ePaint(self, event):
-        event.Skip()
-        myDC = wxPaintDC(self)
-        myDC.BeginDrawing()
-        myDC.SetPen(wxPen(self.GetForegroundColour(), 1, wxSOLID))
-        myDC.SetBrush(wxBrush("#000000", wxTRANSPARENT))
-        myDC.DrawLines(self.arrayDrawData)
-        myDC.EndDrawing()
-    def eDrawMotion(self, event):
-        if (self.mouseCaptured):
-            (mouseX, mouseY) = event.GetPosition()
-            div = float(self.arrayLength - 1)
-            if (div != 0):
-                xScale = self.GetSize()[0] / div
-            else:
-                xScale = 1
-            div = float(self.max - self.min)
-            if (div != 0):
-                yScale = self.GetSize()[1] / div
-            else:
-                yScale = 1
-            yOffset = int(self.max * yScale)
-            if (xScale != 0):
-                x = int(mouseX / xScale)
-            else:
-                x = 0
-            if (yScale != 0):
-                y = self.max - (mouseY / yScale)
-            else:
-                y = 0
-            if (x >= 0 and x < self.arrayLength and \
-                y >= self.min and y <= self.max):
-                self.arrayRawData[x] = y
-                self.arrayDrawData[x] = self.getDrawData(x, y)
-                self.Refresh()
-                self.sendMessage(repr(x) + " " + repr(y))
-    def eLeftDown(self, event):
-        if (self.editMode):
-            if (event.ControlDown()):
-                if (self.isSelected()):
-                    self.deselect()
-                else:
-                    self.select()
-            else:
-                self.parentApp.deselectOthers(self.GetId())
-                self.select()
-        else:
-            event.Skip()
-            self.eStartCapture(event)
-    def eStartCapture(self, event):
-        if (not self.mouseCaptured):
-            self.CaptureMouse()
-            self.mouseCaptured = True
-            EVT_LEFT_UP(self, self.eEndCapture)
-            EVT_MOTION(self, self.eDrawMotion)
-    def eEndCapture(self, event):
-        if (self.mouseCaptured):
-            self.ReleaseMouse()
-            self.mouseCaptured = False
-        self.Disconnect(-1, wxEVT_MOTION)
-        self.Disconnect(-1, wxEVT_LEFT_UP)
-    def eCaptureMouse(self, event):
-        pass
-
-# Class for clickable image
-# seems to have problems capturing the mouse?
-class mImage(mMouseArea, wxStaticBitmap):
-    def __init__(self, parentApp, type, id, filepath,
-                 pos, sSym, rSym, conn):
-        self.filename = filepath
-        self.image = wxImage(self.filename,
-                             wxBITMAP_TYPE_ANY)
-        tempBitmap = self.image.ConvertToBitmap()
-        if (not tempBitmap.Ok()):
-            raise Exception
-        wxStaticBitmap.__init__(self, parentApp.mainFrame.mainPanel, id,
-                                tempBitmap, pos, wxDefaultSize)
-        mControl.__init__(self, parentApp, type, sSym, rSym, conn)
-        self.resetBackground = True
-        self.mouseCaptured = False
-        EVT_LEFT_DOWN(self, self.eLeftDown)
-        EVT_MIDDLE_DOWN(self, self.eMiddleDown)
-        EVT_MIDDLE_UP(self, self.eMiddleUp)
-        EVT_RIGHT_UP(self, self.eRightUp)
-    def sendMouseInfo(self, xPos, yPos, buttonNum, buttonStatus):
-        xPosStr = repr(xPos)
-        yPosStr = repr(yPos)
-        if (buttonNum > -1):
-            buttonNumStr = repr(buttonNum)
-            buttonStatusStr = repr(buttonStatus)
-            self.sendMessage(xPosStr + " " + \
-                             yPosStr + " " + \
-                             buttonNumStr + " " + \
-                             buttonStatusStr)
-        else:
-            self.sendMessage(xPosStr + " " + yPosStr)
-    def resize(self, deltaPos):
-        if (self.editMode):
-            xSize = self.GetSize()[0] + deltaPos[0]
-            ySize = self.GetSize()[1] + deltaPos[1]
-            if (xSize > 0 and ySize > 0):
-                if (xSize <= self.image.GetWidth() and
-                    ySize <= self.image.GetHeight()):
-                    self.setSize((xSize, ySize))
-                elif (xSize <= self.image.GetWidth()):
-                    self.setSize((xSize, self.GetSize()[1]))
-                elif (ySize <= self.image.GetHeight()):
-                    self.setSize((self.GetSize()[0], ySize))
-    def setSize(self, size):
-        self.SetSize(size)
-        if (self.selected):
-            self.relocateTags()
-        newImage = self.image.GetSubImage((0,0,size[0],size[1]))
-        newBitmap = newImage.ConvertToBitmap()
-        self.SetBitmap(newBitmap)
-    def setEditMode(self, mode):
-        if (mode):
-            if (not self.editMode):
-                EVT_RIGHT_DOWN(self, self.eRightDown)
-                self.moveTag = controlEditTag(self,
-                                              (0,0),
-                                              wxBLACK,
-                                              wxCURSOR_CROSS)
-                self.BLResizeTag = controlResizeTag(self,
-                                                    (1,0),
-                                                    RESIZETAGCOLOR,
-                                                    wxCURSOR_SIZEWE)
-                self.TRResizeTag = controlResizeTag(self,
-                                                    (0,1),
-                                                    RESIZETAGCOLOR,
-                                                    wxCURSOR_SIZENS)
-                self.BRResizeTag = controlResizeTag(self,
-                                                    (1,1),
-                                                    RESIZETAGCOLOR,
-                                                    wxCURSOR_SIZENWSE)
-                self.editMode = True
-        else:
-            if (self.editMode):
-                self.Disconnect(-1, wxEVT_RIGHT_DOWN)
-                self.deselect()            
-                self.moveTag.Destroy()
-                self.BLResizeTag.Destroy()
-                self.TRResizeTag.Destroy()
-                self.BRResizeTag.Destroy()
-            self.editMode = False
-    def Refresh(self):
-        if (self.filename != self.GetLabel()):
-            self.SetLabel(self.filename)
-        wxStaticBitmap.Refresh(self)
-        wxYield()
-        self.parentApp.mainFrame.mainPanel.Refresh()
-    def SetLabel(self, label):
-        self.filename = label
-        self.image = wxImage(self.filename,
-                             wxBITMAP_TYPE_ANY)
-        tempBitmap = self.image.ConvertToBitmap()
-        self.SetBitmap(tempBitmap)
-        self.setSize((self.image.GetWidth(), self.image.GetHeight()))
-        wxStaticBitmap.Refresh(self)
-        self.parentApp.mainFrame.mainPanel.Refresh()
-    def GetLabel(self):
-        return self.filename
-    def PDAction(self, value):
-        if (value[0:4] == "hide"):
-            self.Show(False)
-            # self.parentApp.mainFrame.mainPanel.Refresh()
-        elif (value[0:4] == "show"):
-            self.Show(True)
-            # self.parentApp.mainFrame.mainPanel.Refresh()
-        elif (value[0:6] == "rotate"):
-            theta = atof(value[6:len(value)]) * math.pi / 180
-            tempImage = wxImage(self.filename,wxBITMAP_TYPE_ANY)
-            bgColor = self.parentApp.mainFrame.mainPanel.GetBackgroundColour()
-            tempImage.SetMaskColour(bgColor.Red(),
-                                    bgColor.Green(),
-                                    bgColor.Blue())
-            rotateImage = tempImage.Rotate(theta, (0,0), True)
-            bgColor = self.parentApp.mainFrame.mainPanel.GetBackgroundColour()
-            self.SetBitmap(rotateImage.ConvertToBitmap())
-            wxStaticBitmap.Refresh(self)
-            self.parentApp.mainFrame.mainPanel.Refresh()
-        else:
-            if (value[0:2] == "./" or
-                value[0:3] == "../"):
-                value = scrubPath(self.parentApp.filepath + value)
-            self.SetLabel(value)
-    def editCallback(self, editValues):
-        try: 
-            self.setPosition((atoi(editValues[0]), atoi(editValues[1])))
-        except:
-            dlg = wxMessageDialog(self.parentApp.mainFrame,
-                                  "Invalid Size",
-                                  "Edit Error",
-                                  wxOK)
-            dlg.ShowModal()
-            dlg.Destroy()
-        try:
-            self.setSize(wxSize(atoi(editValues[2]), atoi(editValues[3])))
-        except:
-            dlg = wxMessageDialog(self.parentApp.mainFrame,
-                                  "Invalid Size",
-                                  "Edit Error",
-                                  wxOK)
-            dlg.ShowModal()
-            dlg.Destroy()
-        self.setSendSymbol(editValues[4])
-        self.setReceiveSymbol(editValues[5])
-        self.SetLabel(editValues[6])
-    def eEdit(self, event):
-        editor = controlEditor(self)
-        editor.addEditItem("X Position:",
-                           TEXTEDITINPUT,
-                           self.GetPosition()[0])
-        editor.addEditItem("Y Position:",
-                           TEXTEDITINPUT,
-                           self.GetPosition()[1])
-        editor.addEditItem("width:",
-                           TEXTEDITINPUT,
-                           self.GetSize()[0])
-        editor.addEditItem("Height:",
-                           TEXTEDITINPUT,
-                           self.GetSize()[1])
-        editor.addEditItem("S Symbol:",
-                           TEXTEDITINPUT,
-                           self.getSendSymbol())
-        editor.addEditItem("R Symbol:",
-                           TEXTEDITINPUT,
-                           self.getReceiveSymbol())
-        editor.addEditItem("File:",
-                           FILEEDITINPUT,
-                           self.GetLabel())
-        editor.edit()
-    def eStartCapture(self, event):
-        if (not self.mouseCaptured):
-            self.mouseCaptured = True
-            EVT_LEFT_UP(self, self.eEndCapture)
-            EVT_MOTION(self, self.eCaptureMouse)
-    def eEndCapture(self, event):
-        if (self.mouseCaptured):
-            self.mouseCaptured = False
-            self.sendMouseInfo(event.GetPosition()[0],
-                               event.GetPosition()[1],
-                               0,
-                               0)
-        self.Disconnect(-1, wxEVT_MOTION)
-        self.Disconnect(-1, wxEVT_LEFT_UP)
-
-class editItem:
-    def __init__(self, title, dataType, value):
-        self.title = title
-        self.dataType = dataType
-        self.value = value
-    def setValue(self, value):
-        self.value = value
-
-class editSetButton(wxButton):
-    def __init__(self, parent, position, size, value):
-        wxButton.__init__(self, parent, -1, "Set", position, size)
-        self.parent = parent
-        self.value = value
-        EVT_BUTTON(parent, self.GetId(), self.eClick)
-    def GetValue(self):
-        return self.value
-
-class editSetFontButton(editSetButton):
-    def eClick(self, event):
-        self.value = getFontFromDialog(self.parent, self.value)
-
-class editSetColorButton(editSetButton):
-    def eClick(self, event):
-        self.value = getColorFromDialog(self.parent, self.value)
-
-class editSetFileButton(editSetButton):
-    def eClick(self, event):
-        tempFile = getFileFromDialog(self.parent, self.value)
-        if (tempFile):
-            self.value = tempFile
-
-class editDropdown(wxComboBox):
-    def __init__(self, parent, position, size, values):
-        wxComboBox.__init__(self, 
-                            parent, 
-                            -1, 
-                            values[0],  
-                            position,
-                            size,
-                            values,
-                            wxCB_READONLY)
-        self.parent = parent
-
-class controlEditor:
-    def __init__(self, control):
-        self.control = control
-        self.editItems = []
-        self.valueControls = []
-    def addEditItem(self, title, dataType, value):
-        self.editItems.append(editItem(title, dataType, value))
-    def edit(self):
-        global lastEditWindowPosition
-        if (lastEditWindowPosition == (-1, -1)):
-            lastEditWindowPosition = ( \
-               self.control.parentApp.mainFrame.GetPosition()[0] + 20,
-               self.control.parentApp.mainFrame.GetPosition()[1] + 20)
-        self.editFrame = wxMiniFrame(self.control, 
-                                -1, 
-                                "Edit Control", 
-                                lastEditWindowPosition, 
-                                (100, 200),
-                                wxCAPTION | wxSTAY_ON_TOP)
-        self.editFrame.editPanel = wxPanel(self.editFrame, -1, (0,0), (-1, -1))
-        labels = []
-        self.valueControls = []
-        count = 0
-        newLabel = wxStaticText(self.editFrame.editPanel, 
-                                -1, 
-                                self.editItems[0].title, 
-                                DEFEDITPOS)
-        labels.append(newLabel)
-        if (type(self.editItems[0].value) == type(0)):
-            value = repr(self.editItems[0].value)
-        else:
-            value = self.editItems[0].value
-        if (self.editItems[0].dataType == TEXTEDITINPUT):
-            newControl = wxTextCtrl(self.editFrame.editPanel,
-                                    -1,
-                                    value,
-                                    (labels[0].GetPosition()[0] \
-                                     + 65,
-                                     labels[0].GetPosition()[1] - 2),
-                                    (60,-1))
-        if (self.editItems[0].dataType == FONTEDITINPUT):
-            newControl = editSetFontButton(self.editFrame.editPanel,
-                                           (labels[0].GetPosition()[0] + 65,
-                                            labels[0].GetPosition()[1] - 2),
-                                           (60, -1),
-                                           self.editItems[0].value)           
-        if (self.editItems[0].dataType == COLOREDITINPUT):
-            newControl = editSetColorButton(self.editFrame.editPanel,
-                                            (labels[0].GetPosition()[0] + 65,
-                                             labels[0].GetPosition()[1] - 2),
-                                            (60, -1),
-                                            self.editItems[0].value)
-        if (self.editItems[0].dataType == FILEEDITINPUT):
-            newControl = editSetFileButton(self.editFrame.editPanel,
-                                           (labels[0].GetPosition()[0] + 65,
-                                            labels[0].GetPosition()[1] - 2),
-                                           (60, -1),
-                                           self.editItems[0].value)
-        if (self.editItems[0].dataType == DROPDOWNEDITINPUT):
-            newControl = editDropdown(self.editFrame.editPanel,
-                                      labels[0].GetPosition()[0] + 65,
-                                      labels[0].GetPosition()[1] - 2,
-                                      (60, -1),
-                                      self.editItems[0].value)
-        self.valueControls.append(newControl)
-        for i in self.editItems[1:]:
-            count = count + 1
-            if (type(i.value) == type(0)):
-                value = repr(i.value)
-            else:
-                value = i.value
-            newLabel = wxStaticText(self.editFrame.editPanel, 
-                           -1, 
-                           i.title,
-                           (labels[count - 1].GetPosition()[0],
-                            self.valueControls[count - 1].GetPosition()[1] \
-                            + self.valueControls[count - 1].GetSize()[1] + 10))
-            labels.append(newLabel)
-            if (i.dataType == TEXTEDITINPUT):
-                newControl = wxTextCtrl(self.editFrame.editPanel, 
-                              -1,
-                              value,
-                              (self.valueControls[count - 1].GetPosition()[0],
-                               labels[count].GetPosition()[1] - 2),
-                               self.valueControls[count - 1].GetSize())
-            if (self.editItems[count].dataType == FONTEDITINPUT):
-                newControl = editSetFontButton(self.editFrame.editPanel,
-                               (self.valueControls[count - 1].GetPosition()[0],
-                                labels[count].GetPosition()[1] - 2),
-                               self.valueControls[count - 1].GetSize(),
-                               self.editItems[count].value)
-            if (self.editItems[count].dataType == COLOREDITINPUT):
-                newControl = editSetColorButton(self.editFrame.editPanel,
-                               (self.valueControls[count - 1].GetPosition()[0],
-                                labels[count].GetPosition()[1] - 2),
-                               self.valueControls[count - 1].GetSize(),
-                               self.editItems[count].value)
-            if (self.editItems[count].dataType == FILEEDITINPUT):
-                newControl = editSetFileButton(self.editFrame.editPanel,
-                               (self.valueControls[count - 1].GetPosition()[0],
-                                labels[count].GetPosition()[1] - 2),
-                               self.valueControls[count - 1].GetSize(),
-                               self.editItems[count].value)
-            if (self.editItems[count].dataType == DROPDOWNEDITINPUT):
-                newControl = editDropdown(self.editFrame.editPanel,
-                               (self.valueControls[count - 1].GetPosition()[0],
-                                labels[count].GetPosition()[1] - 2),
-                               self.valueControls[count - 1].GetSize(),
-                               self.editItems[count].value) 
-            self.valueControls.append(newControl)
-        line = wxStaticLine(self.editFrame.editPanel, -1,
-                            (0, self.valueControls[-1].GetPosition()[1] \
-                             + self.valueControls[-1].GetSize()[1] + 20),
-                             (self.valueControls[0].GetPosition()[0] \
-                             + self.valueControls[0].GetSize()[0] + 10, 1))
-        okButton = wxButton(self.editFrame.editPanel, -1, "OK",
-                            (labels[0].GetPosition()[0],
-                             line.GetPosition()[1] + 15),
-                            (self.valueControls[0].GetPosition()[0] \
-                             + self.valueControls[0].GetSize()[0], -1))
-        self.editFrame.SetSize((okButton.GetPosition()[0] + \
-                       okButton.GetSize()[0] + 10,
-                       okButton.GetPosition()[1] + okButton.GetSize()[1] \
-                        + (okButton.GetPosition()[1] - line.GetPosition()[1]) \
-                        + 20))
-        self.editFrame.editPanel.SetSize(self.editFrame.GetSize())
-        EVT_BUTTON(self.editFrame.editPanel, 
-                   okButton.GetId(), 
-                   self.eOk)
-        self.editFrame.Show(True)
-        self.editFrame.MakeModal(True)
-    def eOk(self, event):
-        global lastEditWindowPosition
-        returnValues = []
-        for i in range(0, len(self.valueControls)):
-            returnValues.append(self.valueControls[i].GetValue())
-        lastEditWindowPosition = self.editFrame.GetPosition()
-        self.editFrame.MakeModal(False)
-        self.editFrame.Destroy()
-        self.control.editCallback(returnValues)
-
diff --git a/extensions/gripd/gripdFunctions.py b/extensions/gripd/gripdFunctions.py
deleted file mode 100644
index 2bf0a5516..000000000
--- a/extensions/gripd/gripdFunctions.py
+++ /dev/null
@@ -1,191 +0,0 @@
-## GrIPD v0.1.1 - Graphical Interface for Pure Data
-## Copyright (C) 2003 Joseph A. Sarlo
-##
-## This program is free software; you can redistribute it and/or
-## modify it under the terms of the GNU General Public License
-## as published by the Free Software Foundation; either version 2
-## of the License, or (at your option) any later version.
-##
-## This program is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-## GNU General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with this program; if not, write to the Free Software
-## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-##
-## jsarlo@ucsd.edu
-
-from wxPython.wx import *
-from string import *
-import os
-import sys
-
-VERSION           = "0.1.1"
-MAXDEC            = 9
-DECTOHEXOFFSET    = 87
-EVT_RAISE_TAGS_ID = wxNewId()
-
-debugFile = sys.stderr
-
-def setDebugFile(filename):
-    global debugFile
-    if (filename != ""):
-        debugFile = open(filename, "w", -1)
-
-def debugLog(logString):
-    debugFile.write(logString + "\n")
-    debugFile.flush()
-
-def getColorFromDialog(parent, initColor):
-    colorData = wxColourData()
-    colorData.SetColour(initColor)
-    colorData.SetCustomColour(0, initColor)
-    colorDialog = wxColourDialog(parent, colorData)
-    colorDialog.ShowModal()
-    colorData = colorDialog.GetColourData()
-    return colorData.GetColour()
-
-def getFontFromDialog(parent, initFont):
-    fontData = wxFontData()
-    fontData.SetInitialFont(initFont)
-    fontDialog = wxFontDialog(parent, fontData)
-    fontDialog.ShowModal()
-    fontData = fontDialog.GetFontData()
-    return fontData.GetChosenFont()
- 
-def getFileFromDialog(parent, initFile):
-    if (initFile == ""):
-        initFile = parent.parentApp.filepath
-    fileDialog = wxFileDialog(parent, 
-                              "Open file",
-                              getDirectory(initFile),
-                              initFile, 
-                              "*.*",
-                              wxOPEN)
-    if (fileDialog.ShowModal() == wxID_OK):
-        return fileDialog.GetPath()
-    else:
-        return ""
-
-def colorTuple2HexString(tuple):
-    def dec2HexString(value):
-        if (value > MAXDEC):
-            return chr(value + DECTOHEXOFFSET)
-        else:
-            return repr(value)
-    hexString = ""
-    for i in range(0, 3):
-        hexString = hexString + dec2HexString(int(round(tuple[i] / 16)))
-        hexString = hexString + dec2HexString(int(round(tuple[i] \
-                                              - (int(tuple[i] / 16) * 16))))
-    return hexString
-
-def selectIntersect(rect1, rect2):
-    left1 = rect1[0]
-    top1 = rect1[1]
-    right1 = rect1[0] + rect1[2]
-    bottom1 = rect1[1] + rect1[3]
-    left2 = rect2[0]
-    top2 = rect2[1]
-    right2 = rect2[0] + rect2[2]
-    bottom2 = rect2[1] + rect2[3]
-    if ((left1 < left2) and (right1 > right2)
-    and (top1 < top2) and (bottom1 > bottom2)):
-        return False
-    if (((left2 > left1) and (left2 < right1))
-    or ((right2 > left1) and (right2 < right1))
-    or ((left2 < left1) and (right2 > right1))):
-        if ((top2 > top1) and (top2 < bottom1)):
-            return True
-        elif ((bottom2 >top1) and (bottom2 < bottom1)):
-            return True
-        elif ((top2 < top1) and (bottom2 > bottom1)):
-            return True
-    return False
-
-def getDirectory(path):
-    if (os.name == "posix"):
-        index = rfind(path, "/")
-        if (index > -1):
-            tempPath = path[0:index]
-            while (tempPath[len(tempPath) - 1] == "/"):
-                tempPath = tempPath[0:len(tempPath) - 1]
-            tempPath = tempPath + "/"
-        else:
-            tempPath = ""
-    else:
-        index = max(rfind(path, "\\"), rfind(path, "/"))
-        if (index > -1):
-            tempPath = path[0:index]
-            while (tempPath[len(tempPath) - 1] == "/" or
-                   tempPath[len(tempPath) - 1] == "\\"):
-                tempPath = tempPath[0:len(tempPath) - 1]
-            tempPath = tempPath + "\\"
-        else:
-            tempPath = ""
-    return tempPath
-
-def replaceSlashes(path):
-    path = replace(path, "/", "\\")
-    return path
-
-def scrubPath(path):
-    if (os.name == "posix"):
-        while (find(path, "/../") > 0):
-            index = rfind(path[0:find(path, "/../")], "/")
-            path = path[0:index] + path[find(path, "/../") + 3:len(path)]
-        while (find(path, "/./") > 0):
-            index = find(path, "/./")
-            path = path[0:index] + path[index + 2:len(path)]
-        path = replace(path, "//", "/")
-    else:
-        path = replaceSlashes(path)
-        while (find(path, "\\..\\") > 0):
-            index = rfind(path[0:find(path, "\\..\\")], "\\")
-            path = path[0:index] + path[find(path, "\\..\\") + 3:len(path)]
-        while (find(path, "\\.\\") > 0):
-            index = find(path, "\\.\\")
-            path = path[0:index] + path[index + 2:len(path)]
-        path = replace(path, "\\\\", "\\")
-    return path     
-
-def makeAbsolutePath(superPath, subPath):
-    if (os.name == "posix"):
-        if (find(subPath, "./") == 0 or
-            find(subPath, "../") == 0):
-            tempPath = superPath + subPath
-        elif (subPath[0] != "/"):
-            tempPath = superPath + "/" + subPath
-        else:
-            tempPath = subPath
-    else:
-        if (find(subPath, "/") >= 0):
-            subPath = replaceSlashes(subPath)
-        if (find(subPath, ".\\") == 0 or
-            find(subPath, "..\\") == 0):
-            tempPath = superPath + subPath
-        elif (subPath[1] != ":"):
-            tempPath = superPath + "\\" + subPath
-        else:
-            tempPath = subPath
-    return scrubPath(tempPath)
-
-def makeRelativePath(superPath, subPath):
-    if (os.name != "posix"):
-        superPath = lower(superPath)
-        subPath = lower(subPath)
-    if (find(subPath, superPath) == 0 and superPath != ""):
-        tempPath = "./" + subPath[len(superPath):len(subPath)]
-    else:
-        tempPath = subPath
-    return scrubPath(tempPath)
-
-
-class RaiseTagsEvent(wxPyEvent):
-    def __init__(self):
-        wxPyEvent.__init__(self)
-        self.SetEventType(EVT_RAISE_TAGS_ID)
-
-        
diff --git a/extensions/gripd/gripdMain.py b/extensions/gripd/gripdMain.py
deleted file mode 100644
index 1e20cb583..000000000
--- a/extensions/gripd/gripdMain.py
+++ /dev/null
@@ -1,2337 +0,0 @@
-## GrIPD v0.1.1 - Graphical Interface for Pure Data
-## Copyright (C) 2003 Joseph A. Sarlo
-##
-## This program is free software; you can redistribute it and/or
-## modify it under the terms of the GNU General Public License
-## as published by the Free Software Foundation; either version 2
-## of the License, or (at your option) any later version.
-##
-## This program is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-## GNU General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with this program; if not, write to the Free Software
-## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-##
-## jsarlo@ucsd.edu
-
-from wxPython.wx import *
-from gripdControls import *
-from gripdFunctions import *
-from socket import *
-from string import *
-
-midi               = 0
-joystick           = 0
-DEFMAINFRAMESIZE   = (600, 400)
-DEFCONTROLPOS      = (20,20)
-ID_ABOUT           = 100
-ID_EXIT            = 101
-ID_ADD             = 102
-ID_EDITMODE        = 103
-ID_EDIT            = 104
-ID_DELETE          = 105
-ID_CONNECT         = 106
-ID_OPEN            = 107
-ID_SAVE            = 108
-ID_OPTIONS         = 109
-ID_BUTTONMENU      = 110
-ID_SLIDERMENU      = 111
-ID_GAUGEMENU       = 112
-ID_SELECTALL       = 113
-ID_NEW             = 114
-ID_DUPLICATE       = 115
-ID_ALIGNVERT       = 116
-ID_ALIGNHORZ       = 117
-ID_REFRESH         = 118
-ID_BUTTON          = 200
-ID_TOGGLE          = 201
-ID_VSLIDER         = 202
-ID_HSLIDER         = 203
-ID_RECT            = 204
-ID_TEXT            = 205
-ID_SETOPTS         = 206
-ID_DISCONNECT      = 207
-ID_VGAUGE          = 208
-ID_HGAUGE          = 209
-ID_CHECKBOX        = 210
-ID_TEXTBOX         = 211
-ID_SPINBUTTON      = 212
-ID_MOUSEAREA       = 213
-ID_ENABLEJOY       = 214
-ID_ENABLEKEY       = 215
-ID_LOCKONPERF      = 216
-ID_RADIOBUTTON     = 217
-ID_IMAGE           = 218
-ID_ALWAYSONTOP     = 219
-ID_SHOWGRID        = 220
-ID_SNAPTOGRID      = 221
-ID_ENABLEMIDI      = 222
-ID_GRAPH           = 223
-COMMANDCHAR        = '!'
-DEFHOST            = 'localhost'
-DEFPORT            = 3490
-CONNECTINTERVAL    = 1000
-TIMEOUT            = 20
-HIDECOMMAND        = "!hide"
-SHOWCOMMAND        = "!show"
-EXITCOMMAND        = "!exit"
-LOCKCOMMAND        = "!lock"
-UNLOCKCOMMAND      = "!unlock"
-SETTITLECOMMAND    = "!settitle"
-CLOSECOMMAND       = "!disconnect"
-PINGCOMMAND        = "!ping"
-OPENPANELCOMMAND   = "!openpanel"
-SAVEPANELCOMMAND   = "!savepanel"
-BEGINCONTROLMARKER = "!BEGIN-CONTROL"
-ENDCONTROLMARKER   = "!END-CONTROL"
-DEFOPTIONSPOS      = (5, 5)
-DUPPOSOFFSET       = (10, 10)
-SMALLCHARMOVE      = 1
-LARGECHARMOVE      = 20
-BGCOLORDIF         = 30
-DEFSOCKETTIMERTIME = 5
-DEFJOYPOLLTIME     = 10
-DEFMIDIPOLLTIME    = 5
-DEFMIDIDEVICE1     = 0
-DEFMIDIDEVICE2     = 1
-PAIRSEPCHAR        = chr(29)
-SYMMSGSEP          = chr(31)
-FILETOKENSEP       = "|"
-MAXPINGCOUNT       = 10
-PINGPOLLTIME       = 1000
-MIDINOTEMESSAGE    = "9"
-MIDICTLMESSAGE     = "b"
-MIDIPGMMESSAGE     = "c"
-SETARRAYSTRING     = "!setArray"
-
-if (os.name == "posix"):
-    FUGEFACTOR = 1
-    DEFJOYDEVICE1 = "/dev/js0"
-    DEFJOYDEVICE2 = "/dev/js1"    
-else:
-    FUGEFACTOR = 2
-    DEFJOYDEVICE1 = "1"
-    DEFJOYDEVICE2 = "2"    
-    
-# Main application class
-class mainApp(wxPySimpleApp):
-    def __init__(self, args):
-        self.args = args
-        wxApp.__init__(self, False)
-        try:
-            wxLog_SetLogLevel(0)
-        except:
-            pass
-    def OnInit(self):
-        global midi
-        global joystick
-        openAuto = False
-        newPort = 0
-        filename = ""
-        locked = False
-        self.path = scrubPath(getDirectory(self.args[0]))
-        setDebugFile(self.path + "/log.txt")
-        self.filepath = ""
-        if (len(self.args) > 1):
-            filename = self.args[1]
-            self.filepath = getDirectory(filename)
-            if (self.filepath == ""):
-                self.filepath = self.path
-            self.filepath = makeAbsolutePath(self.path, self.filepath)
-            if (len(self.args) > 2):
-                newPort = atoi(self.args[2])
-                if (len(self.args) > 3):
-                    openAuto = atoi(self.args[3])
-                    if (len(self.args) > 4):
-                        locked = atoi(self.args[4])
-        self.midiAvailable = True
-        self.joystickAvailable = True
-        try:
-            optionsFile = open(self.path + "/gripd.opt", 'r', -1)
-            options = optionsFile.readlines()
-            for option in options:
-                [key, value] = split(option, '=')
-                key = strip(key)
-                value = strip(value)
-                if (lower(key) == 'midi'):
-                    if (lower(value) == 'false'):
-                        self.midiAvailable = False
-                if (lower(key) == 'joystick'):
-                    if (lower(value) == 'false'):
-                        self.joystickAvailable = False
-        except:
-            pass
-        if (self.midiAvailable):
-            import midi
-        if (self.joystickAvailable):
-            import joystick
-        wxInitAllImageHandlers()
-        if (not os.name == "posix"):
-            self.icon = wxIcon(self.path + "icon.pic", wxBITMAP_TYPE_ICO)
-        self.jsImage = wxImage(self.path + "joystick.xpm",
-                               wxBITMAP_TYPE_XPM).ConvertToBitmap()
-        self.jsImageX = wxImage(self.path + "joystickX.xpm",
-                                wxBITMAP_TYPE_XPM).ConvertToBitmap()
-        self.jsImageA = wxImage(self.path + "joystickA.xpm",
-                                wxBITMAP_TYPE_XPM).ConvertToBitmap()
-        self.midiImage = wxImage(self.path + "midi.xpm",
-                                 wxBITMAP_TYPE_XPM).ConvertToBitmap()
-        self.midiImageX = wxImage(self.path + "midiX.xpm",
-                                  wxBITMAP_TYPE_XPM).ConvertToBitmap()
-        self.midiImageA = wxImage(self.path + "midiA.xpm",
-                                  wxBITMAP_TYPE_XPM).ConvertToBitmap()
-        self.connectImage = wxImage(self.path + "connect.xpm",
-                                    wxBITMAP_TYPE_XPM).ConvertToBitmap()
-        self.connectImageX = wxImage(self.path + "connectX.xpm",
-                                     wxBITMAP_TYPE_XPM).ConvertToBitmap()
-        self.editMode = False
-        # socket stuff
-        self.host = DEFHOST
-        self.port = DEFPORT
-        self.connection = nullConnection()
-        self.connected = False
-        # All controls (on mainPanel)
-        self.controlList = []
-        # Selected controls, Should speed up editing
-        # DO NOT use to loop through selected controls to deselect
-        # <control>.deselect() modifies selectedControlList
-        self.selectedControlList = []
-        # If currently using selecting with selectRect
-        self.selecting = False
-        # If currently dragging a control
-        self.dragging = False
-        # Keys currently depressed
-        self.keysDown = []
-        # If left mouse was clicked on panel
-        # not on control or tag, for selectRect
-        self.leftDownOnPanel = False
-        # If current GUI has been changed since last save
-        self.edited = False
-        # control counters (for send/receive syms)
-        self.resetControlIndecies()
-        # timer to check connection status
-        self.pTimer = pingTimer(self)
-        # set ping count
-        self.pingCount = 0
-        # timer to poll for connections
-        self.cTimer = connectionTimer(self)
-        # socket polling time
-        self.pollTime = DEFSOCKETTIMERTIME
-        # timer to poll socket for receive messages
-        self.sTimer = socketTimer(self)
-        # timer to poll joystick
-        self.joyTimer = joystickTimer(self)     
-        # joystick poll time
-        self.joyPollTime = DEFJOYPOLLTIME
-        # joystick device string
-        self.joyDevice1 = DEFJOYDEVICE1
-        self.joyDevice2 = DEFJOYDEVICE2
-        # joystick device id
-        self.joyID1 = -1
-        self.joyID2 = -1
-        # joystick on
-        self.joystickEnabled = False
-        self.jsOn1 = False
-        self.jsOn2 = False
-        # timer to poll midi
-        self.midiTimer = midiTimer(self)     
-        # midi poll time
-        self.midiPollTime = DEFMIDIPOLLTIME
-        # midi device numbers
-        self.midiDevice1 = DEFMIDIDEVICE1
-        self.midiDevice2 = DEFMIDIDEVICE2
-        # midi device id
-        self.midiID1 = -1
-        self.midiID2 = -1
-        # midi on
-        self.midiEnabled = False
-        self.midiOn1 = False
-        self.midiOn2 = False
-        # send keystrokes
-        self.sendKeys = True
-        # grid sized
-        self.gridSpace = 10
-        # display grid
-        self.showGrid = False
-        # snap moved controls to grid
-        self.snapToGrid = False
-        # locked or unlocked GUI
-        self.locked = locked
-        self.openAuto = openAuto
-        self.frameTitle = "GrIPD"
-        self.alwaysOnTop = False
-        self.resizable = False
-        self.mainFrame = gripdFrame(self, -1, self.frameTitle,
-                                    (-1, -1),
-                                    self.resizable, self.locked,
-                                    self.alwaysOnTop)
-        self.SetTopWindow(self.mainFrame)
-        # for catching keystokes
-        EVT_CHAR(self.mainFrame.mainPanel, self.eChar)
-        EVT_KEY_UP(self.mainFrame.mainPanel, self.eKeyUp)
-        EVT_KEY_DOWN(self.mainFrame.mainPanel, self.eKeyDown)
-        if (not os.name == "posix"):
-            EVT_CHAR_HOOK(self.mainFrame, self.eChar)
-        EVT_CLOSE(self.mainFrame, self.eClose)
-        EVT_SIZE(self.mainFrame, self.eSize)
-        self.mainFrame.positionIcons()
-        if ((filename != "0") and (filename != "")):
-            self.openFromDisk(filename)
-        if (newPort):
-            self.port = newPort
-        if (self.openAuto):
-            self.connect()
-        else:
-            self.mainFrame.Show(True)
-        return True
-
-## Functions ##
-
-    def createControl(self, type, tIndex, tString, filepath = ""):
-        if (self.editMode and not self.dragging):
-            indexStr = tString + repr(tIndex)
-            clientMousePos = self.mainFrame.mainPanel.ScreenToClient( \
-                                                        wxGetMousePosition())
-            coords = (clientMousePos[0] + 4, clientMousePos[1] + 4)
-            control = self.addControl(type, indexStr, coords, 
-                                      "s" + indexStr, "r" + indexStr, filepath)
-            control.select()
-            # I'm not sure why this is necessary
-            try:
-                wxYield()
-            except:
-                pass
-            control.grab()
-    def addControl(self, type, label, pos, sSym, rSym, filepath = ""):
-        tControl = NULL
-        if (type == MBUTTONTYPE):
-            self.buttonIndex = self.buttonIndex + 1
-            tControl = mButton(self, type, -1,
-                               label, pos, sSym, rSym, self.connection)
-        if (type == MTOGGLETYPE):
-            self.toggleIndex = self.toggleIndex + 1
-            tControl = mToggle(self, type, -1,
-                               label, pos, sSym, rSym, self.connection)
-        if (type == MVSLIDERTYPE):
-            self.sliderIndex = self.sliderIndex + 1
-            tControl = mSlider(self, type, -1, label, pos,
-                               wxSL_VERTICAL, sSym, rSym, self.connection)
-        if (type == MHSLIDERTYPE):
-            self.sliderIndex = self.sliderIndex + 1
-            tControl = mSlider(self, type, -1, label, pos,
-                               wxSL_HORIZONTAL, sSym, rSym, self.connection)
-        if (type == MRECTTYPE):
-            self.rectIndex = self.rectIndex + 1
-            tControl = mRectangle(self, type, -1,
-                                  label, pos, sSym, rSym, self.connection)
-        if (type == MTEXTTYPE):
-            self.textIndex = self.textIndex + 1
-            tControl = mText(self, type, -1,
-                             label, pos, sSym, rSym, self.connection)
-        if (type == MVGAUGETYPE):
-            self.gaugeIndex = self.gaugeIndex + 1
-            tControl = mGauge(self, type, -1, label, pos,
-                              wxGA_VERTICAL, sSym, rSym, self.connection)
-        if (type == MHGAUGETYPE):
-            self.gaugeIndex = self.gaugeIndex + 1
-            tControl = mGauge(self, type, -1, label, pos,
-                              wxGA_HORIZONTAL, sSym, rSym, self.connection)
-        if (type == MCHECKBOXTYPE):
-            self.checkBoxIndex = self.checkBoxIndex + 1
-            tControl = mCheckBox(self, type, -1,
-                                 label, pos, sSym, rSym, self.connection)
-        if (type == MRADIOBUTTONTYPE):
-            self.radioButtonIndex = self.radioButtonIndex + 1
-            tControl = mRadioButton(self, type, -1,
-                                    label, pos, sSym, rSym, 0, self.connection)
-        if (type == MRADIONEWTYPE):
-            self.radioButtonIndex = self.radioButtonIndex + 1
-            tControl = mRadioButton(self, type, -1,
-                                    label, pos, sSym, rSym, wxRB_GROUP,
-                                    self.connection)
-        if (type == MTEXTBOXTYPE):
-            self.textBoxIndex = self.textBoxIndex + 1
-            tControl = mTextBox(self, type, -1, label,
-                                pos, sSym, rSym, self.connection)
-        if (type == MSPINBUTTONTYPE):
-            self.spinButtonIndex = self.spinButtonIndex + 1
-            tControl = mSpinButton(self, type, -1, label,
-                                   pos, sSym, rSym, self.connection)
-        if (type == MMOUSEAREATYPE):
-            self.mouseAreaIndex = self.mouseAreaIndex + 1
-            tControl = mMouseArea(self, type, -1,
-                                  pos, sSym, rSym, self.connection)
-        if (type == MIMAGETYPE):
-            if (filepath == ""):
-                filepath = label
-            filepath = makeAbsolutePath(self.filepath, filepath)
-            self.imageIndex = self.imageIndex + 1
-            try:
-                tControl = mImage(self, type, -1,
-                                  filepath, pos, sSym, rSym, self.connection)
-            except:
-                tControl = NULL
-        if (type == MGRAPHTYPE):
-            self.graphIndex = self.graphIndex + 1
-            tControl = mGraph(self, type, -1, label, pos, sSym, 
-                              rSym, self.connection) 
-        if (tControl != NULL):
-            self.controlList.append(tControl)
-        return (tControl)
-    def findControlByID(self, id):
-        for control in self.controlList:
-            if (control.GetId() == id):
-                return(control)
-    def startMoveControls(self):
-        for control in self.selectedControlList:
-            control.startMove()
-    def moveSelectedControls(self, deltaPos):
-        self.edited = True
-        for control in self.selectedControlList:
-            control.move(deltaPos)
-    def endMoveControls(self):
-        for control in self.selectedControlList:
-            control.endMove()
-    def endDragMoveControls(self):
-        for control in self.selectedControlList:
-            control.endDragMove()
-    def resizeSelectedControls(self, deltaPos):
-        self.edited = True
-        for control in self.selectedControlList:
-            control.resize(deltaPos)
-    def moveKey(self, deltaPos):
-        self.moveSelectedControls(deltaPos)
-        for control in self.selectedControlList:
-            control.endMove()
-    def alignControls(self, dir):
-        otherDir = 1 - dir
-        alignVal = 1
-        alignPos = [0, 0]
-        for control in self.selectedControlList:
-            alignVal = max(alignVal, control.GetPosition()[dir])
-            alignPos[dir] = alignVal
-        for control in self.selectedControlList:
-            alignPos[otherDir] = control.GetPosition()[otherDir]            
-            control.setPosition(alignPos)
-    def deselectOthers(self, calledByID):
-        # Not using selectedControlList since we are removing from it
-        # as we cycle through the list
-        for control in self.controlList:
-            if ((control.GetId() != calledByID) and control.isSelected()):
-                control.deselect()
-    def raiseControlTags(self):
-        if (self.editMode):
-            for control in self.selectedControlList:
-                control.relocateTags()
-                control.refreshTags()
-    def traverseFocus(self, multi):
-        if ((len(self.controlList) > 0) and (self.editMode)):
-            i = -1
-            newIndex = 0
-            for control in self.controlList:
-                i = i + 1
-                if (control.isSelected()):
-                    newIndex = i + 1
-            newIndex = newIndex % len(self.controlList)
-            self.controlList[newIndex].select()
-            if (not multi):
-                self.deselectOthers(self.controlList[newIndex].GetId())
-    def parseReceiveBuffer(self, receiveBuffer):
-        # remove trailing PAIRSEPCHAR
-        receiveBuffer = receiveBuffer[0:-1]
-        messagePairs = split(receiveBuffer, PAIRSEPCHAR)
-        for pair in messagePairs:
-            (symName, value) = split(pair, SYMMSGSEP)
-            if (symName[0] == COMMANDCHAR):
-                if (symName == CLOSECOMMAND):
-                    self.disconnect()
-                    dlg = wxMessageDialog(self.mainFrame,
-                                          "Connection closed by PD",
-                                          "Connection", wxOK)
-                    dlg.ShowModal()
-                    dlg.Destroy()
-                if (symName == EXITCOMMAND):
-                    self.close()
-                elif (symName == LOCKCOMMAND):
-                    self.lock()
-                elif (symName == UNLOCKCOMMAND):
-                    self.unlock()
-                elif (symName == SETTITLECOMMAND):
-                    self.frameTitle = value
-                    self.setFrameTitle(value)
-                elif (symName == HIDECOMMAND):
-                    self.mainFrame.Show(False)
-                    self.connection.send(HIDECOMMAND + \
-                                         SYMMSGSEP + "0" + \
-                                         PAIRSEPCHAR)
-                elif (symName == SHOWCOMMAND):
-                    self.mainFrame.Show(True)
-                    self.connection.send(SHOWCOMMAND + \
-                                         SYMMSGSEP + "0" + \
-                                         PAIRSEPCHAR)
-                elif (symName == PINGCOMMAND):
-                    self.pingCount = 0
-                elif (symName == OPENPANELCOMMAND):
-                    self.mainFrame.openpanel()
-                elif (symName == SAVEPANELCOMMAND):
-                    self.mainFrame.savepanel()
-            else:
-                for control in self.controlList:
-                    if (symName == control.getReceiveSymbol()):
-                        control.PDAction(value)
-    def writeControls(self, list, file):
-        for control in list:
-            file.write(repr(control.getType()) + "\n")
-            if (control.type == MIMAGETYPE):
-                file.write(makeRelativePath(self.filepath,
-                                            control.GetLabel()) + "\n")
-            else:
-                file.write(control.GetLabel() + "\n")
-            file.write(repr(control.GetPosition()[0]) + "\n")
-            file.write(repr(control.GetPosition()[1]) + "\n")
-            file.write(repr(control.GetSize()[0]) + "\n")
-            file.write(repr(control.GetSize()[1]) + "\n")
-            file.write(control.getSendSymbol() + "\n")
-            file.write(control.getReceiveSymbol() + "\n")
-            if (control.GetBackgroundColour().Ok()):
-                file.write("#" + colorTuple2HexString((control.\
-                                                GetBackgroundColour().Red(),
-                                                control.\
-                                                GetBackgroundColour().Green(),
-                                                control.\
-                                                GetBackgroundColour().Blue()))\
-                                                + "\n")
-            else:
-                file.write("#00000\n")
-            if (control.GetForegroundColour().Ok()):
-                file.write("#" + colorTuple2HexString((control.\
-                                                 GetForegroundColour().Red(),
-                                                 control.\
-                                                 GetForegroundColour().Green(),
-                                                 control.\
-                                                 GetForegroundColour().Blue()))\
-                                                 + "\n")
-            else:
-                file.write("#000000\n")
-            if (not control.GetFont().Ok()):
-                control.SetFont(wxNORMAL_FONT)
-            file.write(repr(control.GetFont().GetPointSize()) + "\n")
-            file.write(repr(control.GetFont().GetFamily()) + "\n")
-            file.write(repr(control.GetFont().GetStyle()) + "\n")
-            file.write(repr(control.GetFont().GetWeight()) + "\n")
-            file.write(repr(control.GetFont().GetUnderlined()) + "\n")
-            file.write(control.GetFont().GetFaceName() + "\n")
-            if (isinstance(control, mSlider)):
-                file.write(repr(control.GetMin()) + "\n")
-                file.write(repr(control.GetMax()) + "\n")
-                file.write(repr(control.getDirection()) + "\n")
-            file.write(ENDCONTROLMARKER + "\n")
-    def readControls(self, list):
-        newList = []
-        for i in range(0, list.count(ENDCONTROLMARKER)):
-            params = list[0:list.index(ENDCONTROLMARKER)]
-            type = atoi(params[0])
-            label = params[1]
-            pos = (atoi(params[2]), atoi(params[3]))
-            size = (atoi(params[4]), atoi(params[5]))
-            sSym = params[6]
-            rSym = params[7]
-            bColor = params[8]
-            fColor = params[9]
-            try:
-                fontSize = atoi(params[10])
-                fontFam = atoi(params[11])
-                fontStyle = atoi(params[12])
-                fontWeight = atoi(params[13])
-                fontULine = atoi(params[14])
-                fontFace = params[15]
-            except:
-                print "Font Error!!!"
-            if (type == MVSLIDERTYPE or \
-                type == MHSLIDERTYPE or \
-                type == MVGAUGETYPE or \
-                type == MHGAUGETYPE):
-                min = atoi(params[16])
-                max = atoi(params[17])
-                dir = atoi(params[18])
-                label = [label, min, max, dir]
-            if (type == MGRAPHTYPE):
-                min = atof(params[16])
-                max = atof(params[17])
-                dir = eval(params[18])
-                label = [label, min, max, dir]
-            control = self.addControl(type, label, pos, sSym, rSym)
-            control.setSize(size)
-            control.SetBackgroundColour(bColor)
-            control.SetForegroundColour(fColor)
-            font = wxFont(fontSize, fontFam, fontStyle, fontWeight,
-                          fontULine, fontFace, wxFONTENCODING_SYSTEM)
-            control.SetFont(font)
-            control.setEditMode(self.editMode)
-            # +1 to include ENDCONTROLMARKER
-            del list[0:(list.index(ENDCONTROLMARKER) + 1)]
-            newList.append(control)
-        return newList
-    def connect(self):
-        if (not self.locked):
-            self.mainFrame.fileMenu.Enable(ID_DISCONNECT, True)        
-        if (not self.cTimer.IsRunning()):
-            self.cTimer.timeCount = 0  
-            self.cTimer.Start(CONNECTINTERVAL)
-    def disconnect(self):
-        if (self.sTimer.IsRunning()):
-            self.sTimer.Stop() 
-            try:
-                self.connection.send(CLOSECOMMAND + SYMMSGSEP + \
-                                     "0" + PAIRSEPCHAR)
-            except:
-                pass
-        self.connection.close()
-        self.connection = nullConnection()
-        for control in self.controlList:
-            control.connection = self.connection
-        self.cTimer.Stop()
-        self.pTimer.Stop()
-        self.pingCount = 0
-        if (not self.locked):
-            self.mainFrame.fileMenu.Enable(ID_CONNECT, True)
-            self.mainFrame.fileMenu.Enable(ID_DISCONNECT, False)
-            self.mainFrame.connectIcon.SetBitmap(self.connectImageX) 
-        self.connected = False
-    def saveToDisk(self, filename):
-        try:
-            if (lower(filename[len(filename) - 4:len(filename)]) != ".gpd"):
-                filename = filename + ".gpd"
-            file = open(filename, 'w', -1)
-            self.filepath = getDirectory(filename)
-            self.filepath = makeAbsolutePath(self.path, self.filepath)
-            if (self.filepath == ""):
-                self.filepath = self.path
-            file.write(repr(self.mainFrame.GetSize()[0]) + "\n")
-            file.write(repr(self.mainFrame.GetSize()[1]) + "\n")
-            file.write("#" + colorTuple2HexString((self.mainFrame.mainPanel.\
-                                        GetBackgroundColour().Red(),
-                                        self.mainFrame.mainPanel.\
-                                        GetBackgroundColour().Green(),
-                                        self.mainFrame.mainPanel.\
-                                        GetBackgroundColour().Blue())) + "\n")
-            file.write(self.host + "\n")
-            file.write(repr(self.port) + FILETOKENSEP +
-                       self.joyDevice1 + FILETOKENSEP +
-                       self.joyDevice2 + FILETOKENSEP +
-                       repr(self.pollTime) + FILETOKENSEP +
-                       repr(self.joyPollTime) + FILETOKENSEP + 
-                       repr(self.joystickEnabled) + FILETOKENSEP +
-                       repr(self.sendKeys) + FILETOKENSEP +
-                       self.frameTitle + FILETOKENSEP +
-                       repr(self.alwaysOnTop) + FILETOKENSEP + 
-                       repr(self.showGrid) + FILETOKENSEP + 
-                       repr(self.snapToGrid) + FILETOKENSEP + 
-                       repr(self.midiDevice1) + FILETOKENSEP +
-                       repr(self.midiDevice2) + FILETOKENSEP +
-                       repr(self.midiPollTime) + FILETOKENSEP +
-                       repr(self.midiEnabled) + "\n")
-            self.writeControls(self.controlList, file)
-            file.close()
-            self.edited = False
-        except Exception:
-            strerror = str(sys.exc_info()[1])
-            dlg = wxMessageDialog(self.mainFrame, "Unable to save to " + \
-                                  filename + ":\n\n" + strerror,
-                                  "File Error", wxOK)
-            dlg.ShowModal()
-            dlg.Destroy()
-    def openFromDisk(self, filename):
-        try:
-            file = open(filename, 'r', -1)
-            try:
-                self.filepath = getDirectory(filename)
-                self.filepath = makeAbsolutePath(self.path, self.filepath)
-                fullFileList = file.readlines()
-                for control in self.controlList:
-                    control.mDestroy()
-                self.controlList = []
-                self.selectedControlList = []
-                self.resetControlIndecies()
-                # remove line endings (need Perl's chomp())
-                for i in range(0, len(fullFileList)):
-                    fullFileList[i] = replace(fullFileList[i], "\n", "")
-                frameSize = (atoi(fullFileList[0]), atoi(fullFileList[1]))
-                panelColor = (fullFileList[2])
-                panelHost = (fullFileList[3])
-                otherArgs = split(fullFileList[4], FILETOKENSEP)
-                if (len(otherArgs) > 0):
-                    panelPort = otherArgs[0]
-                if (len(otherArgs) > 1):
-                    jDev1 = otherArgs[1]
-                else:
-                    jDev1 = DEFJOYDEVICE1
-                if (len(otherArgs) > 2):
-                    jDev2 = otherArgs[2]
-                else:
-                    jDev2 = DEFJOYDEVICE2
-                if (len(otherArgs) > 3):
-                    sockPollTime = atoi(otherArgs[3])
-                else:
-                    sockPollTime = DEFSOCKETTIMERTIME
-                if (len(otherArgs) > 4):
-                    joyPollTime = atoi(otherArgs[4])
-                else:
-                    joyPollTime = DEFJOYPOLLTIME
-                if (len(otherArgs) > 5 and self.joystickAvailable):
-                    self.joystickEnabled = atoi(otherArgs[5])
-                    if (self.joystickEnabled):
-                        self.startJoystick()
-                    else:
-                        self.stopJoystick()
-                    if (not self.locked):
-                        self.mainFrame.optionsMenu.Check(ID_ENABLEJOY,
-                                                         self.joystickEnabled)
-                if (len(otherArgs) > 6):
-                    self.sendKeys = atoi(otherArgs[6])
-                    if (not self.locked):
-                        self.mainFrame.optionsMenu.Check(ID_ENABLEKEY,
-                                                         self.sendKeys)
-                if (len(otherArgs) > 7):
-                    self.setFrameTitle(otherArgs[7])
-                if (len(otherArgs) > 8):
-                    self.alwaysOnTop = atoi(otherArgs[8])
-                if (len(otherArgs) > 9):
-                    self.showGrid = atoi(otherArgs[9])
-                if (len(otherArgs) > 10):
-                    self.snapToGrid = atoi(otherArgs[10])
-                if (len(otherArgs) > 11):
-                    self.midiDevice1 = atoi(otherArgs[11])
-                if (len(otherArgs) > 12):
-                    self.midiDevice2 = atoi(otherArgs[12])
-                if (len(otherArgs) > 13):
-                    self.midiPollTime = atoi(otherArgs[13])
-                if (len(otherArgs) > 14 and self.midiAvailable):
-                    self.midiEnabled = atoi(otherArgs[14])
-                    if (self.midiEnabled):
-                        self.startMidi()
-                    else:
-                        self.stopMidi()
-                    if (not self.locked):
-                        self.mainFrame.optionsMenu.Check(ID_ENABLEMIDI,
-                                                         self.midiEnabled)
-
-                self.mainFrame.SetSize(frameSize)
-                self.mainFrame.mainPanel.SetBackgroundColour(panelColor)
-                self.host = panelHost
-                self.port = atoi(panelPort)
-                self.joyDevice1 = jDev1
-                self.joyDevice2 = jDev2
-                self.pollTime = sockPollTime
-                self.joyPollTime = joyPollTime
-                del fullFileList[0:5]
-                self.readControls(fullFileList)
-                self.edited = False
-                self.recreateFrame()
-                self.mainFrame.mainPanel.Refresh()
-            except Exception:
-                strerror = "File is invalid"
-                #FIXME
-                strerror =  str(sys.exc_info()[1])
-                dlg = wxMessageDialog(self.mainFrame, "Unable to open file " + \
-                                      filename + ":\n\n" + strerror,
-                                      "File Error", wxOK)
-                dlg.ShowModal()
-                dlg.Destroy()
-        except Exception:
-            strerror = str(sys.exc_info()[1])
-            dlg = wxMessageDialog(self.mainFrame, "Unable to open file " + \
-                                  filename + ":\n\n" + strerror,
-                                  "File Error", wxOK)
-            dlg.ShowModal()
-            dlg.Destroy()
-        self.mainFrame.positionIcons()
-        self.setEditMode(False)
-    def resetControlIndecies(self):
-        self.buttonIndex = 0
-        self.toggleIndex = 0
-        self.sliderIndex = 0
-        self.textIndex = 0
-        self.rectIndex = 0
-        self.gaugeIndex = 0
-        self.checkBoxIndex = 0
-        self.textBoxIndex = 0
-        self.spinButtonIndex = 0
-        self.mouseAreaIndex = 0
-        self.radioButtonIndex = 0
-        self.imageIndex = 0
-        self.graphIndex = 0
-    def startJoystick(self):
-        self.joystickEnabled = True
-        self.joyID1 = joystick.openDevice(self.joyDevice1)
-        self.joyID2 = joystick.openDevice(self.joyDevice2)        
-        if ((self.joyID1 > -1) or (self.joyID2 > -1)):
-            self.joyTimer.Start(self.joyPollTime)
-        if (self.joyID1 == -1):
-            self.jsOn1 = False
-            if (not self.locked):
-                self.mainFrame.jsIcon1.SetBitmap(self.jsImageX)
-        else:
-            self.jsOn1 = True
-            if (not self.locked):
-                self.mainFrame.jsIcon1.SetBitmap(self.jsImage)
-        if (self.joyID2 == -1):
-            self.jsOn2 = False
-            if (not self.locked):
-                self.mainFrame.jsIcon2.SetBitmap(self.jsImageX)
-        else:
-            self.jsOn2 = True
-            if (not self.locked):
-                self.mainFrame.jsIcon2.SetBitmap(self.jsImage)
-        if (not self.locked):
-            self.mainFrame.positionIcons()
-            self.mainFrame.jsIcon1.Show(not self.locked)
-            self.mainFrame.jsIcon1.Refresh()
-            self.mainFrame.jsIcon2.Show(not self.locked)
-            self.mainFrame.jsIcon2.Refresh()
-    def stopJoystick(self):
-        self.joyTimer.Stop()
-        joystick.closeDevice(self.joyID1)
-        joystick.closeDevice(self.joyID2)
-        self.joystickEnabled = False
-        self.jsOn1 = False
-        self.jsOn2 = False
-        if (not self.locked):
-            self.mainFrame.jsIconFlasher1.Stop()
-            self.mainFrame.jsIconFlasher2.Stop()
-            self.mainFrame.positionIcons()
-            self.mainFrame.jsIcon1.Show(False)
-            self.mainFrame.jsIcon2.Show(False)
-    def showJoystickActive(self, jsNum):
-        if (self.joystickEnabled and not self.locked):
-            if (jsNum == 1):
-                self.mainFrame.jsIconFlasher1.Start(250)
-            else:
-                self.mainFrame.jsIconFlasher2.Start(250)
-    def startMidi(self):
-        self.midiEnabled = True
-        self.midiID1 = midi.openDevice(self.midiDevice1)
-        self.midiID2 = midi.openDevice(self.midiDevice2)
-        if ((self.midiID1 > -1) or (self.midiID2 > -1)):
-            self.midiTimer.Start(self.midiPollTime)
-        if (self.midiID1 == -1):
-            self.midiOn1 = False
-            if (not self.locked):
-                self.mainFrame.midiIcon1.SetBitmap(self.midiImageX)
-        else:
-            self.midiOn1 = True
-            if (not self.locked):
-                self.mainFrame.midiIcon1.SetBitmap(self.midiImage)
-        if (self.midiID2 == -1):
-            self.midiOn2 = False
-            if (not self.locked):
-                self.mainFrame.midiIcon2.SetBitmap(self.midiImageX)
-        else:
-            self.midiOn2 = True
-            if (not self.locked):
-                self.mainFrame.midiIcon2.SetBitmap(self.midiImage)
-        if (not self.locked):
-            self.mainFrame.positionIcons()
-            self.mainFrame.midiIcon1.Show(not self.locked)
-            self.mainFrame.midiIcon1.Refresh()
-            self.mainFrame.midiIcon2.Show(not self.locked)
-            self.mainFrame.midiIcon2.Refresh()
-    def stopMidi(self):
-        self.midiTimer.Stop()
-        midi.closeDevice(self.midiID1)
-        midi.closeDevice(self.midiID2)
-        self.midiEnabled = False
-        self.midiOn1 = False
-        self.midiOn2 = False
-        if (not self.locked):
-            self.mainFrame.midiIconFlasher1.Stop()
-            self.mainFrame.midiIconFlasher2.Stop()
-            self.mainFrame.positionIcons()
-            self.mainFrame.midiIcon1.Show(False)
-            self.mainFrame.midiIcon2.Show(False)
-    def showMidiActive(self, midiNum):
-        if (self.midiEnabled and not self.locked):
-            if (midiNum == 1):
-                self.mainFrame.midiIconFlasher1.Start(250)
-            else:
-                self.mainFrame.midiIconFlasher2.Start(250)
-    def sendCharDown(self, charCode):
-        self.sendChar(charCode, 1)
-    def sendCharUp(self, charCode):
-        self.sendChar(charCode, 0)
-    def sendChar(self, charCode, downOrUp):
-        if (self.sendKeys):
-            self.connection.send("keystroke" +
-                                 SYMMSGSEP +
-                                 repr(charCode) +
-                                 " " +
-                                 repr(downOrUp) +
-                                 PAIRSEPCHAR)
-    def lock(self):
-        if (not self.locked):
-            if (self.editMode):
-                self.setEditMode(False)
-            self.locked = True
-            self.recreateFrame()
-    def unlock(self):
-        if (self.locked):
-            self.locked = False
-            self.recreateFrame()
-    def setEditMode(self, value):
-        self.editMode = value
-        self.resizable = value
-        self.mainFrame.SetCursor(wxHOURGLASS_CURSOR)
-        self.mainFrame.mainPanel.SetCursor(wxHOURGLASS_CURSOR)
-        try:
-            wxYield()
-        except:
-            pass
-        self.recreateFrame()
-        if (value):
-            EVT_PAINT(self.mainFrame.mainPanel, self.ePaint)
-            EVT_LEFT_DOWN(self.mainFrame.mainPanel, self.eLeftDown)
-            EVT_LEFT_UP(self.mainFrame.mainPanel, self.eLeftUp)
-            EVT_RIGHT_DOWN(self.mainFrame.mainPanel, self.eRightPopUp)
-            for control in self.controlList:
-                control.setEditMode(True)
-            self.editMode = True
-            if (not self.locked):
-                self.mainFrame.editMenu.Enable(ID_ADD, True)
-                self.mainFrame.editMenu.Enable(ID_EDIT, True)
-                self.mainFrame.editMenu.Enable(ID_DELETE, True)
-                self.mainFrame.editMenu.Enable(ID_SELECTALL, True)
-                self.mainFrame.editMenu.Enable(ID_DUPLICATE, True)
-                self.mainFrame.editMenu.Enable(ID_ALIGNVERT, True)
-                self.mainFrame.editMenu.Enable(ID_ALIGNHORZ, True)
-            self.mainFrame.setEditModeText("Edit Mode")
-            self.mainFrame.positionIcons()
-            self.selectedControlList = []
-            self.edited = True
-            if (self.showGrid):
-                self.mainFrame.mainPanel.Refresh() 
-        else:
-            self.mainFrame.mainPanel.Disconnect(-1, wxEVT_PAINT)
-            self.mainFrame.mainPanel.Disconnect(-1, wxEVT_LEFT_DOWN)
-            self.mainFrame.mainPanel.Disconnect(-1, wxEVT_LEFT_UP)
-            self.mainFrame.mainPanel.Disconnect(-1, wxEVT_RIGHT_DOWN)
-            for control in self.controlList:
-                control.setEditMode(False)
-            self.editMode = False
-            if (not self.locked):
-                self.mainFrame.editMenu.Enable(ID_ADD, False)
-                self.mainFrame.editMenu.Enable(ID_EDIT, False)
-                self.mainFrame.editMenu.Enable(ID_DELETE, False)
-                self.mainFrame.editMenu.Enable(ID_SELECTALL, False)
-                self.mainFrame.editMenu.Enable(ID_DUPLICATE, False)
-                self.mainFrame.editMenu.Enable(ID_ALIGNVERT, False)
-                self.mainFrame.editMenu.Enable(ID_ALIGNHORZ, False)
-            self.mainFrame.setEditModeText("Performance Mode")
-            self.mainFrame.positionIcons()
-        for control in self.controlList:
-            control.Refresh()
-        self.mainFrame.SetCursor(wxSTANDARD_CURSOR)
-        self.mainFrame.mainPanel.SetCursor(wxSTANDARD_CURSOR)
-        self.mainFrame.mainPanel.SetFocus()
-    def recreateFrame(self):
-        position = self.mainFrame.GetPosition()
-        newWindow = gripdFrame(self,
-                               -1,
-                               self.frameTitle,
-                               position,
-                               self.resizable,
-                               self.locked,
-                               self.alwaysOnTop)
-        shown = self.mainFrame.IsShown()
-        self.copyFrame(newWindow)
-        if (shown):
-            self.mainFrame.Show(True)
-        try:
-            wxYield()
-        except:
-            pass
-        self.setFrameTitle(self.frameTitle)
-    def copyFrame(self, newWindow):
-        newWindow.SetSize(self.mainFrame.GetSize())
-        if (not self.locked):
-            newWindow.editMenu.Check(ID_EDITMODE,
-                                     self.editMode)
-            newWindow.optionsMenu.Check(ID_ENABLEJOY,
-                                        self.joystickEnabled)
-            newWindow.optionsMenu.Check(ID_ENABLEMIDI,
-                                        self.midiEnabled)
-            newWindow.optionsMenu.Check(ID_ENABLEKEY,
-                                        self.sendKeys)
-            newWindow.positionIcons()
-            newWindow.jsIcon1.Show(self.joystickEnabled)
-            newWindow.jsIcon2.Show(self.joystickEnabled)
-            newWindow.midiIcon1.Show(self.midiEnabled)
-            newWindow.midiIcon2.Show(self.midiEnabled)
-        if (self.jsOn1 and not self.locked):
-            newWindow.jsIcon1.SetBitmap(self.jsImage)
-        elif (not self.locked):
-            newWindow.jsIcon1.SetBitmap(self.jsImageX)
-        if (self.jsOn2 and not self.locked):
-            newWindow.jsIcon2.SetBitmap(self.jsImage)
-        elif (not self.locked):
-            newWindow.jsIcon2.SetBitmap(self.jsImageX)
-        if (self.midiOn1 and not self.locked):
-            newWindow.midiIcon1.SetBitmap(self.midiImage)
-        elif (not self.locked):
-            newWindow.midiIcon1.SetBitmap(self.midiImageX)
-        if (self.midiOn2 and not self.locked):
-            newWindow.midiIcon2.SetBitmap(self.midiImage)
-        elif (not self.locked):
-            newWindow.midiIcon2.SetBitmap(self.midiImageX)
-        newWindow.mainPanel.SetBackgroundColour(\
-            self.mainFrame.mainPanel.GetBackgroundColour())
-        self.mainFrame.Destroy()
-        if (self.connected and not self.locked):
-            newWindow.fileMenu.Enable(ID_CONNECT, False)
-            newWindow.fileMenu.Enable(ID_DISCONNECT, True)
-            newWindow.connectIcon.SetBitmap(self.connectImage)
-        elif (not self.locked):
-            newWindow.fileMenu.Enable(ID_CONNECT, True)
-            newWindow.fileMenu.Enable(ID_DISCONNECT, False)
-            newWindow.connectIcon.SetBitmap(self.connectImageX)
-        self.SetTopWindow(newWindow)
-        self.mainFrame = newWindow
-        EVT_KEY_UP(self.mainFrame.mainPanel, self.eKeyUp)
-        EVT_KEY_DOWN(self.mainFrame.mainPanel, self.eKeyDown)
-        EVT_CHAR(self.mainFrame.mainPanel, self.eChar)
-        if (not os.name == "posix"):
-            EVT_CHAR_HOOK(self.mainFrame, self.eChar)
-        EVT_CLOSE(self.mainFrame, self.eClose)
-        EVT_SIZE(self.mainFrame, self.eSize)
-        list = []
-        container = duplicationContainer()
-        for control in self.controlList:
-            list.append(control)
-        self.controlList = []
-        self.writeControls(list, container)
-        container.chomp()
-        self.readControls(container.getList())
-    def setFrameTitle(self, value):
-        self.frameTitle = value
-        if (self.editMode):
-            self.mainFrame.SetTitle(value + "  [ Edit ]")
-        else:
-            self.mainFrame.SetTitle(value)
-    def pingTimeout(self):
-        if (self.openAuto):
-            debugLog("timeout")
-            self.disconnect()
-            self.close()
-        else:
-            self.disconnect()
-    def getNearestGridPoint(self, point):
-        x = self.gridSpace * round((float(point[0]) / self.gridSpace))
-        y = self.gridSpace * round((float(point[1]) / self.gridSpace))
-        gridPoint = (int(x), int(y))
-        return gridPoint
-    def close(self):
-        self.openAuto = False
-        if ((self.edited) and (len(self.controlList) > 0)):
-            self.mainFrame.Show(True)
-            dlg = wxMessageDialog(self.mainFrame,
-                                  "Current GUI not saved. Close anyway?",
-                                  "GUI Not Saved", wxOK | wxCANCEL)
-            if (dlg.ShowModal() == wxID_OK):
-                dlg.Destroy()
-                self.mainFrame.Destroy()
-                try:
-                    self.disconnect()
-                except:
-                    pass
-            else:
-                return
-        else:
-            self.mainFrame.Show(True)
-            self.mainFrame.Destroy()
-            try:
-                self.disconnect()
-            except:
-                pass
-        if (self.joystickEnabled):
-            self.stopJoystick()
-        if (self.midiEnabled):
-            self.stopMidi()
-        self.ExitMainLoop()        
-
-## Events ##
-
-    def eOpenConnection(self, event):
-        cString = "Connect to " + self.host + ":" + repr(self.port) + "\n "
-        dlg = wxMessageDialog(self.mainFrame.mainPanel, cString, "Connect",
-                              wxOK | wxCANCEL)
-        if (dlg.ShowModal() == wxID_OK):
-            self.connect()
-        dlg.Destroy()
-    def eCloseConnection(self, event):
-        self.disconnect()
-    def eToggleJoystick(self, event):
-        if (not self.locked):
-            self.joystickEnabled = self.mainFrame.optionsMenu.\
-                                   IsChecked(ID_ENABLEJOY)
-        if (self.joystickEnabled):
-            self.startJoystick()
-        else:
-            self.stopJoystick()
-    def eToggleMidi(self, event):
-        if (not self.locked):
-            self.midiEnabled = self.mainFrame.optionsMenu.\
-                                   IsChecked(ID_ENABLEMIDI)
-        if (self.midiEnabled):
-            self.startMidi()
-        else:
-            self.stopMidi()
-    def eToggleKeySend(self, event):
-        if (not self.locked):
-            self.sendKeys = self.mainFrame.optionsMenu.IsChecked(ID_ENABLEKEY)
-    def eToggleAlwaysOnTop(self, event):
-        if (not self.locked and os.name != "posix"):
-           self.alwaysOnTop = self.mainFrame.optionsMenu.\
-                                    IsChecked(ID_ALWAYSONTOP)
-        self.recreateFrame()
-    def eToggleShowGrid(self, event):
-        self.showGrid = self.mainFrame.optionsMenu.IsChecked(ID_SHOWGRID)
-        if (not self.showGrid):
-            self.snapToGrid = False
-            if (not self.locked):
-                self.mainFrame.optionsMenu.Check(ID_SNAPTOGRID, False)
-        else:
-            if (self.editMode):
-                self.mainFrame.mainPanel.Refresh()
-        self.mainFrame.mainPanel.Refresh()
-    def eToggleSnapToGrid(self, event):
-        self.snapToGrid = self.mainFrame.optionsMenu.IsChecked(ID_SNAPTOGRID)
-        if (self.snapToGrid):
-            self.showGrid = True
-            if (not self.locked):
-                self.mainFrame.optionsMenu.Check(ID_SHOWGRID, True)
-            if (self.editMode):
-                self.mainFrame.mainPanel.Refresh()
-    def eRightPopUp(self, event):
-        if ((not self.locked) and (not self.selecting)):
-            self.mainFrame.PopupMenuXY(self.mainFrame.editMenu,
-                                       event.GetX(),
-                                       event.GetY())
-    def eLeftDown(self, event):
-        # Editing stuff (mostly for selectRect)
-        if (self.editMode):
-            EVT_MOTION(self.mainFrame.mainPanel, self.eMotion)
-            self.mouseDownPos = event.GetPosition()
-            self.mainFrame.mainPanel.CaptureMouse()
-            self.leftDownOnPanel = True
-            if (not event.m_controlDown):
-                self.deselectOthers(-1)
-    def eLeftUp(self, event):
-        if (self.editMode):
-            if (self.leftDownOnPanel):
-                self.mainFrame.mainPanel.ReleaseMouse()
-            self.mainFrame.mainPanel.Disconnect(-1, wxEVT_MOTION)
-            if (self.selecting):
-                self.selecting = False
-                for control in self.controlList:
-                    if (selectIntersect(control.GetRect(),
-                                        self.mainFrame.selectRect)):
-                        control.select()
-                    elif ((not event.m_controlDown) and control.isSelected()):
-                        control.deselect()
-                self.mainFrame.mainPanel.Refresh()
-            self.leftDownOnPanel = False
-    def eMotion(self, event):
-        if (event.LeftIsDown() and self.editMode and self.leftDownOnPanel):
-            self.selecting = True
-            width = abs(event.GetPosition()[0] - self.mouseDownPos[0])
-            height = abs(event.GetPosition()[1] - self.mouseDownPos[1])
-            leftBound = min(self.mouseDownPos[0], event.GetPosition()[0])
-            topBound = min(self.mouseDownPos[1], event.GetPosition()[1])
-            clearRegion = wxRegion(self.mainFrame.selectRect[0],
-                                   self.mainFrame.selectRect[1],
-                                   self.mainFrame.selectRect[2],
-                                   self.mainFrame.selectRect[3])
-            self.mainFrame.selectRect = [leftBound, topBound,
-                                         width, height]
-            clearRegion.Union(leftBound, topBound, width, height)
-            self.mainFrame.mainPanel.Refresh(False, clearRegion.GetBox())
-    def ePaint(self, event):
-        event.Skip()
-        myDC = wxPaintDC(self.mainFrame.mainPanel)
-        myDC.BeginDrawing()
-        if (self.editMode):
-            if (self.showGrid):
-                self.mainFrame.drawGrid(myDC)
-            else:
-                self.mainFrame.drawCleanBackground(myDC)
-        if (self.selecting):
-            self.mainFrame.drawSelectRect(myDC)
-        myDC.EndDrawing()
-    def eAddButton(self, event):
-        self.createControl(MBUTTONTYPE, self.buttonIndex, "button")
-    def eAddToggle(self, event):
-        self.createControl(MTOGGLETYPE, self.toggleIndex, "toggle")
-    def eAddVSlider(self, event):
-        self.createControl(MVSLIDERTYPE, self.sliderIndex, "slider")
-    def eAddHSlider(self, event):
-        self.createControl(MHSLIDERTYPE, self.sliderIndex, "slider")
-    def eAddRect(self, event):
-        self.createControl(MRECTTYPE, self.rectIndex, "rectangle")
-    def eAddText(self, event):
-        self.createControl(MTEXTTYPE, self.textIndex, "text")
-    def eAddVGauge(self, event):
-        self.createControl(MVGAUGETYPE, self.gaugeIndex, "gauge")
-    def eAddHGauge(self, event):
-        self.createControl(MHGAUGETYPE, self.gaugeIndex, "gauge")
-    def eAddCheckBox(self, event):
-        self.createControl(MCHECKBOXTYPE, self.checkBoxIndex, "checkbox")
-    def eAddRadioButtons(self, event):
-        if (self.editMode and not self.dragging):
-            txtDialog = wxTextEntryDialog(self.mainFrame.mainPanel,
-                                          "Number of radio buttons to add:",
-                                          "Create Radio Buttons", "2")
-            if (txtDialog.ShowModal() == wxID_OK):
-                numRadButs = atoi(txtDialog.GetValue())
-                txtDialog.Destroy()
-                if (numRadButs > 1):
-                    indexStr = "radiobutton" + repr(self.radioButtonIndex)
-                    pos = self.mainFrame.mainPanel.ScreenToClient( \
-                                                       wxGetMousePosition())
-                    controlN = self.addControl(MRADIONEWTYPE,
-                                               indexStr,
-                                               pos,
-                                               "s" + indexStr,
-                                               "r" + indexStr)
-                    coords = pos
-                    for i in range(1, numRadButs):
-                        indexStr = "radiobutton" + repr(self.radioButtonIndex)
-                        coords = [coords[0], coords[1] + 25]
-                        maxPos = self.mainFrame.mainPanel.GetSize()[1] - 10
-                        minPos = 0
-                        if (coords[1] > maxPos):
-                            coords[0] = pos[0] + 40
-                            coords[1] = pos[1]
-                        control = self.addControl(MRADIOBUTTONTYPE,
-                                                  indexStr,
-                                                  coords,
-                                                  "s" + indexStr,
-                                                  "r" + indexStr)
-                        control.select()
-                    controlN.select()
-                    try:
-                        wxYield()
-                    except:
-                        pass
-                    controlN.grab()
-    def eAddTextBox(self, event):
-        self.createControl(MTEXTBOXTYPE, self.textBoxIndex, "textbox")
-    def eAddSpinButton(self, event):
-        self.createControl(MSPINBUTTONTYPE, self.spinButtonIndex, "spinbutton")
-    def eAddMouseArea(self, event):
-        self.createControl(MMOUSEAREATYPE, self.mouseAreaIndex, "mousearea")
-    def eAddImage(self, event):
-            if (self.editMode and not self.dragging):
-                dlg = wxFileDialog(self.mainFrame, "Open file", self.filepath,
-                                   "", "*.*", wxOPEN)
-            if (dlg.ShowModal() == wxID_OK):
-                filepath = dlg.GetPath()
-                self.createControl(MIMAGETYPE,
-                                   self.imageIndex,
-                                   "image",
-                                   filepath)
-            dlg.Destroy()
-    def eAddGraph(self, event):
-        self.createControl(MGRAPHTYPE, self.graphIndex, "graph")
-    def eEditMode(self, event):
-        if (not self.locked):
-            newEditMode = self.mainFrame.editMenu.IsChecked(ID_EDITMODE)
-            self.setEditMode(newEditMode)
-    def eEditControl(self, event):
-        self.edited = True
-        if (len(self.selectedControlList) > 0):
-            self.selectedControlList[0].eEdit(event)
-    # extra array needed because we're removing items from the array
-    # we are cycling through (selectedControlList)
-    def eDeleteControl(self, event):
-        deleteList = []
-        for control in self.selectedControlList:
-            deleteList.append(control)
-        for control in deleteList:
-            self.controlList.remove(control)
-            self.selectedControlList.remove(control)
-            control.mDestroy()
-    def eSelectAll(self, event):
-        for control in self.controlList:
-            control.select()
-    def eDuplicate(self, event):
-        list = []
-        container = duplicationContainer()
-        # Not using selectedControlList since we are removing from it
-        # as we cycle through the list
-        for control in self.controlList:
-            if (control.isSelected()):
-                list.append(control)
-                control.deselect()
-        self.writeControls(list, container)
-        container.chomp()
-        for control in self.readControls(container.getList()):
-            control.select()
-            control.move(DUPPOSOFFSET)
-    def eAlignVertical(self, event):
-        self.alignControls(0)
-    def eAlignHorizontal(self, event):
-        self.alignControls(1)
-    def eRefresh(self, event):
-        for control in self.controlList:
-            control.Refresh()
-            if (control.isSelected()):
-                control.relocateTags()
-        self.mainFrame.mainPanel.Refresh(True)
-    def eNew(self, event):
-        flag = 0;
-        if ((self.edited) and (len(self.controlList) > 0)):
-            flag = 1
-            dlg = wxMessageDialog(self.mainFrame,
-                                  "Current GUI not saved. Clear anyway?",
-                                  "GUI Not Saved", wxOK | wxCANCEL)
-            if (dlg.ShowModal() == wxID_OK):
-                flag = 0
-        if (not flag):
-            for control in self.controlList:
-                control.mDestroy()
-            self.controlList = []
-            self.selectedControlList = []
-            self.resetControlIndecies()
-            self.mainFrame.mainPanel.SetBackgroundColour(\
-                self.mainFrame.defBgColor)
-            self.mainFrame.mainPanel.Refresh()
-            self.filepath = ""
-    def eOpen(self, event):
-        if ((self.edited) and (len(self.controlList) > 0)):
-            dlg2 = wxMessageDialog(self.mainFrame,
-                                   "Current GUI not saved. Open anyway?",
-                                   "GUI Not Saved", wxOK | wxCANCEL)
-            if (dlg2.ShowModal() == wxID_OK):
-                dlg = wxFileDialog(self.mainFrame,
-                                   "Open file", self.filepath, "", "*.gpd",
-                                   wxOPEN)
-                if (dlg.ShowModal() == wxID_OK):
-                    self.openFromDisk(dlg.GetPath())
-                # FIXME
-                # dlg.Destroy()
-            # FIXME
-            # dlg2.Destroy()
-        else:
-            dlg = wxFileDialog(self.mainFrame,
-                               "Open file", self.filepath, "", "*.gpd",
-                               wxOPEN)
-            if (dlg.ShowModal() == wxID_OK):
-                self.openFromDisk(dlg.GetPath())
-            # FIXME
-            # dlg.Destroy()
-        self.mainFrame.mainPanel.Refresh()
-    def eSave(self, event):
-        dlg = wxFileDialog(self.mainFrame, "Save file", self.filepath,
-                           "", "*.gpd", wxSAVE)
-        if (dlg.ShowModal() == wxID_OK):
-            filename = dlg.GetPath()
-            try:
-                file = open(filename, 'r', -1)
-                file.close()
-                dlg2 = wxMessageDialog(self.mainFrame, "File " + filename \
-                                       + " already exists. Overwrite?",
-                                       "File Exists", wxOK | wxCANCEL)
-                if (dlg2.ShowModal() == wxID_OK):
-                    self.saveToDisk(filename)
-                    dlg2.Destroy()
-            except:
-                self.saveToDisk(filename)
-        dlg.Destroy()
-    def eSetOptions(self, event):
-        dlg = optionsDialog(self)
-        dlg.ShowModal()
-        self.host = dlg.addrBox.GetValue()
-        try:
-            self.port = atoi(dlg.portBox.GetValue())
-        except:
-            errDlg = wxMessageDialog(self.mainFrame,
-                                  "Invalid Port",
-                                  "Options Error",
-                                  wxOK)
-            errDlg.ShowModal()
-            errDlg.Destroy()
-        try:
-            self.pollTime = atoi(dlg.pollBox.GetValue())
-        except:
-            errDlg = wxMessageDialog(self.mainFrame,
-                                  "Invalid Socket Poll Time",
-                                  "Options Error",
-                                  wxOK)
-            errDlg.ShowModal()
-            errDlg.Destroy()
-        self.joyDevice1 = dlg.joyDevBox1.GetValue()
-        self.joyDevice2 = dlg.joyDevBox2.GetValue()
-        try:
-            self.joyPollTime = atoi(dlg.joyPollBox.GetValue())
-        except:
-            errDlg = wxMessageDialog(self.mainFrame,
-                                  "Invalid Joystick Poll Time",
-                                  "Options Error",
-                                  wxOK)
-            errDlg.ShowModal()
-            errDlg.Destroy()
-        try:
-            self.midiDevice1 = atoi(dlg.midiDevBox1.GetValue())
-        except:
-            errDlg = wxMessageDialog(self.mainFrame,
-                            "Invalid MIDI Device 0\nShould be an integer.",
-                            "Options Error",
-                            wxOK)
-            errDlg.ShowModal()
-            errDlg.Destroy()
-        try:
-            self.midiDevice2 = atoi(dlg.midiDevBox2.GetValue())
-        except:
-            errDlg = wxMessageDialog(self.mainFrame,
-                            "Invalid MIDI Device 1\nShould be an integer.",
-                            "Options Error",
-                            wxOK)
-            errDlg.ShowModal()
-            errDlg.Destroy()
-        try:
-            self.midiPollTime = atoi(dlg.midiPollBox.GetValue())
-        except:
-            errDlg = wxMessageDialog(self.mainFrame,
-                            "Invalid MIDI Poll Time",
-                            "Options Error",
-                            wxOK)
-            errDlg.ShowModal()
-            errDlg.Destroy()
-        self.setFrameTitle(dlg.titleBox.GetValue())
-        if (self.sTimer.IsRunning):
-            self.sTimer.Stop()
-            self.sTimer.Start(self.pollTime)
-        if (not self.locked):
-            if (self.mainFrame.optionsMenu.IsChecked(ID_ENABLEJOY)):
-                self.stopJoystick()
-                self.startJoystick()
-            if (self.mainFrame.optionsMenu.IsChecked(ID_ENABLEMIDI)):
-                self.stopMidi()
-                self.startMidi()
-        dlg.Destroy()
-        self.mainFrame.Refresh(True)
-        self.mainFrame.mainPanel.Refresh(True)
-        for control in self.controlList:
-            control.Refresh()
-    def eAbout(self, event):
-        aboutString = "GrIPD v" + VERSION + ": "
-        aboutString = aboutString \
-                      + "Graphical Interface for Pure Data\n\n"
-        aboutString = aboutString \
-                      + "(C) Copyright 2003 Joseph A. Sarlo\nGNU "
-        aboutString = aboutString \
-                      + "General Public License\njsarlo@ucsd.edu"
-        dlg = wxMessageDialog(self.mainFrame, aboutString , "About GrIPD",
-                              wxOK | wxICON_INFORMATION)
-        dlg.ShowModal()
-        dlg.Destroy()
-    def eQuit(self, event):
-        self.mainFrame.Close(True)
-    def eKeyDown(self, event):
-        # already depressed
-        try:
-            self.keysDown.index(event.GetKeyCode())
-        # first time
-        except:
-            self.keysDown.append(event.GetKeyCode())
-            if (not self.editMode):
-                self.sendCharDown(event.GetKeyCode())
-        event.Skip()
-    def eKeyUp(self, event):
-        try:
-            self.keysDown.remove(event.GetKeyCode())
-            self.sendCharUp(event.GetKeyCode())
-        except:
-            pass
-        event.Skip()
-    def eChar(self, event):
-        if (self.editMode and not self.dragging):
-            if (event.m_controlDown):
-                deltaPos = LARGECHARMOVE
-            else:
-                deltaPos = SMALLCHARMOVE
-            if (event.GetKeyCode() == WXK_LEFT):
-                self.moveKey((-deltaPos, 0))
-                return
-            if (event.GetKeyCode() == WXK_RIGHT):
-                self.moveKey((deltaPos, 0))
-                return
-            if (event.GetKeyCode() == WXK_UP):
-                self.moveKey((0, -deltaPos))
-                return
-            if (event.GetKeyCode() == WXK_DOWN):
-                self.moveKey((0, deltaPos))
-                return
-            if (event.GetKeyCode() == WXK_TAB):
-                self.traverseFocus(event.m_controlDown)
-                return
-        if (not self.editMode or (self.editMode and not self.dragging)):
-            # Allow accelerators to be called
-            event.Skip()
-    def eRepaintControlTags(self, event):
-        event.getControl().refreshTags()
-    def eClose(self, event):
-        if (self.openAuto and self.connected):
-            self.mainFrame.Show(False)
-            try:
-                self.connection.send(HIDECOMMAND + SYMMSGSEP + \
-                                     "0" + PAIRSEPCHAR)
-            except:
-                self.close()
-        else:
-            self.close()
-    def eSize(self, event):
-        self.mainFrame.positionIcons()
-        event.Skip()
- 
-# Frame class
-class gripdFrame(wxFrame):
-# Setup
-    def __init__(self, parent, ID, title, position,
-                 resizable, locked, alwaysOnTop):
-        self.mParent = parent
-        self.resizable = resizable
-        self.alwaysOnTop = alwaysOnTop
-        self.locked = locked
-        if (self.resizable):
-            style = wxDEFAULT_FRAME_STYLE
-        else:
-            style = wxDEFAULT_FRAME_STYLE & (~wxRESIZE_BORDER) & \
-                    (~wxMAXIMIZE_BOX)
-        if (self.alwaysOnTop):
-            style = style | wxSTAY_ON_TOP
-        if (position == (-1, -1)):
-            position = wxDefaultPosition
-        wxFrame.__init__(self, NULL, ID, title, position,
-                         DEFMAINFRAMESIZE,
-                         style)
-        if (not os.name == "posix"):
-            self.SetIcon(self.mParent.icon)
-        if (not self.locked):
-            # Menu accelerator stuff
-            aclList = []
-            aclList.append(wxAcceleratorEntry(wxACCEL_NORMAL,
-                                              WXK_DELETE,
-                                              ID_DELETE))
-            aclList.append(wxAcceleratorEntry(wxACCEL_NORMAL, WXK_F1,
-                                              ID_BUTTON))
-            aclList.append(wxAcceleratorEntry(wxACCEL_NORMAL, WXK_F2,
-                                              ID_TOGGLE))
-            aclList.append(wxAcceleratorEntry(wxACCEL_NORMAL, WXK_F3,
-                                              ID_SPINBUTTON))
-            aclList.append(wxAcceleratorEntry(wxACCEL_NORMAL, WXK_F4,
-                                              ID_RADIOBUTTON))        
-            aclList.append(wxAcceleratorEntry(wxACCEL_NORMAL, WXK_F5,
-                                              ID_VSLIDER))
-            aclList.append(wxAcceleratorEntry(wxACCEL_NORMAL, WXK_F6,
-                                              ID_HSLIDER))
-            aclList.append(wxAcceleratorEntry(wxACCEL_NORMAL, WXK_F7,
-                                              ID_VGAUGE))
-            aclList.append(wxAcceleratorEntry(wxACCEL_NORMAL, WXK_F8,
-                                              ID_HGAUGE))
-            aclList.append(wxAcceleratorEntry(wxACCEL_NORMAL, WXK_F9,
-                                              ID_CHECKBOX))
-            aclList.append(wxAcceleratorEntry(wxACCEL_NORMAL, WXK_F10,
-                                              ID_TEXTBOX))
-            aclList.append(wxAcceleratorEntry(wxACCEL_NORMAL, WXK_F11,
-                                              ID_MOUSEAREA))
-            aclList.append(wxAcceleratorEntry(wxACCEL_NORMAL, WXK_F12,
-                                              ID_RECT))
-            aclList.append(wxAcceleratorEntry(wxACCEL_ALT, ord("1"),
-                                              ID_TEXT))
-            aclList.append(wxAcceleratorEntry(wxACCEL_ALT, ord("2"),
-                                              ID_IMAGE))
-            self.SetAcceleratorTable(wxAcceleratorTable(aclList))           
-            self.menuBar = wxMenuBar()
-            self.SetMenuBar(self.menuBar)
-            self.createMenu()
-            self.CreateStatusBar(3)
-            self.jsIcon1 = wxStaticBitmap(self.GetStatusBar(), -1,
-                                          self.mParent.jsImageX, (0, 0),
-                                          wxDefaultSize)
-            self.jsIcon2 = wxStaticBitmap(self.GetStatusBar(), -1,
-                                          self.mParent.jsImageX, (0, 0),
-                                          wxDefaultSize)
-            self.midiIcon1 = wxStaticBitmap(self.GetStatusBar(), -1,
-                                          self.mParent.midiImageX, (0, 0),
-                                          wxDefaultSize)
-            self.midiIcon2 = wxStaticBitmap(self.GetStatusBar(), -1,
-                                          self.mParent.midiImageX, (0, 0),
-                                          wxDefaultSize)
-            self.connectIcon = wxStaticBitmap(self.GetStatusBar(), 
-                                              -1,
-                                              self.mParent.connectImageX, 
-                                              (0, 0),
-                                              wxDefaultSize)
-            # timers to flash icons
-            self.jsIconFlasher1 = iconFlasher(self.jsIcon1, 
-                                              self.mParent.jsImage,
-                                              self.mParent.jsImageA,
-                                              1)
-            self.jsIconFlasher2 = iconFlasher(self.jsIcon2, 
-                                              self.mParent.jsImage,
-                                              self.mParent.jsImageA,
-                                              1)
-            self.midiIconFlasher1 = iconFlasher(self.midiIcon1, 
-                                                self.mParent.midiImage,
-                                                self.mParent.midiImageA,
-                                                1)
-            self.midiIconFlasher2 = iconFlasher(self.midiIcon2, 
-                                                self.mParent.midiImage,
-                                                self.mParent.midiImageA,
-                                                1)
-            self.editModeText = wxStaticText(self.GetStatusBar(), 
-                                             -1,
-                                             "Performance Mode",
-                                             (0, 0),
-                                             wxDefaultSize,
-                                             wxALIGN_CENTRE | \
-                                             wxST_NO_AUTORESIZE)
-            self.editModeText.Show(True)
-            self.jsIcon1.Show(False)
-            self.jsIcon2.Show(False)
-            self.midiIcon1.Show(False)
-            self.midiIcon2.Show(False)
-            self.connectIcon.Show(True)
-        # left, top, width, height of selection rect (for drawing)
-        self.selectRect = [0, 0, 0, 0]
-        # mainPanel stuff
-        self.mainPanel = wxPanel(self, -1, wxDefaultPosition,
-                                 wxDefaultSize, 
-                                 wxSTATIC_BORDER)
-        self.defBgColor = wxColour(self.mainPanel.GetBackgroundColour().Red() \
-                                   - BGCOLORDIF,
-                                   self.mainPanel.GetBackgroundColour().Green() \
-                                   - BGCOLORDIF,
-                                   self.mainPanel.GetBackgroundColour().Blue() \
-                                   - BGCOLORDIF)
-        self.mainPanel.SetBackgroundColour(self.defBgColor)
-        self.mainPanel.Show(True)
-        if (self.locked):
-            self.lock()
-        else:
-            self.unlock()
-    def createMenu(self):
-        self.fileMenu = wxMenu()
-        self.fileMenu.Append(ID_NEW, "&New\tCtrl-N", "Clear current GUI")
-        self.fileMenu.Append(ID_OPEN, "&Open\tCtrl-O", "Open a GUI")
-        self.fileMenu.Append(ID_SAVE, "&Save\tCtrl-S", "Save current GUI")
-        self.fileMenu.AppendSeparator()
-        self.fileMenu.Append(ID_CONNECT, "&Connect\tAlt-C",
-                             "Connect to PD")
-        self.fileMenu.Append(ID_DISCONNECT, "&Disconnect\tAlt-D",
-                             "Disconnect from PD")
-        self.fileMenu.AppendSeparator()
-        self.fileMenu.Append(ID_EXIT, "E&xit\tCtrl-Q", "Quit GrIPD")
-        self.editMenu = wxMenu()
-        self.editMenu.Append(ID_EDITMODE, "Edit &mode\tCtrl-E",
-                             "Toggle Edit/Performance Modes", True)
-        self.editMenu.AppendSeparator()
-        self.addMenu = wxMenu()
-        self.buttonMenu = wxMenu()
-        self.buttonMenu.Append(ID_BUTTON, "&Push Button\tF1",
-                               "Add a push button")
-        self.buttonMenu.Append(ID_TOGGLE, "&Toggle Button\tF2",
-                               "Add a toggle button")
-        self.buttonMenu.Append(ID_SPINBUTTON, "&Spin Button\tF3",
-                               "Add a spin button")
-        self.buttonMenu.Append(ID_RADIOBUTTON, "&Radio Buttons\tF4",
-                               "Add radio buttons")
-        self.addMenu.AppendMenu(ID_BUTTONMENU, "&Button", self.buttonMenu);
-        self.sliderMenu = wxMenu()
-        self.sliderMenu.Append(ID_VSLIDER, "&Vertical Slider\tF5",
-                               "Add a vertical slider")
-        self.sliderMenu.Append(ID_HSLIDER, "&Horizontal Slider\tF6",
-                               "Add a horizontal slider")
-        self.addMenu.AppendMenu(ID_SLIDERMENU, "&Slider", self.sliderMenu);
-        self.gaugeMenu = wxMenu()
-        self.gaugeMenu.Append(ID_VGAUGE, "&Vertical Gauge\tF7",
-                              "Add a vertical gauge")
-        self.gaugeMenu.Append(ID_HGAUGE, "&Horizontal Gauge\tF8",
-                              "Add a horizontal gauge")
-        self.addMenu.AppendMenu(ID_GAUGEMENU, "&Gauge", self.gaugeMenu);
-        self.addMenu.Append(ID_CHECKBOX, "&Checkbox\tF9",
-                            "Add a labeld checkbox")
-        self.addMenu.Append(ID_TEXTBOX, "Te&xtbox\tF10",
-                            "Add a box for entering text")
-        self.addMenu.Append(ID_MOUSEAREA, "&Mouse Area\tF11",
-                            "Add a mouse capture area")
-        self.addMenu.Append(ID_RECT, "&Rectangle\tF12",
-                            "Add a boundary rectangle")
-        self.addMenu.Append(ID_TEXT, "&Text\tAlt-1", "Add text")
-        self.addMenu.Append(ID_IMAGE, "&Image\tAlt-2", "Add an image")
-        self.addMenu.Append(ID_GRAPH, "&Graph\tAlt-3", "Add a graph")
-        self.editMenu.AppendMenu(ID_ADD, "&Add", self.addMenu)
-        self.editMenu.Append(ID_EDIT, "&Edit", "Edit selected controls")
-        self.editMenu.Append(ID_DELETE, "&Delete", "Delete selected controls")
-        self.editMenu.AppendSeparator()
-        self.editMenu.Append(ID_SELECTALL, "&Select All\tCtrl-A",
-                             "Select all controls")
-        self.editMenu.Append(ID_DUPLICATE, "D&uplicate\tCtrl-D",
-                             "Duplicate selected controls")
-        self.editMenu.AppendSeparator()
-        self.editMenu.Append(ID_ALIGNVERT, "Align &Vertical\tCtrl-V",
-                            "Vertically align selected controls")
-        self.editMenu.Append(ID_ALIGNHORZ, "Align &Horizontal\tCtrl-H",
-                             "Horizontally align selected controls")
-        self.editMenu.AppendSeparator()
-        self.editMenu.Append(ID_REFRESH, "&Refresh\tCtrl-R", "Refresh screen")
-        self.optionsMenu = wxMenu()
-        if (os.name != "posix"):
-            self.optionsMenu.Append(ID_ALWAYSONTOP, "Always On Top",
-                                    "Window will stay above all other windows",
-                                    True)
-            self.optionsMenu.AppendSeparator()
-        self.optionsMenu.Append(ID_ENABLEMIDI, "Enable &MIDI",
-                                "Enables the use of MIDI input", 
-                                True)
-        self.optionsMenu.Append(ID_ENABLEJOY, "Enable &Joystick(s)",
-                                "Enables the use of a joystick",
-                                True)
-        self.optionsMenu.Append(ID_ENABLEKEY, "Send &Keystrokes",
-                                "Send all keystrokes to PD 'keystroke' symbol",
-                                True)
-        self.optionsMenu.AppendSeparator()
-        self.optionsMenu.Append(ID_SHOWGRID, "Show Grid", 
-                                "Show Edit Grid", True)
-        self.optionsMenu.Append(ID_SNAPTOGRID, "Snap To Grid",
-                                "Snap controls to edit grid", True)
-        self.optionsMenu.AppendSeparator()
-        self.optionsMenu.Append(ID_SETOPTS, "&Configure\tCtrl-C",
-                                "Set GUI options")
-        self.helpMenu = wxMenu()
-        self.helpMenu.Append(ID_ABOUT, "&About",
-                             "GrIPD: Graphical Interface for Pure Data")
-        self.menuBar.Append(self.fileMenu, "&File")
-        self.menuBar.Append(self.editMenu, "&Edit")
-        self.menuBar.Append(self.optionsMenu, "&Options")
-        self.menuBar.Append(self.helpMenu, "&Help")
-        self.fileMenu.Enable(ID_DISCONNECT, False)
-        self.editMenu.Enable(ID_ADD, False)
-        self.editMenu.Enable(ID_EDIT, False)
-        self.editMenu.Enable(ID_DELETE, False)
-        self.editMenu.Enable(ID_SELECTALL, False)
-        self.editMenu.Enable(ID_DUPLICATE, False)
-        self.editMenu.Enable(ID_ALIGNVERT, False)
-        self.editMenu.Enable(ID_ALIGNHORZ, False)
-        if (self.mParent.joystickAvailable):
-            self.optionsMenu.Check(ID_ENABLEJOY, self.mParent.joystickEnabled)
-        if (self.mParent.midiAvailable):
-            self.optionsMenu.Check(ID_ENABLEMIDI, self.mParent.midiEnabled)
-        self.optionsMenu.Check(ID_ENABLEKEY, self.mParent.sendKeys)
-        if (os.name != "posix"):
-            self.optionsMenu.Check(ID_ALWAYSONTOP, self.alwaysOnTop)
-        self.optionsMenu.Check(ID_SHOWGRID, self.mParent.showGrid)
-        self.optionsMenu.Check(ID_SNAPTOGRID, self.mParent.snapToGrid)
-        self.optionsMenu.Enable(ID_ENABLEJOY, 
-                                self.mParent.joystickAvailable)
-        self.optionsMenu.Enable(ID_ENABLEMIDI,
-                                self.mParent.midiAvailable)
-        EVT_MENU(self, ID_NEW, self.mParent.eNew)
-        EVT_MENU(self, ID_ABOUT, self.mParent.eAbout)
-        EVT_MENU(self, ID_EXIT,  self.mParent.eQuit)
-        EVT_MENU(self, ID_CONNECT, self.mParent.eOpenConnection)
-        EVT_MENU(self, ID_DISCONNECT, self.mParent.eCloseConnection)
-        EVT_MENU(self, ID_OPEN, self.mParent.eOpen)
-        EVT_MENU(self, ID_SAVE, self.mParent.eSave)
-        EVT_MENU(self, ID_BUTTON, self.mParent.eAddButton)
-        EVT_MENU(self, ID_TOGGLE, self.mParent.eAddToggle)
-        EVT_MENU(self, ID_SPINBUTTON, self.mParent.eAddSpinButton)
-        EVT_MENU(self, ID_VSLIDER, self.mParent.eAddVSlider)
-        EVT_MENU(self, ID_HSLIDER, self.mParent.eAddHSlider)
-        EVT_MENU(self, ID_RECT, self.mParent.eAddRect)
-        EVT_MENU(self, ID_VGAUGE, self.mParent.eAddVGauge)
-        EVT_MENU(self, ID_HGAUGE, self.mParent.eAddHGauge)
-        EVT_MENU(self, ID_CHECKBOX, self.mParent.eAddCheckBox)
-        EVT_MENU(self, ID_RADIOBUTTON, self.mParent.eAddRadioButtons)        
-        EVT_MENU(self, ID_TEXTBOX, self.mParent.eAddTextBox)
-        EVT_MENU(self, ID_TEXT, self.mParent.eAddText)
-        EVT_MENU(self, ID_IMAGE, self.mParent.eAddImage)        
-        EVT_MENU(self, ID_MOUSEAREA, self.mParent.eAddMouseArea)
-        EVT_MENU(self, ID_GRAPH, self.mParent.eAddGraph)
-        EVT_MENU(self, ID_EDITMODE, self.mParent.eEditMode)
-        EVT_MENU(self, ID_EDIT, self.mParent.eEditControl)
-        EVT_MENU(self, ID_DELETE, self.mParent.eDeleteControl)
-        EVT_MENU(self, ID_SELECTALL, self.mParent.eSelectAll)
-        EVT_MENU(self, ID_DUPLICATE, self.mParent.eDuplicate)
-        EVT_MENU(self, ID_ALIGNVERT, self.mParent.eAlignVertical)
-        EVT_MENU(self, ID_ALIGNHORZ, self.mParent.eAlignHorizontal)
-        EVT_MENU(self, ID_REFRESH, self.mParent.eRefresh)
-        EVT_MENU(self, ID_SETOPTS, self.mParent.eSetOptions)
-        EVT_MENU(self, ID_ENABLEJOY, self.mParent.eToggleJoystick)
-        EVT_MENU(self, ID_ENABLEMIDI, self.mParent.eToggleMidi)
-        EVT_MENU(self, ID_ENABLEKEY, self.mParent.eToggleKeySend)
-        if (os.name != "posix"):
-            EVT_MENU(self, ID_ALWAYSONTOP, self.mParent.eToggleAlwaysOnTop)
-        EVT_MENU(self, ID_SHOWGRID, self.mParent.eToggleShowGrid)
-        EVT_MENU(self, ID_SNAPTOGRID, self.mParent.eToggleSnapToGrid)
-    def createLockedMenu(self):
-        self.fileMenu = wxMenu()
-        self.fileMenu.Append(ID_EXIT, "E&xit\tCtrl-Q", "Quit GrIPD")
-        self.helpMenu = wxMenu()
-        self.helpMenu.Append(ID_ABOUT, "&About",
-                             "GrIPD: Graphical Interface for Pure Data")
-        self.menuBar.Append(self.fileMenu, "&File")
-        self.menuBar.Append(self.helpMenu, "&Help")
-        EVT_MENU(self, ID_ABOUT, self.mParent.eAbout)
-        EVT_MENU(self, ID_EXIT,  self.mParent.eQuit)
-    def removeMenu(self):
-        for i in range(0, self.GetMenuBar().GetMenuCount()):
-            self.GetMenuBar().Remove(0)
-    def drawCleanBackground(self, myDC, rect = ()):
-        box = self.mainPanel.GetUpdateRegion().GetBox()
-        if (rect == ()):
-            rect = tuple((box[0],
-                          box[1],
-                          box[0] + box[2],
-                          box[1] + box[3]))
-        myDC.SetPen(wxPen(self.mainPanel.GetBackgroundColour(), 
-                          1, 
-                          wxTRANSPARENT))
-        myDC.SetBrush(wxBrush(self.mainPanel.GetBackgroundColour(), wxSOLID))
-        myDC.DrawRectangle(rect[0],
-                           rect[1],
-                           rect[2],
-                           rect[3])
-    def drawGrid(self, myDC, rect = ()):
-        box = self.mainPanel.GetUpdateRegion().GetBox()
-        if (rect == ()):
-            rect = tuple((box[0],
-                          box[1],
-                          box[0] + box[2],
-                          box[1] + box[3]))
-        color = self.mainPanel.GetBackgroundColour()
-        newColorTuple = [color.Red() - 50,
-                         color.Green() - 50,
-                         color.Blue() - 50]
-        if (newColorTuple[0] < 0 or \
-            newColorTuple[1] < 0 or \
-            newColorTuple[2] < 0):
-            newColorTuple = [color.Red() + 50,
-                             color.Green() + 50,
-                             color.Blue() + 50]
-        for i in range(0, 3):
-            if (newColorTuple[i] > 255 or newColorTuple[i] < 0):
-                newColorTuple[i] = 0
-        myDC.SetPen(wxPen(self.mainPanel.GetBackgroundColour(), 
-                          1, 
-                          wxTRANSPARENT))
-        myDC.SetBrush(wxBrush(self.mainPanel.GetBackgroundColour(), wxSOLID))
-        myDC.DrawRectangle(rect[0],
-                           rect[1],
-                           rect[2],
-                           rect[3])
-        myDC.SetPen(wxPen(wxColour(newColorTuple[0],
-                                   newColorTuple[1],
-                                   newColorTuple[2]),
-                           1,
-                           wxSOLID))
-        myDC.SetBrush(wxBrush("#000000", wxTRANSPARENT))
-        for i in range(rect[0], rect[2]):
-            if (i% self.mParent.gridSpace == 0):
-                myDC.DrawLine(i, rect[1], i, rect[3])
-        for i in range(rect[1], rect[3]):
-            if (i % self.mParent.gridSpace == 0):
-                myDC.DrawLine(rect[0], i, rect[2], i)
-    def drawSelectRect(self, myDC):
-        myDC.SetPen(wxPen("#000000", 1, wxDOT))
-        myDC.SetBrush(wxBrush(self.mainPanel.GetBackgroundColour(), 
-                                   wxTRANSPARENT))
-        myDC.DrawRectangle(self.selectRect[0], self.selectRect[1],
-                           self.selectRect[2], self.selectRect[3])
-    def setEditModeText(self, text):
-        if (not self.locked):
-            self.editModeText.SetLabel(text)
-            self.editModeText.SetSize(( \
-                                self.GetStatusBar().GetFieldRect(1)[2] - 10,
-                                self.editModeText.GetSize()[1]))
-            self.editModeText.Show(True)
-            pos = (((self.GetStatusBar().GetFieldRect(1)[2] - \
-                     self.editModeText.GetSize()[0]) / 2) + \
-                   self.GetStatusBar().GetFieldRect(1)[0] + 1,
-                   ((self.GetStatusBar().GetFieldRect(1)[3] - \
-                     self.editModeText.GetSize()[1]) / 2) + \
-                   self.GetStatusBar().GetFieldRect(1)[1] + \
-                   -1 * (FUGEFACTOR - 2))
-            self.editModeText.Move(pos)
-    def lock(self):
-        self.locked = True
-    def unlock(self):
-        self.locked = False
-    def positionIcons(self):
-        if (not self.locked):
-            self.setEditModeText(self.editModeText.GetLabel())
-            pos = (self.GetStatusBar().GetFieldRect(2)[0] + 3,
-                   self.GetStatusBar().GetFieldRect(2)[3] - \
-                   self.connectIcon.GetSize()[1] + 1)
-            self.connectIcon.Move(pos)
-            self.midiIcon1.Move((self.connectIcon.GetPosition()[0] + \
-                                 self.connectIcon.GetSize()[0] + 5,
-                                pos[1]))
-            self.midiIcon2.Move((self.midiIcon1.GetPosition()[0] + \
-                                 self.midiIcon1.GetSize()[0] + 3, pos[1]))
-            if (self.mParent.midiEnabled):
-                self.jsIcon1.Move((self.midiIcon2.GetPosition()[0] + \
-                                   self.midiIcon2.GetSize()[0] + 5,
-                                 pos[1]))
-            else:
-                self.jsIcon1.Move((self.connectIcon.GetPosition()[0] + \
-                                   self.connectIcon.GetSize()[0] + 5,
-                                  pos[1]))
-            self.jsIcon2.Move((self.jsIcon1.GetPosition()[0] + \
-                               self.jsIcon1.GetSize()[0] + 3, pos[1]))
-               
-            self.Refresh()
-    def openpanel(self):
-        dlg = wxFileDialog(self, "Open file", self.mParent.filepath,
-                           "", "*.*", wxOPEN)
-        if (dlg.ShowModal() == wxID_OK):
-            filename = dlg.GetPath()
-            self.mParent.connection.send('openpanel' \
-                                         + SYMMSGSEP \
-                                         + filename \
-                                         + PAIRSEPCHAR)
-
-
-    def savepanel(self):
-        dlg = wxFileDialog(self, "Save file", self.mParent.filepath,
-                           "", "*.*", wxSAVE)
-        if (dlg.ShowModal() == wxID_OK):
-            filename = dlg.GetPath()
-            self.mParent.connection.send('savepanel' \
-                                         + SYMMSGSEP \
-                                         + filename \
-                                         + PAIRSEPCHAR)
-    def stopIconFlashers(self):
-        self.jsIconFlasher1.Stop()
-        self.jsIconFlasher2.Stop()
-        self.midiIconFlasher1.Stop()
-        self.midiIconFlasher2.Stop()
-    def Destroy(self):
-        if (not self.locked):
-            self.stopIconFlashers()
-        wxFrame.Destroy(self)
-
-           
-# Classes used by mainFrame
-# Class to poll for connection to server
-class connectionTimer(wxTimer):
-    def __init__(self, parent):
-        wxTimer.__init__(self)
-        self.mParent = parent
-        self.timeCount = 0
-    def connect(self):
-        try:
-            if (not self.mParent.locked):
-                self.mParent.mainFrame.fileMenu.Enable(ID_CONNECT, False)
-            tempConn = socket(AF_INET, SOCK_STREAM)
-            tempConn.connect((self.mParent.host, self.mParent.port))
-            tempConn.setblocking(0)
-            rcvrList = self.mParent.connection.rcvrList
-            self.mParent.connection = tempConn
-            self.Stop()
-            self.mParent.sTimer.Start(self.mParent.pollTime)
-            self.mParent.connection.send(rcvrList)
-            for control in self.mParent.controlList:
-                control.connection = self.mParent.connection
-            self.mParent.connected = True
-            self.mParent.pingCount = 0
-            self.mParent.pTimer.Start(PINGPOLLTIME)
-            if (not self.mParent.locked):
-                self.mParent.mainFrame.connectIcon.SetBitmap(\
-                    self.mParent.connectImage)
-                self.mParent.mainFrame.connectIcon.Refresh()
-            self.mParent.connection.send(SHOWCOMMAND + \
-                                         SYMMSGSEP + "0" + \
-                                         PAIRSEPCHAR)
-            self.mParent.mainFrame.Show(True)
-        except:
-            self.timeCount = self.timeCount + 1
-    def Notify(self):
-        self.connect()
-        if (self.timeCount >= TIMEOUT):
-            self.Stop()
-            dlg = wxMessageDialog(self.mParent.mainFrame, "Connection Timeout",
-                                  "Connection", wxOK)
-            dlg.ShowModal()
-            dlg.Destroy()
-            if (not self.mParent.locked):
-                self.mParent.mainFrame.fileMenu.Enable(ID_CONNECT, True)
-
-# Class to poll socket for receive string
-class socketTimer(wxTimer):
-    def __init__(self, parent):
-        wxTimer.__init__(self)
-        self.mParent = parent
-    def Notify(self):
-        try:
-            receiveBuffer = self.mParent.connection.recv(16384)
-            numBytes = len(strip(receiveBuffer))
-            if (numBytes > 0):
-                self.mParent.parseReceiveBuffer(receiveBuffer)
-        except:
-            pass
-
-# Class to check connection status
-class pingTimer(wxTimer):
-    def __init__(self, parent):
-        wxTimer.__init__(self)
-        self.mParent = parent
-    def Notify(self):
-        try:
-            self.mParent.connection.send(PINGCOMMAND + SYMMSGSEP + \
-                                         "0" + PAIRSEPCHAR)
-
-        except:
-            self.Stop()
-            self.mParent.pingTimeout()
-
-# Class to poll joystick
-class joystickTimer(wxTimer):
-    def __init__(self, parent):
-        wxTimer.__init__(self)
-        self.mParent = parent
-    def Notify(self):
-        if (self.mParent.joyID1 > -1):
-            numEvents1 = joystick.readEvents(self.mParent.joyID1)
-            if (numEvents1 > 0):
-                self.mParent.showJoystickActive(1)
-            for i in range(0, numEvents1):
-                if (joystick.getEventType(self.mParent.joyID1, i) == 0):
-                    try:
-                        self.mParent.connection.send('joy0axis'
-                                                 + repr(joystick.getEventNumber(
-                                                          self.mParent.joyID1,
-                                                          i)) \
-                                                 + SYMMSGSEP \
-                                                 + repr(joystick.getEventValue(
-                                                          self.mParent.joyID1,
-                                                          i)) \
-                                                 + PAIRSEPCHAR)
-                    except:
-                        self.mParent.close()
-                if (joystick.getEventType(self.mParent.joyID1,i) == 1):
-                    try:
-                        self.mParent.connection.send('joy0button'
-                                                 + repr(joystick.getEventNumber(
-                                                         self.mParent.joyID1,
-                                                         i)) \
-                                                 + SYMMSGSEP \
-                                                 + repr(joystick.getEventValue(
-                                                          self.mParent.joyID1,
-                                                          i)) \
-                                                 + PAIRSEPCHAR)
-                    except:
-                        self.mParent.close()
-        if (self.mParent.joyID2 > -1):
-            numEvents2 = joystick.readEvents(self.mParent.joyID2)
-            if (numEvents2 > 0):
-                self.mParent.showJoystickActive(2)
-            for i in range(0, numEvents2):
-                if (joystick.getEventType(self.mParent.joyID2, i) == 0):
-                    try:
-                        self.mParent.connection.send('joy1axis'
-                                                 + repr(joystick.getEventNumber(
-                                                          self.mParent.joyID2,
-                                                          i)) \
-                                                 + SYMMSGSEP \
-                                                 + repr(joystick.getEventValue(
-                                                          self.mParent.joyID2,
-                                                          i)) \
-                                                 + PAIRSEPCHAR)
-                    except:
-                        self.mParent.close()
-                if (joystick.getEventType(self.mParent.joyID2,i) == 1):
-                    try:
-                        self.mParent.connection.send('joy1button'
-                                                 + repr(joystick.getEventNumber(
-                                                          self.mParent.joyID2,
-                                                          i)) \
-                                                 + SYMMSGSEP \
-                                                 + repr(joystick.getEventValue(
-                                                          self.mParent.joyID2,
-                                                          i)) \
-                                                 + PAIRSEPCHAR)
-                    except:
-                        self.mParent.close()
-
-# Class to poll midi
-class midiTimer(wxTimer):
-    def __init__(self, parent):
-        wxTimer.__init__(self)
-        self.mParent = parent
-    def Notify(self):
-        if (self.mParent.midiID1 > -1):
-            numEvents1 = midi.readEvents(self.mParent.midiID1)
-            if (numEvents1 > 0):
-                self.mParent.showMidiActive(1)
-            for i in range(0, numEvents1):
-                midiCommand = midi.getEventCommand(self.mParent.midiID1, i)
-                midiCommand = hex(midiCommand)
-                midiP1 = midi.getEventP1(self.mParent.midiID1, i)
-                midiP2 = midi.getEventP2(self.mParent.midiID1, i)
-                messageType = midiCommand[2]
-                channel = repr(atoi(midiCommand[3]) + 1)
-                try:
-                    if (messageType == MIDINOTEMESSAGE):
-                        self.mParent.connection.send('midi0note'
-                                                 + SYMMSGSEP \
-                                                 + repr(midiP1) \
-                                                 + " " \
-                                                 + repr(midiP2) \
-                                                 + " " \
-                                                 + channel \
-                                                 + PAIRSEPCHAR)
-                    elif (messageType == MIDICTLMESSAGE):
-                        self.mParent.connection.send('midi0ctl'
-                                                 + SYMMSGSEP \
-                                                 + repr(midiP1) \
-                                                 + " " \
-                                                 + repr(midiP2) \
-                                                 + " " \
-                                                 + channel \
-                                                 + PAIRSEPCHAR)
-                    elif (messageType == MIDIPGMMESSAGE):
-                        self.mParent.connection.send('midi0pgm'
-                                                 + SYMMSGSEP \
-                                                 + repr(midiP1) \
-                                                 + " " \
-                                                 + channel \
-                                                 + PAIRSEPCHAR)
-                except:
-                    self.mParent.close()
-        if (self.mParent.midiID2 > -1):
-            numEvents2 = midi.readEvents(self.mParent.midiID2)
-            if (numEvents2 > 0):
-                self.mParent.showMidiActive(2)
-            for i in range(0, numEvents2):
-                midiCommand = midi.getEventCommand(self.mParent.midiID2, i)
-                midiCommand = hex(midiCommand)
-                midiP1 = midi.getEventP1(self.mParent.midiID2, i)
-                midiP2 = midi.getEventP2(self.mParent.midiID2, i)
-                messageType = midiCommand[2]
-                channel = repr(atoi(midiCommand[3]) + 1)
-                try:
-                    if (messageType == MIDINOTEMESSAGE):
-                        self.mParent.connection.send('midi1note'
-                                                 + SYMMSGSEP \
-                                                 + repr(midiP1) \
-                                                 + " " \
-                                                 + repr(midiP2) \
-                                                 + " " \
-                                                 + channel \
-                                                 + PAIRSEPCHAR)
-                    elif (messageType == MIDICTLMESSAGE):
-                        self.mParent.connection.send('midi1ctl'
-                                                 + SYMMSGSEP \
-                                                 + repr(midiP1) \
-                                                 + " " \
-                                                 + repr(midiP2) \
-                                                 + " " \
-                                                 + channel \
-                                                 + PAIRSEPCHAR)
-                    elif (messageType == MIDIPGMMESSAGE):
-                        self.mParent.connection.send('midi1pgm'
-                                                 + SYMMSGSEP \
-                                                 + repr(midiP1) \
-                                                 + " " \
-                                                 + channel \
-                                                 + PAIRSEPCHAR)
-                except:
-                    self.mParent.close()
-
-# Class to flash icon between 2 bitmaps
-class iconFlasher(wxTimer):
-    def __init__(self, icon, bitmap1, bitmap2, nFlashes):
-        wxTimer.__init__(self)
-        self.icon = icon
-        self.bitmap1 = bitmap1
-        self.bitmap2 = bitmap2
-        self.nFlashes = nFlashes
-        self.running = False
-    def Start(self, ms):
-        if (not self.running):
-            self.running = True
-            self.flashCount = 0
-            self.activeBitmap = 1
-            wxTimer.Start(self, ms)
-    def Stop(self):
-        self.running = False
-        self.icon.SetBitmap(self.bitmap1)
-        wxTimer.Stop(self)
-    def Notify(self):
-        if (self.flashCount >= self.nFlashes):
-            self.icon.SetBitmap(self.bitmap1)
-            self.icon.Refresh()
-            self.Stop()
-        else:
-            if (self.activeBitmap == 1):
-                self.icon.SetBitmap(self.bitmap2)
-                self.icon.Refresh()
-                self.activeBitmap = 2
-                self.flashCount = self.flashCount + 1
-            else:
-                self.icon.SetBitmap(self.bitmap1)
-                self.activeBitmap = 1
-                self.icon.Refresh()
-
-# Class to hold commands (receive names) while not connected
-class nullConnection:
-    def __init__(self):
-        self.rcvrList = ""
-    def send(self, receiveBuffer):
-            (symName, value) = split(receiveBuffer,SYMMSGSEP)
-            if (symName[0] == COMMANDCHAR):
-                if (symName == SETRCVRCOMMAND):
-                    self.rcvrList = self.rcvrList + receiveBuffer
-    def close(self):
-        pass
- 
-# Class for holding control info for duplicate (sort of emulates file object)
-class duplicationContainer:
-    def __init__(self):
-        self.list = []
-    def write(self, string):
-        self.list.append(string)
-    def chomp(self):
-        for i in range(0, len(self.list)):
-            self.list[i] = replace(self.list[i], "\n", "")
-    def getList(self):
-        return self.list
-
-# Class for setting options
-class optionsDialog(wxDialog):
-    def __init__(self, parent):
-        self.parent = parent
-        wxDialog.__init__(self, parent.mainFrame, -1, "Configure",
-                          wxDefaultPosition, wxDefaultSize,
-                          wxDIALOG_MODAL | wxCAPTION)
-
-        titleText = wxStaticText(self, -1, "Window Title:",
-                                 (DEFOPTIONSPOS[0] + 10,
-                                  DEFOPTIONSPOS[1] + 20))
-        self.titleBox = wxTextCtrl(self, -1, parent.frameTitle,
-                                   (titleText.GetPosition()[0] \
-                                    + titleText.GetSize()[0] + 80,
-                                    titleText.GetPosition()[1] - 4))
-        
-        addrText = wxStaticText(self, -1, "Connection Address:",
-                                (titleText.GetPosition()[0],
-                                 titleText.GetPosition()[1] \
-                                 + titleText.GetSize()[1] + 15))
-        self.addrBox = wxTextCtrl(self, -1, parent.host,
-                                  (self.titleBox.GetPosition()[0],
-                                   addrText.GetPosition()[1] - 4))
-        
-        portText = wxStaticText(self, -1, "Connection Port:",
-                                (addrText.GetPosition()[0],
-                                 addrText.GetPosition()[1] \
-                                 + addrText.GetSize()[1] + 15))
-        self.portBox = wxTextCtrl(self, -1, repr(parent.port),
-                                  (self.titleBox.GetPosition()[0],
-                                   portText.GetPosition()[1] - 4))
-        
-        pollText = wxStaticText(self, -1, "Socket Poll Time (ms): ",
-                                (addrText.GetPosition()[0],
-                                 portText.GetPosition()[1] \
-                                 + portText.GetSize()[1] + 15))
-        self.pollBox = wxTextCtrl(self, -1, repr(parent.pollTime),
-                                  (self.titleBox.GetPosition()[0],
-                                   pollText.GetPosition()[1] - 4))
-                                   
-        joyDevText1 = wxStaticText(self, -1, "Joystick Device 0: ",
-                                  (addrText.GetPosition()[0],
-                                   pollText.GetPosition()[1] \
-                                   + pollText.GetSize()[1] + 15))
-        self.joyDevBox1 = wxTextCtrl(self, -1, parent.joyDevice1,
-                                     (self.titleBox.GetPosition()[0],
-                                      joyDevText1.GetPosition()[1] - 4))
-        
-        joyDevText2 = wxStaticText(self, -1, "Joystick Device 1: ",
-                                  (addrText.GetPosition()[0],
-                                   joyDevText1.GetPosition()[1] \
-                                   + joyDevText1.GetSize()[1] + 15))
-        self.joyDevBox2 = wxTextCtrl(self, -1, parent.joyDevice2,
-                                     (self.titleBox.GetPosition()[0],
-                                      joyDevText2.GetPosition()[1] - 4))
-        
-        joyPollText = wxStaticText(self, -1, "Joystick Poll Time (ms): ",
-                                   (addrText.GetPosition()[0],
-                                    joyDevText2.GetPosition()[1] \
-                                    + joyDevText2.GetSize()[1] + 15))
-        self.joyPollBox = wxTextCtrl(self, -1, repr(parent.joyPollTime),
-                                     (self.titleBox.GetPosition()[0],
-                                      joyPollText.GetPosition()[1] - 4))
-
-        midiDevText1 = wxStaticText(self, -1, "MIDI Device 0: ",
-                                  (addrText.GetPosition()[0],
-                                   joyPollText.GetPosition()[1] \
-                                   + joyPollText.GetSize()[1] + 15))
-        self.midiDevBox1 = wxTextCtrl(self, -1, repr(parent.midiDevice1),
-                                     (self.titleBox.GetPosition()[0],
-                                      midiDevText1.GetPosition()[1] - 4))
-        
-        midiDevText2 = wxStaticText(self, -1, "MIDI Device 1: ",
-                                  (addrText.GetPosition()[0],
-                                   midiDevText1.GetPosition()[1] \
-                                   + midiDevText1.GetSize()[1] + 15))
-        self.midiDevBox2 = wxTextCtrl(self, -1, repr(parent.midiDevice2),
-                                     (self.titleBox.GetPosition()[0],
-                                      midiDevText2.GetPosition()[1] - 4))
-        
-        midiPollText = wxStaticText(self, -1, "MIDI Poll Time (ms): ",
-                                   (addrText.GetPosition()[0],
-                                    midiDevText2.GetPosition()[1] \
-                                    + midiDevText2.GetSize()[1] + 15))
-        self.midiPollBox = wxTextCtrl(self, -1, repr(parent.midiPollTime),
-                                     (self.titleBox.GetPosition()[0],
-                                      midiPollText.GetPosition()[1] - 4))
-
-        bColorText = wxStaticText(self, -1, "Background Color:",
-                                  (addrText.GetPosition()[0],
-                                   midiPollText.GetPosition()[1] \
-                                   + midiPollText.GetSize()[1] + 15))
-        bColorButton = wxButton(self, -1, "Set",
-                                (self.titleBox.GetPosition()[0],
-                                 bColorText.GetPosition()[1] - 4),
-                                self.midiPollBox.GetSize())
-                                    
-        rect = wxStaticBox(self, -1, "Options", DEFOPTIONSPOS,
-                           (self.addrBox.GetPosition()[0] \
-                            + self.addrBox.GetSize()[0] + 10,
-                            bColorButton.GetPosition()[1] + \
-                            bColorButton.GetSize()[1] + 20))
-        line = wxStaticLine(self, -1, (DEFOPTIONSPOS[0],
-                            bColorButton.GetPosition()[1] \
-                            + bColorButton.GetSize()[1] + 30),
-                            (rect.GetSize()[0], 1))
-        okButton = wxButton(self, -1, "OK", (0, line.GetPosition()[1] + 10))
-        self.SetSize((rect.GetSize()[0] + 15,
-                      okButton.GetPosition()[1] + \
-                      (FUGEFACTOR * okButton.GetSize()[1]) + \
-                      (okButton.GetPosition()[1] - line.GetPosition()[1]) + 4))
-        okButton.Center(wxHORIZONTAL)
-        okButton.Move((okButton.GetPosition()[0], line.GetPosition()[1] + 10))
-        EVT_BUTTON(self, okButton.GetId(), self.eOK)
-        EVT_BUTTON(self, bColorButton.GetId(), self.eBColor)
-    def eOK(self, event):
-        self.EndModal(wxID_OK)
-    def eBColor(self, event):
-        color = getColorFromDialog(self,
-                         self.parent.mainFrame.mainPanel.GetBackgroundColour())
-        self.parent.mainFrame.mainPanel.SetBackgroundColour(color)
-        for control in self.parent.controlList:
-            if (control.resetBackground):
-                control.SetBackgroundColour(color)       
diff --git a/extensions/gripd/icon.pic b/extensions/gripd/icon.pic
deleted file mode 100644
index 26e8bb232dd6614a77865128374e621125f9e764..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3774
zcmeHKYj6|S75*TAY_0K_mA!cJf**hpek~6xI3!>hZ+KZ+9_C@<aX<tt(=Cz<gb;$8
z8YKn>s7j%pIAscMfIveiPzsdt$it)oPY5BIQj?6!K+B_em<*y30~YSNE3FXlKfijI
zqjUG}ckXx2z31FDKsWj~Y#4Oeod^gtvXZi?d8FMCN58-?%({8%r+fEq=<y8G?&w9@
zvj<tyxSr3D_CQ>(9x#(~aXpYgni$^`z0Ez5NSYAWi=Ii%y^zH90?(PyC&2_hAr48s
zIiw`Up>I+=EJ?kQ(kBtANoGhE4kF(h{VfUTpPT@}(g$fNNk|iTr1#~KDkNh-YBJK(
zL}aA&MuxyN5m|i`F^F_vY9a=UG!~PPO**(AS<=jYDae*mV5PBD>Vq6zdE^e@k=LJ;
zYys)e^u8!aPew*sD&!0c3Nn&0B%>elvP2A{@rcZ149_A<I&z?Z!mJb&lC=#IP?Rm;
zx$IPowx(jtP!TzUGmtZ6Fy!1JD99a(5jg`fDlZema<frfkcp9UE^GxkD3tRsYIrUR
zhv#E-p^O(s6=H1B2#hHzggvJpO7i+aDM-V(e2J`t@x%IK((nOrj7&#aVLBX4M`l1R
z%z#pqkEzdQVtP>)W<EC%Ge-}?oaaf$48qhGa#2}q#oUr17;k?bCHAqHtQ4cXWH`!S
zEW)huqcMM+6$?s-;uU2ms+AnnjL*TM33>R*#9Y!mES{8)+Oh)FIts9`>{-lL$6&#f
zv2afvi<)W0P)h8Wpp;-@X$dBgbxasXsz9BnU`p9UI31HQz3fHIDpN39oq%cTWRy>v
zf?3m?m^pnas%Dqt<(FpR<;n{DbXF<ml~06gMi~}XII-v@6^pB;!c{c~3+7g$cJ4GR
zaZSgv`Q=#t$_%`|a3)r{XJche1y<F}!NU3Tpe?FFtyY7jo<&$%>%nV3Ta4G1da+_@
zEmpo-i#Oj`fre!Zv0<f#)hlYzu(B5QZ~h#cd@JylZ#5d;T8%XgZ)4q>x3OU@>AD8^
zH>}5RH`Zg*#&y{A%Z>Q;ul)GU=1pkavKj9*Zo$@fo6y|25zW8bistRx@cxe9WB1M-
z_+a-ge7N@m9Nzan4t)3r?BBN+hxU^m+>gH;`7=%({S!_eJAxC(kKv=k`|!!p12}#B
zFg`wY0-t{JF;2I%;LPby(R%g_&Yx+)`7gh~g|EKCH(y`CKQ8_qZEbD%?%PXfZ*Rxt
zf41XaSFhmOzpvuP^=r6w^9DNpa}&2aNN?Z9ojZ4MHxR(xy8-<0-@CXM4C3CsAnxD4
zkB1K*>i2-tsj4oLYFBl2wcD+EJRX-_mIP6hWPA0JI+A)4pRZx<8j=QwLnUDjB$``u
z*(6CM5!kOJ*|oYlpO4@q48O+VAOh8;>I80=RbV1XRmBWVBFY{{z~H_HUqgeUs=9+7
zl8vzPw)59QOm4Lutk7MY%ZXxbn1JvK!?TE-l3-c!wT?A@+IKM)*;`+yheQO5qOz39
zffk>8)c{8At>!H9@UZxag5psWr_LY?#pk1_*ujNTa&Y-5CgwqSogkm{e;<pA8Grve
zIk*`E3BwbGEF6hJJTdIt&q87ZKA(*o6o+j2{0YqCk0&K5e|Z>hw=0TWXnp+sQ%^@|
zmskq*Haj_pA3YAZa%#`I_51#IJ!W>7B&m$RZnG=WftVMe;Frr-X=s{9TYowFB3LC!
zOMG?pHk;j66^u@YLYG&vN~(4<2aoqyr}65REGcwqHk(bpY0Qy5;ZmzrDpog%rg^>F
ze=uIQN)ny3Y_pv-W<sIBPQ5hTjDX>ZVSAKeE+dd_Gh*OxP-#%DM%sZw(mdY38t=cO
z4C?abFO26<U{$1)!rj0K++MFYnsk$-*5#K*;h|<H2@8lAC<WE!rUueH+YQ7e$y#SU
zWITnAv(g|qi;3{6Ai7vYF$7hT*BUM1b~<R*4SIE}E+_Sl=yH49n)i>!l4m8=W{gAg
z2=0umud0gRuM~J<aC<aQAOZ?V_IC~Zd8!Ondpd*DDQpe~Dyfs1gQv{^`K4$X&!fs<
z4n*Npor0gvJWxd;shXx9H1MBGXCuQ7(JqHQsNI}uvpyZD<VDe?iu(=x73rJE@RC54
z#Dw6A`d;KviGe&eN9!x7U5wyA<7{kws#XeVwvk{cP-zkU#_D8WH5#Rblc|&#0n6D~
zpXK0>77*dr8pU>wlbA!8!J))B#H`-A&ui@GHIq(YFgPAL#NhXOz0)I)otb7)wy}`(
z6cp#v4iENHd0TEp91e2vS$YaYQOb^CXKdUA>fA%M>J^NOq(kiDtg;;4Bt>~ICK3kM
z`^QpY%zkF#jGXPxCw57PGrYzL-x>~ExUP6n-z2uNtdbrvbnel=J{sYp1fh*wJjaWa
zg`6w$lAeQcvb!UnD~;!Q<H$mt#9%g?OuUIV^E};@#GohrU}yM)MRx$l@mY`Vlh$mG
zGjS%fX-KA7&_mim4hEdv8HDF54AxL6*xFQHUa|E;sFmj^BF69_xI@1(^h>}^o5FLk
z6=h`a=XqIo*tvtXXgHv19nbT-4Adjrk;z%ut~wR=1r0OMrD0+OJiqM`&={TL*d9?x
z^vPv+K$sz(^5ZyxYkK1J$!n`1GXjU=(61Q%l5uqrnlT6!9mc|j4a^RAgU%2pa8+|%
zEFu$6+j`Cb8n!J`td5u*x@fz@5eb6-hJn=W^+vtnSV$z1P3ofcnQ)wivsjvpb`AwE
zzGKU0-M~_&U5fl&qIQu3b75InEP{~bKibmLa;Q<Z=2LZ3gGO8^YewOE>OVvOpZHOC
F;D0VdLoxsW

diff --git a/extensions/gripd/joystick.xpm b/extensions/gripd/joystick.xpm
deleted file mode 100644
index bd52354b5..000000000
--- a/extensions/gripd/joystick.xpm
+++ /dev/null
@@ -1,68 +0,0 @@
-/* XPM */
-static char * joystick_xpm[] = {
-"17 16 49 1",
-" 	c None",
-".	c #000000",
-"+	c #9C9C9C",
-"@	c #FFFFFF",
-"#	c #444444",
-"$	c #4C4C4C",
-"%	c #323232",
-"&	c #464646",
-"*	c #F9F9F9",
-"=	c #252525",
-"-	c #474747",
-";	c #E0E0E0",
-">	c #DADADA",
-",	c #E1E1E1",
-"'	c #7C0000",
-")	c #380000",
-"!	c #8A8A8A",
-"~	c #DEDEDE",
-"{	c #A4A4A4",
-"]	c #ADADAD",
-"^	c #D0D0D0",
-"/	c #F7FFFF",
-"(	c #800000",
-"_	c #603B3B",
-":	c #C4C4C4",
-"<	c #81ABAB",
-"[	c #4C5858",
-"}	c #969696",
-"|	c #4E4E4E",
-"1	c #E9E9E9",
-"2	c #5A5A5A",
-"3	c #F4F4F4",
-"4	c #BFBFBF",
-"5	c #353535",
-"6	c #5D5D5D",
-"7	c #818181",
-"8	c #BDBDBD",
-"9	c #131313",
-"0	c #181818",
-"a	c #5E5E5E",
-"b	c #838383",
-"c	c #8D8D8D",
-"d	c #535353",
-"e	c #E8E8E8",
-"f	c #696969",
-"g	c #8B8B8B",
-"h	c #AAAAAA",
-"i	c #6A6A6A",
-"j	c #070707",
-"        ..       ",
-"       +@@.      ",
-"       +@#.      ",
-"       +@#.      ",
-"       +@#.      ",
-"       +@#.      ",
-"     $%+@#.%%    ",
-"   &%**+@##@@%%= ",
-" -%;>,@.@..@')@@.",
-"!@~{]^@@.@,/(_@!.",
-"-@@@@:,,,,@@@<[}.",
-"|12}3@@@]@4@5678.",
-"9@@@}2}@@@0ab}c..",
-"..dee@@}}.f}g..  ",
-"  h..he@@i!..    ",
-"     hj....      "};
diff --git a/extensions/gripd/joystickA.xpm b/extensions/gripd/joystickA.xpm
deleted file mode 100644
index 9e41b76e2..000000000
--- a/extensions/gripd/joystickA.xpm
+++ /dev/null
@@ -1,45 +0,0 @@
-/* XPM */
-static char * joystickA_xpm[] = {
-"17 16 26 1",
-" 	c None",
-".	c #000000",
-"+	c #008200",
-"@	c #00FF08",
-"#	c #003300",
-"$	c #4C4C4C",
-"%	c #323232",
-"&	c #464646",
-"*	c #252525",
-"=	c #474747",
-"-	c #00C400",
-";	c #7C0000",
-">	c #380000",
-",	c #8A8A8A",
-"'	c #026602",
-")	c #009E00",
-"!	c #800000",
-"~	c #603B3B",
-"{	c #81ABAB",
-"]	c #004400",
-"^	c #4E4E4E",
-"/	c #005600",
-"(	c #131313",
-"_	c #181818",
-":	c #AAAAAA",
-"<	c #070707",
-"        ..       ",
-"       +@@.      ",
-"       +@#.      ",
-"       +@#.      ",
-"       +@#.      ",
-"       +@#.      ",
-"     $%+@#.%%    ",
-"   &%@@+@##@@%%* ",
-" =%---@.@..@;>@@.",
-",@-'')@@.@-@!~@'.",
-"=@@@@+----@@@{]+.",
-"^-]/@@@@'@)@#]/).",
-"(@@@/]'@@@_]/+'..",
-"..]--@@''.]+'..  ",
-"  :..+-@@]+..    ",
-"     :<....      "};
diff --git a/extensions/gripd/joystickX.xpm b/extensions/gripd/joystickX.xpm
deleted file mode 100644
index 820e56e78..000000000
--- a/extensions/gripd/joystickX.xpm
+++ /dev/null
@@ -1,57 +0,0 @@
-/* XPM */
-static char * joystickX_xpm[] = {
-"17 16 38 1",
-" 	c None",
-".	c #000000",
-"+	c #9C9C9C",
-"@	c #FFFFFF",
-"#	c #FF0000",
-"$	c #FF8484",
-"%	c #444444",
-"&	c #323232",
-"*	c #383838",
-"=	c #464646",
-"-	c #EAEAEA",
-";	c #7C8F8F",
-">	c #252525",
-",	c #474747",
-"'	c #CACACA",
-")	c #E0E0E0",
-"!	c #DADADA",
-"~	c #7C0000",
-"{	c #380000",
-"]	c #8A8A8A",
-"^	c #DEDEDE",
-"/	c #A4A4A4",
-"(	c #603B3B",
-"_	c #4C5858",
-":	c #969696",
-"<	c #4E4E4E",
-"[	c #E9E9E9",
-"}	c #5A5A5A",
-"|	c #818181",
-"1	c #BDBDBD",
-"2	c #131313",
-"3	c #8D8D8D",
-"4	c #535353",
-"5	c #696969",
-"6	c #AAAAAA",
-"7	c #E8E8E8",
-"8	c #6A6A6A",
-"9	c #070707",
-"        ..       ",
-"       +@@.      ",
-"   ##$ +@%.$##   ",
-"   ###$+@%$###   ",
-"   ####$@$####   ",
-"   $####$####$   ",
-"    $#######$&   ",
-"  *=-$#####$@@;> ",
-" ,')!$#####$~{@@.",
-"]@^/$#######$(@].",
-",@@$####$####$_:.",
-"<[}####$@$####|1.",
-"2@@###$@@@$###3..",
-"..4##$@::.5$##.  ",
-"  6..67@@8]..    ",
-"     69....      "};
diff --git a/extensions/gripd/log.txt b/extensions/gripd/log.txt
deleted file mode 100644
index e69de29bb..000000000
diff --git a/extensions/gripd/midi.xpm b/extensions/gripd/midi.xpm
deleted file mode 100644
index cb1215c99..000000000
--- a/extensions/gripd/midi.xpm
+++ /dev/null
@@ -1,24 +0,0 @@
-/* XPM */
-static char * midi_xpm[] = {
-"17 16 5 1",
-" 	c None",
-".	c #000000",
-"+	c #808080",
-"@	c #FFFFFF",
-"#	c #C0C0C0",
-"                 ",
-"   ... ... ...   ",
-"+++............++",
-"+@@...#...#...#@+",
-"+@@...#...#...#@+",
-"+@@...#...#...#@+",
-"+@@...#...#...#@+",
-"+@@...#...#...#@+",
-"+@@...#...#...#@+",
-"+@@@.##@.##@.##@+",
-"+@@@.#@@.#@@.#@@+",
-"+@@@.#@@.#@@.#@@+",
-"+@@@.#@@.#@@.#@@+",
-"+@@@.#@@.#@@.#@@+",
-".+++.+++.+++.+++.",
-"................."};
diff --git a/extensions/gripd/midiA.xpm b/extensions/gripd/midiA.xpm
deleted file mode 100644
index 6779a396c..000000000
--- a/extensions/gripd/midiA.xpm
+++ /dev/null
@@ -1,24 +0,0 @@
-/* XPM */
-static char * midiA_xpm[] = {
-"17 16 5 1",
-" 	c None",
-".	c #000000",
-"+	c #045B0E",
-"@	c #00FF08",
-"#	c #07BA1F",
-"                 ",
-"   ... ... ...   ",
-"+++............++",
-"+@@...#...#...#@+",
-"+@@...#...#...#@+",
-"+@@...#...#...#@+",
-"+@@...#...#...#@+",
-"+@@...#...#...#@+",
-"+@@...#...#...#@+",
-"+@@@.##@.##@.##@+",
-"+@@@.#@@.#@@.#@@+",
-"+@@@.#@@.#@@.#@@+",
-"+@@@.#@@.#@@.#@@+",
-"+@@@.#@@.#@@.#@@+",
-".+++.+++.+++.+++.",
-"................."};
diff --git a/extensions/gripd/midiX.xpm b/extensions/gripd/midiX.xpm
deleted file mode 100644
index 8ee69f931..000000000
--- a/extensions/gripd/midiX.xpm
+++ /dev/null
@@ -1,26 +0,0 @@
-/* XPM */
-static char * midiX_xpm[] = {
-"17 16 7 1",
-" 	c None",
-".	c #000000",
-"+	c #808080",
-"@	c #FF0000",
-"#	c #FF8484",
-"$	c #FFFFFF",
-"%	c #C0C0C0",
-"                 ",
-"   ... ... ...   ",
-"+++@@#.....#@@.++",
-"+$$@@@#...#@@@%$+",
-"+$$@@@@#.#@@@@%$+",
-"+$$#@@@@#@@@@#%$+",
-"+$$.#@@@@@@@#.%$+",
-"+$$..#@@@@@#..%$+",
-"+$$..#@@@@@#..%$+",
-"+$$$#@@@@@@@#%%$+",
-"+$$#@@@@#@@@@#$$+",
-"+$$@@@@#.#@@@@$$+",
-"+$$@@@#$.%#@@@$$+",
-"+$$@@#$$.%$#@@$$+",
-".+++.+++.+++.+++.",
-"................."};
diff --git a/extensions/gripd/src/Makefile.Linux b/extensions/gripd/src/Makefile.Linux
deleted file mode 100644
index 40324e7e5..000000000
--- a/extensions/gripd/src/Makefile.Linux
+++ /dev/null
@@ -1,48 +0,0 @@
-include makefile
-
-current: all
-
-all: gripd.pd_linux joystickmodule.so midimodule.so
-
-LINUXCFLAGS = -DPD -O2 -funroll-loops -fomit-frame-pointer \
-    -Wall -W -Wshadow -Wstrict-prototypes \
-    -Wno-unused -Wno-parentheses -Wno-switch
-MIDIDEFINES = -D$(MIDIOSSUBTYPE) -DLINUX
-MIDICOMPILEFLAGS  = -O6 -I./midiio/include $(MIDIDEFINES)
-MIDILINKFLAGS = -L$(SYSTEMLIBDIR) -lpthread -L./midiio/lib -lmidiio
-ifeq ($(MIDIOSSUBTYPE), ALSA)
-MIDILINKFLAGS += -lasound
-endif
-
-gripd.pd_linux:
-	cc $(LINUXCFLAGS) $(PDINCLUDE) -o gripd.o -c gripd.c
-	ld -export_dynamic -lm  -shared -o gripd.pd_linux gripd.o -lc -lm
-	strip --strip-unneeded gripd.pd_linux
-	cp gripd.pd_linux ..
-
-joystickmodule.so:
-ifeq ($(JOYSTICK), TRUE)
-	cc -c joystick.c
-	cc $(LINUXPYTHONINCLUDE) -c -DHAVE_CONFIG_H joystick_wrap.c
-	ld -shared joystick.o joystick_wrap.o -o joystickmodule.so
-	cp joystickmodule.so ..
-endif
-	echo "joystick = "$(JOYSTICK) > ../gripd.opt
-
-midimodule.so:
-ifeq ($(MIDI), TRUE)
-	make -f Makefile.midiioLibrary.$(MIDIOSSUBTYPE)
-	g++ -c $(MIDICOMPILEFLAGS) midi.cpp
-	g++ $(LINUXPYTHONINCLUDE) -c -DHAVE_CONFIG_H midi_wrap.c
-	g++ -shared midi.o midi_wrap.o $(MIDILINKFLAGS) -o midimodule.so
-	cp midimodule.so ..
-endif
-	echo "midi = "$(MIDI) >> ../gripd.opt
-
-linux_clean:
-	rm *.o
-	rm gripd.pd_linux
-	rm joystickmodule.so
-	rm midimodule.so
-	make -f Makefile.midiioLibrary.$(MIDIOSSUBTYPE) clean
-
diff --git a/extensions/gripd/src/Makefile.NT b/extensions/gripd/src/Makefile.NT
deleted file mode 100644
index 497459266..000000000
--- a/extensions/gripd/src/Makefile.NT
+++ /dev/null
@@ -1,86 +0,0 @@
-!INCLUDE makefile
-
-current: all
-all: gripd.dll joystick.dll midi.dll
-
-PDNTCFLAGS = /W3 /WX /DNT /DPD /nologo
-
-PDNTINCLUDE = /I. /I\tcl\include /I$(PDNTSRCDIR) /I$(VC)\include
-JOYINCLUDE = /I$(PYTHONHOME)\include /I$(VC)\INCLUDE
-MIDIINCLUDE = /I$(PYTHONHOME)\include /I$(VC)\INCLUDE /I.\midiio\include
-PDNTLIB = $(VC)\lib\libc.lib \
-	$(VC)\lib\oldnames.lib \
-	$(VC)\lib\kernel32.lib \
-	$(VC)\lib\wsock32.lib \
-	$(VC)\lib\uuid.lib \
-	$(PDNTLDIR)\pd.lib
-JOYLIBS = $(VC)\LIB\kernel32.lib \
-	$(VC)\LIB\advapi32.lib \
-	$(VC)\LIB\user32.lib \
-	$(VC)\LIB\gdi32.lib \
-	$(VC)\LIB\libcmt.lib \
-	$(VC)\LIB\comdlg32.lib \
-	$(VC)\LIB\oldnames.lib \
-	$(VC)\LIB\winmm.lib \
-	$(VC)\LIB\winspool.lib \
-	$(PYTHONHOME)\libs\python$(PYTHONVER).lib
-MIDILIBS = midiio\lib\midiio.lib \
-	$(PYTHONHOME)\libs\python$(PYTHONVER).lib \
-	$(VC)\lib\kernel32.lib \
-	$(VC)\lib\advapi32.lib \
-	$(VC)\lib\user32.lib \
-	$(VC)\lib\gdi32.lib \
-	$(VC)\lib\comdlg32.lib \
-	$(VC)\lib\oldnames.lib \
-	$(VC)\lib\winmm.lib \
-	$(VC)\lib\winspool.lib
-JOYLOPT = -debug:full -debugtype:cv /NODEFAULTLIB /RELEASE /NOLOGO \
-	/MACHINE:IX86 -entry:_DllMainCRTStartup@12 -dll
-MIDILOPT = -debug:full -debugtype:cv /RELEASE /NOLOGO /NODEFAULTLIB:msvcrt.lib \
-	/MACHINE:IX86 -entry:_DllMainCRTStartup@12 -dll
-
-gripd.dll:
-	cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c gripd.c
-	link /dll /export:gripd_setup gripd.obj $(PDNTLIB)
-	copy gripd.dll ..
-
-joystick.dll:
-!IF "$(JOYSTICK)" == "TRUE"
-	cl /TP /DNT /c $(JOYINCLUDE) joystick.c
-	cl /Z7 /Od /c /nologo /D__WIN32__ $(JOYINCLUDE) joystick_wrap.c
-	link $(JOYLOPT) -out:joystick.dll $(JOYLIBS) joystick_wrap.obj \
-                                                     joystick.obj
-	copy joystick.dll ..
-!ENDIF
-	echo joystick = $(JOYSTICK) > ..\gripd.opt
-        
-midi.dll:
-!IF "$(MIDI)" == "TRUE"
-	nmake -f Makefile.midiioLibrary.NT
-	cl /DVISUAL /TP /DNT /c /GX $(MIDIINCLUDE) midi.cpp
-	cl /TP /DVISUAL /Z7 /Od /c /nologo /D__WIN32__ $(MIDIINCLUDE) midi_wrap.c
-	link $(MIDILOPT) -out:midi.dll $(MIDILIBS) midi_wrap.obj midi.obj
-	copy midi.dll ..
-!ENDIF
-	echo midi = $(MIDI) >> ..\gripd.opt
-        
-nt_clean:
-	del gripd.obj
-	del gripd.exp
-	del gripd.lib
-	del joystick.pdb
-	del joystick.obj
-	del joystick.lib
-	del joystick.exp
-	del joystick_wrap.obj
-	del midi.pdb
-	del midi.obj
-	del midi.lib
-	del midi.exp
-	del midi_wrap.obj
-	del gripd.dll
-	del joystick.dll
-	del midi.dll
-	nmake -f Makefile.midiioLibrary.NT CLEAN
-
-
diff --git a/extensions/gripd/src/Makefile.midiioLibrary.ALSA b/extensions/gripd/src/Makefile.midiioLibrary.ALSA
deleted file mode 100644
index 5a5a7b2ec..000000000
--- a/extensions/gripd/src/Makefile.midiioLibrary.ALSA
+++ /dev/null
@@ -1,205 +0,0 @@
-## midiio library GNU makefile for linux.
-##
-## Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-## Creation Date: Sat Nov  2 19:49:57 PST 2002
-## Last Modified: Sat Nov  2 19:50:00 PST 2002
-## Filename:      ...midiio/Makefile.library
-##
-## Description: This Makefile creates the midiio library lib/libmidiio.a
-##              for linux, using gcc 2.7.2.1 or higher
-##
-## To run this makefile, type (without quotes) "make -f Makefile.library"
-##
-
-###########################################################################
-#                                                                         #
-#                                                                         #
-#  Operating System OSTYPEs available in the midiio library compilation:  #
-#
-#      LINUX  = Linux running on intel computers
-#      VISUAL = Windows 95/NT using Microsoft Visual C++ 5/6
-#      OSX    = Apple Mac OS X (10.2 or higher when it is ready)
-#
-# The file "sigConfiguration.h" in the include directory contains additional
-# defines which will be activated by the OS given by the OSTYPE variable 
-# below.  Look at the sigConfiguration.h file for various things which need 
-# to be defined specifically for each OS.
-#
-OSTYPE = LINUX
-
-# The OSSUBTYPE is for determining which type of sound drivers
-# are being used in linux.  There are three possibilities:
-# OSSUBTYPE = ALSA    # ALSA 0.9 interface (http://www.alsa-project.org)
-# OSSUBTYPE = ALSA05  # ALSA 0.5 interface (http://www.alsa-project.org)
-# OSSUBTYPE = OSS     # OSS interface      (http://www.4front-tech.com)
-# Note: The Improv library accesses the internal/external MIDI devices
-# in OSS, but only the external MIDI devices in ALSA.  OSS can be
-# emulated in ALSA 0.9.
-#
-OSSUBTYPE = ALSA
-
-OBJDIR    = ./midiio/obj
-SRCDIR    = ./midiio/src
-INCDIR    = ./midiio/include
-LIBDIR    = ./midiio/lib
-LIBFILE   = libmidiio.a
-
-COMPILER = g++
-# MAC OSX 10.2 needs this compiler:
-# COMPILER = g++2
-
-DEFINES   = $(addprefix -D,$(OSTYPE)) $(addprefix -D,$(OSSUBTYPE))
-FLAGS     = -Wall -c -O3 $(DEFINES) -I$(INCDIR)
-
-#                                                                         #
-# End of user-modifiable variables.                                       #
-#                                                                         #
-###########################################################################
-
-
-# setting up the directory paths to search for dependency files
-vpath %.h   $(INCDIR):$(SRCDIR)
-vpath %.cpp $(SRCDIR):$(INCDIR)
-vpath %.o   $(OBJDIR)
-
-# generating a list of the object files
-OBJS = $(notdir $(patsubst %.cpp,%.o,$(wildcard $(SRCDIR)/*.cpp)))
-
-# targets which don't actually refer to files
-.PHONY : all linux makeobjdir
-
-
-###########################################################################
-#                                                                         #
-# Hardware Configurations:                                                #
-#                                                                         #
-
-all: makeobjdir $(OBJS)
-
-   ifeq ($(OSTYPE),LINUX)
-	@echo Making midiio library file for linux ...
-	-mkdir -p $(LIBDIR)
-	-rm -f $(LIBDIR)/$(LIBFILE)
-	ar r $(LIBDIR)/$(LIBFILE) $(OBJDIR)/*.o 
-	ranlib $(LIBDIR)/$(LIBFILE)
-   endif
-
-   ifeq ($(OSTYPE),VISUAL)
-	echo "this makefile doesn't work with Visual C++."
-   endif
-
-clean:
-	@echo Erasing object files:
-	-rm -f $(OBJDIR)/*.o
-	@echo Erasing obj directory:
-	-rmdir $(OBJDIR)
-
-makeobjdir: 
-	-mkdir -p $(OBJDIR)
-
-# defining an explicit rule for object file dependencies
-%.o : %.cpp 
-	$(COMPILER) $(FLAGS) -o $(OBJDIR)/$(notdir $@) $<
-
-
-#                                                                         #
-###########################################################################
-
-
-
-###########################################################################
-#                                                                         #
-# Dependencies -- generated with the following command in                 #
-#      the src directory (in csh shell):                                  #
-#                                                                         #
-#   foreach i (*.cpp)                                                     #
-#      cc -I../include -MM $i | sed 's/\.\.\/include\///g'                #
-#      echo ""                                                            #
-#   end                                                                   #
-#                                                                         #
-
-FileIO.o: FileIO.cpp FileIO.h sigConfiguration.h
-
-MidiFile.o: MidiFile.cpp MidiFile.h FileIO.h Array.h Collection.h \
-  Collection.cpp Array.cpp
-
-MidiFileWrite.o: MidiFileWrite.cpp MidiFileWrite.h FileIO.h SigTimer.h
-
-MidiIO.o: MidiIO.cpp MidiIO.h MidiInput.h MidiInPort.h MidiMessage.h \
-  MidiInPort_unsupported.h CircularBuffer.h CircularBuffer.cpp \
-  Array.h Collection.h Collection.cpp Array.cpp MidiOutput.h MidiOutPort.h \
-  MidiOutPort_unsupported.h FileIO.h SigTimer.h
-
-MidiInPort_alsa.o: MidiInPort_alsa.cpp
-
-MidiInPort_alsa05.o: MidiInPort_alsa05.cpp
-
-MidiInPort_linux.o: MidiInPort_linux.cpp
-
-MidiInPort_oss.o: MidiInPort_oss.cpp
-
-MidiInPort_unsupported.o: MidiInPort_unsupported.cpp \
-  MidiInPort_unsupported.h MidiMessage.h CircularBuffer.h \
-  CircularBuffer.cpp Array.h Collection.h Collection.cpp \
-  Array.cpp
-
-MidiInPort_visual.o: MidiInPort_visual.cpp
-
-MidiInput.o: MidiInput.cpp MidiInput.h MidiInPort.h MidiMessage.h \
-  MidiInPort_unsupported.h CircularBuffer.h CircularBuffer.cpp \
-  Array.h Collection.h Collection.cpp Array.cpp
-
-MidiMessage.o: MidiMessage.cpp MidiMessage.h
-
-MidiOutPort_alsa.o: MidiOutPort_alsa.cpp
-
-MidiOutPort_linux.o: MidiOutPort_linux.cpp
-
-MidiOutPort_oss.o: MidiOutPort_oss.cpp
-
-MidiOutPort_unsupported.o: MidiOutPort_unsupported.cpp \
-  MidiOutPort_unsupported.h
-
-MidiOutPort_visual.o: MidiOutPort_visual.cpp
-
-MidiOutput.o: MidiOutput.cpp MidiOutput.h MidiOutPort.h \
-  MidiOutPort_unsupported.h FileIO.h SigTimer.h Array.h Collection.h  \
-  Collection.cpp Array.cpp
-
-MidiPerform.o: MidiPerform.cpp MidiPerform.h MidiFile.h FileIO.h Array.h \
-  Collection.h Collection.cpp Array.cpp CircularBuffer.h \
-  CircularBuffer.cpp SigTimer.h MidiOutput.h MidiOutPort.h \
-  MidiOutPort_unsupported.h
-
-MidiPort.o: MidiPort.cpp MidiPort.h MidiInPort.h MidiMessage.h \
-  MidiInPort_unsupported.h CircularBuffer.h CircularBuffer.cpp \
-  Array.h Collection.h Collection.cpp Array.cpp MidiOutPort.h \
-  MidiOutPort_unsupported.h
-
-MultiStageEvent.o: MultiStageEvent.cpp MultiStageEvent.h Event.h \
-  OneStageEvent.h MidiEvent.h TwoStageEvent.h NoteEvent.h \
-  EventBuffer.h CircularBuffer.h CircularBuffer.cpp MidiOutput.h \
-  MidiOutPort.h MidiOutPort_unsupported.h FileIO.h SigTimer.h Array.h \
-  Collection.h Collection.cpp Array.cpp FunctionEvent.h
-
-Options.o: Options.cpp Options.h Array.h Collection.h Collection.cpp \
-  Array.cpp Options_private.h
-
-Options_private.o: Options_private.cpp Options_private.h
-
-Sequencer_alsa.o: Sequencer_alsa.cpp
-
-Sequencer_alsa05.o: Sequencer_alsa05.cpp
-
-Sequencer_oss.o: Sequencer_oss.cpp
-
-SigTimer.o: SigTimer.cpp SigTimer.h
-
-Voice.o: Voice.cpp Voice.h MidiOutput.h MidiOutPort.h \
-  MidiOutPort_unsupported.h FileIO.h SigTimer.h Array.h Collection.h \
-  Collection.cpp Array.cpp
-
-
-
-
-
diff --git a/extensions/gripd/src/Makefile.midiioLibrary.NT b/extensions/gripd/src/Makefile.midiioLibrary.NT
deleted file mode 100644
index a0900b093..000000000
--- a/extensions/gripd/src/Makefile.midiioLibrary.NT
+++ /dev/null
@@ -1,462 +0,0 @@
-# Microsoft Developer Studio Generated NMAKE File, Based on midiio.dsp
-!IF "$(CFG)" == ""
-CFG = midiio - Win32 Release
-!ENDIF 
-
-!IF "$(CFG)" != "midiio - Win32 Release" && "$(CFG)" != "midiio - Win32 Debug"
-!MESSAGE Invalid configuration "$(CFG)" specified.
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "midiio.mak" CFG="midiio - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "midiio - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "midiio - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE 
-!ERROR An invalid configuration is specified.
-!ENDIF 
-
-!IF "$(OS)" == "Windows_NT"
-NULL=
-!ELSE 
-NULL=nul
-!ENDIF 
-
-!IF  "$(CFG)" == "midiio - Win32 Release"
-
-OUTDIR=.\midiio\lib
-INTDIR=.\midiio\obj
-# Begin Custom Macros
-OutDir=.\midiio\lib
-# End Custom Macros
-
-ALL : "$(OUTDIR)\midiio.lib"
-
-
-CLEAN :
-	-@erase "$(INTDIR)\Array.obj"
-	-@erase "$(INTDIR)\CircularBuffer.obj"
-	-@erase "$(INTDIR)\Collection.obj"
-	-@erase "$(INTDIR)\FileIO.obj"
-	-@erase "$(INTDIR)\MidiFile.obj"
-	-@erase "$(INTDIR)\MidiFileWrite.obj"
-	-@erase "$(INTDIR)\MidiInPort_alsa.obj"
-	-@erase "$(INTDIR)\MidiInPort_alsa05.obj"
-	-@erase "$(INTDIR)\MidiInPort_linux.obj"
-	-@erase "$(INTDIR)\MidiInPort_oss.obj"
-	-@erase "$(INTDIR)\MidiInPort_unsupported.obj"
-	-@erase "$(INTDIR)\MidiInPort_visual.obj"
-	-@erase "$(INTDIR)\MidiInput.obj"
-	-@erase "$(INTDIR)\MidiIO.obj"
-	-@erase "$(INTDIR)\MidiMessage.obj"
-	-@erase "$(INTDIR)\MidiOutPort_alsa.obj"
-	-@erase "$(INTDIR)\MidiOutPort_linux.obj"
-	-@erase "$(INTDIR)\MidiOutPort_oss.obj"
-	-@erase "$(INTDIR)\MidiOutPort_unsupported.obj"
-	-@erase "$(INTDIR)\MidiOutPort_visual.obj"
-	-@erase "$(INTDIR)\MidiOutput.obj"
-	-@erase "$(INTDIR)\MidiPort.obj"
-	-@erase "$(INTDIR)\Options.obj"
-	-@erase "$(INTDIR)\Options_private.obj"
-	-@erase "$(INTDIR)\Sequencer_alsa.obj"
-	-@erase "$(INTDIR)\Sequencer_alsa05.obj"
-	-@erase "$(INTDIR)\Sequencer_oss.obj"
-	-@erase "$(INTDIR)\SigTimer.obj"
-	-@erase "$(INTDIR)\vc60.idb"
-	-@erase "$(INTDIR)\Voice.obj"
-	-@erase "$(INTDIR)\midiio.pch"
-	-@erase "$(OUTDIR)\midiio.lib"
-
-"$(OUTDIR)" :
-    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
-
-CPP=cl.exe
-CPP_PROJ=/nologo /ML /W3 /GX /O2 /I ".\midiio\include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "VISUAL" /Fp"$(INTDIR)\midiio.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
-
-.c{$(INTDIR)}.obj::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-.cpp{$(INTDIR)}.obj::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-.cxx{$(INTDIR)}.obj::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-.c{$(INTDIR)}.sbr::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-.cpp{$(INTDIR)}.sbr::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-.cxx{$(INTDIR)}.sbr::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-RSC=rc.exe
-BSC32=bscmake.exe
-BSC32_FLAGS=/nologo /o"$(OUTDIR)\midiio.bsc" 
-BSC32_SBRS= \
-	
-LIB32=link.exe -lib
-LIB32_FLAGS=/nologo /out:"$(OUTDIR)\midiio.lib" 
-LIB32_OBJS= \
-	"$(INTDIR)\Array.obj" \
-	"$(INTDIR)\CircularBuffer.obj" \
-	"$(INTDIR)\Collection.obj" \
-	"$(INTDIR)\FileIO.obj" \
-	"$(INTDIR)\MidiFile.obj" \
-	"$(INTDIR)\MidiFileWrite.obj" \
-	"$(INTDIR)\MidiInPort_alsa.obj" \
-	"$(INTDIR)\MidiInPort_alsa05.obj" \
-	"$(INTDIR)\MidiInPort_linux.obj" \
-	"$(INTDIR)\MidiInPort_oss.obj" \
-	"$(INTDIR)\MidiInPort_unsupported.obj" \
-	"$(INTDIR)\MidiInPort_visual.obj" \
-	"$(INTDIR)\MidiInput.obj" \
-	"$(INTDIR)\MidiIO.obj" \
-	"$(INTDIR)\MidiMessage.obj" \
-	"$(INTDIR)\MidiOutPort_alsa.obj" \
-	"$(INTDIR)\MidiOutPort_linux.obj" \
-	"$(INTDIR)\MidiOutPort_oss.obj" \
-	"$(INTDIR)\MidiOutPort_unsupported.obj" \
-	"$(INTDIR)\MidiOutPort_visual.obj" \
-	"$(INTDIR)\MidiOutput.obj" \
-	"$(INTDIR)\MidiPort.obj" \
-	"$(INTDIR)\Options.obj" \
-	"$(INTDIR)\Options_private.obj" \
-	"$(INTDIR)\Sequencer_alsa.obj" \
-	"$(INTDIR)\Sequencer_alsa05.obj" \
-	"$(INTDIR)\Sequencer_oss.obj" \
-	"$(INTDIR)\SigTimer.obj" \
-	"$(INTDIR)\Voice.obj"
-
-"$(OUTDIR)\midiio.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS)
-    $(LIB32) @<<
-  $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS)
-<<
-
-!ELSEIF  "$(CFG)" == "midiio - Win32 Debug"
-
-OUTDIR=.\Debug
-INTDIR=.\Debug
-# Begin Custom Macros
-OutDir=.\Debug
-# End Custom Macros
-
-ALL : "$(OUTDIR)\midiio.lib"
-
-
-CLEAN :
-	-@erase "$(INTDIR)\Array.obj"
-	-@erase "$(INTDIR)\CircularBuffer.obj"
-	-@erase "$(INTDIR)\Collection.obj"
-	-@erase "$(INTDIR)\FileIO.obj"
-	-@erase "$(INTDIR)\MidiFile.obj"
-	-@erase "$(INTDIR)\MidiFileWrite.obj"
-	-@erase "$(INTDIR)\MidiInPort_alsa.obj"
-	-@erase "$(INTDIR)\MidiInPort_alsa05.obj"
-	-@erase "$(INTDIR)\MidiInPort_linux.obj"
-	-@erase "$(INTDIR)\MidiInPort_oss.obj"
-	-@erase "$(INTDIR)\MidiInPort_unsupported.obj"
-	-@erase "$(INTDIR)\MidiInPort_visual.obj"
-	-@erase "$(INTDIR)\MidiInput.obj"
-	-@erase "$(INTDIR)\MidiIO.obj"
-	-@erase "$(INTDIR)\MidiMessage.obj"
-	-@erase "$(INTDIR)\MidiOutPort_alsa.obj"
-	-@erase "$(INTDIR)\MidiOutPort_linux.obj"
-	-@erase "$(INTDIR)\MidiOutPort_oss.obj"
-	-@erase "$(INTDIR)\MidiOutPort_unsupported.obj"
-	-@erase "$(INTDIR)\MidiOutPort_visual.obj"
-	-@erase "$(INTDIR)\MidiOutput.obj"
-	-@erase "$(INTDIR)\MidiPort.obj"
-	-@erase "$(INTDIR)\Options.obj"
-	-@erase "$(INTDIR)\Options_private.obj"
-	-@erase "$(INTDIR)\Sequencer_alsa.obj"
-	-@erase "$(INTDIR)\Sequencer_alsa05.obj"
-	-@erase "$(INTDIR)\Sequencer_oss.obj"
-	-@erase "$(INTDIR)\SigTimer.obj"
-	-@erase "$(INTDIR)\vc60.idb"
-	-@erase "$(INTDIR)\vc60.pdb"
-	-@erase "$(INTDIR)\Voice.obj"
-	-@erase "$(OUTDIR)\midiio.lib"
-
-"$(OUTDIR)" :
-    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
-
-CPP=cl.exe
-CPP_PROJ=/nologo /MLd /W3 /Gm /GX /ZI /Od /I ".\midiio\include" /D "VISUAL" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /Fp"$(INTDIR)\midiio.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
-
-.c{$(INTDIR)}.obj::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-.cpp{$(INTDIR)}.obj::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-.cxx{$(INTDIR)}.obj::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-.c{$(INTDIR)}.sbr::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-.cpp{$(INTDIR)}.sbr::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-.cxx{$(INTDIR)}.sbr::
-   $(CPP) @<<
-   $(CPP_PROJ) $< 
-<<
-
-RSC=rc.exe
-BSC32=bscmake.exe
-BSC32_FLAGS=/nologo /o"$(OUTDIR)\midiio.bsc" 
-BSC32_SBRS= \
-	
-LIB32=link.exe -lib
-LIB32_FLAGS=/nologo /out:"$(OUTDIR)\midiio.lib" 
-LIB32_OBJS= \
-	"$(INTDIR)\Array.obj" \
-	"$(INTDIR)\CircularBuffer.obj" \
-	"$(INTDIR)\Collection.obj" \
-	"$(INTDIR)\FileIO.obj" \
-	"$(INTDIR)\MidiFile.obj" \
-	"$(INTDIR)\MidiFileWrite.obj" \
-	"$(INTDIR)\MidiInPort_alsa.obj" \
-	"$(INTDIR)\MidiInPort_alsa05.obj" \
-	"$(INTDIR)\MidiInPort_linux.obj" \
-	"$(INTDIR)\MidiInPort_oss.obj" \
-	"$(INTDIR)\MidiInPort_unsupported.obj" \
-	"$(INTDIR)\MidiInPort_visual.obj" \
-	"$(INTDIR)\MidiInput.obj" \
-	"$(INTDIR)\MidiIO.obj" \
-	"$(INTDIR)\MidiMessage.obj" \
-	"$(INTDIR)\MidiOutPort_alsa.obj" \
-	"$(INTDIR)\MidiOutPort_linux.obj" \
-	"$(INTDIR)\MidiOutPort_oss.obj" \
-	"$(INTDIR)\MidiOutPort_unsupported.obj" \
-	"$(INTDIR)\MidiOutPort_visual.obj" \
-	"$(INTDIR)\MidiOutput.obj" \
-	"$(INTDIR)\MidiPort.obj" \
-	"$(INTDIR)\Options.obj" \
-	"$(INTDIR)\Options_private.obj" \
-	"$(INTDIR)\Sequencer_alsa.obj" \
-	"$(INTDIR)\Sequencer_alsa05.obj" \
-	"$(INTDIR)\Sequencer_oss.obj" \
-	"$(INTDIR)\SigTimer.obj" \
-	"$(INTDIR)\Voice.obj"
-
-"$(OUTDIR)\midiio.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS)
-    $(LIB32) @<<
-  $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS)
-<<
-
-!ENDIF 
-
-
-!IF "$(NO_EXTERNAL_DEPS)" != "1"
-!IF EXISTS("midiiolib.dep")
-!INCLUDE "midiiolib.dep"
-!ENDIF 
-!ENDIF 
-
-
-!IF "$(CFG)" == "midiio - Win32 Release" || "$(CFG)" == "midiio - Win32 Debug"
-SOURCE=".\midiio\include\Array.cpp"
-
-"$(INTDIR)\Array.obj" : $(SOURCE) "$(INTDIR)" ".\midiio\include\Collection.cpp"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-SOURCE=".\midiio\include\CircularBuffer.cpp"
-
-"$(INTDIR)\CircularBuffer.obj" : $(SOURCE) "$(INTDIR)"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-SOURCE=".\midiio\include\Collection.cpp"
-
-"$(INTDIR)\Collection.obj" : $(SOURCE) "$(INTDIR)"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-SOURCE=".\midiio\src\FileIO.cpp"
-
-"$(INTDIR)\FileIO.obj" : $(SOURCE) "$(INTDIR)"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-SOURCE=".\midiio\src\MidiFile.cpp"
-
-"$(INTDIR)\MidiFile.obj" : $(SOURCE) "$(INTDIR)" ".\midiio\include\Array.cpp" ".\midiio\include\Collection.cpp"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-SOURCE=".\midiio\src\MidiFileWrite.cpp"
-
-"$(INTDIR)\MidiFileWrite.obj" : $(SOURCE) "$(INTDIR)"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-SOURCE=".\midiio\src\MidiInPort_alsa.cpp"
-
-"$(INTDIR)\MidiInPort_alsa.obj" : $(SOURCE) "$(INTDIR)"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-SOURCE=".\midiio\src\MidiInPort_alsa05.cpp"
-
-"$(INTDIR)\MidiInPort_alsa05.obj" : $(SOURCE) "$(INTDIR)"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-SOURCE=".\midiio\src\MidiInPort_linux.cpp"
-
-"$(INTDIR)\MidiInPort_linux.obj" : $(SOURCE) "$(INTDIR)"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-SOURCE=".\midiio\src\MidiInPort_oss.cpp"
-
-"$(INTDIR)\MidiInPort_oss.obj" : $(SOURCE) "$(INTDIR)"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-SOURCE=".\midiio\src\MidiInPort_unsupported.cpp"
-
-"$(INTDIR)\MidiInPort_unsupported.obj" : $(SOURCE) "$(INTDIR)" ".\midiio\include\CircularBuffer.cpp"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-SOURCE=".\midiio\src\MidiInPort_visual.cpp"
-
-"$(INTDIR)\MidiInPort_visual.obj" : $(SOURCE) "$(INTDIR)" ".\midiio\include\Array.cpp" ".\midiio\include\Collection.cpp"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-SOURCE=".\midiio\src\MidiInput.cpp"
-
-"$(INTDIR)\MidiInput.obj" : $(SOURCE) "$(INTDIR)" ".\midiio\include\Array.cpp" ".\midiio\include\Collection.cpp"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-SOURCE=".\midiio\src\MidiIO.cpp"
-
-"$(INTDIR)\MidiIO.obj" : $(SOURCE) "$(INTDIR)" ".\midiio\include\Array.cpp" ".\midiio\include\Collection.cpp"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-SOURCE=".\midiio\src\MidiMessage.cpp"
-
-"$(INTDIR)\MidiMessage.obj" : $(SOURCE) "$(INTDIR)"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-SOURCE=".\midiio\src\MidiOutPort_alsa.cpp"
-
-"$(INTDIR)\MidiOutPort_alsa.obj" : $(SOURCE) "$(INTDIR)"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-SOURCE=".\midiio\src\MidiOutPort_linux.cpp"
-
-"$(INTDIR)\MidiOutPort_linux.obj" : $(SOURCE) "$(INTDIR)"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-SOURCE=".\midiio\src\MidiOutPort_oss.cpp"
-
-"$(INTDIR)\MidiOutPort_oss.obj" : $(SOURCE) "$(INTDIR)"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-SOURCE=".\midiio\src\MidiOutPort_unsupported.cpp"
-
-"$(INTDIR)\MidiOutPort_unsupported.obj" : $(SOURCE) "$(INTDIR)"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-SOURCE=".\midiio\src\MidiOutPort_visual.cpp"
-
-"$(INTDIR)\MidiOutPort_visual.obj" : $(SOURCE) "$(INTDIR)"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-SOURCE=".\midiio\src\MidiOutput.cpp"
-
-"$(INTDIR)\MidiOutput.obj" : $(SOURCE) "$(INTDIR)" ".\midiio\include\Array.cpp" ".\midiio\include\Collection.cpp"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-SOURCE=".\midiio\src\MidiPort.cpp"
-
-"$(INTDIR)\MidiPort.obj" : $(SOURCE) "$(INTDIR)" ".\midiio\include\Array.cpp" ".\midiio\include\Collection.cpp"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-SOURCE=".\midiio\src\Options.cpp"
-
-"$(INTDIR)\Options.obj" : $(SOURCE) "$(INTDIR)" ".\midiio\include\Array.cpp" ".\midiio\include\Collection.cpp"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-SOURCE=".\midiio\src\Options_private.cpp"
-
-"$(INTDIR)\Options_private.obj" : $(SOURCE) "$(INTDIR)"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-SOURCE=".\midiio\src\Sequencer_alsa.cpp"
-
-"$(INTDIR)\Sequencer_alsa.obj" : $(SOURCE) "$(INTDIR)"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-SOURCE=".\midiio\src\Sequencer_alsa05.cpp"
-
-"$(INTDIR)\Sequencer_alsa05.obj" : $(SOURCE) "$(INTDIR)"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-SOURCE=".\midiio\src\Sequencer_oss.cpp"
-
-"$(INTDIR)\Sequencer_oss.obj" : $(SOURCE) "$(INTDIR)"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-SOURCE=".\midiio\src\SigTimer.cpp"
-
-"$(INTDIR)\SigTimer.obj" : $(SOURCE) "$(INTDIR)"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-SOURCE=".\midiio\src\Voice.cpp"
-
-"$(INTDIR)\Voice.obj" : $(SOURCE) "$(INTDIR)" ".\midiio\include\Array.cpp" ".\midiio\include\Collection.cpp"
-	$(CPP) $(CPP_PROJ) $(SOURCE)
-
-
-
-!ENDIF 
-
diff --git a/extensions/gripd/src/Makefile.midiioLibrary.OSS b/extensions/gripd/src/Makefile.midiioLibrary.OSS
deleted file mode 100644
index 2f1e6e244..000000000
--- a/extensions/gripd/src/Makefile.midiioLibrary.OSS
+++ /dev/null
@@ -1,205 +0,0 @@
-## midiio library GNU makefile for linux.
-##
-## Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-## Creation Date: Sat Nov  2 19:49:57 PST 2002
-## Last Modified: Sat Nov  2 19:50:00 PST 2002
-## Filename:      ...midiio/Makefile.library
-##
-## Description: This Makefile creates the midiio library lib/libmidiio.a
-##              for linux, using gcc 2.7.2.1 or higher
-##
-## To run this makefile, type (without quotes) "make -f Makefile.library"
-##
-
-###########################################################################
-#                                                                         #
-#                                                                         #
-#  Operating System OSTYPEs available in the midiio library compilation:  #
-#
-#      LINUX  = Linux running on intel computers
-#      VISUAL = Windows 95/NT using Microsoft Visual C++ 5/6
-#      OSX    = Apple Mac OS X (10.2 or higher when it is ready)
-#
-# The file "sigConfiguration.h" in the include directory contains additional
-# defines which will be activated by the OS given by the OSTYPE variable 
-# below.  Look at the sigConfiguration.h file for various things which need 
-# to be defined specifically for each OS.
-#
-OSTYPE = LINUX
-
-# The OSSUBTYPE is for determining which type of sound drivers
-# are being used in linux.  There are three possibilities:
-# OSSUBTYPE = ALSA    # ALSA 0.9 interface (http://www.alsa-project.org)
-# OSSUBTYPE = ALSA05  # ALSA 0.5 interface (http://www.alsa-project.org)
-# OSSUBTYPE = OSS     # OSS interface      (http://www.4front-tech.com)
-# Note: The Improv library accesses the internal/external MIDI devices
-# in OSS, but only the external MIDI devices in ALSA.  OSS can be
-# emulated in ALSA 0.9.
-#
-OSSUBTYPE = OSS
-
-OBJDIR    = ./midiio/obj
-SRCDIR    = ./midiio/src
-INCDIR    = ./midiio/include
-LIBDIR    = ./midiio/lib
-LIBFILE   = libmidiio.a
-
-COMPILER = g++
-# MAC OSX 10.2 needs this compiler:
-# COMPILER = g++2
-
-DEFINES   = $(addprefix -D,$(OSTYPE)) $(addprefix -D,$(OSSUBTYPE))
-FLAGS     = -Wall -c -O3 $(DEFINES) -I$(INCDIR)
-
-#                                                                         #
-# End of user-modifiable variables.                                       #
-#                                                                         #
-###########################################################################
-
-
-# setting up the directory paths to search for dependency files
-vpath %.h   $(INCDIR):$(SRCDIR)
-vpath %.cpp $(SRCDIR):$(INCDIR)
-vpath %.o   $(OBJDIR)
-
-# generating a list of the object files
-OBJS = $(notdir $(patsubst %.cpp,%.o,$(wildcard $(SRCDIR)/*.cpp)))
-
-# targets which don't actually refer to files
-.PHONY : all linux makeobjdir
-
-
-###########################################################################
-#                                                                         #
-# Hardware Configurations:                                                #
-#                                                                         #
-
-all: makeobjdir $(OBJS)
-
-   ifeq ($(OSTYPE),LINUX)
-	@echo Making midiio library file for linux ...
-	-mkdir -p $(LIBDIR)
-	-rm -f $(LIBDIR)/$(LIBFILE)
-	ar r $(LIBDIR)/$(LIBFILE) $(OBJDIR)/*.o 
-	ranlib $(LIBDIR)/$(LIBFILE)
-   endif
-
-   ifeq ($(OSTYPE),VISUAL)
-	echo "this makefile doesn't work with Visual C++."
-   endif
-
-clean:
-	@echo Erasing object files:
-	-rm -f $(OBJDIR)/*.o
-	@echo Erasing obj directory:
-	-rmdir $(OBJDIR)
-
-makeobjdir: 
-	-mkdir -p $(OBJDIR)
-
-# defining an explicit rule for object file dependencies
-%.o : %.cpp 
-	$(COMPILER) $(FLAGS) -o $(OBJDIR)/$(notdir $@) $<
-
-
-#                                                                         #
-###########################################################################
-
-
-
-###########################################################################
-#                                                                         #
-# Dependencies -- generated with the following command in                 #
-#      the src directory (in csh shell):                                  #
-#                                                                         #
-#   foreach i (*.cpp)                                                     #
-#      cc -I../include -MM $i | sed 's/\.\.\/include\///g'                #
-#      echo ""                                                            #
-#   end                                                                   #
-#                                                                         #
-
-FileIO.o: FileIO.cpp FileIO.h sigConfiguration.h
-
-MidiFile.o: MidiFile.cpp MidiFile.h FileIO.h Array.h Collection.h \
-  Collection.cpp Array.cpp
-
-MidiFileWrite.o: MidiFileWrite.cpp MidiFileWrite.h FileIO.h SigTimer.h
-
-MidiIO.o: MidiIO.cpp MidiIO.h MidiInput.h MidiInPort.h MidiMessage.h \
-  MidiInPort_unsupported.h CircularBuffer.h CircularBuffer.cpp \
-  Array.h Collection.h Collection.cpp Array.cpp MidiOutput.h MidiOutPort.h \
-  MidiOutPort_unsupported.h FileIO.h SigTimer.h
-
-MidiInPort_alsa.o: MidiInPort_alsa.cpp
-
-MidiInPort_alsa05.o: MidiInPort_alsa05.cpp
-
-MidiInPort_linux.o: MidiInPort_linux.cpp
-
-MidiInPort_oss.o: MidiInPort_oss.cpp
-
-MidiInPort_unsupported.o: MidiInPort_unsupported.cpp \
-  MidiInPort_unsupported.h MidiMessage.h CircularBuffer.h \
-  CircularBuffer.cpp Array.h Collection.h Collection.cpp \
-  Array.cpp
-
-MidiInPort_visual.o: MidiInPort_visual.cpp
-
-MidiInput.o: MidiInput.cpp MidiInput.h MidiInPort.h MidiMessage.h \
-  MidiInPort_unsupported.h CircularBuffer.h CircularBuffer.cpp \
-  Array.h Collection.h Collection.cpp Array.cpp
-
-MidiMessage.o: MidiMessage.cpp MidiMessage.h
-
-MidiOutPort_alsa.o: MidiOutPort_alsa.cpp
-
-MidiOutPort_linux.o: MidiOutPort_linux.cpp
-
-MidiOutPort_oss.o: MidiOutPort_oss.cpp
-
-MidiOutPort_unsupported.o: MidiOutPort_unsupported.cpp \
-  MidiOutPort_unsupported.h
-
-MidiOutPort_visual.o: MidiOutPort_visual.cpp
-
-MidiOutput.o: MidiOutput.cpp MidiOutput.h MidiOutPort.h \
-  MidiOutPort_unsupported.h FileIO.h SigTimer.h Array.h Collection.h  \
-  Collection.cpp Array.cpp
-
-MidiPerform.o: MidiPerform.cpp MidiPerform.h MidiFile.h FileIO.h Array.h \
-  Collection.h Collection.cpp Array.cpp CircularBuffer.h \
-  CircularBuffer.cpp SigTimer.h MidiOutput.h MidiOutPort.h \
-  MidiOutPort_unsupported.h
-
-MidiPort.o: MidiPort.cpp MidiPort.h MidiInPort.h MidiMessage.h \
-  MidiInPort_unsupported.h CircularBuffer.h CircularBuffer.cpp \
-  Array.h Collection.h Collection.cpp Array.cpp MidiOutPort.h \
-  MidiOutPort_unsupported.h
-
-MultiStageEvent.o: MultiStageEvent.cpp MultiStageEvent.h Event.h \
-  OneStageEvent.h MidiEvent.h TwoStageEvent.h NoteEvent.h \
-  EventBuffer.h CircularBuffer.h CircularBuffer.cpp MidiOutput.h \
-  MidiOutPort.h MidiOutPort_unsupported.h FileIO.h SigTimer.h Array.h \
-  Collection.h Collection.cpp Array.cpp FunctionEvent.h
-
-Options.o: Options.cpp Options.h Array.h Collection.h Collection.cpp \
-  Array.cpp Options_private.h
-
-Options_private.o: Options_private.cpp Options_private.h
-
-Sequencer_alsa.o: Sequencer_alsa.cpp
-
-Sequencer_alsa05.o: Sequencer_alsa05.cpp
-
-Sequencer_oss.o: Sequencer_oss.cpp
-
-SigTimer.o: SigTimer.cpp SigTimer.h
-
-Voice.o: Voice.cpp Voice.h MidiOutput.h MidiOutPort.h \
-  MidiOutPort_unsupported.h FileIO.h SigTimer.h Array.h Collection.h \
-  Collection.cpp Array.cpp
-
-
-
-
-
diff --git a/extensions/gripd/src/gripd.c b/extensions/gripd/src/gripd.c
deleted file mode 100644
index fce1aa5a9..000000000
--- a/extensions/gripd/src/gripd.c
+++ /dev/null
@@ -1,1031 +0,0 @@
-/* GrIPD v0.1. - Graphical Interface for Pure Data
-** Copyright (C) 2003 Joseph A. Sarlo
-**
-** This program is free software; you can redistribute it and/orsig
-** modify it under the terms of the GNU General Public License
-** as published by the Free Software Foundation; either version 2
-** of the License, or (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-**
-** jsarlo@ucsd.edu
-*/
-
-#include "gripd.h"
-
-void gripd_setup(void)
-{
-    post (" \n");
-    post ("   .______________________________________.");
-    post ("   |                                      |");
-    post ("   |             GrIPD: v%s            |", VERSION);
-    post ("   |  Graphical Interface for Pure Data   |");
-    post ("   |  (C) Copyright 2003 Joseph A. Sarlo  |");
-    post ("   |      GNU General Public License      |");
-    post ("   |______________________________________|");
-    post (" \n");
-#ifndef NT
-    signal(SIGCHLD, gripd_sigChild);
-#endif
-    gripd_class = class_new(gensym("gripd"), (t_newmethod)gripd_new,
-                            (t_method)gripd_free, sizeof(t_gripd), 0,
-                            A_DEFFLOAT, 0);
-    gripdRcvr_class = class_new(gensym("gripdRcvr"),0,0,sizeof(t_gripd),
-                                0, 0);
-    class_addmethod(gripd_class, (t_method)gripd_connect,
-                    gensym("connect"), 0);
-    class_addmethod(gripd_class, (t_method)gripd_disconnect,
-                    gensym("disconnect"), 0);
-    class_addmethod(gripd_class, (t_method)gripd_open, 
-                    gensym("open"), A_GIMME, 0);
-    class_addmethod(gripd_class, (t_method)gripd_openLocked,
-                    gensym("open_locked"), A_GIMME, 0);
-    class_addmethod(gripd_class, (t_method)gripd_setPythonPath,
-                    gensym("set_python_path"), A_GIMME, 0);
-    class_addmethod(gripd_class, (t_method)gripd_setPath,
-                    gensym("set_path"), A_GIMME, 0);
-    class_addmethod(gripd_class, (t_method)gripd_setSTime,
-                    gensym("poll_send"), A_DEFFLOAT, 0);
-    class_addmethod(gripd_class, (t_method)gripd_setRTime,
-                    gensym("poll_receive"), A_DEFFLOAT, 0);
-    class_addmethod(gripd_class, (t_method)gripd_lock,
-                    gensym("lock"), 0);
-    class_addmethod(gripd_class, (t_method)gripd_unlock,
-                    gensym("unlock"), 0);
-    class_addmethod(gripd_class, (t_method)gripd_setTitle,
-                    gensym("set_title"), A_GIMME, 0);
-    class_addmethod(gripd_class, (t_method)gripd_hide,
-                    gensym("hide"), A_GIMME, 0);
-    class_addmethod(gripd_class, (t_method)gripd_show,
-                    gensym("show"), A_GIMME, 0);
-    class_addmethod(gripd_class, (t_method)gripd_openpanel,
-                    gensym("openpanel"), A_GIMME, 0);
-    class_addmethod(gripd_class, (t_method)gripd_savepanel,
-                    gensym("savepanel"), A_GIMME, 0);
-    class_addbang(gripdRcvr_class, (t_method)gripdR_bang);
-    class_addfloat(gripdRcvr_class, (t_method)gripdR_float);
-    class_addsymbol(gripdRcvr_class, (t_method)gripdR_symbol);
-    class_addanything(gripdRcvr_class, (t_method)gripdR_anything);
-    class_addlist(gripdRcvr_class, (t_method)gripdR_list);
-}
-
-void *gripd_new(t_floatarg port)
-{
-    t_gripd *x = (t_gripd *)pd_new(gripd_class);
-
-    if (port == 0)
-        x->x_port = DEFPORT;
-    else
-        x->x_port = (int)port;
-    x->x_bound = 0;
-    x->x_connected = 0;
-#ifdef NT
-    x->x_localOpened = (int *)malloc(sizeof(int));
-#else
-    x->x_childPID = 0;
-    x->x_localOpened = (int *)shmat(shmget(IPC_PRIVATE,sizeof(int),
-                                           IPC_CREAT | SHM_R | SHM_W), 0,
-                                    0);
-#endif
-    *(x->x_localOpened) = 0;
-    x->x_rdeltime = DEFRDELTIME;
-    x->x_sdeltime = DEFSDELTIME;
-    x->x_rclock = clock_new(x, (t_method)gripd_recv);
-    x->x_sclock = clock_new(x, (t_method)gripd_send);
-    x->x_connectionClock = clock_new(x, (t_method)gripd_trySocket);
-    x->x_bindClock = clock_new(x, (t_method)gripd_connect);
-#ifdef NT
-    strcpy(x->x_pythExec, "c:\\program files\\python\\");
-    strcpy(x->x_pythFile, "..\\gripd\\");
-    x->x_wsockInitByMe = 0;
-#else
-    strcpy(x->x_pythExec, "");
-    strcpy(x->x_pythFile, "../gripd/");
-#endif
-    x->x_rcvrListMaxSize = DEFLISTSIZE;
-    x->x_rcvrs = (t_gripdRcvr **)calloc(x->x_rcvrListMaxSize,
-                                        sizeof(t_gripdRcvr *));
-    x->x_rcvrListSize = 0;
-    x->x_sendBuffer[0] = '\0';
-    outlet_new(&x->t_ob, &s_float);
-    x->x_outlet2 = outlet_new(&x->t_ob, &s_float);
-    gripd_getApplicationPath(x);
-    return (void *)x;
-}
-
-void gripd_connect(t_gripd *x)
-{
-    gripd_openSocket(x);
-    clock_delay(x->x_rclock, x->x_rdeltime);
-    clock_delay(x->x_sclock, x->x_sdeltime);
-}
-
-void gripd_openSocket(t_gripd *x)
-{
-#ifdef NT
-    char my_name[DEFSTRSIZE];
-    struct sockaddr_in my_addr;
-    struct sockaddr_in new_addr; 
-    struct hostent *hp;
-    WSADATA wsaData;
-    int nSize, temp = 1;
-    unsigned long on = 1;
-
-    if (!x->x_bound)
-    {
-        memset(&my_addr, 0, sizeof(struct sockaddr_in));
-        memset(&new_addr, 0, sizeof(struct sockaddr_in));
-        gethostname(my_name, sizeof(my_name));
-        hp = gethostbyname(my_name);
-        if (hp == NULL)
-        {
-            if (WSAGetLastError() == WSANOTINITIALISED)
-            {
-                if (WSAStartup (MAKEWORD(1,1), &wsaData) != 0)
-                    post("GrIPD: Failed to initialize winsock");
-                else
-                {
-                    x->x_wsockInitByMe = 1;
-                    gripd_openSocket(x);
-                    return;
-                }
-            }
-            else
-            {
-                post("GrIPD: Gethostname Error %d", WSAGetLastError());
-                gripd_disconnect(x);
-            }
-        }
-        my_addr.sin_family = hp->h_addrtype;
-        my_addr.sin_port = htons(x->x_port);
-        x->x_sock = socket(AF_INET, SOCK_STREAM, 0);
-        if (x->x_sock == INVALID_SOCKET)
-        {
-            post("GrIPD: Socket Error %d", WSAGetLastError());
-            gripd_disconnect(x);
-        }
-        else
-        {
-            ioctlsocket(x->x_sock, FIONBIO, &on);
-            setsockopt(x->x_sock, SOL_SOCKET, SO_REUSEADDR,
-                       (char *)&temp, sizeof(temp));
-        }
-        if (bind(x->x_sock, (struct sockaddr *)&my_addr,
-            sizeof(struct sockaddr)) == SOCKET_ERROR)
-        {
-            post("GrIPD: Bind Error %d", WSAGetLastError());
-            post("GrIPD: Attempting to re-bind");
-            clock_delay(x->x_bindClock, REBINDTIME);
-        }
-        else
-        {
-            nSize = sizeof(struct sockaddr_in);
-            getsockname(x->x_sock, (struct sockaddr *)&new_addr, &nSize);
-            x->x_port = (int)ntohs(new_addr.sin_port);
-            post("GrIPD: Using port %d", x->x_port);
-            x->x_bound = 1;
-            listen(x->x_sock, BACKLOG);
-            post("GrIPD: Waiting for a connection...");
-            clock_delay(x->x_connectionClock, CONNECTIONPOLLTIME);
-        }
-    }
-    else
-        post("GrIPD: Already waiting for a connection");
-#else
-    char portstr[MAXPORTSTRLEN];
-    struct sockaddr_in my_addr, new_addr;
-    int nSize, temp = 1;
-
-    if (!x->x_bound)
-    {
-        x->x_sock = -1;
-        if ((x->x_sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
-        {
-            perror("GrIPD: Socket Error");
-            gripd_disconnect(x);
-        }
-        setsockopt(x->x_sock, SOL_SOCKET, SO_REUSEADDR,
-                   (char *)&temp, sizeof(temp));
-        fcntl(x->x_sock, F_SETFL, O_NONBLOCK);
-        my_addr.sin_family = AF_INET;
-        my_addr.sin_port = htons(x->x_port);
-        my_addr.sin_addr.s_addr = INADDR_ANY;
-        bzero(&(my_addr.sin_zero), 8);
-        if (bind(x->x_sock, (struct sockaddr *)&my_addr,
-            sizeof(struct sockaddr)) == -1)
-        {
-            perror("GrIPD: Bind Error");
-            clock_delay(x->x_bindClock, REBINDTIME);
-        }
-        else
-        {
-            nSize = sizeof(struct sockaddr_in);
-            getsockname(x->x_sock, (struct sockaddr *)&new_addr, &nSize);
-            x->x_port = ntohs(new_addr.sin_port);
-            post("GrIPD: Using port %d", x->x_port);
-            x->x_bound = 1;
-            if (listen(x->x_sock, BACKLOG) == -1)
-            {
-                perror("GrIPD: Listen Error");
-                gripd_disconnect(x);
-            }
-            post("GrIPD: Waiting for a connection...");
-            clock_delay(x->x_connectionClock, CONNECTIONPOLLTIME);
-        }
-    }
-    else
-        post("GrIPD: Already waiting for a connection");
-#endif
-}
-
-void gripd_disconnect(t_gripd *x)
-{
-    int numbytes;
-    char buf[MAXDATASIZE];
-
-    clock_unset(x->x_sclock);
-    clock_unset(x->x_rclock);
-    clock_unset(x->x_bindClock);
-    clock_unset(x->x_connectionClock);
-    if (*(x->x_localOpened)) 
-    {
-        gripd_closePyth(x);
-    }
-    else
-    {
-        sprintf(buf, "%s%c0%c", CLOSECOMMAND, SYMMSGSEP, PAIRSEPCHAR);
-        send(x->x_newSock, buf, strlen(buf), MSG_DONTWAIT | MSG_NOSIGNAL);
-        numbytes = recv(x->x_newSock, buf, MAXDATASIZE, MSG_NOSIGNAL);
-    }
-    if (x->x_bound) 
-    {
-        gripd_closeSocket(x);
-    }
-}
- 
-void gripd_trySocket(t_gripd *x)
-{
-#ifdef NT
-    fd_set rfds;
-    struct timeval tv;
-    unsigned long on;
-
-    on = 1;
-    tv.tv_sec = 0;
-    tv.tv_usec = WAITTIME;
-    FD_ZERO(&rfds);
-    FD_SET(x->x_sock, &rfds);
-    if (select(x->x_sock + 1, &rfds, NULL, NULL, &tv) > 0)
-    {
-        x->x_newSock = accept(x->x_sock, NULL, NULL);
-        if (x->x_newSock == INVALID_SOCKET)
-        {
-            post("GrIPD: Accept Error %d", WSAGetLastError());
-            gripd_disconnect(x);
-        }
-        else
-        {
-            ioctlsocket(x->x_newSock, FIONBIO, &on);
-            x->x_connected = 1;
-	    outlet_float(x->t_ob.ob_outlet, 1);
-	    post("GrIPD: Connected");
-        }
-    }
-    else
-        clock_delay(x->x_connectionClock, CONNECTIONPOLLTIME);
-#else
-    fd_set rfds;
-    struct timeval tv;
-    struct sockaddr_in their_addr;
-    int new_fd, sin_size;
- 
-    sin_size = sizeof(struct sockaddr_in);
-    tv.tv_sec = 0;
-    tv.tv_usec = WAITTIME;
-    FD_ZERO(&rfds);
-    FD_SET(x->x_sock, &rfds);
-    if (select(x->x_sock + 1, &rfds, NULL, NULL, &tv))
-    {
-        if ((x->x_newSock = accept(x->x_sock,
-                                   (struct sockaddr *)&their_addr,
-                                    &sin_size)) == -1)
-        {
-            perror("GrIPD: Accept Error");
-            gripd_disconnect(x);
-        }
-        else
-        {
-            x->x_connected = 1;
-	    outlet_float(x->t_ob.ob_outlet, 1);
-	    post("GrIPD: Connected");
-        }
-    }
-    else
-        clock_delay(x->x_connectionClock, CONNECTIONPOLLTIME);
-#endif
-}
-
-void gripd_closeSocket(t_gripd *x)
-{
-#ifdef NT
-    closesocket(x->x_newSock);
-    closesocket(x->x_sock);
-#else
-    shutdown(x->x_newSock, 2);
-    close(x->x_newSock);
-    shutdown(x->x_sock, 2);
-    close(x->x_sock);
-#endif
-    x->x_bound = 0;
-    x->x_connected = 0;
-    *(x->x_localOpened) = 0;
-    outlet_float(x->t_ob.ob_outlet, 0);
-    outlet_float(x->x_outlet2, 0);
-}
-
-void gripd_recv(t_gripd *x)
-{
-    int numbytes, count, idx, i, j, argc;
-    char buf[MAXDATASIZE], symName[MAXSYMNAMELEN],
-         symValue[MAXSYMVALUELEN],
-         tempString[MAXDATASIZE];
-    t_symbol *tempSym;
-    t_atom atomList[MAXALISTLEN];
-    numbytes = count = idx = i = j = argc = 0;
-    tempSym = gensym("");
-
-    if (x->x_connected)
-    {
-        numbytes = recv(x->x_newSock, buf, MAXDATASIZE,
-                        MSG_DONTWAIT | MSG_NOSIGNAL);
-        if (numbytes > 0)
-        {
-            buf[numbytes] = '\0';
-            while (count <= numbytes)
-            {
-                while ((buf[count] != SYMMSGSEP) && (count <= numbytes))
-                {
-                    symName[i] = buf[count];
-                    count++;
-                    i++;
-                }
-                symName[i] = '\0';
-                i = 0;
-                count++;
-                while ((buf[count] != PAIRSEPCHAR) && (count <= numbytes))
-                {
-                    symValue[i] =  buf[count];
-                    count ++;
-                    i++;
-                }
-                symValue[i] = '\0';
-                count++;
-                i = 0;
-                if (symName[0] == COMMANDCHAR)
-                {
-                    if ((strcmp(SETRCVRSTRING, symName) == 0) \
-                    && (gripd_checkExistance(x, symValue) == 0))
-                    {
-                        if (x->x_rcvrListSize \
-                            == (x->x_rcvrListMaxSize - 1))
-                            gripd_expandRcvrList(x);
-                        gripd_makeGripdRcvr(x, gensym(symValue));
-                        x->x_rcvrListSize++;
-                    }
-                    if (strcmp(CLOSECOMMAND, symName) == 0)
-                    {
-                        post("GrIPD: Connection closed remotely");
-                        gripd_disconnect(x);
-                    }
-                    if (strcmp(HIDECOMMAND, symName) == 0)
-                    {
-                        outlet_float(x->x_outlet2, 0);
-                    }
-                    if (strcmp(SHOWCOMMAND, symName) == 0)
-                    {
-                        outlet_float(x->x_outlet2, 1);
-                    }
-                    if (strcmp(PINGCOMMAND, symName) == 0)
-                    {
-                        char pingCommandStr[64];
-                    
-                        sprintf(pingCommandStr, 
-                                "%s%c0%c", 
-                                PINGCOMMAND, 
-                                SYMMSGSEP, 
-                                PAIRSEPCHAR);
-                        gripd_appendSendBuffer(x, pingCommandStr);
-                        gripd_send(x);
-                    }
-                }
-                else
-                {
-                    tempSym = gensym(symName);
-                    if (tempSym->s_thing)
-                    {
-                        if (strcmp(BANGSTRING, symValue) == 0)
-                            pd_bang(tempSym->s_thing);
-                        else
-                        {
-			    if (strchr(symValue, ' ') == NULL)
-			    {
-			        if (gripd_isNumeric(symValue))
-                                    pd_float(tempSym->s_thing, 
-				             (float)atof(symValue));
-			        else
-				    typedmess(tempSym->s_thing,
-					      gensym(symValue),
-					      0,
-					      NULL);
-			    }
-                            else
-                            {
-                                idx = 0;
-                                argc = 0;
-                                for (j = 0; j < (int)strlen(symValue); j++)
-                                {
-                                    if (symValue[j] != ' ')
-                                    {
-                                        tempString[idx] = symValue[j];
-                                        idx++;
-                                    }
-                                    if ((symValue[j] == ' ')
-                                    || (j == (int)strlen(symValue) -1))
-                                    {
-                                        tempString[idx] = '\0';
-                                        if (gripd_isNumeric(tempString))
-                                        {
-                                            atomList[argc].a_type = A_FLOAT;
-                                            atomList[argc].a_w.w_float =
-                                                (float)atof(tempString);
-                                        }
-                                        else
-                                        {
-                                            atomList[argc].a_type = A_SYMBOL;
-                                            atomList[argc].a_w.w_symbol
-                                                = gensym(tempString);
-                                        }
-                                        argc++;
-                                        idx = 0;
-                                    }
-                                }
-                                if (atomList[0].a_type == A_FLOAT)
-                                    pd_list(tempSym->s_thing,
-                                            atomList[0].a_w.w_symbol,
-                                            argc, atomList);
-                                else
-                                    typedmess(tempSym->s_thing,
-                                              atomList[0].a_w.w_symbol,
-					      argc - 1, &(atomList[1]));
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-    clock_delay(x->x_rclock, x->x_rdeltime);
-}
-
-void gripd_send(t_gripd *x)
-{
-    int charsSent, endPos;
-    if (x->x_connected && (strlen(x->x_sendBuffer) > 0))
-    {
-        charsSent = send(x->x_newSock, x->x_sendBuffer,
-			 strlen(x->x_sendBuffer),
-			 MSG_DONTWAIT | MSG_NOSIGNAL);
-	if (charsSent == SOCKET_ERROR)
-	{
-	    post("GrIPD: Client is not responding");
-	    gripd_disconnect(x);
-	    return;
-        }
-	else if ((charsSent <= (signed int)strlen(x->x_sendBuffer)) && 
-                 (charsSent > -1))
-        {
-	    endPos = strlen(x->x_sendBuffer) - charsSent;
-	    strcpy(x->x_sendBuffer, &(x->x_sendBuffer[charsSent]));
-            x->x_sendBuffer[endPos] = '\0';
-        }
-    }
-    clock_delay(x->x_sclock, x->x_sdeltime);
-}
-
-/* this does NOT take care of separator strings, sending function must
-    do that */
-void gripd_appendSendBuffer(t_gripd *x, char *aString)
-{
-    if (x->x_connected)
-    {
-        /* +1 below since strlen does not include '\0' */
-        if ((strlen(x->x_sendBuffer) + strlen(aString)) + 1 > MAXDATASIZE)
-            post("GrIPD: Send buffer overflow");
-        else
-            strcat(x->x_sendBuffer, aString);
-    }
-}
-
-void gripd_open(t_gripd *x, t_symbol *sym, int argc, t_atom *argv)
-{
-    gripd_openPyth(x, sym, argc, argv, 0);
-}
-void gripd_openLocked(t_gripd *x, t_symbol *sym, int argc, t_atom *argv)
-{
-    gripd_openPyth(x, sym, argc, argv, 1);
-}
-
-void gripd_openPyth(t_gripd *x, t_symbol *sym, int argc,
-                    t_atom *argv, int locked)
-{
-#ifdef NT
-    STARTUPINFO si;
-    PROCESS_INFORMATION pi;
-    char pythExec[DEFSTRSIZE], filename[DEFSTRSIZE], tempStr[DEFSTRSIZE];
-    int i;
- 
-    if (!x->x_connected && !(*(x->x_localOpened)))
-    {
-        gripd_connect(x);
-        *(x->x_localOpened) = 1;
-        ZeroMemory(&si, sizeof(si));
-        si.cb = sizeof(si);
-        ZeroMemory(&pi, sizeof(pi));
-        if (argc > 0)
-        {
-            if (argv[0].a_type == A_SYMBOL)
-            {
-                strcpy(filename, argv[0].a_w.w_symbol->s_name);
-                for (i = 1; i < argc; i++)
-                    if (argv[i].a_type == A_SYMBOL)
-                       sprintf(filename, "%s %s", filename,
-                       argv[i].a_w.w_symbol->s_name);
-            }
-            else
-                strcpy(filename, "0");
-        }
-        else
-            strcpy(filename, "0");
-        for (i = 0; i < (int)strlen(x->x_pythExec); i++)
-            if (x->x_pythExec[i] == '/')
-                x->x_pythExec[i] = '\\';
-        for (i = 0; i < (int)strlen(x->x_pythFile); i++)
-            if (x->x_pythFile[i] == '/')
-                x->x_pythFile[i] = '\\';
-        for (i = 0; i < (int)strlen(filename); i++)
-            if (filename[i] == '/')
-                filename[i] = '\\';
-        if (filename[0] == '.' && 
-            (filename[1] == '\\' || 
-             (filename[1] == '.' && filename[2] == '\\')))
-        {
-            sprintf(tempStr, "%s%s", x->x_appPath, filename);
-            strcpy(filename, tempStr);
-        } 
-        if (x->x_pythFile[0] == '.' && 
-            (x->x_pythFile[1] == '\\' || 
-             (x->x_pythFile[1] == '.' && x->x_pythFile[2] == '\\')))
-        {
-            sprintf(tempStr, "%s%s", x->x_appPath, x->x_pythFile);
-            strcpy(x->x_pythFile, tempStr);
-        } 
-        sprintf(pythExec, "\"%sgripd.exe\" \"%s\" %d 1 %d", x->x_pythFile,
-                filename, x->x_port, locked);
-        if (!(CreateProcess(NULL, pythExec, NULL, NULL, FALSE, 0, NULL, NULL,
-                            &si, &(x->x_childProcessInfo)) != 0))
-        {
-            post("GrIPD: Failed to execute %sgripd.exe", x->x_pythFile);
-            sprintf(pythExec, "\"%spython.exe\" \"%sgripd.py\" \"%s\" %d 1 %d",
-                    x->x_pythExec, x->x_pythFile, filename, x->x_port, locked);
-            if (!(CreateProcess(NULL, pythExec, NULL, NULL, FALSE, 0, NULL,
-                                NULL, &si, &(x->x_childProcessInfo)) != 0))
-            {
-                post("GrIPD: Failed to execute %spython.exe", x->x_pythExec);
-                gripd_disconnect(x);
-                *(x->x_localOpened) = 0;
-            }
-        }
-    }
-#else
-    char pythExec[DEFSTRSIZE], filename[DEFSTRSIZE], portString[DEFSTRSIZE],
-         lockedString[DEFSTRSIZE], tempStr[DEFSTRSIZE];
-    int i, pid;
- 
-    if (!x->x_connected && !(*(x->x_localOpened)))
-    {
-        gripd_connect(x);
-        pid = fork();
-        if (pid == 0)
-        {
-            struct sched_param par;
-            int p1;
- 
-            /* Lose setuid priveliges */
-            seteuid(getuid());
-            *(x->x_localOpened) = 1;
-            /* set lowest priority, SCHED_OTHER policy, unlock mem*/
-#ifdef _POSIX_PRIORITY_SCHEDULING
-            p1 = sched_get_priority_min(SCHED_OTHER);
-            par.sched_priority = p1;
-            if (sched_setscheduler(0, SCHED_OTHER, &par) == -1)
-                post("GrIPD: unable to set priority %d scheduling.", p1);
-#endif
-#ifdef _POSIX_MEMLOCK
-            if ((munlockall() == -1) && (!getuid()))
-    	        post("GrIPD: unable to unlock memory.");
-#endif
-            clock_free(x->x_rclock);
-            clock_free(x->x_sclock);
-            clock_free(x->x_connectionClock);
-            clock_free(x->x_bindClock);
-            for (i = 0; i < x->x_rcvrListSize; i++)
-                pd_unbind(&(x->x_rcvrs[i])->r_obj.ob_pd,
-                            x->x_rcvrs[i]->r_sym);
-            free(x->x_rcvrs);
-            sprintf(pythExec, "%sgripd", x->x_pythFile);
-            if (argc > 0)
-            {
-                strcpy(filename, argv[0].a_w.w_symbol->s_name);
-                for (i = 1; i < argc; i++)
-                    if (argv[i].a_type == A_SYMBOL)
-                       sprintf(filename, "%s %s", filename,
-                               argv[i].a_w.w_symbol->s_name);
-            }
-            else
-                strcpy(filename, "0");
-            if (filename[0] == '.' && 
-                (filename[1] == '/' || 
-                 (filename[1] == '.' && filename[2] == '/')))
-            {
-	          sprintf(tempStr, "%s%s", x->x_appPath, filename);
-		    strcpy(filename, tempStr);
-            } 
-            if (pythExec[0] == '.' && 
-                (pythExec[1] == '/' || 
-                 (pythExec[1] == '.' && pythExec[2] == '/')))
-            {
-                sprintf(tempStr, "%s%s", x->x_appPath, pythExec);
-                strcpy(pythExec, tempStr);
-            } 
-            /* set x_localOpened before opened since execlp will exit
-               process on success */
-            sprintf(portString, "%d", x->x_port);
-            sprintf(lockedString, "%d", locked);
-            if ((execlp(pythExec, pythExec, filename, portString,
-                 "1", lockedString, (char *)0)) == -1)
-            {
-                post("GrIPD: Error launching %s", pythExec);
-                perror("     ");
-                *(x->x_localOpened) = 0;
-                exit(1);
-            }
-            exit(1);
-        }
-        else
-        {
-            x->x_childPID = pid;
-        }
-    }
-#endif
-    else
-    {
-        gripd_show(x);
-    }
-}
-
-void gripd_closePyth(t_gripd *x)
-{
-    char buf[MAXDATASIZE];
-
-    if (*(x->x_localOpened))
-    {
-        sprintf(buf, "%s%c0%c", CLOSECOMMAND, SYMMSGSEP, PAIRSEPCHAR);
-        send(x->x_newSock, buf, strlen(buf), MSG_DONTWAIT | MSG_NOSIGNAL);
-        *(x->x_localOpened) = 0;
-#ifdef NT
-        TerminateProcess(x->x_childProcessInfo.hProcess, 0);
-#else
-        kill(x->x_childPID, SIGKILL);
-        x->x_childPID = 0;
-#endif
-    }
-}
-
-void gripd_lock(t_gripd *x)
-{
-    char buf[MAXDATASIZE];
-
-    if (x->x_connected)
-    {
-        sprintf(buf, "%s%c0%c", LOCKCOMMAND, SYMMSGSEP, PAIRSEPCHAR);
-        send(x->x_newSock, buf, strlen(buf), MSG_DONTWAIT | MSG_NOSIGNAL);
-    }
-}
-
-void gripd_unlock(t_gripd *x)
-{
-    char buf[MAXDATASIZE];
-
-    if (x->x_connected)
-    {
-        sprintf(buf, "%s%c0%c", UNLOCKCOMMAND, SYMMSGSEP, PAIRSEPCHAR);
-        send(x->x_newSock, buf, strlen(buf), MSG_DONTWAIT | MSG_NOSIGNAL);
-    }
-}
-
-void gripd_hide(t_gripd *x)
-{
-    char buf[MAXDATASIZE];
-
-    if (x->x_connected)
-    {
-        sprintf(buf, "%s%c0%c", HIDECOMMAND, SYMMSGSEP, PAIRSEPCHAR);
-        send(x->x_newSock, buf, strlen(buf), MSG_DONTWAIT | MSG_NOSIGNAL);
-    }
-}
-
-void gripd_show(t_gripd *x)
-{
-    char buf[MAXDATASIZE];
-
-    if (x->x_connected)
-    {
-        sprintf(buf, "%s%c0%c", SHOWCOMMAND, SYMMSGSEP, PAIRSEPCHAR);
-        send(x->x_newSock, buf, strlen(buf), MSG_DONTWAIT | MSG_NOSIGNAL);
-    }
-}
-
-void gripd_openpanel(t_gripd *x)
-{
-    char buf[MAXDATASIZE];
-
-    if (x->x_connected)
-    {
-        sprintf(buf, "%s%c0%c", OPENPANELCOMMAND, SYMMSGSEP, PAIRSEPCHAR);
-        send(x->x_newSock, buf, strlen(buf), MSG_DONTWAIT | MSG_NOSIGNAL);
-    }
-}
-
-void gripd_savepanel(t_gripd *x)
-{
-    char buf[MAXDATASIZE];
-
-    if (x->x_connected)
-    {
-        sprintf(buf, "%s%c0%c", SAVEPANELCOMMAND, SYMMSGSEP, PAIRSEPCHAR);
-        send(x->x_newSock, buf, strlen(buf), MSG_DONTWAIT | MSG_NOSIGNAL);
-    }
-}
-
-void gripd_setTitle(t_gripd *x, t_symbol *sym, int argc, t_atom *argv)
-{
-    int i;
-    char title[DEFSTRSIZE];
-    char buf[MAXDATASIZE];
-
-    if (x->x_connected) {
-        if (argc > 0)
-            strcpy(title, argv[0].a_w.w_symbol->s_name);
-        for (i = 1; i < argc; i++)
-	    if (argv[i].a_type == A_SYMBOL)
-	        sprintf(title, "%s %s", title,
-			argv[i].a_w.w_symbol->s_name);
-        sprintf(buf,
-		"%s%c%s%c",
-		SETTITLECOMMAND,
-		SYMMSGSEP,
-		title,
-		PAIRSEPCHAR);
-        send(x->x_newSock, buf, strlen(buf), MSG_DONTWAIT | MSG_NOSIGNAL);	
-    }
-}
-
-void gripd_setPath(t_gripd *x, t_symbol *sym, int argc, t_atom *argv)
-{
-    int i;
-    if (argc > 0)
-        strcpy(x->x_pythFile, argv[0].a_w.w_symbol->s_name);
-    for (i = 1; i < argc; i++)
-        if (argv[i].a_type == A_SYMBOL)
-           sprintf(x->x_pythFile, "%s %s", x->x_pythFile,
-                   argv[i].a_w.w_symbol->s_name);
-    sprintf(x->x_pythFile, "%s/", x->x_pythFile);
-}
-
-void gripd_setPythonPath(t_gripd *x, t_symbol *sym, int argc, t_atom *argv)
-{
-    int i;
-    if (argc >0)
-        strcpy(x->x_pythExec, argv[0].a_w.w_symbol->s_name);
-    for (i = 1; i < argc; i++)
-        if (argv[i].a_type == A_SYMBOL)
-            sprintf(x->x_pythExec, "%s %s", x->x_pythExec,
-                    argv[i].a_w.w_symbol->s_name);
-    sprintf(x->x_pythExec, "%s/", x->x_pythExec);
-}
-
-void gripd_setSTime(t_gripd *x, t_floatarg val)
-{
-    if (val > 0)
-        x->x_sdeltime = val;
-    else
-        post("GrIPD: Illegal update time");
-}
-
-void gripd_setRTime(t_gripd *x, t_floatarg val)
-{
-    if (val > 0)
-        x->x_rdeltime = val;
-    else
-        post("GrIPD: Illegal update time");
-}
-
-void gripdR_bang(t_gripdRcvr *r)
-{
-    char aString[MAXDATASIZE];
-    char valueString[MAXDATASIZE];
- 
-    strcpy(aString, r->r_sym->s_name);
-    sprintf(valueString,"%cbang%c", SYMMSGSEP, PAIRSEPCHAR);
-    strcat(aString, valueString);
- 
-    gripd_appendSendBuffer((t_gripd *)(r->r_x), aString);
-}
-
-void gripdR_float(t_gripdRcvr *r, t_float floatValue)
-{
-    char aString[MAXDATASIZE];
-    char valueString[MAXDATASIZE];
- 
-    strcpy(aString, r->r_sym->s_name);
-    sprintf(valueString,"%c%g%c", SYMMSGSEP, floatValue, PAIRSEPCHAR);
-    strcat(aString, valueString);
- 
-    gripd_appendSendBuffer((t_gripd *)(r->r_x), aString);
-}
- 
-void gripdR_symbol(t_gripdRcvr *r, t_symbol *sym)
-{
-    char aString[MAXDATASIZE];
-    char valueString[MAXDATASIZE];
- 
-    strcpy(aString, r->r_sym->s_name);
-    sprintf(valueString,"%c%s%c", SYMMSGSEP, sym->s_name, PAIRSEPCHAR);
-    strcat(aString, valueString);
- 
-    gripd_appendSendBuffer((t_gripd *)(r->r_x), aString);
-}
-
-void gripdR_anything(t_gripdRcvr *r, t_symbol *sym, int argc, t_atom *argv)
-{
-    char aString[MAXDATASIZE];
-    char valueString[MAXDATASIZE];
-    int i;
-
-    strcpy(aString, r->r_sym->s_name);
-    sprintf(valueString, "%c%s", SYMMSGSEP, sym->s_name);
-    strcat(aString, valueString);
-    for (i = 0; i < argc; i++)
-    {
-        if (argv[i].a_type == A_SYMBOL)
-        {
-            sprintf(valueString, " %s", argv[i].a_w.w_symbol->s_name);
-            strcat(aString, valueString);
-        }
-        else if (argv[i].a_type == A_FLOAT)
-        {
-            sprintf(valueString, " %g", argv[i].a_w.w_float);
-            strcat(aString, valueString);
-        }
-    }
-    sprintf(aString, "%s%c", aString, PAIRSEPCHAR);
-    gripd_appendSendBuffer((t_gripd *)(r->r_x), aString);
-}
-
-void gripdR_list(t_gripdRcvr *r, t_symbol *sym, int argc, t_atom *argv)
-{
-    char aString[MAXDATASIZE];
-    char valueString[MAXDATASIZE];
-    int i;
-
-    strcpy(aString, r->r_sym->s_name);
-    sprintf(valueString, "%c", SYMMSGSEP);
-    strcat(aString, valueString);    
-    for (i = 0; i < argc; i++)
-    {
-        if (argv[i].a_type == A_SYMBOL)
-        {
-            sprintf(valueString, " %s", argv[i].a_w.w_symbol->s_name);
-            strcat(aString, valueString);
-        }
-        else if (argv[i].a_type == A_FLOAT)
-        {
-            sprintf(valueString, " %g", argv[i].a_w.w_float);
-            strcat(aString, valueString);
-        }
-    }
-    sprintf(aString, "%s%c", aString, PAIRSEPCHAR);    
-    gripd_appendSendBuffer((t_gripd *)(r->r_x), aString);
-}
-
-void gripd_makeGripdRcvr(t_gripd *x, t_symbol *s)
-{
-    t_gripdRcvr *r = (t_gripdRcvr *)pd_new(gripdRcvr_class);
-    r->r_sym = s;
-    pd_bind(&r->r_obj.ob_pd, s);
-    r->r_x = (t_gripd *)x;
-    x->x_rcvrs[x->x_rcvrListSize] = r;
-}
-
-int gripd_checkExistance(t_gripd *x, char *name)
-{
-    int i, flag;
- 
-    flag = 0;
-    for (i = 0; i < x->x_rcvrListSize; i++)
-    {
-        if (strcmp(name, x->x_rcvrs[i]->r_sym->s_name) == 0)
-            flag = 1;
-    }
-    return flag;
-}
-
-void gripd_expandRcvrList(t_gripd *x)
-{
-    x->x_rcvrListMaxSize *= 2;
-    x->x_rcvrs = (t_gripdRcvr **)realloc(x->x_rcvrs,
-                                         x->x_rcvrListMaxSize \
-                                         * sizeof(t_gripdRcvr *));
-}
-
-void gripd_free(t_gripd *x)
-{
-    int i;
-    
-    if (*(x->x_localOpened))
-        gripd_closePyth(x);
-    if (x->x_connected)
-        gripd_disconnect(x);
-    else if (x->x_bound)
-        gripd_closeSocket(x);
-    clock_free(x->x_rclock);
-    clock_free(x->x_sclock);
-    clock_free(x->x_connectionClock);
-    clock_free(x->x_bindClock);
-#ifdef NT
-    free(x->x_localOpened);
-    if (x->x_wsockInitByMe != 0)
-        WSACleanup();
-#endif
-    for (i = 0; i < x->x_rcvrListSize; i++)
-        pd_unbind(&(x->x_rcvrs[i])->r_obj.ob_pd, x->x_rcvrs[i]->r_sym);
-    free(x->x_rcvrs);
-}
-
-int gripd_isNumeric(char *string)
-{
-    if ((strspn(string, "0123456789.+-") == strlen(string)) &&
-	(strchr(string, '+') == strrchr(string, '+')) &&
-	(strchr(string, '-') == strrchr(string, '-')) &&
-	(strchr(string, '.') == strrchr(string, '.')) &&
-	(!((strchr(string, '+') != NULL) && 
-         (strchr(string, '-') != NULL))))
-        return 1;
-    else
-        return 0;
-}
-
-#ifndef NT
-void gripd_sigChild(int sig)
-{
-    wait(NULL);
-}
-#endif
-
-void gripd_getApplicationPath(t_gripd *x)
-{
-    char rawStr[MAXDATASIZE];
-#ifdef NT
-    GetModuleFileName(NULL, rawStr, sizeof(rawStr));
-    rawStr[strrchr(rawStr, '\\') - rawStr + 1] = '\0';
-    strcpy(x->x_appPath, rawStr);   
-#else
-    char *pathStr;
-    FILE *fp;  
-    fp = fopen("/proc/self/maps", "r");
-    fgets(rawStr, MAXDATASIZE, fp);
-    fclose(fp);
-    pathStr = index(rawStr, '/');
-    pathStr[index(pathStr, '\n') - pathStr] = '\0';
-    pathStr[rindex(pathStr, '/') - pathStr + 1] = '\0';
-    strcpy(x->x_appPath, pathStr);
-#endif
-}
-
diff --git a/extensions/gripd/src/gripd.h b/extensions/gripd/src/gripd.h
deleted file mode 100644
index 67ef16b21..000000000
--- a/extensions/gripd/src/gripd.h
+++ /dev/null
@@ -1,227 +0,0 @@
-/* GrIPD v0.1.1 - Graphical Interface for Pure Data
-** Copyright (C) 2003 Joseph A. Sarlo
-**
-** This program is free software; you can redistribute it and/orsig
-** modify it under the terms of the GNU General Public License
-** as published by the Free Software Foundation; either version 2
-** of the License, or (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-**
-** jsarlo@ucsd.edu
-*/
-
-#include "m_pd.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <string.h>
-#include <math.h>
-#ifdef NT
-#include <windows.h>
-#include <winsock.h>
-#else
-#include <signal.h>
-#include <unistd.h>
-#include <sys/wait.h>
-#include <sys/time.h>
-#include <netinet/in.h>
-#include <sys/socket.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/ipc.h>
-#include <sys/shm.h>
-#include <sched.h>
-#include <sys/mman.h>
-#endif
-
-#define VERSION            "0.1.1"
-#define DEFPORT            0
-/* maxiumum connections */
-#define BACKLOG            1
-/* max size of send buffer */
-#define MAXDATASIZE        16384
-#define MAXPORTSTRLEN      16
-#define MAXSYMNAMELEN      128
-#define MAXSYMVALUELEN     128
-/* separates send/recv object names from value they send/recv */
-#define SYMMSGSEP          31
-/* separates send/recv value pairs */
-#define PAIRSEPCHAR        29
-#define BANGSTRING         "bang"
-/* if 1st char, indicates send/recv name is actually a command */
-#define COMMANDCHAR '!'
-/* command to add value to recv list */
-#define SETRCVRSTRING      "!setRcvr"
-/* command to close connection */
-#define CLOSECOMMAND       "!disconnect"
-/* command to close python app */
-#define EXITCOMMAND        "!exit"
-/* command to lock GUI */
-#define LOCKCOMMAND        "!lock"
-/* command to unlock GUI */
-#define UNLOCKCOMMAND      "!unlock"
-/* command to set title */
-#define SETTITLECOMMAND    "!settitle"
-/* command to hide GUI window */
-#define HIDECOMMAND        "!hide"
-/* command to show GUI window */
-#define SHOWCOMMAND        "!show"
-/* command for connection status */
-#define PINGCOMMAND        "!ping"
-// command to have GUI open a open file dialog
-#define OPENPANELCOMMAND   "!openpanel"
-// command to have GUI open a save file dialog
-#define SAVEPANELCOMMAND   "!savepanel"
-/* initial size of rcvr object list */
-#define DEFLISTSIZE        16
-/* poll time in ms to re-try accept() */
-#define CONNECTIONPOLLTIME 100
-/* blocking time us for accept() */
-#define WAITTIME           1
-/* poll time in ms to re-try bind after "address already in use" */
-#define REBINDTIME         1000
-/* default receive poll time in ms */
-#define DEFRDELTIME        5
-#define DEFSDELTIME        1
-/* default send poll time in ms */
-#define DEFSTRSIZE         256
-#define MAXALISTLEN        64
-
-#ifdef NT
-#define MSG_DONTWAIT       0
-#define MSG_NOSIGNAL       0
-#define MSG_WAITALL        0
-#else
-#define SOCKET_ERROR       -1
-#endif
-
-/* Individual "receive" class */
-typedef struct _gripdRcvr
-{
-    t_object r_obj;
-    t_symbol *r_sym;
-    /* gripd object, needed so recevied symbol functions can access
-       gripd data (socket)*/
-    void *r_x;
-}t_gripdRcvr;
-
-/* Main object class */
-typedef struct _gripd
-{
-    t_object t_ob;
-    t_outlet *x_outlet2;
-    unsigned short int x_port;
-#ifdef NT
-    SOCKET x_sock;
-    SOCKET x_newSock;
-    /* for Windows, 1 if WSAStartup is called */
-    int x_wsockInitByMe;
-    PROCESS_INFORMATION x_childProcessInfo;
-#else
-    int x_sock;
-    int x_newSock;
-    int x_childPID;
-#endif
-    /* 1 if socket has been bound, 0 otherwise */
-    int x_bound;
-    /* 1 if currently connected, 0 otherwise */
-    int x_connected;
-    /* 1 if PD opened python app, otherwise (shared mem for linux)*/
-    int *x_localOpened;
-    /* timer for receiveing/sending */
-    t_clock *x_rclock;
-    t_clock *x_sclock;
-    /* timer for polling accept() */
-    t_clock *x_connectionClock;
-    /* timer for re-binding after "address already in use" error */
-    t_clock *x_bindClock;
-    /* path to python.exe for Windows */
-    char x_pythExec[DEFSTRSIZE];
-    /* path to gripd.py (or gripd.exe and gripd.py in Windows) */
-    char x_pythFile[DEFSTRSIZE];
-    /* send/receive poll times */
-    double x_sdeltime;
-    double x_rdeltime;
-    /* current number of receive "objects" being used */
-    int x_rcvrListSize;
-    /* size currently allocated for receiver objects */
-    int x_rcvrListMaxSize;
-    /* pointer to list of receiver objects */
-    t_gripdRcvr **x_rcvrs;
-    /* buffer to be sent */
-    char x_sendBuffer[MAXDATASIZE];
-    /* path to application */
-    char x_appPath[MAXDATASIZE];
-}t_gripd;
-
-t_class *gripd_class;
-t_class *gripdRcvr_class;
-
-void gripd_setup(void);
-void *gripd_new(t_floatarg port);
-void gripd_connect(t_gripd *x);
-/* initialize "server" */
-void gripd_openSocket(t_gripd *x);
-/* shutdown server */
-void gripd_disconnect(t_gripd *x);
-/* poll accept() */
-void gripd_trySocket(t_gripd *x);
-void gripd_closeSocket(t_gripd *x);
-void gripd_recv(t_gripd *x);
-void gripd_send(t_gripd *x);
-/* add name:value pair to send string */
-void gripd_appendSendBuffer(t_gripd *x, char *aString);
-/* open gripd.py (or gripd.exe inWindows) unlocked mode*/
-void gripd_open(t_gripd *x, t_symbol *sym, int argc, t_atom *argv);
-/* open gripd.py (or gripd.exe inWindows) locked mode*/
-void gripd_openLocked(t_gripd *x, t_symbol *sym, int argc, t_atom *argv);
-/* actually open gripd.py (or gripd.exe inWindows)*/
-void gripd_openPyth(t_gripd *x, t_symbol *sym, int argc,
-		    t_atom *argv, int locked);
-/* tell python app to close itself */
-void gripd_closePyth(t_gripd *x);
-/* lock GUI */
-void gripd_lock(t_gripd *x);
-/* unlock GUI */
-void gripd_unlock(t_gripd *x);
-/* hide GUI */
-void gripd_hide(t_gripd *x);
-/* show GUI */
-void gripd_show(t_gripd *x);
-/* set GUI window title */
-void gripd_setTitle(t_gripd *x, t_symbol *sym, int argc, t_atom *argv);
-/* set path to gripd.py (or gripd.exe in Windows) */
-void gripd_setPath(t_gripd *x, t_symbol *sym, int argc, t_atom *argv);
-/* set path to python.exe for Windows */
-void gripd_setPythonPath(t_gripd *x, t_symbol *sym, int argc,
-                         t_atom *argv);
-void gripd_setSTime(t_gripd *x, t_floatarg val);
-void gripd_setRTime(t_gripd *x, t_floatarg val);
-void gripd_openpanel(t_gripd *x);
-void gripd_savepanel(t_gripd *x);
-void gripdR_bang(t_gripdRcvr *r);
-void gripdR_float(t_gripdRcvr *r, t_float floatValue);
-void gripdR_symbol(t_gripdRcvr *r, t_symbol *sym);
-void gripdR_anything(t_gripdRcvr *r, t_symbol *sym, int argc,
-                     t_atom *argv);
-void gripdR_list(t_gripdRcvr *r, t_symbol *sym, int argc, t_atom *argv);
-/* instantiate new rcv object */
-void gripd_makeGripdRcvr(t_gripd *x, t_symbol *s);
-/* check is rcv object has already been created */
-int gripd_checkExistance(t_gripd *x, char *name);
-/* allocate more mem for recv objects */
-void gripd_expandRcvrList(t_gripd *x);
-void gripd_free(t_gripd *x);
-int gripd_isNumeric(char *string);
-#ifndef NT
-void gripd_sigChild(int signum);
-#endif
-void gripd_getApplicationPath(t_gripd *x);
diff --git a/extensions/gripd/src/joystick.c b/extensions/gripd/src/joystick.c
deleted file mode 100644
index 02fddb7b7..000000000
--- a/extensions/gripd/src/joystick.c
+++ /dev/null
@@ -1,296 +0,0 @@
-/* GrIPD v0.1.1 - Graphical Interface for Pure Data
-** Copyright (C) 2002 Joseph A. Sarlo
-**
-** This program is free software; you can redistribute it and/or
-** modify it under the terms of the GNU General Public License
-** as published by the Free Software Foundation; either version 2
-** of the License, or (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-**
-** jsarlo@ucsd.edu
-*/
-
-#include <stdio.h>
-#define MAXEVENTS         4096
-#define MAXDEVS           16
-#ifdef NT
-#include <STRING.H>
-#include <WINDOWS.H>
-#include <MMSYSTEM.H>
-#include <stdlib.h>
-#define MAX_AXIS_OUTS     10
-#define MAX_BUTTON_OUTS   32
-#else
-#include <strings.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <sys/ioctl.h>
-#define JOYSTICK_DEVICE   "/dev/js0"
-#define JS_EVENT_BUTTON   0x01
-#define JS_EVENT_AXIS     0x02
-#define JS_EVENT_INTI     0x80
-#define DEFSCALE          1
-#define DEFTRANSLATION    0
-#define JSIOCGAXES        _IOR('j', 0x11, unsigned char)
-#define JSIOCGBUTTONS     _IOR('j', 0x12, unsigned char)
-#define MAXAXES           4
-#endif
-
-static int eventValue[MAXEVENTS][MAXDEVS];
-static int eventNumber[MAXEVENTS][MAXDEVS];
-static int eventType[MAXEVENTS][MAXDEVS];
-static int eventCount[MAXDEVS];
-static int devCount = 0;
-static int devList[MAXDEVS];
-#ifdef NT
-static JOYINFOEX joyInfoEx[MAXDEVS];
-static int joyDevNum[MAXDEVS];
-static int joy_buttons[MAXDEVS];
-static int joy_axes[MAXDEVS];
-static int button_val[MAX_BUTTON_OUTS][MAXDEVS];
-static int axis_val[MAX_AXIS_OUTS][MAXDEVS];
-/* FIXME */
-static DWORD *axes_ptr[MAX_AXIS_OUTS][MAXDEVS];
-#else
-static int joy_fd[MAXDEVS];
-struct js_event
-{
-    unsigned int time;
-    signed short value;
-    unsigned char type;
-    unsigned char number;
-};
-static struct js_event joy_e[MAXDEVS];
-#endif
-
-#ifdef NT
-extern "C" {
-#endif
-
-int closeDevice(int devno)
-{
-    if (devList[devno]) 
-    {
-        devCount--;
-        devList[devno] = 0;    
-#ifdef NT
-        return (1);
-#else
-        if (close(joy_fd[devno]) < 0)
-            return (0);
-        else
-        {
-            joy_fd[devno] = -1;
-            return(1);
-        }
-#endif
-    }
-}
-
-int openDevice(char *dev)
-{
-#ifdef NT
-    int i, num_axes, num_buttons, devId;
-    JOYCAPS jscaps;
-    MMRESULT errCode;
-    if (devCount == 0) 
-    {
-        for (i = 0; i < MAXDEVS; i++) 
-        {
-	    devList[i] = 0;
-        }
-    }
-    for (i = 0; i < MAXDEVS; i++)
-    {
-        if (devList[i] == 0)
-	{
-	    devId = i;
-            i = MAXDEVS;
-        }
-    }
-    joyInfoEx[devId].dwSize = sizeof(joyInfoEx);
-    joyInfoEx[devId].dwFlags = JOY_RETURNALL;
-    joyDevNum[devId] = (JOYSTICKID1 - 1) + atoi(dev);
-    errCode = joyGetPosEx(joyDevNum[devId], &joyInfoEx[devId]);
-    if ((errCode == MMSYSERR_NOERROR) && (devCount < MAXDEVS))
-    {
-        joyGetDevCaps(joyDevNum[devId], &jscaps, sizeof(jscaps));
-        if (jscaps.wNumAxes > MAX_AXIS_OUTS)
-            joy_axes[devId] = MAX_AXIS_OUTS;
-        else
-            joy_axes[devId] = jscaps.wNumAxes;
-        if (jscaps.wNumButtons > MAX_BUTTON_OUTS)
-            joy_buttons[devId] = MAX_BUTTON_OUTS;
-        else
-            joy_buttons[devId] = jscaps.wNumButtons;
-        for (i = 0; i < joy_axes[devId]; i++)
-            axis_val[i][devId] = 0;
-        for (i = 0; i < joy_buttons[devId]; i++)
-            button_val[i][devId] = 0;
-        axes_ptr[0][devId] = &(joyInfoEx[devId].dwXpos);
-        axes_ptr[1][devId] = &(joyInfoEx[devId].dwYpos);
-        axes_ptr[2][devId] = &(joyInfoEx[devId].dwZpos);
-        axes_ptr[3][devId] = &(joyInfoEx[devId].dwRpos);
-        axes_ptr[4][devId] = &(joyInfoEx[devId].dwUpos);
-        axes_ptr[5][devId] = &(joyInfoEx[devId].dwVpos);
-	eventCount[devId] = 0;
-	devCount++;
-        devList[devId] = 1;
-        return (devId);
-    }
-    else
-        return (-1);
-#else
-    int i, devId;
-    char joy_dev[256];
-
-    if (devCount == 0) 
-    {
-        for (i = 0; i < MAXDEVS; i++) 
-        {
-	    devList[i] = 0;
-        }
-    }
-    for (i = 0; i < MAXDEVS; i++)
-    {
-        if (devList[i] == 0)
-	{
-	    devId = i;
-            i = MAXDEVS;
-        }
-    }
-    if (strcmp(dev, "") == 0)
-        strcpy(joy_dev, JOYSTICK_DEVICE);
-    else
-        strcpy(joy_dev, dev);
-    joy_fd[devId] = open (joy_dev, O_RDONLY | O_NONBLOCK);
-    if ((joy_fd[devId] == -1) || (devCount >= MAXDEVS))
-    {
-        return (-1);
-    }
-    else
-    {
-        devCount++;
-        eventCount[devId] = 0;
-        devList[devId] = 1;
-        return (devId);
-    }
-#endif
-}
- 
-int readEvents(int devno)
-{
-#ifdef NT
-    int i;
- 
-    eventCount[devno] = 0;
-    joyGetPosEx(joyDevNum[devno], &(joyInfoEx[devno]));
-    for (i = 0; i < joy_axes[devno]; i++)
-        if (((int)(*(axes_ptr[i][devno])) != axis_val[i][devno]) &&
-	    (eventCount[devno] < MAXEVENTS))
-        {
-            eventType[eventCount[devno]][devno] = 0;
-            eventNumber[eventCount[devno]][devno] = i;
-            eventValue[eventCount[devno]][devno] = (int)(*(axes_ptr[i][devno]));
-            eventCount[devno]++;
-            axis_val[i][devno] = (int)(*(axes_ptr[i][devno]));
-        }
-    for (i = 0; i < joy_buttons[devno]; i ++)
-    {
-        if (joyInfoEx[devno].dwButtons & (1 << i))
-        {
-            if ((button_val[i][devno] == 0) && (eventCount[devno] < MAXEVENTS))
-            {
-                eventType[eventCount[devno]][devno] = 1;
-                eventNumber[eventCount[devno]][devno] = i;
-                eventValue[eventCount[devno]][devno] = 1;
-                eventCount[devno]++;
-                button_val[i][devno] = 1;
-            }
-        }
-        else
-            if ((button_val[i][devno] == 1) && (eventCount[devno] < MAXEVENTS))
-            {
-                eventType[eventCount[devno]][devno] = 1;
-                eventNumber[eventCount[devno]][devno] = i;
-                eventValue[eventCount[devno]][devno] = 0;
-                eventCount[devno]++;
-                button_val[i][devno] = 0;
-            }
-    }
-    return (eventCount[devno]);
-#else
-    int i;
-
-    eventCount[devno] = 0;
-    if (joy_fd[devno] > -1)
-    {
-        while (read (joy_fd[devno], &(joy_e[devno]), sizeof(struct js_event)) > -1)
-        {
-            if (eventCount[devno] < MAXEVENTS)
-            {
-                if (joy_e[devno].type == JS_EVENT_AXIS)
-                    eventType[eventCount[devno]][devno] = 0;
-                if (joy_e[devno].type == JS_EVENT_BUTTON)
-                    eventType[eventCount[devno]][devno] = 1;
-                eventNumber[eventCount[devno]][devno] = joy_e[devno].number;
-                eventValue[eventCount[devno]][devno] = joy_e[devno].value;
-                eventCount[devno]++;
-            }
-        }
-    }
-    return eventCount[devno];
-#endif
-}
-
-int getEventCount(int devno)
-{
-    return (eventCount[devno]);
-}
-
-int getEventType(int devno, int eNum)
-{
-    int returnVal = 0;
-
-    if (eNum >= 0 && eNum < eventCount[devno])
-    {
-        returnVal = eventType[eNum][devno];
-    }
-    return (returnVal);
-}
-
-int getEventNumber(int devno, int eNum)
-{
-    int returnVal = 0;
-
-    if (eNum >= 0 && eNum < eventCount[devno])
-    {
-        returnVal = eventNumber[eNum][devno];
-    }
-    return (returnVal);
-}
-
-int getEventValue(int devno, int eNum)
-{
-    int returnVal = 0;
-
-    if (eNum >= 0 && eNum < eventCount[devno])
-    {
-        returnVal = eventValue[eNum][devno];
-    }
-    return (returnVal);
-}
-#ifdef NT
-}
-#endif
-
diff --git a/extensions/gripd/src/joystick_wrap.c b/extensions/gripd/src/joystick_wrap.c
deleted file mode 100644
index b2e2087b4..000000000
--- a/extensions/gripd/src/joystick_wrap.c
+++ /dev/null
@@ -1,692 +0,0 @@
-/*
- * FILE : joystick_wrap.c
- * 
- * This file was automatically generated by :
- * Simplified Wrapper and Interface Generator (SWIG)
- * Version 1.1 (Patch 5)
- * 
- * Portions Copyright (c) 1995-1998
- * The University of Utah and The Regents of the University of California.
- * Permission is granted to distribute this file in any manner provided
- * this notice remains intact.
- * 
- * Do not make changes to this file--changes will be lost!
- *
- */
-
-
-#define SWIGCODE
-/* Implementation : PYTHON */
-
-#define SWIGPYTHON
-#include <string.h>
-#include <stdlib.h>
-/***********************************************************************
- * $Header: /home/zmoelnig/cvs2svn/pure-data/puredata_cvsbackup/extensions/gripd/src/joystick_wrap.c,v 1.1.1.1 2005-11-10 05:52:09 eighthave Exp $
- * swig_lib/python/python.cfg
- *
- * This file contains coded needed to add variable linking to the
- * Python interpreter.   C variables are added as a new kind of Python
- * datatype.
- *
- * Also contains supporting code for building python under Windows
- * and things like that.
- *
- * $Log: not supported by cvs2svn $
- ************************************************************************/
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#include "Python.h"
-#ifdef __cplusplus
-}
-#endif
-
-/* Definitions for Windows/Unix exporting */
-#if defined(__WIN32__)
-#   if defined(_MSC_VER)
-#	define SWIGEXPORT(a,b) __declspec(dllexport) a b
-#   else
-#	if defined(__BORLANDC__)
-#	    define SWIGEXPORT(a,b) a _export b
-#	else
-#	    define SWIGEXPORT(a,b) a b
-#	endif
-#   endif
-#else
-#   define SWIGEXPORT(a,b) a b
-#endif
-
-#ifdef SWIG_GLOBAL
-#ifdef __cplusplus
-#define SWIGSTATIC extern "C"
-#else
-#define SWIGSTATIC
-#endif
-#endif
-
-#ifndef SWIGSTATIC
-#define SWIGSTATIC static
-#endif
-
-typedef struct {
-  char  *name;
-  PyObject *(*get_attr)(void);
-  int (*set_attr)(PyObject *);
-} swig_globalvar;
-
-typedef struct swig_varlinkobject {
-  PyObject_HEAD
-  swig_globalvar **vars;
-  int      nvars;
-  int      maxvars;
-} swig_varlinkobject;
-
-/* ----------------------------------------------------------------------
-   swig_varlink_repr()
-
-   Function for python repr method
-   ---------------------------------------------------------------------- */
-
-static PyObject *
-swig_varlink_repr(swig_varlinkobject *v)
-{
-  v = v;
-  return PyString_FromString("<Global variables>");
-}
-
-/* ---------------------------------------------------------------------
-   swig_varlink_print()
-
-   Print out all of the global variable names
-   --------------------------------------------------------------------- */
-
-static int
-swig_varlink_print(swig_varlinkobject *v, FILE *fp, int flags)
-{
-
-  int i = 0;
-  flags = flags;
-  fprintf(fp,"Global variables { ");
-  while (v->vars[i]) {
-    fprintf(fp,"%s", v->vars[i]->name);
-    i++;
-    if (v->vars[i]) fprintf(fp,", ");
-  }
-  fprintf(fp," }\n");
-  return 0;
-}
-
-/* --------------------------------------------------------------------
-   swig_varlink_getattr
- 
-   This function gets the value of a variable and returns it as a
-   PyObject.   In our case, we'll be looking at the datatype and
-   converting into a number or string
-   -------------------------------------------------------------------- */
-
-static PyObject *
-swig_varlink_getattr(swig_varlinkobject *v, char *n)
-{
-  int i = 0;
-  char temp[128];
-
-  while (v->vars[i]) {
-    if (strcmp(v->vars[i]->name,n) == 0) {
-      return (*v->vars[i]->get_attr)();
-    }
-    i++;
-  }
-  sprintf(temp,"C global variable %s not found.", n);
-  PyErr_SetString(PyExc_NameError,temp);
-  return NULL;
-}
-
-/* -------------------------------------------------------------------
-   swig_varlink_setattr()
-
-   This function sets the value of a variable.
-   ------------------------------------------------------------------- */
-
-static int
-swig_varlink_setattr(swig_varlinkobject *v, char *n, PyObject *p)
-{
-  char temp[128];
-  int i = 0;
-  while (v->vars[i]) {
-    if (strcmp(v->vars[i]->name,n) == 0) {
-      return (*v->vars[i]->set_attr)(p);
-    }
-    i++;
-  }
-  sprintf(temp,"C global variable %s not found.", n);
-  PyErr_SetString(PyExc_NameError,temp);
-  return 1;
-}
-
-statichere PyTypeObject varlinktype = {
-/*  PyObject_HEAD_INIT(&PyType_Type)  Note : This doesn't work on some machines */
-  PyObject_HEAD_INIT(0)              
-  0,
-  "varlink",                          /* Type name    */
-  sizeof(swig_varlinkobject),         /* Basic size   */
-  0,                                  /* Itemsize     */
-  0,                                  /* Deallocator  */ 
-  (printfunc) swig_varlink_print,     /* Print        */
-  (getattrfunc) swig_varlink_getattr, /* get attr     */
-  (setattrfunc) swig_varlink_setattr, /* Set attr     */
-  0,                                  /* tp_compare   */
-  (reprfunc) swig_varlink_repr,       /* tp_repr      */    
-  0,                                  /* tp_as_number */
-  0,                                  /* tp_as_mapping*/
-  0,                                  /* tp_hash      */
-};
-
-/* Create a variable linking object for use later */
-
-SWIGSTATIC PyObject *
-SWIG_newvarlink(void)
-{
-  swig_varlinkobject *result = 0;
-  result = PyMem_NEW(swig_varlinkobject,1);
-  varlinktype.ob_type = &PyType_Type;    /* Patch varlinktype into a PyType */
-  result->ob_type = &varlinktype;
-  /*  _Py_NewReference(result);  Does not seem to be necessary */
-  result->nvars = 0;
-  result->maxvars = 64;
-  result->vars = (swig_globalvar **) malloc(64*sizeof(swig_globalvar *));
-  result->vars[0] = 0;
-  result->ob_refcnt = 0;
-  Py_XINCREF((PyObject *) result);
-  return ((PyObject*) result);
-}
-
-SWIGSTATIC void
-SWIG_addvarlink(PyObject *p, char *name,
-	   PyObject *(*get_attr)(void), int (*set_attr)(PyObject *p))
-{
-  swig_varlinkobject *v;
-  v= (swig_varlinkobject *) p;
-	
-  if (v->nvars >= v->maxvars -1) {
-    v->maxvars = 2*v->maxvars;
-    v->vars = (swig_globalvar **) realloc(v->vars,v->maxvars*sizeof(swig_globalvar *));
-    if (v->vars == NULL) {
-      fprintf(stderr,"SWIG : Fatal error in initializing Python module.\n");
-      exit(1);
-    }
-  }
-  v->vars[v->nvars] = (swig_globalvar *) malloc(sizeof(swig_globalvar));
-  v->vars[v->nvars]->name = (char *) malloc(strlen(name)+1);
-  strcpy(v->vars[v->nvars]->name,name);
-  v->vars[v->nvars]->get_attr = get_attr;
-  v->vars[v->nvars]->set_attr = set_attr;
-  v->nvars++;
-  v->vars[v->nvars] = 0;
-}
-
-
-
-/*****************************************************************************
- * $Header: /home/zmoelnig/cvs2svn/pure-data/puredata_cvsbackup/extensions/gripd/src/joystick_wrap.c,v 1.1.1.1 2005-11-10 05:52:09 eighthave Exp $
- *
- * swigptr.swg
- *
- * This file contains supporting code for the SWIG run-time type checking
- * mechanism.  The following functions are available :
- *
- * SWIG_RegisterMapping(char *origtype, char *newtype, void *(*cast)(void *));
- *
- *      Registers a new type-mapping with the type-checker.  origtype is the
- *      original datatype and newtype is an equivalent type.  cast is optional
- *      pointer to a function to cast pointer values between types (this
- *      is typically used to cast pointers from derived classes to base classes in C++)
- *      
- * SWIG_MakePtr(char *buffer, void *ptr, char *typestring);
- *     
- *      Makes a pointer string from a pointer and typestring.  The result is returned
- *      in buffer which is assumed to hold enough space for the result.
- *
- * char * SWIG_GetPtr(char *buffer, void **ptr, char *type)
- *
- *      Gets a pointer value from a string.  If there is a type-mismatch, returns
- *      a character string to the received type.  On success, returns NULL.
- *
- *
- * You can remap these functions by making a file called "swigptr.swg" in
- * your the same directory as the interface file you are wrapping.
- *
- * These functions are normally declared static, but this file can be
- * can be used in a multi-module environment by redefining the symbol
- * SWIGSTATIC.
- *****************************************************************************/
-
-#include <stdlib.h>
-
-#ifdef SWIG_GLOBAL
-#ifdef __cplusplus
-#define SWIGSTATIC extern "C"
-#else
-#define SWIGSTATIC
-#endif
-#endif
-
-#ifndef SWIGSTATIC
-#define SWIGSTATIC static
-#endif
-
-
-/* SWIG pointer structure */
-
-typedef struct SwigPtrType {
-  char               *name;               /* Datatype name                  */
-  int                 len;                /* Length (used for optimization) */
-  void               *(*cast)(void *);    /* Pointer casting function       */
-  struct SwigPtrType *next;               /* Linked list pointer            */
-} SwigPtrType;
-
-/* Pointer cache structure */
-
-typedef struct {
-  int                 stat;               /* Status (valid) bit             */
-  SwigPtrType        *tp;                 /* Pointer to type structure      */
-  char                name[256];          /* Given datatype name            */
-  char                mapped[256];        /* Equivalent name                */
-} SwigCacheType;
-
-/* Some variables  */
-
-static int SwigPtrMax  = 64;           /* Max entries that can be currently held */
-                                       /* This value may be adjusted dynamically */
-static int SwigPtrN    = 0;            /* Current number of entries              */
-static int SwigPtrSort = 0;            /* Status flag indicating sort            */
-static int SwigStart[256];             /* Starting positions of types            */
-
-/* Pointer table */
-static SwigPtrType *SwigPtrTable = 0;  /* Table containing pointer equivalences  */
-
-/* Cached values */
-
-#define SWIG_CACHESIZE  8
-#define SWIG_CACHEMASK  0x7
-static SwigCacheType SwigCache[SWIG_CACHESIZE];  
-static int SwigCacheIndex = 0;
-static int SwigLastCache = 0;
-
-/* Sort comparison function */
-static int swigsort(const void *data1, const void *data2) {
-	SwigPtrType *d1 = (SwigPtrType *) data1;
-	SwigPtrType *d2 = (SwigPtrType *) data2;
-	return strcmp(d1->name,d2->name);
-}
-
-/* Binary Search function */
-static int swigcmp(const void *key, const void *data) {
-  char *k = (char *) key;
-  SwigPtrType *d = (SwigPtrType *) data;
-  return strncmp(k,d->name,d->len);
-}
-
-/* Register a new datatype with the type-checker */
-
-SWIGSTATIC 
-void SWIG_RegisterMapping(char *origtype, char *newtype, void *(*cast)(void *)) {
-
-  int i;
-  SwigPtrType *t = 0,*t1;
-
-  /* Allocate the pointer table if necessary */
-
-  if (!SwigPtrTable) {     
-    SwigPtrTable = (SwigPtrType *) malloc(SwigPtrMax*sizeof(SwigPtrType));
-    SwigPtrN = 0;
-  }
-  /* Grow the table */
-  if (SwigPtrN >= SwigPtrMax) {
-    SwigPtrMax = 2*SwigPtrMax;
-    SwigPtrTable = (SwigPtrType *) realloc((char *) SwigPtrTable,SwigPtrMax*sizeof(SwigPtrType));
-  }
-  for (i = 0; i < SwigPtrN; i++)
-    if (strcmp(SwigPtrTable[i].name,origtype) == 0) {
-      t = &SwigPtrTable[i];
-      break;
-    }
-  if (!t) {
-    t = &SwigPtrTable[SwigPtrN];
-    t->name = origtype;
-    t->len = strlen(t->name);
-    t->cast = 0;
-    t->next = 0;
-    SwigPtrN++;
-  }
-
-  /* Check for existing entry */
-
-  while (t->next) {
-    if ((strcmp(t->name,newtype) == 0)) {
-      if (cast) t->cast = cast;
-      return;
-    }
-    t = t->next;
-  }
-  
-  /* Now place entry (in sorted order) */
-
-  t1 = (SwigPtrType *) malloc(sizeof(SwigPtrType));
-  t1->name = newtype;
-  t1->len = strlen(t1->name);
-  t1->cast = cast;
-  t1->next = 0;            
-  t->next = t1;           
-  SwigPtrSort = 0;
-}
-
-/* Make a pointer value string */
-
-SWIGSTATIC 
-void SWIG_MakePtr(char *_c, const void *_ptr, char *type) {
-  static char _hex[16] =
-  {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-   'a', 'b', 'c', 'd', 'e', 'f'};
-  unsigned long _p, _s;
-  char _result[20], *_r;    /* Note : a 64-bit hex number = 16 digits */
-  _r = _result;
-  _p = (unsigned long) _ptr;
-  if (_p > 0) {
-    while (_p > 0) {
-      _s = _p & 0xf;
-      *(_r++) = _hex[_s];
-      _p = _p >> 4;
-    }
-    *_r = '_';
-    while (_r >= _result)
-      *(_c++) = *(_r--);
-  } else {
-    strcpy (_c, "NULL");
-  }
-  if (_ptr)
-    strcpy (_c, type);
-}
-
-/* Define for backwards compatibility */
-
-#define _swig_make_hex   SWIG_MakePtr 
-
-/* Function for getting a pointer value */
-
-SWIGSTATIC 
-char *SWIG_GetPtr(char *_c, void **ptr, char *_t)
-{
-  unsigned long _p;
-  char temp_type[256];
-  char *name;
-  int  i, len;
-  SwigPtrType *sp,*tp;
-  SwigCacheType *cache;
-  int  start, end;
-  _p = 0;
-
-  /* Pointer values must start with leading underscore */
-  if (*_c == '_') {
-      _c++;
-      /* Extract hex value from pointer */
-      while (*_c) {
-	  if ((*_c >= '0') && (*_c <= '9'))
-	    _p = (_p << 4) + (*_c - '0');
-	  else if ((*_c >= 'a') && (*_c <= 'f'))
-	    _p = (_p << 4) + ((*_c - 'a') + 10);
-	  else
-	    break;
-	  _c++;
-      }
-
-      if (_t) {
-	if (strcmp(_t,_c)) { 
-	  if (!SwigPtrSort) {
-	    qsort((void *) SwigPtrTable, SwigPtrN, sizeof(SwigPtrType), swigsort); 
-	    for (i = 0; i < 256; i++) {
-	      SwigStart[i] = SwigPtrN;
-	    }
-	    for (i = SwigPtrN-1; i >= 0; i--) {
-	      SwigStart[(int) (SwigPtrTable[i].name[1])] = i;
-	    }
-	    for (i = 255; i >= 1; i--) {
-	      if (SwigStart[i-1] > SwigStart[i])
-		SwigStart[i-1] = SwigStart[i];
-	    }
-	    SwigPtrSort = 1;
-	    for (i = 0; i < SWIG_CACHESIZE; i++)  
-	      SwigCache[i].stat = 0;
-	  }
-	  
-	  /* First check cache for matches.  Uses last cache value as starting point */
-	  cache = &SwigCache[SwigLastCache];
-	  for (i = 0; i < SWIG_CACHESIZE; i++) {
-	    if (cache->stat) {
-	      if (strcmp(_t,cache->name) == 0) {
-		if (strcmp(_c,cache->mapped) == 0) {
-		  cache->stat++;
-		  *ptr = (void *) _p;
-		  if (cache->tp->cast) *ptr = (*(cache->tp->cast))(*ptr);
-		  return (char *) 0;
-		}
-	      }
-	    }
-	    SwigLastCache = (SwigLastCache+1) & SWIG_CACHEMASK;
-	    if (!SwigLastCache) cache = SwigCache;
-	    else cache++;
-	  }
-	  /* We have a type mismatch.  Will have to look through our type
-	     mapping table to figure out whether or not we can accept this datatype */
-
-	  start = SwigStart[(int) _t[1]];
-	  end = SwigStart[(int) _t[1]+1];
-	  sp = &SwigPtrTable[start];
-	  while (start < end) {
-	    if (swigcmp(_t,sp) == 0) break;
-	    sp++;
-	    start++;
-	  }
-	  if (start >= end) sp = 0;
-	  /* Try to find a match for this */
-	  if (sp) {
-	    while (swigcmp(_t,sp) == 0) {
-	      name = sp->name;
-	      len = sp->len;
-	      tp = sp->next;
-	      /* Try to find entry for our given datatype */
-	      while(tp) {
-		if (tp->len >= 255) {
-		  return _c;
-		}
-		strcpy(temp_type,tp->name);
-		strncat(temp_type,_t+len,255-tp->len);
-		if (strcmp(_c,temp_type) == 0) {
-		  
-		  strcpy(SwigCache[SwigCacheIndex].mapped,_c);
-		  strcpy(SwigCache[SwigCacheIndex].name,_t);
-		  SwigCache[SwigCacheIndex].stat = 1;
-		  SwigCache[SwigCacheIndex].tp = tp;
-		  SwigCacheIndex = SwigCacheIndex & SWIG_CACHEMASK;
-		  
-		  /* Get pointer value */
-		  *ptr = (void *) _p;
-		  if (tp->cast) *ptr = (*(tp->cast))(*ptr);
-		  return (char *) 0;
-		}
-		tp = tp->next;
-	      }
-	      sp++;
-	      /* Hmmm. Didn't find it this time */
-	    }
-	  }
-	  /* Didn't find any sort of match for this data.  
-	     Get the pointer value and return the received type */
-	  *ptr = (void *) _p;
-	  return _c;
-	} else {
-	  /* Found a match on the first try.  Return pointer value */
-	  *ptr = (void *) _p;
-	  return (char *) 0;
-	}
-      } else {
-	/* No type specified.  Good luck */
-	*ptr = (void *) _p;
-	return (char *) 0;
-      }
-  } else {
-    if (strcmp (_c, "NULL") == 0) {
-	*ptr = (void *) 0;
-	return (char *) 0;
-    }
-    *ptr = (void *) 0;	
-    return _c;
-  }
-}
-
-/* Compatibility mode */
-
-#define _swig_get_hex  SWIG_GetPtr
-
-#define SWIG_init    initjoystick
-
-#define SWIG_name    "joystick"
-
-extern int closeDevice(int);
-extern int openDevice(char *);
-extern int readEvents(int);
-extern int getEventCount(int);
-extern int getEventType(int, int);
-extern int getEventNumber(int, int);
-extern int getEventValue(int, int);
-static PyObject *_wrap_closeDevice(PyObject *self, PyObject *args) {
-    PyObject * _resultobj;
-    int  _result;
-    int  _arg0;
-
-    self = self;
-    if(!PyArg_ParseTuple(args,"i:closeDevice",&_arg0)) 
-        return NULL;
-    _result = (int )closeDevice(_arg0);
-    _resultobj = Py_BuildValue("i",_result);
-    return _resultobj;
-}
-
-static PyObject *_wrap_openDevice(PyObject *self, PyObject *args) {
-    PyObject * _resultobj;
-    int  _result;
-    char * _arg0;
-
-    self = self;
-    if(!PyArg_ParseTuple(args,"s:openDevice",&_arg0)) 
-        return NULL;
-    _result = (int )openDevice(_arg0);
-    _resultobj = Py_BuildValue("i",_result);
-    return _resultobj;
-}
-
-static PyObject *_wrap_readEvents(PyObject *self, PyObject *args) {
-    PyObject * _resultobj;
-    int  _result;
-    int  _arg0;
-
-    self = self;
-    if(!PyArg_ParseTuple(args,"i:readEvents",&_arg0)) 
-        return NULL;
-    _result = (int )readEvents(_arg0);
-    _resultobj = Py_BuildValue("i",_result);
-    return _resultobj;
-}
-
-static PyObject *_wrap_getEventCount(PyObject *self, PyObject *args) {
-    PyObject * _resultobj;
-    int  _result;
-    int _arg0;
-
-    self = self;
-    if(!PyArg_ParseTuple(args,"i:getEventCount",&_arg0)) 
-        return NULL;
-    _result = (int )getEventCount(_arg0);
-    _resultobj = Py_BuildValue("i",_result);
-    return _resultobj;
-}
-
-static PyObject *_wrap_getEventType(PyObject *self, PyObject *args) {
-    PyObject * _resultobj;
-    int  _result;
-    int  _arg0;
-    int  _arg1;
-
-    self = self;
-    if(!PyArg_ParseTuple(args,"ii:getEventType",&_arg0,&_arg1)) 
-        return NULL;
-    _result = (int )getEventType(_arg0,_arg1);
-    _resultobj = Py_BuildValue("i",_result);
-    return _resultobj;
-}
-
-static PyObject *_wrap_getEventNumber(PyObject *self, PyObject *args) {
-    PyObject * _resultobj;
-    int  _result;
-    int  _arg0;
-    int  _arg1;
-
-    self = self;
-    if(!PyArg_ParseTuple(args,"ii:getEventNumber",&_arg0,&_arg1)) 
-        return NULL;
-    _result = (int )getEventNumber(_arg0,_arg1);
-    _resultobj = Py_BuildValue("i",_result);
-    return _resultobj;
-}
-
-static PyObject *_wrap_getEventValue(PyObject *self, PyObject *args) {
-    PyObject * _resultobj;
-    int  _result;
-    int  _arg0;
-    int  _arg1;
-
-    self = self;
-    if(!PyArg_ParseTuple(args,"ii:getEventValue",&_arg0,&_arg1)) 
-        return NULL;
-    _result = (int )getEventValue(_arg0,_arg1);
-    _resultobj = Py_BuildValue("i",_result);
-    return _resultobj;
-}
-
-static PyMethodDef joystickMethods[] = {
-	 { "getEventValue", _wrap_getEventValue, 1 },
-	 { "getEventNumber", _wrap_getEventNumber, 1 },
-	 { "getEventType", _wrap_getEventType, 1 },
-	 { "getEventCount", _wrap_getEventCount, 1 },
-	 { "readEvents", _wrap_readEvents, 1 },
-	 { "openDevice", _wrap_openDevice, 1 },
-	 { "closeDevice", _wrap_closeDevice, 1 },
-	 { NULL, NULL }
-};
-static PyObject *SWIG_globals;
-#ifdef __cplusplus
-extern "C" 
-#endif
-SWIGEXPORT(void,initjoystick)() {
-	 PyObject *m, *d;
-	 SWIG_globals = SWIG_newvarlink();
-	 m = Py_InitModule("joystick", joystickMethods);
-	 d = PyModule_GetDict(m);
-/*
- * These are the pointer type-equivalency mappings. 
- * (Used by the SWIG pointer type-checker).
- */
-	 SWIG_RegisterMapping("_signed_long","_long",0);
-	 SWIG_RegisterMapping("_long","_unsigned_long",0);
-	 SWIG_RegisterMapping("_long","_signed_long",0);
-	 SWIG_RegisterMapping("_unsigned_long","_long",0);
-	 SWIG_RegisterMapping("_signed_int","_int",0);
-	 SWIG_RegisterMapping("_unsigned_short","_short",0);
-	 SWIG_RegisterMapping("_signed_short","_short",0);
-	 SWIG_RegisterMapping("_unsigned_int","_int",0);
-	 SWIG_RegisterMapping("_short","_unsigned_short",0);
-	 SWIG_RegisterMapping("_short","_signed_short",0);
-	 SWIG_RegisterMapping("_int","_unsigned_int",0);
-	 SWIG_RegisterMapping("_int","_signed_int",0);
-}
diff --git a/extensions/gripd/src/makefile b/extensions/gripd/src/makefile
deleted file mode 100644
index f44bf91ba..000000000
--- a/extensions/gripd/src/makefile
+++ /dev/null
@@ -1,44 +0,0 @@
-#--------------------------------------------------------------
-
-current: gripd_linux
-clean: clean_linux
-
-#----------- Options (all OS) --------------------------------
-
-MIDI = TRUE
-#MIDI = FALSE
-JOYSTICK = TRUE
-#JOYSTICK = FALSE
-
-#----------- Settings (Linux) --------------------------------
-
-MIDIOSSUBTYPE = ALSA
-#MIDIOSSUBTYPE = OSS
-PDINCLUDE =  -I../../src -I../../../pd/src
-LINUXPYTHONINCLUDE = -I/usr/include/python2.5
-SYSTEMLIBDIR = /usr/lib
-
-#----------- Settings (Windows) -------------------------------
-
-VC = "C:\Program Files\Microsoft Visual Studio\VC98"
-PYTHONHOME = C:\python22
-PYTHONVER = 22
-PDNTSRCDIR = C:\pd-37\src
-PDNTLDIR = C:\pd-37\bin
-  
-#----------- Linux --------------------------------------------
-
-gripd_linux: 
-	make -f Makefile.Linux all
-clean_linux: 
-	make -f Makefile.Linux linux_clean
-
-#----------- Win32---------------------------------------------
-
-gripd_nt: 
-	nmake -f Makefile.NT all
-clean_nt: 
-	nmake -f Makefile.NT nt_clean
-
-
-
diff --git a/extensions/gripd/src/midi.cpp b/extensions/gripd/src/midi.cpp
deleted file mode 100644
index 1d634467e..000000000
--- a/extensions/gripd/src/midi.cpp
+++ /dev/null
@@ -1,146 +0,0 @@
-/* GrIPD v0.1.1 - Graphical Interface for Pure Data
-** Copyright (C) 2003 Joseph A. Sarlo
-**
-** This program is free software; you can redistribute it and/or
-** modify it under the terms of the GNU General Public License
-** as published by the Free Software Foundation; either version 2
-** of the License, or (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-**
-** jsarlo@ucsd.edu
-*/
-
-#include "midiiolib.h"
-#include <stdio.h>
-#ifndef NT
-#include <unistd.h>
-#endif
-#define MAXDEVS 16
-#define MAXEVENTS 4096
-
-#ifndef VISUAL
-using namespace std;
-#endif
-
-static int eventCount[MAXDEVS];
-static int eventCommand[MAXEVENTS][MAXDEVS];
-static int eventP0[MAXEVENTS][MAXDEVS];
-static int eventP1[MAXEVENTS][MAXDEVS];
-static int eventP2[MAXEVENTS][MAXDEVS];
-static int eventP3[MAXEVENTS][MAXDEVS];
-static MidiInput mInput[MAXDEVS];
-static int devCount = 0;
-static int devList[MAXDEVS];
-
-int openDevice(int dev) {
-    int i, devId, numPorts;
-   
-    numPorts = MidiInPort::getNumPorts();
-    if (dev >= numPorts || dev < 0) {
-        return (-1);
-    }
-    else {
-        if (devCount == 0) {
-            for (i = 0; i < MAXDEVS; i++) {
-                devList[i] = 0;
-            }
-        }
-        for (i = 0; i < MAXDEVS; i++) {
-            if (devList[i] == 0) {
-                devId = i;
-                i = MAXDEVS;
-            }
-        }
-        devCount++;
-        eventCount[devId] = 0;
-        devList[devId] = 1;
-        mInput[devId].setPort(dev);
-        mInput[devId].open();
-        return (devId);
-    }
-}
-
-int closeDevice(int devno) {
-    if (devList[devno]) {
-        devCount--;
-        devList[devno] = 0;
-#ifndef LINUX
-        mInput[devno].close();
-#endif
-        return (1);
-    }
-    else
-        return (-1);
-}
-    
-int readEvents(int devno) {
-    int i;
-    MidiMessage message;
-    
-    if (devno < 0 || devno >= MAXDEVS)
-        return (-1);
-    eventCount[devno] = mInput[devno].getCount();
-    if (eventCount[devno] > MAXEVENTS) {
-        eventCount[devno] = MAXEVENTS;
-    }
-    for (i = 0; i < eventCount[devno]; i++) {
-        message = mInput[devno].extract();
-        eventCommand[i][devno] = message.getCommand();
-        eventP0[i][devno] = message.getP0();
-        eventP1[i][devno] = message.getP1();
-        eventP2[i][devno] = message.getP2();
-        eventP3[i][devno] = message.getP3();
-    }
-    return (eventCount[devno]);
-}
-
-int getEventCount(int devno) {
-    if (devno < 0 || devno >= MAXDEVS)
-        return (-1);
-    else
-        return (eventCount[devno]);
-}
-
-int getEventCommand(int devno, int eNum) {
-    if (eNum < 0 || eNum >= eventCount[devno] || devno < 0 || devno >= MAXDEVS)
-        return (-1);
-    else
-        return eventCommand[eNum][devno];
-}
-
-int getEventP0(int devno, int eNum) {
-    if (eNum < 0 || eNum >= eventCount[devno] || devno < 0 || devno >= MAXDEVS)
-        return (-1);
-    else
-        return eventP0[eNum][devno];
-}
-
-int getEventP1(int devno, int eNum) {
-    if (eNum < 0 || eNum >= eventCount[devno] || devno < 0 || devno >= MAXDEVS)
-        return (-1);
-    else
-        return eventP1[eNum][devno];
-}
-
-int getEventP2(int devno, int eNum) {
-    if (eNum < 0 || eNum >= eventCount[devno] || devno < 0 || devno >= MAXDEVS)
-        return (-1);
-    else
-        return eventP2[eNum][devno];
-}
-
-int getEventP3(int devno, int eNum) {
-    if (eNum < 0 || eNum >= eventCount[devno] || devno < 0 || devno >= MAXDEVS)
-        return (-1);
-    else
-        return eventP3[eNum][devno];
-}
-
diff --git a/extensions/gripd/src/midi_wrap.c b/extensions/gripd/src/midi_wrap.c
deleted file mode 100644
index 7b4ad15ce..000000000
--- a/extensions/gripd/src/midi_wrap.c
+++ /dev/null
@@ -1,723 +0,0 @@
-/*
- * FILE : midi_wrap.c
- * 
- * This file was automatically generated by :
- * Simplified Wrapper and Interface Generator (SWIG)
- * Version 1.1 (Patch 5)
- * 
- * Portions Copyright (c) 1995-1998
- * The University of Utah and The Regents of the University of California.
- * Permission is granted to distribute this file in any manner provided
- * this notice remains intact.
- * 
- * Do not make changes to this file--changes will be lost!
- *
- */
-
-
-#define SWIGCODE
-/* Implementation : PYTHON */
-
-#define SWIGPYTHON
-#include <string.h>
-#include <stdlib.h>
-/***********************************************************************
- * $Header: /home/zmoelnig/cvs2svn/pure-data/puredata_cvsbackup/extensions/gripd/src/midi_wrap.c,v 1.1.1.1 2005-11-10 05:52:09 eighthave Exp $
- * swig_lib/python/python.cfg
- *
- * This file contains coded needed to add variable linking to the
- * Python interpreter.   C variables are added as a new kind of Python
- * datatype.
- *
- * Also contains supporting code for building python under Windows
- * and things like that.
- *
- * $Log: not supported by cvs2svn $
- ************************************************************************/
-
-#ifdef __cplusplus
-#include "Python.h"
-extern "C" {
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-/* Definitions for Windows/Unix exporting */
-#if defined(__WIN32__)
-#   if defined(_MSC_VER)
-#	define SWIGEXPORT(a,b) __declspec(dllexport) a b
-#   else
-#	if defined(__BORLANDC__)
-#	    define SWIGEXPORT(a,b) a _export b
-#	else
-#	    define SWIGEXPORT(a,b) a b
-#	endif
-#   endif
-#else
-#   define SWIGEXPORT(a,b) a b
-#endif
-
-#ifdef SWIG_GLOBAL
-#ifdef __cplusplus
-#define SWIGSTATIC extern "C"
-#else
-#define SWIGSTATIC
-#endif
-#endif
-
-#ifndef SWIGSTATIC
-#define SWIGSTATIC static
-#endif
-
-typedef struct {
-  char  *name;
-  PyObject *(*get_attr)(void);
-  int (*set_attr)(PyObject *);
-} swig_globalvar;
-
-typedef struct swig_varlinkobject {
-  PyObject_HEAD
-  swig_globalvar **vars;
-  int      nvars;
-  int      maxvars;
-} swig_varlinkobject;
-
-/* ----------------------------------------------------------------------
-   swig_varlink_repr()
-
-   Function for python repr method
-   ---------------------------------------------------------------------- */
-
-static PyObject *
-swig_varlink_repr(swig_varlinkobject *v)
-{
-  v = v;
-  return PyString_FromString("<Global variables>");
-}
-
-/* ---------------------------------------------------------------------
-   swig_varlink_print()
-
-   Print out all of the global variable names
-   --------------------------------------------------------------------- */
-
-static int
-swig_varlink_print(swig_varlinkobject *v, FILE *fp, int flags)
-{
-
-  int i = 0;
-  flags = flags;
-  fprintf(fp,"Global variables { ");
-  while (v->vars[i]) {
-    fprintf(fp,"%s", v->vars[i]->name);
-    i++;
-    if (v->vars[i]) fprintf(fp,", ");
-  }
-  fprintf(fp," }\n");
-  return 0;
-}
-
-/* --------------------------------------------------------------------
-   swig_varlink_getattr
- 
-   This function gets the value of a variable and returns it as a
-   PyObject.   In our case, we'll be looking at the datatype and
-   converting into a number or string
-   -------------------------------------------------------------------- */
-
-static PyObject *
-swig_varlink_getattr(swig_varlinkobject *v, char *n)
-{
-  int i = 0;
-  char temp[128];
-
-  while (v->vars[i]) {
-    if (strcmp(v->vars[i]->name,n) == 0) {
-      return (*v->vars[i]->get_attr)();
-    }
-    i++;
-  }
-  sprintf(temp,"C global variable %s not found.", n);
-  PyErr_SetString(PyExc_NameError,temp);
-  return NULL;
-}
-
-/* -------------------------------------------------------------------
-   swig_varlink_setattr()
-
-   This function sets the value of a variable.
-   ------------------------------------------------------------------- */
-
-static int
-swig_varlink_setattr(swig_varlinkobject *v, char *n, PyObject *p)
-{
-  char temp[128];
-  int i = 0;
-  while (v->vars[i]) {
-    if (strcmp(v->vars[i]->name,n) == 0) {
-      return (*v->vars[i]->set_attr)(p);
-    }
-    i++;
-  }
-  sprintf(temp,"C global variable %s not found.", n);
-  PyErr_SetString(PyExc_NameError,temp);
-  return 1;
-}
-
-statichere PyTypeObject varlinktype = {
-/*  PyObject_HEAD_INIT(&PyType_Type)  Note : This doesn't work on some machines */
-  PyObject_HEAD_INIT(0)              
-  0,
-  "varlink",                          /* Type name    */
-  sizeof(swig_varlinkobject),         /* Basic size   */
-  0,                                  /* Itemsize     */
-  0,                                  /* Deallocator  */ 
-  (printfunc) swig_varlink_print,     /* Print        */
-  (getattrfunc) swig_varlink_getattr, /* get attr     */
-  (setattrfunc) swig_varlink_setattr, /* Set attr     */
-  0,                                  /* tp_compare   */
-  (reprfunc) swig_varlink_repr,       /* tp_repr      */    
-  0,                                  /* tp_as_number */
-  0,                                  /* tp_as_mapping*/
-  0,                                  /* tp_hash      */
-};
-
-/* Create a variable linking object for use later */
-
-SWIGSTATIC PyObject *
-SWIG_newvarlink(void)
-{
-  swig_varlinkobject *result = 0;
-  result = PyMem_NEW(swig_varlinkobject,1);
-  varlinktype.ob_type = &PyType_Type;    /* Patch varlinktype into a PyType */
-  result->ob_type = &varlinktype;
-  /*  _Py_NewReference(result);  Does not seem to be necessary */
-  result->nvars = 0;
-  result->maxvars = 64;
-  result->vars = (swig_globalvar **) malloc(64*sizeof(swig_globalvar *));
-  result->vars[0] = 0;
-  result->ob_refcnt = 0;
-  Py_XINCREF((PyObject *) result);
-  return ((PyObject*) result);
-}
-
-SWIGSTATIC void
-SWIG_addvarlink(PyObject *p, char *name,
-	   PyObject *(*get_attr)(void), int (*set_attr)(PyObject *p))
-{
-  swig_varlinkobject *v;
-  v= (swig_varlinkobject *) p;
-	
-  if (v->nvars >= v->maxvars -1) {
-    v->maxvars = 2*v->maxvars;
-    v->vars = (swig_globalvar **) realloc(v->vars,v->maxvars*sizeof(swig_globalvar *));
-    if (v->vars == NULL) {
-      fprintf(stderr,"SWIG : Fatal error in initializing Python module.\n");
-      exit(1);
-    }
-  }
-  v->vars[v->nvars] = (swig_globalvar *) malloc(sizeof(swig_globalvar));
-  v->vars[v->nvars]->name = (char *) malloc(strlen(name)+1);
-  strcpy(v->vars[v->nvars]->name,name);
-  v->vars[v->nvars]->get_attr = get_attr;
-  v->vars[v->nvars]->set_attr = set_attr;
-  v->nvars++;
-  v->vars[v->nvars] = 0;
-}
-
-
-
-/*****************************************************************************
- * $Header: /home/zmoelnig/cvs2svn/pure-data/puredata_cvsbackup/extensions/gripd/src/midi_wrap.c,v 1.1.1.1 2005-11-10 05:52:09 eighthave Exp $
- *
- * swigptr.swg
- *
- * This file contains supporting code for the SWIG run-time type checking
- * mechanism.  The following functions are available :
- *
- * SWIG_RegisterMapping(char *origtype, char *newtype, void *(*cast)(void *));
- *
- *      Registers a new type-mapping with the type-checker.  origtype is the
- *      original datatype and newtype is an equivalent type.  cast is optional
- *      pointer to a function to cast pointer values between types (this
- *      is typically used to cast pointers from derived classes to base classes in C++)
- *      
- * SWIG_MakePtr(char *buffer, void *ptr, char *typestring);
- *     
- *      Makes a pointer string from a pointer and typestring.  The result is returned
- *      in buffer which is assumed to hold enough space for the result.
- *
- * char * SWIG_GetPtr(char *buffer, void **ptr, char *type)
- *
- *      Gets a pointer value from a string.  If there is a type-mismatch, returns
- *      a character string to the received type.  On success, returns NULL.
- *
- *
- * You can remap these functions by making a file called "swigptr.swg" in
- * your the same directory as the interface file you are wrapping.
- *
- * These functions are normally declared static, but this file can be
- * can be used in a multi-module environment by redefining the symbol
- * SWIGSTATIC.
- *****************************************************************************/
-
-#include <stdlib.h>
-
-#ifdef SWIG_GLOBAL
-#ifdef __cplusplus
-#define SWIGSTATIC extern "C"
-#else
-#define SWIGSTATIC
-#endif
-#endif
-
-#ifndef SWIGSTATIC
-#define SWIGSTATIC static
-#endif
-
-
-/* SWIG pointer structure */
-
-typedef struct SwigPtrType {
-  char               *name;               /* Datatype name                  */
-  int                 len;                /* Length (used for optimization) */
-  void               *(*cast)(void *);    /* Pointer casting function       */
-  struct SwigPtrType *next;               /* Linked list pointer            */
-} SwigPtrType;
-
-/* Pointer cache structure */
-
-typedef struct {
-  int                 stat;               /* Status (valid) bit             */
-  SwigPtrType        *tp;                 /* Pointer to type structure      */
-  char                name[256];          /* Given datatype name            */
-  char                mapped[256];        /* Equivalent name                */
-} SwigCacheType;
-
-/* Some variables  */
-
-static int SwigPtrMax  = 64;           /* Max entries that can be currently held */
-                                       /* This value may be adjusted dynamically */
-static int SwigPtrN    = 0;            /* Current number of entries              */
-static int SwigPtrSort = 0;            /* Status flag indicating sort            */
-static int SwigStart[256];             /* Starting positions of types            */
-
-/* Pointer table */
-static SwigPtrType *SwigPtrTable = 0;  /* Table containing pointer equivalences  */
-
-/* Cached values */
-
-#define SWIG_CACHESIZE  8
-#define SWIG_CACHEMASK  0x7
-static SwigCacheType SwigCache[SWIG_CACHESIZE];  
-static int SwigCacheIndex = 0;
-static int SwigLastCache = 0;
-
-/* Sort comparison function */
-static int swigsort(const void *data1, const void *data2) {
-	SwigPtrType *d1 = (SwigPtrType *) data1;
-	SwigPtrType *d2 = (SwigPtrType *) data2;
-	return strcmp(d1->name,d2->name);
-}
-
-/* Binary Search function */
-static int swigcmp(const void *key, const void *data) {
-  char *k = (char *) key;
-  SwigPtrType *d = (SwigPtrType *) data;
-  return strncmp(k,d->name,d->len);
-}
-
-/* Register a new datatype with the type-checker */
-
-SWIGSTATIC 
-void SWIG_RegisterMapping(char *origtype, char *newtype, void *(*cast)(void *)) {
-
-  int i;
-  SwigPtrType *t = 0,*t1;
-
-  /* Allocate the pointer table if necessary */
-
-  if (!SwigPtrTable) {     
-    SwigPtrTable = (SwigPtrType *) malloc(SwigPtrMax*sizeof(SwigPtrType));
-    SwigPtrN = 0;
-  }
-  /* Grow the table */
-  if (SwigPtrN >= SwigPtrMax) {
-    SwigPtrMax = 2*SwigPtrMax;
-    SwigPtrTable = (SwigPtrType *) realloc((char *) SwigPtrTable,SwigPtrMax*sizeof(SwigPtrType));
-  }
-  for (i = 0; i < SwigPtrN; i++)
-    if (strcmp(SwigPtrTable[i].name,origtype) == 0) {
-      t = &SwigPtrTable[i];
-      break;
-    }
-  if (!t) {
-    t = &SwigPtrTable[SwigPtrN];
-    t->name = origtype;
-    t->len = strlen(t->name);
-    t->cast = 0;
-    t->next = 0;
-    SwigPtrN++;
-  }
-
-  /* Check for existing entry */
-
-  while (t->next) {
-    if ((strcmp(t->name,newtype) == 0)) {
-      if (cast) t->cast = cast;
-      return;
-    }
-    t = t->next;
-  }
-  
-  /* Now place entry (in sorted order) */
-
-  t1 = (SwigPtrType *) malloc(sizeof(SwigPtrType));
-  t1->name = newtype;
-  t1->len = strlen(t1->name);
-  t1->cast = cast;
-  t1->next = 0;            
-  t->next = t1;           
-  SwigPtrSort = 0;
-}
-
-/* Make a pointer value string */
-
-SWIGSTATIC 
-void SWIG_MakePtr(char *_c, const void *_ptr, char *type) {
-  static char _hex[16] =
-  {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-   'a', 'b', 'c', 'd', 'e', 'f'};
-  unsigned long _p, _s;
-  char _result[20], *_r;    /* Note : a 64-bit hex number = 16 digits */
-  _r = _result;
-  _p = (unsigned long) _ptr;
-  if (_p > 0) {
-    while (_p > 0) {
-      _s = _p & 0xf;
-      *(_r++) = _hex[_s];
-      _p = _p >> 4;
-    }
-    *_r = '_';
-    while (_r >= _result)
-      *(_c++) = *(_r--);
-  } else {
-    strcpy (_c, "NULL");
-  }
-  if (_ptr)
-    strcpy (_c, type);
-}
-
-/* Define for backwards compatibility */
-
-#define _swig_make_hex   SWIG_MakePtr 
-
-/* Function for getting a pointer value */
-
-SWIGSTATIC 
-char *SWIG_GetPtr(char *_c, void **ptr, char *_t)
-{
-  unsigned long _p;
-  char temp_type[256];
-  char *name;
-  int  i, len;
-  SwigPtrType *sp,*tp;
-  SwigCacheType *cache;
-  int  start, end;
-  _p = 0;
-
-  /* Pointer values must start with leading underscore */
-  if (*_c == '_') {
-      _c++;
-      /* Extract hex value from pointer */
-      while (*_c) {
-	  if ((*_c >= '0') && (*_c <= '9'))
-	    _p = (_p << 4) + (*_c - '0');
-	  else if ((*_c >= 'a') && (*_c <= 'f'))
-	    _p = (_p << 4) + ((*_c - 'a') + 10);
-	  else
-	    break;
-	  _c++;
-      }
-
-      if (_t) {
-	if (strcmp(_t,_c)) { 
-	  if (!SwigPtrSort) {
-	    qsort((void *) SwigPtrTable, SwigPtrN, sizeof(SwigPtrType), swigsort); 
-	    for (i = 0; i < 256; i++) {
-	      SwigStart[i] = SwigPtrN;
-	    }
-	    for (i = SwigPtrN-1; i >= 0; i--) {
-	      SwigStart[(int) (SwigPtrTable[i].name[1])] = i;
-	    }
-	    for (i = 255; i >= 1; i--) {
-	      if (SwigStart[i-1] > SwigStart[i])
-		SwigStart[i-1] = SwigStart[i];
-	    }
-	    SwigPtrSort = 1;
-	    for (i = 0; i < SWIG_CACHESIZE; i++)  
-	      SwigCache[i].stat = 0;
-	  }
-	  
-	  /* First check cache for matches.  Uses last cache value as starting point */
-	  cache = &SwigCache[SwigLastCache];
-	  for (i = 0; i < SWIG_CACHESIZE; i++) {
-	    if (cache->stat) {
-	      if (strcmp(_t,cache->name) == 0) {
-		if (strcmp(_c,cache->mapped) == 0) {
-		  cache->stat++;
-		  *ptr = (void *) _p;
-		  if (cache->tp->cast) *ptr = (*(cache->tp->cast))(*ptr);
-		  return (char *) 0;
-		}
-	      }
-	    }
-	    SwigLastCache = (SwigLastCache+1) & SWIG_CACHEMASK;
-	    if (!SwigLastCache) cache = SwigCache;
-	    else cache++;
-	  }
-	  /* We have a type mismatch.  Will have to look through our type
-	     mapping table to figure out whether or not we can accept this datatype */
-
-	  start = SwigStart[(int) _t[1]];
-	  end = SwigStart[(int) _t[1]+1];
-	  sp = &SwigPtrTable[start];
-	  while (start < end) {
-	    if (swigcmp(_t,sp) == 0) break;
-	    sp++;
-	    start++;
-	  }
-	  if (start >= end) sp = 0;
-	  /* Try to find a match for this */
-	  if (sp) {
-	    while (swigcmp(_t,sp) == 0) {
-	      name = sp->name;
-	      len = sp->len;
-	      tp = sp->next;
-	      /* Try to find entry for our given datatype */
-	      while(tp) {
-		if (tp->len >= 255) {
-		  return _c;
-		}
-		strcpy(temp_type,tp->name);
-		strncat(temp_type,_t+len,255-tp->len);
-		if (strcmp(_c,temp_type) == 0) {
-		  
-		  strcpy(SwigCache[SwigCacheIndex].mapped,_c);
-		  strcpy(SwigCache[SwigCacheIndex].name,_t);
-		  SwigCache[SwigCacheIndex].stat = 1;
-		  SwigCache[SwigCacheIndex].tp = tp;
-		  SwigCacheIndex = SwigCacheIndex & SWIG_CACHEMASK;
-		  
-		  /* Get pointer value */
-		  *ptr = (void *) _p;
-		  if (tp->cast) *ptr = (*(tp->cast))(*ptr);
-		  return (char *) 0;
-		}
-		tp = tp->next;
-	      }
-	      sp++;
-	      /* Hmmm. Didn't find it this time */
-	    }
-	  }
-	  /* Didn't find any sort of match for this data.  
-	     Get the pointer value and return the received type */
-	  *ptr = (void *) _p;
-	  return _c;
-	} else {
-	  /* Found a match on the first try.  Return pointer value */
-	  *ptr = (void *) _p;
-	  return (char *) 0;
-	}
-      } else {
-	/* No type specified.  Good luck */
-	*ptr = (void *) _p;
-	return (char *) 0;
-      }
-  } else {
-    if (strcmp (_c, "NULL") == 0) {
-	*ptr = (void *) 0;
-	return (char *) 0;
-    }
-    *ptr = (void *) 0;	
-    return _c;
-  }
-}
-
-/* Compatibility mode */
-
-#define _swig_get_hex  SWIG_GetPtr
-
-#define SWIG_init    initmidi
-
-#define SWIG_name    "midi"
-extern int openDevice(int );
-extern int closeDevice(int );
-extern int readEvents(int );
-extern int getEventCount(int );
-extern int getEventCommand(int ,int );
-extern int getEventP0(int ,int );
-extern int getEventP1(int ,int );
-extern int getEventP2(int ,int );
-extern int getEventP3(int ,int );
-static PyObject *_wrap_openDevice(PyObject *self, PyObject *args) {
-    PyObject * _resultobj;
-    int  _result;
-    int  _arg0;
-
-    self = self;
-    if(!PyArg_ParseTuple(args,"i:openDevice",&_arg0)) 
-        return NULL;
-    _result = (int )openDevice(_arg0);
-    _resultobj = Py_BuildValue("i",_result);
-    return _resultobj;
-}
-
-static PyObject *_wrap_closeDevice(PyObject *self, PyObject *args) {
-    PyObject * _resultobj;
-    int  _result;
-    int  _arg0;
-
-    self = self;
-    if(!PyArg_ParseTuple(args,"i:closeDevice",&_arg0)) 
-        return NULL;
-    _result = (int )closeDevice(_arg0);
-    _resultobj = Py_BuildValue("i",_result);
-    return _resultobj;
-}
-
-static PyObject *_wrap_readEvents(PyObject *self, PyObject *args) {
-    PyObject * _resultobj;
-    int  _result;
-    int  _arg0;
-
-    self = self;
-    if(!PyArg_ParseTuple(args,"i:readEvents",&_arg0)) 
-        return NULL;
-    _result = (int )readEvents(_arg0);
-    _resultobj = Py_BuildValue("i",_result);
-    return _resultobj;
-}
-
-static PyObject *_wrap_getEventCount(PyObject *self, PyObject *args) {
-    PyObject * _resultobj;
-    int  _result;
-    int  _arg0;
-
-    self = self;
-    if(!PyArg_ParseTuple(args,"i:getEventCount",&_arg0)) 
-        return NULL;
-    _result = (int )getEventCount(_arg0);
-    _resultobj = Py_BuildValue("i",_result);
-    return _resultobj;
-}
-
-static PyObject *_wrap_getEventCommand(PyObject *self, PyObject *args) {
-    PyObject * _resultobj;
-    int  _result;
-    int  _arg0;
-    int  _arg1;
-
-    self = self;
-    if(!PyArg_ParseTuple(args,"ii:getEventCommand",&_arg0,&_arg1)) 
-        return NULL;
-    _result = (int )getEventCommand(_arg0,_arg1);
-    _resultobj = Py_BuildValue("i",_result);
-    return _resultobj;
-}
-
-static PyObject *_wrap_getEventP0(PyObject *self, PyObject *args) {
-    PyObject * _resultobj;
-    int  _result;
-    int  _arg0;
-    int  _arg1;
-
-    self = self;
-    if(!PyArg_ParseTuple(args,"ii:getEventP0",&_arg0,&_arg1)) 
-        return NULL;
-    _result = (int )getEventP0(_arg0,_arg1);
-    _resultobj = Py_BuildValue("i",_result);
-    return _resultobj;
-}
-
-static PyObject *_wrap_getEventP1(PyObject *self, PyObject *args) {
-    PyObject * _resultobj;
-    int  _result;
-    int  _arg0;
-    int  _arg1;
-
-    self = self;
-    if(!PyArg_ParseTuple(args,"ii:getEventP1",&_arg0,&_arg1)) 
-        return NULL;
-    _result = (int )getEventP1(_arg0,_arg1);
-    _resultobj = Py_BuildValue("i",_result);
-    return _resultobj;
-}
-
-static PyObject *_wrap_getEventP2(PyObject *self, PyObject *args) {
-    PyObject * _resultobj;
-    int  _result;
-    int  _arg0;
-    int  _arg1;
-
-    self = self;
-    if(!PyArg_ParseTuple(args,"ii:getEventP2",&_arg0,&_arg1)) 
-        return NULL;
-    _result = (int )getEventP2(_arg0,_arg1);
-    _resultobj = Py_BuildValue("i",_result);
-    return _resultobj;
-}
-
-static PyObject *_wrap_getEventP3(PyObject *self, PyObject *args) {
-    PyObject * _resultobj;
-    int  _result;
-    int  _arg0;
-    int  _arg1;
-
-    self = self;
-    if(!PyArg_ParseTuple(args,"ii:getEventP3",&_arg0,&_arg1)) 
-        return NULL;
-    _result = (int )getEventP3(_arg0,_arg1);
-    _resultobj = Py_BuildValue("i",_result);
-    return _resultobj;
-}
-
-static PyMethodDef midiMethods[] = {
-	 { "getEventP3", _wrap_getEventP3, 1 },
-	 { "getEventP2", _wrap_getEventP2, 1 },
-	 { "getEventP1", _wrap_getEventP1, 1 },
-	 { "getEventP0", _wrap_getEventP0, 1 },
-	 { "getEventCommand", _wrap_getEventCommand, 1 },
-	 { "getEventCount", _wrap_getEventCount, 1 },
-	 { "readEvents", _wrap_readEvents, 1 },
-	 { "closeDevice", _wrap_closeDevice, 1 },
-	 { "openDevice", _wrap_openDevice, 1 },
-	 { NULL, NULL }
-};
-static PyObject *SWIG_globals;
-#ifdef __cplusplus
-extern "C" 
-#endif
-SWIGEXPORT(void,initmidi)() {
-	 PyObject *m, *d;
-	 SWIG_globals = SWIG_newvarlink();
-	 m = Py_InitModule("midi", midiMethods);
-	 d = PyModule_GetDict(m);
-/*
- * These are the pointer type-equivalency mappings. 
- * (Used by the SWIG pointer type-checker).
- */
-	 SWIG_RegisterMapping("_signed_long","_long",0);
-	 SWIG_RegisterMapping("_long","_unsigned_long",0);
-	 SWIG_RegisterMapping("_long","_signed_long",0);
-	 SWIG_RegisterMapping("_unsigned_long","_long",0);
-	 SWIG_RegisterMapping("_signed_int","_int",0);
-	 SWIG_RegisterMapping("_unsigned_short","_short",0);
-	 SWIG_RegisterMapping("_signed_short","_short",0);
-	 SWIG_RegisterMapping("_unsigned_int","_int",0);
-	 SWIG_RegisterMapping("_short","_unsigned_short",0);
-	 SWIG_RegisterMapping("_short","_signed_short",0);
-	 SWIG_RegisterMapping("_int","_unsigned_int",0);
-	 SWIG_RegisterMapping("_int","_signed_int",0);
-}
diff --git a/extensions/gripd/src/midiio/include/Array.cpp b/extensions/gripd/src/midiio/include/Array.cpp
deleted file mode 100644
index 005ed9bea..000000000
--- a/extensions/gripd/src/midiio/include/Array.cpp
+++ /dev/null
@@ -1,379 +0,0 @@
-//
-// Copyright 1997-1999 by Craig Stuart Sapp, All Rights Reserved.
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Wed Feb  5 19:42:53 PST 1997
-// Last Modified: Sun May 11 20:41:28 GMT-0800 1997
-// Last Modified: Wed Jul  7 11:44:50 PDT 1999 (added setAll() function)
-// Filename:      ...sig/maint/code/base/Array/Array.cpp
-// Web Address:   http://sig.sapp.org/src/sigBase/Array.cpp
-// Syntax:        C++ 
-//
-// Description:   An array which can grow dynamically.  Array is derived from 
-//                the Collection class and adds various mathematical operators
-//                to the Collection class.  The Array template class is used for
-//                storing numbers of any type which can be added, multiplied
-//                and divided into one another.
-//
-
-#ifndef _ARRAY_CPP_INCLUDED
-#define _ARRAY_CPP_INCLUDED
-
-#include "Array.h"
-#include <iostream>
-#include <stdlib.h>
-
-using namespace std;
-
-//////////////////////////////
-//
-// Array::Array 
-//
-
-template<class type>
-Array<type>::Array(void) : Collection<type>(4) { }
-
-template<class type>
-Array<type>::Array(int arraySize) : Collection<type>(arraySize) { }
-
-template<class type>
-Array<type>::Array(Array<type>& anArray) : Collection<type>(anArray) { }
-
-template<class type>
-Array<type>::Array(int arraySize, type *anArray) : 
-   Collection<type>(arraySize, anArray) { }
-
-
-
-
-//////////////////////////////
-//
-// Array::~Array
-//
-
-template<class type>
-Array<type>::~Array() { }
-
-
-
-//////////////////////////////
-//
-// Array::setAll -- sets the contents of each element to the 
-//   specified value
-//
-
-template<class type>
-void Array<type>::setAll(type aValue) {
-  for (int i=0; i<this->getSize(); i++) {
-    this->array[i] = aValue;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// Array::sum
-//
-
-template<class type>
-type Array<type>::sum(void) {
-   type theSum = 0;
-   for (int i=0; i<this->getSize(); i++) {
-     theSum += this->array[i];
-   }
-   return theSum;
-}
-
-template<class type>
-type Array<type>::sum(int loIndex, int hiIndex) {
-   type theSum = 0;
-   for (int i=loIndex; i<=hiIndex; i++) {
-      theSum += this->array[i];
-   }
-   return theSum;
-}
-
-
-
-//////////////////////////////
-//
-// Array::zero(-1, -1)
-//
-
-template<class type>
-void Array<type>::zero(int minIndex, int maxIndex) {
-   if (this->size == 0) return;
-   if (minIndex == -1) minIndex = 0;
-   if (maxIndex == -1) maxIndex = this->size - 1;
-
-   if (minIndex < 0 || maxIndex < 0 || minIndex > maxIndex ||
-       maxIndex >= this->size) {
-     cerr << "Error in zero function: min = " << minIndex
-           << " max = " << maxIndex << " size = " << this->size << this->endl;
-      exit(1);
-   }
-
-   for (int i=minIndex; i<=maxIndex; i++) {
-      this->array[i] = 0;
-   }
-}
-
-
-////////////////////////////////////////////////////////////////////////////
-//
-// operators
-//
-
-
-template<class type>
-int Array<type>::operator==(const Array<type>& aArray) {
-   if (this->getSize() != aArray.getSize()) {
-      return 0;
-   }
-   Array<type>& t = *this;
-   int i;
-   for (i=0; i<this->getSize(); i++) {
-      if (t[i] != aArray[i]) {
-         return 0;
-      }
-   }
-   return 1;
-}
-
-
-
-//////////////////////////////
-//
-// Array::operator=
-//
-
-template<class type>
-Array<type>& Array<type>::operator=(const Array<type>& anArray) {
-   if (this->allocSize < anArray.size) {
-      if (this->allocSize != 0) {
-         delete [] this->array;
-      }
-      this->allocSize = anArray.size;
-      this->size = anArray.size;
-      this->array = new type[this->size];
-      this->allowGrowthQ = anArray.allowGrowthQ;
-      this->growthAmount = anArray.growthAmount;
-      this->maxSize = anArray.maxSize;
-   }
-   this->size = anArray.size;
-   for (int i=0; i<this->size; i++) {
-      this->array[i] = anArray.array[i];
-   }
-
-   return *this;
-}
-
-
-
-//////////////////////////////
-//
-// Array::operator+=
-//
-
-template<class type>
-Array<type>& Array<type>::operator+=(const Array<type>& anArray) {
-   if (this->size != anArray.size) {
-      cerr << "Error: different size arrays " << this->size << " and " 
-           << anArray.size << endl;
-      exit(1);
-   }
-
-   for (int i=0; i<this->size; i++) {
-      this->array[i] += anArray.array[i];
-   }
-
-   return *this;
-}
-
-
-
-//////////////////////////////
-//
-// Array::operator+
-//
-
-template<class type>
-Array<type> Array<type>::operator+(const Array<type>& anArray) const {
-   if (this->size != anArray.size) {
-      cerr << "Error: different size arrays " << this->size << " and " 
-           << anArray.size << endl;
-      exit(1);
-   }
-
-   Array<type> bArray(*this);
-   bArray += anArray;
-   return bArray;
-}
-
-
-template<class type>
-Array<type> Array<type>::operator+(type aNumber) const {
-   Array<type> anArray(*this);
-   for (int i=0; i<this->size; i++) {
-      anArray[i] += aNumber;
-   }
-   return anArray;
-}
-
-
-
-//////////////////////////////
-//
-// Array::operator-=
-//
-
-template<class type>
-Array<type>& Array<type>::operator-=(const Array<type>& anArray) {
-   if (this->size != anArray.size) {
-      cerr << "Error: different size arrays " << this->size << " and " 
-           << anArray.size << endl;
-      exit(1);
-   }
-
-   for (int i=0; i<this->size; i++) {
-      this->array[i] -= anArray.array[i];
-   }
-
-   return *this;
-}
-
-
-
-//////////////////////////////
-//
-// Array::operator-
-//
-
-template<class type>
-Array<type> Array<type>::operator-(const Array<type>& anArray) const {
-   if (this->size != anArray.size) {
-      cerr << "Error: different size arrays " << this->size << " and " 
-           << anArray.size << endl;
-      exit(1);
-   }
-
-   Array<type> bArray(*this);
-   bArray -= anArray;
-   return bArray;
-}
-
-
-template<class type>
-Array<type> Array<type>::operator-(void) const {
-   Array<type> anArray(*this);
-   for (int i=0; i<this->size; i++) {
-      anArray[i] = -anArray[i];
-   }
-   return anArray;
-}
-
-template<class type>
-Array<type> Array<type>::operator-(type aNumber) const {
-   Array<type> anArray(*this);
-   for (int i=0; i<this->size; i++) {
-      anArray[i] -= aNumber;
-   }
-   return anArray;
-}
-
-
-
-//////////////////////////////
-//
-// Array::operator*=
-//
-
-template<class type>
-Array<type>& Array<type>::operator*=(const Array<type>& anArray) {
-   if (this->size != anArray.size) {
-      cerr << "Error: different size arrays " << this->size << " and " 
-           << anArray.size << endl;
-      exit(1);
-   }
-
-   for (int i=0; i<this->size; i++) {
-      this->array[i] *= anArray.array[i];
-   }
-
-   return *this;
-}
-
-
-
-//////////////////////////////
-//
-// Array::operator*
-//
-
-template<class type>
-Array<type> Array<type>::operator*(const Array<type>& anArray) const {
-   if (this->size != anArray.size) {
-      cerr << "Error: different size arrays " << this->size << " and " 
-           << anArray.size << endl;
-      exit(1);
-   }
-
-   Array<type> bArray(*this);
-   bArray *= anArray;
-   return bArray;
-}
-
-
-template<class type>
-Array<type> Array<type>::operator*(type aNumber) const {
-   Array<type> anArray(*this);
-   for (int i=0; i<this->size; i++) {
-      anArray[i] *= aNumber;
-   }
-   return anArray;
-}
-
-//////////////////////////////
-//
-// Array::operator/=
-//
-
-template<class type>
-Array<type>& Array<type>::operator/=(const Array<type>& anArray) {
-   if (this->size != anArray.size) {
-      cerr << "Error: different size arrays " << this->size << " and " 
-           << anArray.size << endl;
-      exit(1);
-   }
-
-   for (int i=0; i<this->size; i++) {
-      this->array[i] /= anArray.array[i];
-   }
-
-   return *this;
-}
-
-//////////////////////////////
-//
-// Array::operator/
-//
-
-template<class type>
-Array<type> Array<type>::operator/(const Array<type>& anArray) const {
-   if (this->size != anArray.size) {
-      cerr << "Error: different size arrays " << this->size << " and " 
-           << anArray.size << endl;
-      exit(1);
-   }
-
-   Array<type> bArray(*this);
-   bArray /= anArray;
-   return bArray;
-}
-
-
-#endif  /* _ARRAY_CPP_INCLUDED */
-
-
-
-// md5sum:	8f52a167c93f51702ce316204fd6e722  - Array.cpp =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/Array.h b/extensions/gripd/src/midiio/include/Array.h
deleted file mode 100644
index 75e08ebf4..000000000
--- a/extensions/gripd/src/midiio/include/Array.h
+++ /dev/null
@@ -1,67 +0,0 @@
-//
-// Copyright 1997-1999 by Craig Stuart Sapp, All Rights Reserved.
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Wed Feb  5 19:42:53 PST 1997
-// Last Modified: Sun May 11 20:33:13 GMT-0800 1997
-// Last Modified: Wed Jul  7 11:44:50 PDT 1999 (added setAll() function)
-// Last Modified: Mon Jul 29 22:08:32 PDT 2002 (added operator==) 
-// Filename:      ...sig/maint/code/base/Array/Array.h
-// Web Address:   http://sig.sapp.org/include/sigBase/Array.h
-// Documentation: http://sig.sapp.org/doc/classes/Array
-// Syntax:        C++ 
-//
-// Description:   An array which can grow dynamically.  Array is derived from 
-//                the Collection class and adds various mathematical operators
-//                to the Collection class.  The Array template class is used for
-//                storing numbers of any type which can be added, multiplied
-//                and divided into one another.
-//
-
-#ifndef _ARRAY_H_INCLUDED
-#define _ARRAY_H_INCLUDED
-
-#include "Collection.h"
-
-
-template<class type>
-class Array : public Collection<type> {
-   public:
-                     Array             (void);
-                     Array             (int arraySize);
-                     Array             (Array<type>& aArray);
-                     Array             (int arraySize, type *anArray);
-                    ~Array             ();
-
-      void           setAll            (type aValue);
-      type           sum               (void);
-      type           sum               (int lowIndex, int hiIndex);
-      void           zero              (int minIndex = -1, int maxIndex = -1);
-
-      int            operator==        (const Array<type>& aArray);
-      Array<type>&   operator=         (const Array<type>& aArray);
-      Array<type>&   operator+=        (const Array<type>& aArray);
-      Array<type>&   operator-=        (const Array<type>& aArray);
-      Array<type>&   operator*=        (const Array<type>& aArray);
-      Array<type>&   operator/=        (const Array<type>& aArray);
-
-      Array<type>    operator+         (const Array<type>& aArray) const;
-      Array<type>    operator+         (type aNumber) const;
-      Array<type>    operator-         (const Array<type>& aArray) const;
-      Array<type>    operator-         (void) const;
-
-      Array<type>    operator-         (type aNumber) const;
-      Array<type>    operator*         (const Array<type>& aArray) const;
-      Array<type>    operator*         (type aNumber) const;
-      Array<type>    operator/         (const Array<type>& aArray) const;
-};
-
-
-#include "Array.cpp"   /* necessary for templates */
-
-
-
-#endif  /* _ARRAY_H_INCLUDED */
-
-
-
-// md5sum:	09d1b1f8e70ecde53f484548e48f33c3  - Array.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/CircularBuffer.cpp b/extensions/gripd/src/midiio/include/CircularBuffer.cpp
deleted file mode 100644
index 9f4aca687..000000000
--- a/extensions/gripd/src/midiio/include/CircularBuffer.cpp
+++ /dev/null
@@ -1,291 +0,0 @@
-//
-// Copyright 1997-1998 by Craig Stuart Sapp, All Rights Reserved.
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: 19 December 1997
-// Last Modified: Wed Jan 21 23:16:54 GMT-0800 1998
-// Filename:      ...sig/maint/code/base/CircularBuffer/CircularBuffer.cpp
-// Web Address:   http://sig.sapp.org/src/sigBase/CircularBuffer.cpp
-// Syntax:        C++
-//
-// Description:   A Circular buffer designed to handle MIDI input,
-//                but able to store any type of object.  Elements
-//                can be read out of the buffer in two ways. 
-//                (1) from a read pointer which extracts the
-//                elements in order by following the write pointer,
-//                and (2) from an index operator related to the
-//                write pointer's location, for example,
-//                object[0] is the last value written into the
-//                buffer and object[-1] (or object[1]) is the
-//                item written just before that.
-//              
-//
-
-#ifndef _CIRCULARBUFFER_CPP_INCLUDED
-#define _CIRCULARBUFFER_CPP_INCLUDED
-
-#include "CircularBuffer.h"
-#include <stdlib.h>
-#include <iostream>
-
-
-//////////////////////////////
-//
-// CircularBuffer::CircularBuffer -- Constructor.
-//
-
-template<class type>
-CircularBuffer<type>::CircularBuffer(void) {
-   size = 0;
-   buffer = NULL;
-   reset();
-}
-
-
-template<class type>
-CircularBuffer<type>::CircularBuffer(int maxElements) {
-   if (maxElements < 0) {
-      std::cerr << "Error: cannot have a negative number of elements: " 
-           << maxElements << std::endl;
-      exit(1);
-   }
-   if (maxElements == 0) {
-      size = 0;
-      buffer = NULL;
-      reset();
-   } else {
-      size = maxElements;
-      buffer = new type[maxElements];
-      reset();
-   }
-}
-
-
-template<class type>
-CircularBuffer<type>::CircularBuffer(const CircularBuffer<type>& anotherBuffer) {
-   size = anotherBuffer.size;
-   if (getSize() == 0) {
-      buffer = NULL;
-      reset();
-   } else {
-      buffer = new type[getSize()];
-      writeIndex = anotherBuffer.writeIndex;
-      readIndex = anotherBuffer.readIndex;
-      itemCount = anotherBuffer.itemCount;
-      for (int i=0; i<getSize(); i++) {
-         buffer[i] = anotherBuffer.buffer[i];
-      }
-   }
-}
-
-
-
-//////////////////////////////
-//
-// CircularBuffer::~CircularBuffer -- Destructor.
-//    deallocates buffer memory.
-//
-
-template<class type>
-CircularBuffer<type>::~CircularBuffer() {
-   if (buffer != NULL) {
-      delete [] buffer;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// CircularBuffer::capacity -- returns the number of items which
-//    can be added to the buffer.  Returns a positive number
-//    if the buffer has empty locations available.  Returns 0 if the
-//    buffer is 100% full.  Returns a negative number if the
-//    buffer has overflowed.
-
-template<class type>
-int CircularBuffer<type>::capacity(void) const {
-   return getSize() - getCount();
-}
-
-
-
-//////////////////////////////
-//
-// CircularBuffer::extract -- reads the next value from the buffer.
-//
-
-template<class type>
-type CircularBuffer<type>::extract(void) {
-   itemCount--;
-   if (itemCount < 0) {
-      std::cerr << "Error: no elements in buffer to extract." << std::endl;
-      exit(1);
-   }
-   increment(readIndex);
-   return buffer[readIndex];
-}
-
-
-
-//////////////////////////////
-//
-// CircularBuffer::getCount -- returns the number of elements
-//    between the write index and the read index.
-//
-
-template<class type>
-int CircularBuffer<type>::getCount(void) const {
-   return itemCount;
-}
-
-
-
-//////////////////////////////
-//
-// CircularBuffer::getSize -- returns the allocated size of the buffer.
-//
-
-template<class type>  
-int CircularBuffer<type>::getSize(void) const {
-   return size;
-}
-
-
-
-//////////////////////////////
-//
-// CircularBuffer::insert -- add an element to the circular buffer
-//
-
-template<class type>
-void CircularBuffer<type>::insert(const type& anItem) {
-   itemCount++;
-   increment(writeIndex);
-   buffer[writeIndex] = anItem;
-}
-
-
-
-//////////////////////////////
-//
-// CircularBuffer::operator[] -- access an element relative to the
-//    currently written element
-//
-
-template<class type>
-type& CircularBuffer<type>::operator[](int index) {
-   if (buffer == NULL) {
-      std::cerr << "Error: buffer has no allocated space" << std::endl;
-      exit(1);
-   }
-   int realIndex = (index < 0) ? -index : index;
-   if (realIndex >= getSize()) {
-      std::cerr << "Error:   Invalid access: " << realIndex << ", maximum is "
-           << getSize()-1 << std::endl;
-      exit(1);
-   }
-   realIndex = writeIndex - realIndex;
-
-   // should need to go through this loop a max of one time:
-   while (realIndex < 0) {
-      realIndex += getSize();
-   }
-   
-   return buffer[realIndex];
-}
-
-
-
-//////////////////////////////
-//
-// CircularBuffer::read -- an alias for the extract function.
-//
-
-template<class type>
-type CircularBuffer<type>::read(void) {
-   return extract();
-}
-
-
-
-//////////////////////////////
-//
-// CircularBuffer::reset -- throws out all previous data and
-//    sets the read/write/count to initial values.  The size
-//    data variable must be valid before this function is
-//    called.
-//
-
-template<class type>
-void CircularBuffer<type>::reset(void) {
-   readIndex = writeIndex = getSize() - 1;
-   itemCount = 0;
-}
- 
-  
-
-//////////////////////////////
-//
-// CircularBuffer::setSize -- warning: will throw out all previous data 
-//    stored in buffer.
-//
-
-template<class type>
-void CircularBuffer<type>::setSize(int aSize) {
-   if (aSize < 0) {
-      std::cerr << "Error: cannot have a negative buffer size: " << aSize << std::endl;
-      exit(1);
-   }
-   if (buffer != NULL) {
-      delete [] buffer;
-   }
-
-   if (aSize == 0) {
-      size = aSize;
-      buffer = NULL;
-      reset();
-   } else {
-      size = aSize;
-      buffer = new type[aSize];
-      reset();
-   }
-}   
-
-
-
-//////////////////////////////
-//
-// CircularBuffer::write --  an alias for the insert function.
-//
-
-template<class type>
-void CircularBuffer<type>::write(const type& anElement) {
-   write(anElement);
-}
-
-
-///////////////////////////////////////////////////////////////////////////
-//
-// private functions
-//
-
-//////////////////////////////
-//
-// CircularBuffer::increment -- adds one to specified index and
-//    will automatically wrap the index when it gets too large.
-//
-
-template<class type>
-void CircularBuffer<type>::increment(int& index) {
-   index++;
-   if (index >= getSize()) {
-      index = 0;
-   }
-}
-
-
-#endif  /* _CIRCULARBUFFER_CPP_INCLUDED */
-
-
-
-// md5sum:	31b2e8d6efe7398a12ddb0a1b5680ca2  - CircularBuffer.cpp =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/CircularBuffer.h b/extensions/gripd/src/midiio/include/CircularBuffer.h
deleted file mode 100644
index 6bb3071aa..000000000
--- a/extensions/gripd/src/midiio/include/CircularBuffer.h
+++ /dev/null
@@ -1,66 +0,0 @@
-//
-// Copyright 1997-1998 by Craig Stuart Sapp, All Rights Reserved.
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: 19 December 1997
-// Last Modified: Wed Jan 21 23:08:13 GMT-0800 1998
-// Filename:      ...sig/maint/code/base/CircularBuffer/CircularBuffer.h
-// Web Address:   http://sig.sapp.org/include/sigBase/CircularBuffer.cpp
-// Documentation: http://sig.sapp.org/doc/classes/CircularBuffer
-// Syntax:        C++
-//
-// Description:   A Circular buffer designed to handle MIDI input,
-//                but able to store any type of object.  Elements
-//                can be read out of the buffer in two ways. 
-//                (1) from a read pointer which extracts the
-//                elements in order by following the write pointer,
-//                and (2) from an index operator related to the
-//                write pointer's location, for example,
-//                object[0] is the last value written into the
-//                buffer and object[-1] (or object[1]) is the
-//                item written just before that.
-//
-
-#ifndef _CIRCULARBUFFER_H_INCLUDED
-#define _CIRCULARBUFFER_H_INCLUDED
-
-
-template<class type>
-class CircularBuffer {
-   public:
-                    CircularBuffer     (void);
-                    CircularBuffer     (int maxElements);
-                    CircularBuffer     (const CircularBuffer<type>& 
-                                           anotherBuffer);
-                   ~CircularBuffer     ();
-
-      int           capacity           (void) const;
-      type          extract            (void);
-      int           getCount           (void) const;
-      int           getSize            (void) const;
-      void          insert             (const type& aMessage);
-      type&         operator[]         (int index);
-      type          read               (void);
-      void          reset              (void);
-      void          setSize            (int aSize);
-      void          write              (const type& aMessage);
-
-   protected:
-      type*         buffer;
-      int           size;
-      int           writeIndex;
-      int           readIndex;
-      int           itemCount;
-
-      void          increment          (int& index);
-};
-
-
-#include "CircularBuffer.cpp"
-
-
-
-#endif  /* _CIRCULARBUFFER_H_INCLUDED */
-
-
-
-// md5sum:	2857693ec37fdcb6df09db479faf110b  - CircularBuffer.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/Collection.cpp b/extensions/gripd/src/midiio/include/Collection.cpp
deleted file mode 100644
index 74eef1658..000000000
--- a/extensions/gripd/src/midiio/include/Collection.cpp
+++ /dev/null
@@ -1,355 +0,0 @@
-//
-// Copyright 1997 by Craig Stuart Sapp, All Rights Reserved.
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Wed Feb  5 19:42:53 PST 1997
-// Last Modified: Wed Apr 23 22:08:34 GMT-0800 1997
-// Last Modified: Fri Sep 14 15:50:52 PDT 2001 (added last() function)
-// Filename:      ...sig/maint/code/base/Collection/Collection.cpp
-// Web Address:   http://sig.sapp.org/src/sigBase/Collection.cpp
-// Syntax:        C++ 
-//
-// Description:   A dynamic array which can grow as necessary.
-//                This class can hold any type of item, but the
-//                derived Array class is specifically for collections
-//                of numbers.
-//
-
-#ifndef _COLLECTION_CPP_INCLUDED
-#define _COLLECTION_CPP_INCLUDED
-
-#include "Collection.h"
-#include <iostream>
-#include <stdlib.h>
-
-
-//////////////////////////////
-//
-// Collection::Collection 
-//
-
-template<class type>
-Collection<type>::Collection(void) {
-   allocSize = 0;
-   size = 0;
-   array = NULL;
-   allowGrowthQ = 0;
-   growthAmount = 8;
-   maxSize = 0;
-}
-
-template<class type>
-Collection<type>::Collection(int arraySize) {
-   array = new type[arraySize];
-   size = arraySize;
-   allocSize = arraySize;
-   allowGrowthQ = 0;
-   growthAmount = arraySize;
-   maxSize = 0;
-}
-
-
-template<class type>
-Collection<type>::Collection(int arraySize, type *aCollection) {
-   size = arraySize;
-   allocSize = arraySize;
-   array = new type[size];
-   for (int i=0; i<size; i++) {
-      array[i] = aCollection[i];
-   }
-   growthAmount = arraySize;
-   allowGrowthQ = 0;
-   maxSize = 0;
-}
-
-
-template<class type>
-Collection<type>::Collection(Collection<type>& aCollection) {
-   size = aCollection.size;
-   allocSize = size;
-   array = new type[size];
-   for (int i=0; i<size; i++) {
-      array[i] = aCollection.array[i];
-   }
-   allowGrowthQ = aCollection.allowGrowthQ;
-   growthAmount = aCollection.growthAmount;
-   maxSize = aCollection.maxSize;
-}
-
-
-
-//////////////////////////////
-//
-// Collection::~Collection
-//
-
-template<class type>
-Collection<type>::~Collection() {
-   if (getAllocSize() != 0) {
-      delete [] array;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// Collection::allowGrowth
-//	default value: status = 1 
-//
-
-template<class type>
-void Collection<type>::allowGrowth(int status) {
-   if (status == 0) {
-      allowGrowthQ = 0;
-   } else {
-      allowGrowthQ = 1;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// Collection::append 
-//
-
-template<class type>
-void Collection<type>::append(type& element) {
-   if (size == getAllocSize()) {
-      grow();
-   }
-   array[size] = element;
-   size++;
-}
-
-template<class type>
-void Collection<type>::appendcopy(type element) {
-   if (size == getAllocSize()) {
-      grow();
-   }
-   array[size] = element;
-   size++;
-}
-
-template<class type>
-void Collection<type>::append(type *element) {
-   if (size == getAllocSize()) {
-      grow();
-   }
-   array[size] = *element;
-   size++;
-}
-
-
-
-//////////////////////////////
-//
-// Collection::grow 
-// 	default parameter: growamt = -1
-//
-
-template<class type>
-void Collection<type>::grow(long growamt) {
-   allocSize += growamt > 0 ? growamt : growthAmount;
-   if (maxSize != 0 && getAllocSize() > maxSize) {
-      std::cerr << "Error: Maximum size allowed for array exceeded." << std::endl;
-      exit(1);
-   }
- 
-   type *temp = new type[getAllocSize()];
-   for (int i=0; i<size; i++) {
-      temp[i] = array[i];
-   }
-   array = temp;
-}
-
-
-
-//////////////////////////////
-//
-// Collection::pointer
-//
-
-template<class type>
-type* Collection<type>::pointer(void) {
-   return array;
-}
-
-
-
-//////////////////////////////
-//
-// Collection::getBase
-//
-
-template<class type>
-type* Collection<type>::getBase(void) {
-   return array;
-}
-
-
-
-//////////////////////////////
-//
-// Collection::getAllocSize
-//
-
-template<class type>
-long Collection<type>::getAllocSize(void) const {
-   return allocSize;
-}
-
-
-
-//////////////////////////////
-//
-// Collection::getSize --
-//
-
-template<class type>
-long Collection<type>::getSize(void) const {
-   return size;
-}
-
-
-
-//////////////////////////////
-//
-// Collection::last --
-//
-
-template<class type>
-type& Collection<type>::last(void) {
-   return array[getSize()-1];
-}
-
-
-
-//////////////////////////////
-//
-// Collection::setAllocSize
-//
-
-template<class type>
-void Collection<type>::setAllocSize(long aSize) {
-   if (aSize < getSize()) {
-      std::cerr << "Error: cannot set allocated size smaller than actual size." 
-           << std::endl;
-      exit(1);
-   }
-
-   if (aSize <= getAllocSize()) {
-      shrinkTo(aSize);
-   } else {
-      grow(aSize-getAllocSize());
-      size = aSize;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// Collection::setGrowth
-//	default parameter: growth = -1
-//
-
-template<class type>
-void Collection<type>::setGrowth(long growth) {
-   if (growth > 0) {
-      growthAmount = growth;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// Collection::setSize
-//
-
-template<class type>
-void Collection<type>::setSize(long newSize) {
-   if (newSize <= getAllocSize()) { 
-      size = newSize;
-   } else {
-      grow(newSize-getAllocSize());
-      size = newSize;
-   }
-}
-
-
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Collection operators
-//
-
-//////////////////////////////
-//
-// Collection::operator[]
-//
-
-template<class type>
-type& Collection<type>::operator[](int elementIndex) {
-   if (allowGrowthQ && elementIndex == size) {
-      if (size == getAllocSize()) {
-         grow();
-      }
-      size++;
-   } else if (elementIndex >= size) {
-      std::cerr << "Error: accessing invalid array location " 
-           << elementIndex 
-           << " Maximum is " << size-1 << std::endl;
-      exit(1);
-   }
-   return array[elementIndex];
-}
-
-
-//////////////////////////////
-//
-// Collection::operator[] const
-//
-
-template<class type>
-type Collection<type>::operator[](int elementIndex) const {
-   if (elementIndex >= size) {
-      std::cerr << "Error: accessing invalid array location " 
-           << elementIndex 
-           << " Maximum is " << size-1 << std::endl;
-      exit(1);
-   }
-   return array[elementIndex];
-}
-
-//////////////////////////////
-//
-// shrinkTo
-//
-
-template<class type>
-void Collection<type>::shrinkTo(long aSize) {
-   if (aSize < getSize()) {
-      exit(1);
-   }
-
-   type *temp = new type[aSize];
-   for (int i=0; i<size; i++) {
-      temp[i] = array[i];
-   }
-   delete [] array;
-   array = temp;
-
-   allocSize = aSize;
-   if (size > allocSize) {
-      size = allocSize;
-   }
-}
-
-
-#endif  /* _COLLECTION_CPP_INCLUDED */
-
-
-
-// md5sum:	9929fee30b1bede4305e1fb46303ddc1  - Collection.cpp =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/Collection.h b/extensions/gripd/src/midiio/include/Collection.h
deleted file mode 100644
index 6775366f0..000000000
--- a/extensions/gripd/src/midiio/include/Collection.h
+++ /dev/null
@@ -1,70 +0,0 @@
-//
-// Copyright 1997 by Craig Stuart Sapp, All Rights Reserved.
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Wed Feb  5 19:42:53 PST 1997
-// Last Modified: Tue Apr 22 20:28:16 GMT-0800 1997
-// Last Modified: Fri Sep 14 15:50:52 PDT 2001 (added last() function)
-// Filename:      ...sig/maint/code/base/Collection/Collection.h
-// Web Address:   http://sig.sapp.org/include/sigBase/Collection.h
-// Documentation: http://sig.sapp.org/doc/classes/Collection
-// Syntax:        C++ 
-//
-// Description:   A dynamic array which can grow as necessary.
-//                This class can hold any type of item, but the
-//                derived Array class is specifically for collections
-//                of numbers.
-//
-
-#ifndef _COLLECTION_H_INCLUDED
-#define _COLLECTION_H_INCLUDED
-
-
-template<class type>
-class Collection {
-   public:
-                Collection        (void);
-                Collection        (int arraySize);
-                Collection        (int arraySize, type *aCollection);
-                Collection        (Collection<type>& aCollection);
-               ~Collection        ();
-
-      void      allowGrowth       (int status = 1);
-      void      append            (type& element);
-      void      appendcopy        (type element);
-      void      append            (type* element);
-      type     *getBase           (void);
-      long      getAllocSize      (void) const;
-      long      getSize           (void) const;
-      type     *pointer           (void);
-      void      setAllocSize      (long aSize);
-      void      setGrowth         (long growth);
-      void      setSize           (long newSize);
-      type&     operator[]        (int arrayIndex);
-      type      operator[]        (int arrayIndex) const;
-      void      grow              (long growamt = -1);
-      type&     last              (void);
-
-
-   protected:
-      long      size;             // actual array size
-      long      allocSize;        // maximum allowable array size
-      type     *array;            // where the array data is stored
-      char      allowGrowthQ;     // allow/disallow growth
-      long      growthAmount;     // number of elements to grow by if index
-				  //    element one beyond max size is accessed
-      long maxSize;               // the largest size the array is allowed 
-                                  //    to grow to, if 0, then ignore max
-  
-      void      shrinkTo          (long aSize);
-};
-
-
-#include "Collection.cpp"
-
-
-
-#endif  /* _COLLECTION_H_INCLUDED */
-
-
-
-// md5sum:	01bec04835c0bd117f40c2bfe51c4abd  - Collection.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/FileIO.h b/extensions/gripd/src/midiio/include/FileIO.h
deleted file mode 100644
index fdec5deec..000000000
--- a/extensions/gripd/src/midiio/include/FileIO.h
+++ /dev/null
@@ -1,148 +0,0 @@
-//
-// Copyright 1997 by Craig Stuart Sapp, All Rights Reserved.
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Fri May  9 22:30:32 PDT 1997
-// Last Modified: Sun Dec 14 05:26:16 GMT-0800 1997
-// Filename:      ...sig/maint/code/base/FileIO/FileIO.h
-// Web Address:   http://sig.sapp.org/include/sigBase/FileIO.h
-// Documentation: http://sig.sapp.org/doc/classes/FileIO
-// Syntax:        C++ 
-//
-// Description:   Derived from the fstream class, this class has
-//                functions which allow writing binary files in
-//                both little and big endian formats.  Useful for
-//                writing files such as soundfiles and MIDI files
-//                which require numbers to be stored in a particular
-//                endian format.
-//
-
-#ifndef _FILEIO_H_INCLUDED
-#define _FILEIO_H_INCLUDED
-
-
-#include <fstream>
-
-typedef unsigned char uchar;
-typedef unsigned short ushort;
-typedef unsigned long ulong;
-typedef unsigned int uint;
-
-// templates would be nice to use here, but they don't seem 
-// to work intuitively...
-
-class FileIO : public std::fstream {
-   public:
-                     FileIO                (void);
-                     FileIO                (const char* filename, std::ios::openmode state);
-                    ~FileIO                ();
-
-      void           readBigEndian         (char& aNumber);
-      void           readBigEndian         (uchar& aNumber);
-      void           readBigEndian         (short& aNumber);
-      void           readBigEndian         (ushort& aNumber);
-      void           readBigEndian         (long& aNumber);
-      void           readBigEndian         (ulong& aNumber);
-      void           readBigEndian         (int& aNumber);
-      void           readBigEndian         (uint& aNumber);
-      void           readBigEndian         (float& aNumber);
-      void           readBigEndian         (double& aNumber);
-
-      void           readLittleEndian      (char& aNumber);
-      void           readLittleEndian      (uchar& aNumber);
-      void           readLittleEndian      (short& aNumber);
-      void           readLittleEndian      (ushort& aNumber);
-      void           readLittleEndian      (long& aNumber);
-      void           readLittleEndian      (ulong& aNumber);
-      void           readLittleEndian      (int& aNumber);
-      void           readLittleEndian      (uint& aNumber);
-      void           readLittleEndian      (float& aNumber);
-      void           readLittleEndian      (double& aNumber);
-
-      void           readMachineEndian     (char& aNumber);
-      void           readMachineEndian     (uchar& aNumber);
-      void           readMachineEndian     (short& aNumber);
-      void           readMachineEndian     (ushort& aNumber);
-      void           readMachineEndian     (long& aNumber);
-      void           readMachineEndian     (ulong& aNumber);
-      void           readMachineEndian     (int& aNumber);
-      void           readMachineEndian     (uint& aNumber);
-      void           readMachineEndian     (float& aNumber);
-      void           readMachineEndian     (double& aNumber);
-
-      void           readNotMachineEndian  (char& aNumber);
-      void           readNotMachineEndian  (uchar& aNumber);
-      void           readNotMachineEndian  (short& aNumber);
-      void           readNotMachineEndian  (ushort& aNumber);
-      void           readNotMachineEndian  (long& aNumber);
-      void           readNotMachineEndian  (ulong& aNumber);
-      void           readNotMachineEndian  (int& aNumber);
-      void           readNotMachineEndian  (uint& aNumber);
-      void           readNotMachineEndian  (float& aNumber);
-      void           readNotMachineEndian  (double& aNumber);
-
-      void           writeBigEndian        (char aNumber);
-      void           writeBigEndian        (uchar aNumber);
-      void           writeBigEndian        (short aNumber);
-      void           writeBigEndian        (ushort aNumber);
-      void           writeBigEndian        (long aNumber);
-      void           writeBigEndian        (ulong aNumber);
-      void           writeBigEndian        (int aNumber);
-      void           writeBigEndian        (uint aNumber);
-      void           writeBigEndian        (float aNumber);
-      void           writeBigEndian        (double aNumber);
-
-      void           writeLittleEndian     (char aNumber);
-      void           writeLittleEndian     (uchar aNumber);
-      void           writeLittleEndian     (short aNumber);
-      void           writeLittleEndian     (ushort aNumber);
-      void           writeLittleEndian     (long aNumber);
-      void           writeLittleEndian     (ulong aNumber);
-      void           writeLittleEndian     (int aNumber);
-      void           writeLittleEndian     (uint aNumber);
-      void           writeLittleEndian     (float aNumber);
-      void           writeLittleEndian     (double aNumber);
-
-      void           writeMachineEndian    (char aNumber);
-      void           writeMachineEndian    (uchar aNumber);
-      void           writeMachineEndian    (short aNumber);
-      void           writeMachineEndian    (ushort aNumber);
-      void           writeMachineEndian    (long aNumber);
-      void           writeMachineEndian    (ulong aNumber);
-      void           writeMachineEndian    (int aNumber);
-      void           writeMachineEndian    (uint aNumber);
-      void           writeMachineEndian    (float aNumber);
-      void           writeMachineEndian    (double aNumber);
-
-      void           writeNotMachineEndian (char aNumber);
-      void           writeNotMachineEndian (uchar aNumber);
-      void           writeNotMachineEndian (short aNumber);
-      void           writeNotMachineEndian (ushort aNumber);
-      void           writeNotMachineEndian (long aNumber);
-      void           writeNotMachineEndian (ulong aNumber);
-      void           writeNotMachineEndian (int aNumber);
-      void           writeNotMachineEndian (uint aNumber);
-      void           writeNotMachineEndian (float aNumber);
-      void           writeNotMachineEndian (double aNumber);
-
-   protected:
-
-      char           flipBytes             (char aNumber);
-      uchar          flipBytes             (uchar aNumber);
-      short          flipBytes             (short aNumber);
-      ushort         flipBytes             (ushort aNumber);
-      long           flipBytes             (long aNumber);
-      ulong          flipBytes             (ulong aNumber);
-      int            flipBytes             (int aNumber);
-      uint           flipBytes             (uint aNumber);
-      float          flipBytes             (float aNumber);
-      double         flipBytes             (double aNumber);
-
-};
-
-
-
-#endif  /* _FILEIO_H_INCLUDED */
-
-
-
-// md5sum:	0a146ebe5c6bd0850be973f612827d20  - FileIO.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/MidiFile.h b/extensions/gripd/src/midiio/include/MidiFile.h
deleted file mode 100644
index 10794d50d..000000000
--- a/extensions/gripd/src/midiio/include/MidiFile.h
+++ /dev/null
@@ -1,108 +0,0 @@
-//
-// Copyright 1999-2000 by Craig Stuart Sapp, All Rights Reserved.
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Fri Nov 26 14:12:01 PST 1999
-// Last Modified: Fri Dec  2 13:26:44 PST 1999
-// Last Modified: Fri Nov 10 12:13:15 PST 2000 (added some more editing cap.)
-// Last Modified: Thu Jan 10 10:03:39 PST 2002 (added allocateEvents())
-// Last Modified: Mon Jun 10 22:43:10 PDT 2002 (added clear())
-// Filename:      ...sig/include/sigInfo/MidiFile.h
-// Web Address:   http://sig.sapp.org/include/sigInfo/MidiFile.h
-// Syntax:        C++ 
-//
-// Description:   A class which can read/write Standard MIDI files.
-//                MIDI data is stored by track in an array.  This
-//                class is used for example in the MidiPerform class.
-//
-
-#ifndef _MIDIfILE_H_INCLUDED
-#define _MIDIfILE_H_INCLUDED
-
-#include "FileIO.h"
-#include "Array.h"
-#include "Collection.h"
-
-typedef unsigned char  uchar;
-typedef unsigned short ushort;
-typedef unsigned long  ulong;
-
-#define TIME_STATE_DELTA       0
-#define TIME_STATE_ABSOLUTE    1
-
-#define TRACK_STATE_SPLIT      0
-#define TRACK_STATE_JOINED     1
-
-
-class _MFEvent {
-   public:
-      _MFEvent (void);
-      _MFEvent (int command);
-      _MFEvent (int command, int param1);
-      _MFEvent (int command, int param1, int param2);
-      _MFEvent (int track, int command, int param1, int param2);
-      _MFEvent (int aTime, int aTrack, int command, int param1, int param2);
-     ~_MFEvent ();
-      int time;
-      int track;
-      Array<uchar> data;
-};
-
-
-
-class MidiFile {
-   public:
-                MidiFile                  (void);
-                MidiFile                  (char* aFile);
-               ~MidiFile                  ();
-
-      void      absoluteTime              (void);
-      int       addEvent                  (int aTrack, int aTime, 
-                                             Array<uchar>& midiData);
-      int       addTrack                  (void);
-      int       addTrack                  (int count);
-      void      allocateEvents            (int track, int aSize);
-      void      deltaTime                 (void);
-      void      deleteTrack               (int aTrack);
-      void      erase                     (void);
-      void      clear                     (void);
-      _MFEvent& getEvent                  (int aTrack, int anIndex);
-      int       getTimeState              (void);
-      int       getTrackState             (void);
-      int       getTicksPerQuarterNote    (void);
-      int       getTrackCount             (void);
-      int       getNumTracks              (void);
-      int       getNumEvents              (int aTrack);
-      void      joinTracks                (void);
-      void      mergeTracks               (int aTrack1, int aTrack2);
-      int       read                      (char* aFile);
-      void      setTicksPerQuarterNote    (int ticks);
-      void      sortTrack                 (Collection<_MFEvent>& trackData);
-      void      sortTracks                (void);
-      void      splitTracks               (void);
-      int       write                     (const char* aFile);
-
-   protected:
-      Collection<Collection<_MFEvent>*> events;  // midi file events
-      int                   ticksPerQuarterNote; // time base of file
-      int                   trackCount;          // # of tracks in file
-      int                   theTrackState;       // joined or split
-      int                   theTimeState;        // absolute or delta
-      char*                 readFileName;        // read file name
-
-   private:
-      void      extractMidiData  (FileIO& inputfile, Array<uchar>& array, 
-                                       uchar& runningCommand);
-      ulong     extractVlvTime   (FileIO& inputfile);
-      ulong     unpackVLV        (uchar a, uchar b, uchar c, uchar d, uchar e);
-      void      writeVLValue     (long aValue, Array<uchar>& data);
-};
-
-
-int eventcompare(const void* a, const void* b);
-std::ostream& operator<<(std::ostream& out, MidiFile& aMidiFile);
-
-#endif /* _MIDIfILE_H_INCLUDED */
-
-
-
-// md5sum:	ff46e64698e2d9e88ebeef3efa9927d0  - MidiFile.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/MidiFileWrite.h b/extensions/gripd/src/midiio/include/MidiFileWrite.h
deleted file mode 100644
index a213fdf2b..000000000
--- a/extensions/gripd/src/midiio/include/MidiFileWrite.h
+++ /dev/null
@@ -1,61 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Sun Mar 15 10:55:56 GMT-0800 1998
-// Last Modified: Sun Mar 15 10:55:56 GMT-0800 1998
-// Filename:      ...sig/code/control/MidiFileWrite/MidiFileWrite.h
-// Web Address:   http://www-ccrma.stanford.edu/~craig/improv/include/MidiFileWrite.h
-// Syntax:        C++ 
-//
-// Description:   The MidiFileWrite class will write out a Type 0 MidiFile.
-//                Used for recording MIDI data streams into Standard
-//                MIDI files.
-//
-
-#ifndef _MIDIFILEWRITE_INCLUDED
-#define _MIDIFILEWRITE_INCLUDED
-
-
-#include "FileIO.h"
-
-
-class MidiFileWrite {
-   public:
-                MidiFileWrite     (void);
-                MidiFileWrite     (const char* aFilename, int startTime = -1);
-               ~MidiFileWrite     ();
-
-      void      close             (void); 
-      void      setup             (const char* aFilename, int startTime = -1); 
-      void      start             (int startTime = -1); 
-      void      writeAbsolute     (int aTime, int command, int p1, int p2);
-      void      writeAbsolute     (int aTime, int command, int p1);
-      void      writeAbsolute     (int aTime, int command);
-      void      writeRaw          (uchar aByte);
-      void      writeRaw          (uchar aByte, uchar Byte);
-      void      writeRaw          (uchar aByte, uchar Byte, uchar cByte);
-      void      writeRaw          (uchar aByte, uchar Byte, uchar cByte, 
-                                     uchar dByte);
-      void      writeRaw          (uchar aByte, uchar Byte, uchar cByte, 
-                                     uchar dByte, uchar eByte);
-      void      writeRaw          (uchar* anArray, int arraySize);
-      void      writeRelative     (int aTime, int command, int p1, int p2);
-      void      writeRelative     (int aTime, int command, int p1);
-      void      writeRelative     (int aTime, int command);
-      void      writeVLValue      (long aValue);
-
-    
-   protected:
-      FileIO   *midifile;         // file stream for MIDI file
-      long      trackSize;        // size count for MIDI track
-      int       lastPlayTime;     // for calculating delta times
-      int       openQ;            // for checking file status
-
-};
-
-
-
-#endif  /* _MIDIFILEWRITE_INCLUDED */
-
-
-
-// md5sum:	44ac572078bff648d096c7e7867d1b3c  - MidiFileWrite.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/MidiIO.h b/extensions/gripd/src/midiio/include/MidiIO.h
deleted file mode 100644
index 80c9168ce..000000000
--- a/extensions/gripd/src/midiio/include/MidiIO.h
+++ /dev/null
@@ -1,58 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: 21 December 1997
-// Last Modified: Sun Jan 25 15:44:35 GMT-0800 1998
-// Filename:      ...sig/code/control/MidiIO/MidiIO.h
-// Web Address:   http://www-ccrma.stanford.edu/~craig/improv/include/MidiIO.h
-// Syntax:        C++
-//
-// Description:   A unified class for MidiInput and MidiOutput that handles 
-//                MIDI input and output connections.  The Synthesizer
-//                and RadioBaton classes are derived from this class.
-//
-
-#ifndef _MIDIIO_H_INCLUDED
-#define _MIDIIO_H_INCLUDED
-
-
-#include "MidiInput.h"
-#include "MidiOutput.h"
-
-
-class MidiIO : public MidiOutput, public MidiInput {
-   public:
-                 MidiIO              (void);
-                 MidiIO              (int outPort, int inPort);
-                ~MidiIO              ();
-
-      void       close               (void);
-      void       closeInput          (void);
-      void       closeOutput         (void);
-      int        getChannelInOffset  (void) const;
-      int        getChannelOutOffset (void) const;
-      int        getInputPort        (void);
-      int        getInputTrace       (void);
-      int        getNumInputPorts    (void);
-      int        getNumOutputPorts   (void);
-      int        getOutputPort       (void);
-      int        getOutputTrace      (void);
-      int        open                (void);
-      int        openInput           (void);
-      int        openOutput          (void);
-      void       setChannelOffset    (int anOffset);
-      void       setInputPort        (int aPort);
-      void       setInputTrace       (int aState);
-      void       setOutputPort       (int aPort);
-      void       setOutputTrace      (int aState);
-      void       toggleInputTrace    (void);
-      void       toggleOutputTrace   (void);
-
-};
-
-
-
-#endif  /* _MIDIIO_H_INCLUDED */
-
-
-
-// md5sum:	9f6122405c4d9e83994457210217ff22  - MidiIO.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/MidiInPort.h b/extensions/gripd/src/midiio/include/MidiInPort.h
deleted file mode 100644
index ac225c4fb..000000000
--- a/extensions/gripd/src/midiio/include/MidiInPort.h
+++ /dev/null
@@ -1,98 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Wed Jan 21 22:35:31 GMT-0800 1998
-// Last Modified: Thu Jan 22 23:13:54 GMT-0800 1998
-// Last Modified: Sat Nov  7 16:09:18 PST 1998
-// Last Modified: Tue Jun 29 16:14:50 PDT 1999 (added Sysex input)
-// Last Modified: Tue May 23 23:08:44 PDT 2000 (oss/alsa selection added)
-// Filename:      ...sig/maint/code/control/MidiInPort/MidiInPort.h
-// Web Address:   http://sig.sapp.org/include/sig/MidiInPort.h
-// Syntax:        C++ 
-//
-// Description:   An interface for MIDI input capabilities of an
-//                operating-system specific MIDI input method.
-//                Provides control of all low-level MIDI input
-//                functionality such that it will work on all
-//                computers in the same manner.
-//
-
-#ifndef _MIDIINPORT_H_INCLUDED
-#define _MIDIINPORT_H_INCLUDED
-
-
-#include "MidiMessage.h"
-
-#ifdef VISUAL
-   #define MIDIINPORT  MidiInPort_visual
-   #include "MidiInPort_visual.h"
-#elif defined(LINUX) && defined(ALSA) && defined(OSS)
-   #define MIDIINPORT  MidiInPort_linux
-   #include "MidiInPort_linux.h"
-#elif defined(LINUX) && defined(ALSA) && !defined(OSS)
-   #define MIDIINPORT  MidiInPort_alsa
-   #include "MidiInPort_alsa.h"
-#elif defined (LINUX) && defined(OSS) && !defined(ALSA)
-   #define MIDIINPORT  MidiInPort_oss
-   #include "MidiInPort_oss.h"
-#elif defined(LINUX)
-   #define MIDIINPORT  MidiInPort_oss
-   #include "MidiInPort_oss.h"
-#else
-   #define MIDIINPORT  MidiInPort_unsupported
-   #include "MidiInPort_unsupported.h"
-#endif
-
-
-class MidiInPort : protected MIDIINPORT {
-   public:
-                  MidiInPort         (void) : MIDIINPORT() {}
-                  MidiInPort         (int aPort, int autoOpen = 1) : 
-                                        MIDIINPORT(aPort, autoOpen) {}
-                 ~MidiInPort()       { }
-
-      void        clearSysex(void) { MIDIINPORT::clearSysex(); }
-      void        clearSysex(int buffer) { MIDIINPORT::clearSysex(buffer); }
-      void        close(void)        { MIDIINPORT::close(); }
-      void        closeAll(void)     { MIDIINPORT::closeAll(); }
-      MidiMessage extract(void)      { return MIDIINPORT::extract(); }
-      int         getBufferSize(void) { return MIDIINPORT::getBufferSize(); }
-      int         getChannelOffset(void) const { 
-                                        return MIDIINPORT::getChannelOffset(); }
-      int         getCount(void)     { return MIDIINPORT::getCount(); }
-      const char* getName(void)      { return MIDIINPORT::getName(); }
-      static const char* getName(int i)  { return MIDIINPORT::getName(i); }
-      static int  getNumPorts(void) { 
-                     return MIDIINPORT::getNumPorts(); }
-      int         getPort(void)      { return MIDIINPORT::getPort(); }
-      int         getPortStatus(void){ 
-                     return MIDIINPORT::getPortStatus(); }
-      uchar*      getSysex(int buffer) { return MIDIINPORT::getSysex(buffer); }
-      int getSysexSize(int buffer) { return MIDIINPORT::getSysexSize(buffer); }
-      int         getTrace(void)     { return MIDIINPORT::getTrace(); }
-      void        insert(const MidiMessage& aMessage) {
-                     MIDIINPORT::insert(aMessage); }
-      int         installSysex(uchar* anArray, int aSize) {
-                     return MIDIINPORT::installSysex(anArray, aSize); }
-      int         open(void)         { return MIDIINPORT::open(); }
-      MidiMessage& operator[](int index) {
-                     return MIDIINPORT::message(index); }
-      void        pause(void)        { MIDIINPORT::pause(); }
-      void        setBufferSize(int aSize) {
-                     MIDIINPORT::setBufferSize(aSize); }
-      void        setChannelOffset(int anOffset) { 
-                     MIDIINPORT::setChannelOffset(anOffset); }
-      void        setAndOpenPort(int aPort) { setPort(aPort); open(); }
-      void        setPort(int aPort) { MIDIINPORT::setPort(aPort); }
-      int         setTrace(int aState) { 
-                     return MIDIINPORT::setTrace(aState); }
-      void        toggleTrace(void) { MIDIINPORT::toggleTrace(); }
-      void        unpause(void)      { MIDIINPORT::unpause(); }
-};
-
-
-
-#endif  /* _MIDIINPORT_H_INCLUDED */
-
-
-
-// md5sum:	96f8a2b4411a356d1b73cd96421b8931  - MidiInPort.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/MidiInPort_alsa.h b/extensions/gripd/src/midiio/include/MidiInPort_alsa.h
deleted file mode 100644
index 5a165daa0..000000000
--- a/extensions/gripd/src/midiio/include/MidiInPort_alsa.h
+++ /dev/null
@@ -1,108 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Sun May 14 22:05:27 PDT 2000
-// Last Modified: Sat Oct 13 16:11:24 PDT 2001 (updated for ALSA 0.9)
-// Last Modified: Sat Nov  2 20:35:50 PST 2002 (added #ifdef ALSA)
-// Filename:      ...sig/maint/code/control/MidiInPort/linux/MidiInPort_alsa.h
-// Web Address:   http://sig.sapp.org/include/sig/MidiInPort_alsa.h
-// Syntax:        C++ 
-//
-// Description:   An interface for MIDI input capabilities of
-//                linux ALSA sound driver's specific MIDI input methods.
-//                This class is inherited privately by the MidiInPort class.
-//
-
-#ifndef _MIDIINPORT_ALSA_H_INCLUDED
-#define _MIDIINPORT_ALSA_H_INCLUDED
-
-#ifdef LINUX
-#ifdef ALSA
-
-#include "MidiMessage.h"
-#include "CircularBuffer.h"
-#include "Array.h"
-#include "Sequencer_alsa.h"
-#include "SigTimer.h"
-#include <pthread.h>
-
-typedef unsigned char uchar;
-typedef void (*MIDI_Callback_function)(int arrivalPort);
-
-void *interpretMidiInputStreamPrivateALSA(void * x);
-
-class MidiInPort_alsa : public Sequencer_alsa {
-   public:
-                      MidiInPort_alsa             (void);
-                      MidiInPort_alsa             (int aPort, int autoOpen = 1);
-                     ~MidiInPort_alsa             ();
-
-      void            clearSysex                 (int buffer);
-      void            clearSysex                 (void);
-      void            close                      (void);
-      void            closeAll                   (void);
-      MidiMessage     extract                    (void);
-      int             getBufferSize              (void);
-      int             getChannelOffset           (void) const;
-      int             getCount                   (void);
-      const char*     getName                    (void);
-      static const char* getName                 (int i);
-      static int      getNumPorts                (void);
-      int             getPort                    (void);
-      int             getPortStatus              (void);
-      uchar*          getSysex                   (int buffer);
-      int             getSysexSize               (int buffer);
-      int             getTrace                   (void);
-      void            insert                     (const MidiMessage& aMessage);
-      int             installSysex               (uchar* anArray, int aSize);
-      MidiMessage&    message                    (int index);
-      int             open                       (void);
-      void            pause                      (void);
-      void            setBufferSize              (int aSize);
-      void            setChannelOffset           (int anOffset);
-      void            setPort                    (int aPort);
-      int             setTrace                   (int aState);
-      void            toggleTrace                (void);
-      void            unpause                    (void);
-
-      static Array<int> threadinitport;
-
-   protected:
-      int    port;     // the port to which this object belongs
-
-      static MIDI_Callback_function  callbackFunction;
-
-      static int      installSysexPrivate        (int port, 
-                                                    uchar* anArray, int aSize);
- 
-      static int        objectCount;        // num of similar objects in existence
-      static int*       portObjectCount;    // objects connected to particular port
-      static int*       trace;              // for verifying input
-      static std::ostream*   tracedisplay;       // stream for displaying trace
-      static int        numDevices;         // number of input ports
-      static CircularBuffer<MidiMessage>** midiBuffer; // MIDI storage frm ports
-      static int        channelOffset;      // channel offset, either 0 or 1
-                                            // not being used right now.
-      static int*       pauseQ;             // for adding items to Buffer or not
-      static SigTimer   midiTimer;          // for timing MIDI input
-      static Array<pthread_t> midiInThread; // for MIDI input thread function
-      static int*       sysexWriteBuffer;   // for MIDI sysex write location
-      static Array<uchar>** sysexBuffers;   // for MIDI sysex storage
-
-   private:
-      void            deinitialize               (void); 
-      void            initialize                 (void); 
-
- 
-   friend void *interpretMidiInputStreamPrivateALSA(void * x);
-    
-};
-
-
-#endif  /* ALSA */
-#endif  /* LINUX */
-
-#endif  /* _MIDIINPORT_ALSA_H_INCLUDED */
-
-
-
-// md5sum:	260a0accd6b08b638a00904c382293bc  - MidiInPort_alsa.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/MidiInPort_alsa05.h b/extensions/gripd/src/midiio/include/MidiInPort_alsa05.h
deleted file mode 100644
index 27af5692b..000000000
--- a/extensions/gripd/src/midiio/include/MidiInPort_alsa05.h
+++ /dev/null
@@ -1,107 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Sun May 14 22:05:27 PDT 2000
-// Last Modified: Wed Oct  3 22:28:20 PDT 2001 (frozen for ALSA 0.5)
-// Last Modified: Thu Jan  2 18:55:12 PST 2003 (added #ifdef ALSA05)
-// Filename:      ...sig/maint/code/control/MidiInPort/linux/MidiInPort_alsa05.h
-// Web Address:   http://sig.sapp.org/include/sig/MidiInPort_alsa05.h
-// Syntax:        C++ 
-//
-// Description:   An interface for MIDI input capabilities of
-//                linux ALSA sound driver's specific MIDI input methods.
-//                This class is inherited privately by the MidiInPort class.
-//
-
-#ifndef _MIDIINPORT_ALSA05_H_INCLUDED
-#define _MIDIINPORT_ALSA05_H_INCLUDED
-
-#ifdef LINUX
-#ifdef ALSA05
-
-#include "MidiMessage.h"
-#include "CircularBuffer.h"
-#include "Array.h"
-#include "Sequencer_alsa05.h"
-#include "SigTimer.h"
-#include <pthread.h>
-
-typedef unsigned char uchar;
-typedef void (*MIDI_Callback_function)(int arrivalPort);
-
-
-class MidiInPort_alsa05 : public Sequencer_alsa05 {
-   public:
-                      MidiInPort_alsa05          (void);
-                      MidiInPort_alsa05          (int aPort, int autoOpen = 1);
-                     ~MidiInPort_alsa05          ();
-
-      void            clearSysex                 (int buffer);
-      void            clearSysex                 (void);
-      void            close                      (void);
-      void            closeAll                   (void);
-      MidiMessage     extract                    (void);
-      int             getBufferSize              (void);
-      int             getChannelOffset           (void) const;
-      int             getCount                   (void);
-      const char*     getName                    (void);
-      static const char* getName                 (int i);
-      static int      getNumPorts                (void);
-      int             getPort                    (void);
-      int             getPortStatus              (void);
-      uchar*          getSysex                   (int buffer);
-      int             getSysexSize               (int buffer);
-      int             getTrace                   (void);
-      void            insert                     (const MidiMessage& aMessage);
-      int             installSysex               (uchar* anArray, int aSize);
-      MidiMessage&    message                    (int index);
-      int             open                       (void);
-      void            pause                      (void);
-      void            setBufferSize              (int aSize);
-      void            setChannelOffset           (int anOffset);
-      void            setPort                    (int aPort);
-      int             setTrace                   (int aState);
-      void            toggleTrace                (void);
-      void            unpause                    (void);
-
-      static Array<int> threadinitport;
-
-   protected:
-      int    port;     // the port to which this object belongs
-
-      static MIDI_Callback_function  callbackFunction;
-
-      static int      installSysexPrivate        (int port, 
-                                                    uchar* anArray, int aSize);
- 
-      static int        objectCount;        // num of similar objects in existence
-      static int*       portObjectCount;    // objects connected to particular port
-      static int*       trace;              // for verifying input
-      static ostream*   tracedisplay;       // stream for displaying trace
-      static int        numDevices;         // number of input ports
-      static CircularBuffer<MidiMessage>** midiBuffer; // MIDI storage frm ports
-      static int        channelOffset;      // channel offset, either 0 or 1
-                                            // not being used right now.
-      static int*       pauseQ;             // for adding items to Buffer or not
-      static SigTimer   midiTimer;          // for timing MIDI input
-      static Array<pthread_t> midiInThread; // for MIDI input thread function
-      static int*       sysexWriteBuffer;   // for MIDI sysex write location
-      static Array<uchar>** sysexBuffers;   // for MIDI sysex storage
-
-   private:
-      void            deinitialize               (void); 
-      void            initialize                 (void); 
-
- 
-   friend void *interpretMidiInputStreamPrivateALSA05(void * x);
-    
-};
-
-
-#endif  /* ALSA05 */
-#endif  /* LINUX */
-
-#endif  /* _MIDIINPORT_ALSA05_H_INCLUDED */
-
-
-
-// md5sum:	7b85b4a658c6f1d45dc1da7752f25cae  - MidiInPort_alsa05.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/MidiInPort_linux.h b/extensions/gripd/src/midiio/include/MidiInPort_linux.h
deleted file mode 100644
index 589d27af8..000000000
--- a/extensions/gripd/src/midiio/include/MidiInPort_linux.h
+++ /dev/null
@@ -1,94 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Sun May 14 22:30:04 PDT 2000
-// Last Modified: Thu May 18 23:36:07 PDT 2000 (added ifdef LINUX lines)
-// Last Modified: Sat Nov  2 20:37:49 PST 2002 (added ifdef ALSA OSS)
-// Filename:      ...sig/maint/code/control/MidiInPort/MidiInPort_linux.h
-// Web Address:   http://sig.sapp.org/include/sig/MidiInPort_linux.h
-// Syntax:        C++ 
-//
-// Description:   An interface for MIDI input capabilities of an
-//                operating-system specific MIDI input method.
-//                Provides control of all low-level MIDI input
-//                functionality such that it will work on all
-//                computers in the same manner.
-//
-
-#ifndef _MIDIINPORT_LINUX_H_INCLUDED
-#define _MIDIINPORT_LINUX_H_INCLUDED
-
-#ifdef LINUX
-#if defined(ALSA) && defined(OSS)
-
-#define MIDI_IN_UNKNOWN_SELECT 0
-#define MIDI_IN_OSS_SELECT     1
-#define MIDI_IN_ALSA_SELECT    2
-
-#include "MidiInPort_oss.h"
-#include "MidiInPort_alsa.h"
-#include "MidiInPort_unsupported.h"
-#include "MidiMessage.h"
-
-
-class MidiInPort_linux {
-   public:
-                  MidiInPort_linux(void);
-                  MidiInPort_linux(int aPort, int autoOpen = 1);
-                 ~MidiInPort_linux();
-
-      void         clearSysex               (void);
-      void         clearSysex               (int buffer);
-      void         close                    (void);
-      void         closeAll                 (void);
-      MidiMessage  extract                  (void);
-      int          getBufferSize            (void);
-      int          getChannelOffset         (void) const;
-      int          getCount                 (void);
-      const char*  getName                  (void);
-      static const char* getName            (int i);
-      static int   getNumPorts              (void);
-      int          getPort                  (void);
-      int          getPortStatus            (void);
-      uchar*       getSysex                 (int buffer);
-      int          getSysexSize             (int buffer);
-      int          getTrace                 (void);
-      void         insert                   (const MidiMessage& aMessage);
-      int          installSysex             (uchar* anArray, int aSize);
-      MidiMessage& message                  (int index);
-      int          open                     (void);
-      MidiMessage& operator[]               (int index);
-      void         pause                    (void);
-      void         setBufferSize            (int aSize);
-      void         setChannelOffset         (int anOffset);
-      void         setAndOpenPort           (int aPort);
-      void         setPort                  (int aPort);
-      int          setTrace                 (int aState);
-      void         toggleTrace              (void);
-      void         unpause                  (void);
-
-      static int   getSelect                (void);
-      static int   selectOSS                (void);
-      static int   selectALSA               (void);
-      static int   selectUnknown            (void);
-
-   private:
-
-      static int      current;              // the type of MIDI out selected
-      static int      alsaQ;                // boolean for if ALSA is present
-      static int      ossQ;                 // boolean for if OSS is present
-      static int      objectCount;          // keeps track of static variables
-
-      static MidiInPort_oss          *oss_input;
-      static MidiInPort_alsa         *alsa_input;
-      static MidiInPort_unsupported  *unknown_input;
-
-      void            determineDrivers      (void);
-};
-
-#endif  /* ALSA and OSS def */
-#endif  /* LINUX def */
-
-#endif  /* _MIDIINPORT_LINUX_H_INCLUDED */
-
-
-// md5sum:	cc3608fb63ccf222f018efc89a4275f0  - MidiInPort_linux.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/MidiInPort_oss.h b/extensions/gripd/src/midiio/include/MidiInPort_oss.h
deleted file mode 100644
index 4387c353e..000000000
--- a/extensions/gripd/src/midiio/include/MidiInPort_oss.h
+++ /dev/null
@@ -1,106 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Fri Jan  8 08:33:57 PST 1999
-// Last Modified: Fri Jan  8 08:34:01 PST 1999
-// Last Modified: Tue Jun 29 16:18:02 PDT 1999 (added sysex capability)
-// Last Modified: Wed May 10 17:10:05 PDT 2000 (name change from _linux to _oss)
-// Filename:      ...sig/maint/code/control/MidiInPort/linux/MidiInPort_oss.h
-// Web Address:   http://sig.sapp.org/include/sig/MidiInPort_oss.h
-// Syntax:        C++ 
-//
-// Description:   An interface for MIDI input capabilities of
-//                linux OSS sound driver's specific MIDI input methods.
-//                This class is inherited privately by the MidiInPort class.
-//
-
-#ifndef _MIDIINPORT_OSS_H_INCLUDED
-#define _MIDIINPORT_OSS_H_INCLUDED
-
-#ifdef LINUX
-
-#include "MidiMessage.h"
-#include "CircularBuffer.h"
-#include "Array.h"
-#include "Sequencer_oss.h"
-#include "SigTimer.h"
-#include <pthread.h>
-
-typedef unsigned char uchar;
-typedef void (*MIDI_Callback_function)(int arrivalPort);
-
-void *interpretMidiInputStreamPrivate(void * x);
-
-class MidiInPort_oss : public Sequencer_oss {
-   public:
-                      MidiInPort_oss             (void);
-                      MidiInPort_oss             (int aPort, int autoOpen = 1);
-                     ~MidiInPort_oss             ();
-
-      void            clearSysex                 (int buffer);
-      void            clearSysex                 (void);
-      void            close                      (void);
-      void            close                      (int i) { close(); }
-      void            closeAll                   (void);
-      MidiMessage     extract                    (void);
-      int             getBufferSize              (void);
-      int             getChannelOffset           (void) const;
-      int             getCount                   (void);
-      const char*     getName                    (void);
-      static const char* getName                 (int i);
-      static int      getNumPorts                (void);
-      int             getPort                    (void);
-      int             getPortStatus              (void);
-      uchar*          getSysex                   (int buffer);
-      int             getSysexSize               (int buffer);
-      int             getTrace                   (void);
-      void            insert                     (const MidiMessage& aMessage);
-      int             installSysex               (uchar* anArray, int aSize);
-      MidiMessage&    message                    (int index);
-      int             open                       (void);
-      void            pause                      (void);
-      void            setBufferSize              (int aSize);
-      void            setChannelOffset           (int anOffset);
-      void            setPort                    (int aPort);
-      int             setTrace                   (int aState);
-      void            toggleTrace                (void);
-      void            unpause                    (void);
-
-   protected:
-      int    port;     // the port to which this object belongs
-
-      static MIDI_Callback_function  callbackFunction;
-
-      static int      installSysexPrivate        (int port, 
-                                                    uchar* anArray, int aSize);
- 
-      static int        objectCount;     // num of similar objects in existence
-      static int*       portObjectCount; // objects connected to particular port
-      static int*       trace;           // for verifying input
-      static std::ostream*   tracedisplay;    // stream for displaying trace
-      static int        numDevices;      // number of input ports
-      static CircularBuffer<MidiMessage>** midiBuffer; // MIDI storage frm ports
-      static int        channelOffset;   // channel offset, either 0 or 1
-                                         // not being used right now.
-      static int*       pauseQ;          // for adding items to Buffer or not
-      static SigTimer   midiTimer;       // for timing MIDI input
-      static pthread_t  midiInThread;    // for MIDI input thread function
-      static int*       sysexWriteBuffer; // for MIDI sysex write location
-      static Array<uchar>** sysexBuffers; // for MIDI sysex storage
-
-   private:
-      void            deinitialize               (void); 
-      void            initialize                 (void); 
-
- 
-   friend void *interpretMidiInputStreamPrivate(void * x);
-    
-};
-
-
-#endif  /* LINUX */
-
-#endif  /* _MIDIINPORT_OSS_H_INCLUDED */
-
-
-
-// md5sum:	05331ff5c3806fc753ebebaeffa3c377  - MidiInPort_oss.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/MidiInPort_unsupported.h b/extensions/gripd/src/midiio/include/MidiInPort_unsupported.h
deleted file mode 100644
index 1f3bcf06b..000000000
--- a/extensions/gripd/src/midiio/include/MidiInPort_unsupported.h
+++ /dev/null
@@ -1,89 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Fri Jan 23 00:04:51 GMT-0800 1998
-// Last Modified: Fri Jan 23 00:04:58 GMT-0800 1998
-// Last Modified: Wed Jun 30 11:42:59 PDT 1999 (added sysex capability)
-// Filename:      ...sig/code/control/MidiInPort/unsupported/MidiInPort_unsupported.h
-// Web Address:   http://www-ccrma.stanford.edu/~craig/improv/include/MidiInPort_unsupported.h
-// Syntax:        C++ 
-//
-// Description:   An interface for MIDI input capabilities of
-//                an unknown sound driver's specific MIDI input methods.
-//                This class is inherited privately by the MidiInPort class.
-//                This class is used when there is no MIDI input, so
-//                that MIDI programs can otherwise be compiled and run.
-//                This file can also serve as a template for creating
-//                an OS specific class for MIDI input.
-//
-
-#ifndef _MIDIINPUT_UNSUPPORTED_H_INCLUDED
-#define _MIDIINPUT_UNSUPPORTED_H_INCLUDED
-
-#include "MidiMessage.h"
-#include "CircularBuffer.h"
-#include "Array.h"
-
-class MidiInPort_unsupported {
-   public:
-                      MidiInPort_unsupported     (void);
-                      MidiInPort_unsupported     (int aPort, int autoOpen = 1);
-                     ~MidiInPort_unsupported     ();
-
-      void            clearSysex                 (int index) { }
-      void            clearSysex                 (void) { }
-      int             getSysexSize               (int index) { return 0; }
-      uchar*          getSysex                   (int buffer) { return NULL; }
-      int             installSysex               (unsigned char *&, int &) { return 0; }
-      int             getBufferSize              (void) { return 0; }
-      void            close                      (void);
-      void            close                      (int i) { close(); }
-      void            closeAll                   (void);
-      MidiMessage     extract                    (void);
-      int             getChannelOffset           (void) const;
-      int             getCount                   (void);
-      const char*     getName                    (void);
-      static const char* getName                 (int i);
-      int             getNumPorts                (void);
-      int             getPort                    (void);
-      int             getPortStatus              (void);
-      int             getTrace                   (void);
-      void            insert                     (const MidiMessage& aMessage);
-      MidiMessage&    message                    (int index);
-      int             open                       (void);
-      void            pause                      (void);
-      void            setBufferSize              (int aSize);
-      void            setChannelOffset           (int anOffset);
-      void            setPort                    (int aPort);
-      int             setTrace                   (int aState);
-      void            toggleTrace                (void);
-      void            unpause                    (void);
-
-   protected:
-      int    port;     // the port to which this object belongs
-      int    trace;
- 
-      static int        objectCount;     // num of similar objects in existence
-      static int*       portObjectCount; // objects connected to particular port
-      static int*       openQ;           // for open/close status of port
-      static int        numDevices;      // number of input ports
-      static CircularBuffer<MidiMessage>* midiBuffer; // MIDI storage from ports
-      static int        channelOffset;     // channel offset, either 0 or 1
-                                           // not being used right now.
-      static int*       sysexWriteBuffer;  // for MIDI sysex write location
-      static Array<uchar>** sysexBuffers;  // for MIDI sysex storage
-
-   private:
-      void            deinitialize               (void); 
-      void            initialize                 (void); 
-      void            setPortStatus              (int aStatus);
-
-    
-};
-
-
-
-#endif  /* _MIDIINPUT_UNSUPPORTED_H_INCLUDED */
-
-
-
-// md5sum:	ff5492fbd59a47e48e2c0ce06705add1  - MidiInPort_unsupported.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/MidiInPort_visual.h b/extensions/gripd/src/midiio/include/MidiInPort_visual.h
deleted file mode 100644
index 398a1870e..000000000
--- a/extensions/gripd/src/midiio/include/MidiInPort_visual.h
+++ /dev/null
@@ -1,114 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Sun Dec 28 15:18:46 GMT-0800 1997
-// Last Modified: Mon Jan 12 20:05:27 GMT-0800 1998
-// Last Modified: Wed Jun 30 11:29:51 PDT 1999 (added sysex capability)
-// Filename:      ...sig/code/control/MidiInPort/visual/MidiInPort_visual.h
-// Web Address:   http://www-ccrma.stanford.edu/~craig/improv/include/MidiInPort_visual.h
-// Syntax:        C++ 
-//
-// Description:   An interface for MIDI input capabilities of
-//                Windows 95/NT/98 specific MIDI input methods.
-//                as defined in winmm.lib.  This class is inherited 
-//                privately by the MidiInPort class.
-//
-
-#ifndef _MIDIINPUT_VISUAL_H_INCLUDED
-#define _MIDIINPUT_VISUAL_H_INCLUDED
-
-
-#ifdef VISUAL
-
-#define DEFAULT_INPUT_BUFFER_SIZE (1024)
-
-#include <windows.h>
-#include <mmsystem.h>
-
-#include "MidiMessage.h"
-#include "CircularBuffer.h"
-#include "Array.h"
-
-class MidiInPort_visual {
-   public:
-                      MidiInPort_visual          (void);
-                      MidiInPort_visual          (int aPort, int autoOpen = 1);
-                     ~MidiInPort_visual          ();
-
-      void            clearSysex                 (void);
-      void            clearSysex                 (int buffer);
-      void            close                      (void);
-      void            closeAll                   (void);
-      MidiMessage     extract                    (void);
-      int             getBufferSize              (void);
-      int             getChannelOffset           (void) const;
-      int             getCount                   (void);
-      const char*     getName                    (void);
-      static const char* getName                 (int i);
-      static int      getNumPorts                (void);
-      int             getPort                    (void);
-      int             getPortStatus              (void);
-      uchar*          getSysex                   (int buffer);
-      int             getSysexSize               (int buffer);
-      int             getTrace                   (void);
-      void            insert                     (const MidiMessage& aMessage);
-      int             installSysex               (uchar* anArray, int aSize);
-      MidiMessage&    message                    (int index);
-      int             open                       (void);
-      void            pause                      (void);
-      void            setBufferSize              (int aSize);
-      void            setChannelOffset           (int anOffset);
-      void            setPort                    (int aPort);
-      int             setTrace                   (int aState);
-      void            toggleTrace                (void);
-      void            unpause                    (void);
-
-   protected:
-      int    port;     // the port to which this object belongs
-      int    trace;
-
-      int             installSysexPrivate (int port, uchar* anArray, int aSize);
-      void            installSysexStuff   (HMIDIIN dev, int port); 
-      void            uninstallSysexStuff (HMIDIIN dev, int port); 
-
-      static int      objectCount;     // num of similar objects in existence
-      static int*     portObjectCount; // objects connected to particular port
-      static int*     openQ;           // for open/close status of port
-      static int*     inrunningQ;      // for running open input port 
-      static int      numDevices;      // number of input ports
-      static HMIDIIN* device;          // Windoze MIDI-in device structure
-      static MIDIHDR** sysexDriverBuffer1; // for Windoze driver sysex buffers
-      static MIDIHDR** sysexDriverBuffer2; // for Windoze driver sysex buffers
-      static int*      sysexDBnumber;  // for Windoze driver sysex buffers
-      static HANDLE*  hMutex;          // mutual exclusive
-      static CircularBuffer<MidiMessage>* midiBuffer; // MIDI storage from ports
-      static int      channelOffset;     // channel offset from either 0 or 1.
-                                         // not being used right now.
-      static int*     sysexWriteBuffer;  // for MIDI sysex write location
-      static Array<uchar>** sysexBuffers;// for MIDI sysex storage
-      static int*     sysexStatus;       // tracing multiple MIM_LONGDATA messgs
-
-   private:
-      void            deinitialize               (void); 
-      void            initialize                 (void); 
-      void            releaseMutex               (void);
-      void            setPortStatus              (int aStatus);
-      void            waitForMutex               (void);
-
-
-   friend void CALLBACK midiInputCallback(HMIDIIN hMidiIn, UINT inputStatus, 
-                         DWORD instancePtr, DWORD midiMessage, DWORD timestamp);
-};
-
-
-// This is the command which is called by the driver when there is
-// MIDI data being received from the MIDI input port:
- void CALLBACK midiInputCallback(HMIDIIN hMidiIn, UINT inputStatus, 
-   DWORD instancePtr, DWORD midiMessage, DWORD timestamp);
-
-
-#endif  /* VISUAL */
-#endif  /* _MIDIINPUT_VISUAL_H_INCLUDED */
-
-
-
-// md5sum:	d5aee7a88c4a054b3e2d4d40622fdc42  - MidiInPort_visual.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/MidiInput.h b/extensions/gripd/src/midiio/include/MidiInput.h
deleted file mode 100644
index 4425f7505..000000000
--- a/extensions/gripd/src/midiio/include/MidiInput.h
+++ /dev/null
@@ -1,53 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu> 
-// Creation Date: 18 December 1997
-// Last Modified: Sun Jan 25 15:27:02 GMT-0800 1998
-// Last Modified: Thu Apr 20 16:23:24 PDT 2000 (added scale function)
-// Filename:      ...sig/code/control/MidiInput/MidiInput.h
-// Web Address:   http://sig.sapp.org/include/sig/MidiInput.h
-// Syntax:        C++
-//
-// Description:   A higher-level MIDI input interface than the 
-//                MidiInPort class.  Can be used to allow multiple
-//                objects to share a single MIDI input stream, or
-//                to fake a MIDI input connection.
-//
-
-#ifndef _MIDIINPUT_H_INCLUDED
-#define _MIDIINPUT_H_INCLUDED
-
-
-#include "MidiInPort.h"
-
-
-class MidiInput : public MidiInPort {
-   public:
-                    MidiInput         (void);
-                    MidiInput         (int aPort, int autoOpen = 1);
-                   ~MidiInput         ();
-
-      int           getBufferSize     (void);
-      int           getCount          (void);
-      MidiMessage   extract           (void);
-      void          insert            (const MidiMessage& aMessage);
-      int           isOrphan          (void) const;
-      void          makeOrphanBuffer  (int aSize = 1024);
-      void          removeOrphanBuffer(void);
-      void          setBufferSize     (int aSize);
-
-      int           scale             (int value, int min, int max);
-      double        fscale            (int value, double min, double max);
-      int           scale14           (int value, int min, int max);
-      double        fscale14          (int value, double min, double max);
-
-   protected:
-      CircularBuffer<MidiMessage>* orphanBuffer;
-
-};
-
-
-#endif  /* _MIDIINPUT_H_INCLUDED */
-
-
-
-// md5sum:	73972cc29d7bcf0fba136b098c0419a0  - MidiInput.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/MidiMessage.h b/extensions/gripd/src/midiio/include/MidiMessage.h
deleted file mode 100644
index e4b59ba16..000000000
--- a/extensions/gripd/src/midiio/include/MidiMessage.h
+++ /dev/null
@@ -1,78 +0,0 @@
-//
-// Copyright 1997 by Craig Stuart Sapp, All Rights Reserved.
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: 19 December 1997
-// Last Modified: Fri Jan 23 00:21:24 GMT-0800 1998
-// Last Modified: Sun Sep 20 20:30:53 PDT 1998
-// Last Modified: Mon Oct 15 14:29:12 PDT 2001 (added is_note functions)
-// Filename:      ...sig/include/sigInfo/MidiMessage.h
-// Web Address:   http://sig.sapp.org/include/sigInfo/MidiMessage.h
-// Syntax:        C++ 
-//
-// Description:   A structure for handling MIDI input messages.
-//                This class stores a time stamp plus up to 
-//                four MIDI message bytes.  System Exclusive messages
-//                are stored in a separate array in the MidiInPort
-//                class, and their storage index is passed to the
-//                user through a MIDI message for later extraction
-//                of the full sysex message.
-//
-
-#ifndef _MIDIMESSAGE_H_INCLUDED
-#define _MIDIMESSAGE_H_INCLUDED
-
-#include <iostream>
-
-typedef unsigned char uchar;
-typedef unsigned long ulong;
-
-class MidiMessage {
-   public:
-      ulong          time;             // timestamp 
-      ulong          data;             // MIDI command and parameters
-
-                     MidiMessage       (void);
-                     MidiMessage       (int aCommand, int aP1, int aP2, 
-                                          int aTime = 0);
-                     MidiMessage       (const MidiMessage& aMessage);
-                    ~MidiMessage       ();
-
-      uchar&         command           (void);
-      MidiMessage&   operator=         (const MidiMessage& aMessage);
-      uchar&         operator[]        (int index);
-      uchar&         p0                (void);
-      uchar&         p1                (void);
-      uchar&         p2                (void);
-      uchar&         p3                (void);
-      int            getArgCount       (void) const;
-      int            getParameterCount (void) const;
-
-      uchar          getCommand        (void) const;
-      uchar          getP0             (void) const;
-      uchar          getP1             (void) const;
-      uchar          getP2             (void) const;
-      uchar          getP3             (void) const;
-
-      void           setCommand        (uchar aCommand);
-      void           setData           (uchar aCommand, uchar aP1 = 0,
-                                           uchar aP2 = 0, uchar aP3 = 0);
-      void           setP0             (uchar aP0);
-      void           setP1             (uchar aP1);
-      void           setP2             (uchar aP2);
-      void           setP3             (uchar aP3);
-
-      int            is_note           (void);
-      int            is_note_on        (void);
-      int            is_note_off       (void);
-
-};
-
-
-std::ostream& operator<<(std::ostream& out, MidiMessage& aMessage);
-
-
-#endif  /* _MIDIMESSAGE_H_INCLUDED */
-
-
-
-// md5sum:	4738e957fb8a233f6dbaeebda490e6a4  - MidiMessage.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/MidiOutPort.h b/extensions/gripd/src/midiio/include/MidiOutPort.h
deleted file mode 100644
index 0287dfd86..000000000
--- a/extensions/gripd/src/midiio/include/MidiOutPort.h
+++ /dev/null
@@ -1,92 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Sun Dec 28 15:04:24 GMT-0800 1997
-// Last Modified: Fri Jan 23 10:56:18 GMT-0800 1998
-// Last Modified: Sat Nov  7 16:15:54 PST 1998
-// Last Modified: Tue May 23 23:08:44 PDT 2000 (oss/alsa selection added)
-// Last Modified: Mon Jun 19 10:32:11 PDT 2000 (oss/alsa define fix)
-// Filename:      ...sig/code/control/MidiOutPort/MidiOutPort.h
-// Web Address:   http://sig.sapp.org/include/sig/MidiOutPort.h
-// Syntax:        C++ 
-//
-// Description:   Operating-System independent interface for
-//                basic MIDI output capabilities.  Privately
-//                inherits the operating-system specific class
-//                for MIDI output.
-//
-
-#ifndef _MIDIOUTPORT_H_INCLUDED
-#define _MIDIOUTPORT_H_INCLUDED
-
-
-#ifdef VISUAL
-   #define MIDIOUTPORT  MidiOutPort_visual
-   #include "MidiOutPort_visual.h"
-#elif defined(LINUX) && defined(ALSA) && defined(OSS)
-   #define MIDIOUTPORT  MidiOutPort_linux
-   #include "MidiOutPort_linux.h"
-#elif defined(LINUX) && defined(ALSA) && !defined(OSS)
-   #define MIDIOUTPORT  MidiOutPort_alsa
-   #include "MidiOutPort_alsa.h"
-#elif defined (LINUX) && defined(OSS) && !defined(ALSA)
-   #define MIDIOUTPORT  MidiOutPort_oss
-   #include "MidiOutPort_oss.h"
-#elif defined(LINUX)
-   #define MIDIOUTPORT  MidiOutPort_oss
-   #include "MidiOutPort_oss.h"
-#else
-   #define MIDIOUTPORT  MidiOutPort_unsupported
-   #include "MidiOutPort_unsupported.h"
-#endif
-
-
-class MidiOutPort : protected MIDIOUTPORT {
-   public:
-                  MidiOutPort        (void) : MIDIOUTPORT() {}
-                  MidiOutPort        (int aPort, int autoOpen = 1) : 
-                                         MIDIOUTPORT(aPort, autoOpen) {}
-                 ~MidiOutPort()      { }
-
-      void        close(void)         { MIDIOUTPORT::close(); }
-      void        closeAll(void)      { MIDIOUTPORT::closeAll(); }
-      int         getChannelOffset(void) const { 
-                     return MIDIOUTPORT::getChannelOffset(); }
-      const char* getName(void)       { return MIDIOUTPORT::getName(); }
-      static const char* getName(int i) { return MIDIOUTPORT::getName(i); }
-      static int  getNumPorts(void)   { return MIDIOUTPORT::getNumPorts(); }
-      int         getPort(void)       { return MIDIOUTPORT::getPort(); }
-      int         getPortStatus(void) { 
-                     return MIDIOUTPORT::getPortStatus(); }
-      int         getTrace(void) { 
-                     return MIDIOUTPORT::getTrace(); }
-      int         open(void)         { return MIDIOUTPORT::open(); }
-      int         rawsend(int command, int p1, int p2) {
-                     return MIDIOUTPORT::rawsend(command, p1, p2); }
-      int         rawsend(int command, int p1) {
-                     return MIDIOUTPORT::rawsend(command, p1); }
-      int         rawsend(int command) {
-                     return MIDIOUTPORT::rawsend(command); }
-      int         rawsend(uchar* array, int size) {
-                     return MIDIOUTPORT::rawsend(array, size); }
-      void        setAndOpenPort(int aPort) { setPort(aPort); open(); }
-//    void        setChannelOffset(int aChannel) { 
-//                   MIDIOUTPORT::setChannelOffset(aChannel); }
-      void        setPort(int aPort) { MIDIOUTPORT::setPort(aPort); }
-      int         setTrace(int aState) {
-                     return MIDIOUTPORT::setTrace(aState); }
-      int         sysex(uchar* array, int size) {
-                     return MIDIOUTPORT::sysex(array, size); }
-      void        toggleTrace(void) { MIDIOUTPORT::toggleTrace(); }
-      MidiOutPort& operator=(MidiOutPort& other) {
-                     setPort(other.getPort());
-                     if (other.getPortStatus()) { open(); }
-                     return *this; }
-};
-
-
-
-
-#endif  /* _MIDIOUTPORT_H_INCLUDED */
-
-
-// md5sum:	2f7b8aa8ef705eab57179b626ce1d62d  - MidiOutPort.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/MidiOutPort_alsa.h b/extensions/gripd/src/midiio/include/MidiOutPort_alsa.h
deleted file mode 100644
index 34139a3f3..000000000
--- a/extensions/gripd/src/midiio/include/MidiOutPort_alsa.h
+++ /dev/null
@@ -1,79 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Wed May 10 16:22:00 PDT 2000
-// Last Modified: Sun May 14 20:43:44 PDT 2000
-// Last Modified: Sat Nov  2 20:39:01 PST 2002 (added ALSA def)
-// Filename:      ...sig/maint/code/control/MidiOutPort/linux/MidiOutPort_alsa.h
-// Web Address:   http://sig.sapp.org/include/sig/MidiOutPort_alsa.h
-// Syntax:        C++
-//
-// Description:   Operating-System specific interface for
-//                basic MIDI output capabilities in Linux using
-//                OSS sound drivers.  Privately inherited by the
-//                MidiOutPort class.
-// 
-
-#ifndef _MIDIOUTPORT_ALSA_H_INCLUDED
-#define _MIDIOUTPORT_ALSA_H_INCLUDED
-
-#ifdef LINUX
-#ifdef ALSA
-
-#include "Sequencer_alsa.h"
-#include <iostream>
-
-typedef unsigned char uchar;
-
-
-class MidiOutPort_alsa : public Sequencer_alsa {
-   public:
-                      MidiOutPort_alsa          (void);
-                      MidiOutPort_alsa          (int aPort, int autoOpen = 1);
-                     ~MidiOutPort_alsa          ();
-
-      void            close                      (void);
-      void            closeAll                   (void);
-      int             getChannelOffset           (void) const;
-      const char*     getName                    (void);
-      static const char* getName                 (int i);
-      int             getPort                    (void);
-      static int      getNumPorts                (void);
-      int             getPortStatus              (void);
-      int             getTrace                   (void);
-      int             rawsend                    (int command, int p1, int p2);
-      int             rawsend                    (int command, int p1);
-      int             rawsend                    (int command);
-      int             rawsend                    (uchar* array, int size);
-      int             open                       (void);
-      void            setChannelOffset           (int aChannel);
-      void            setPort                    (int aPort);
-      int             setTrace                   (int aState);
-      int             sysex                      (uchar* array, int size);
-      void            toggleTrace                (void);
-
-   protected:
-      int    port;     // the port to which this object belongs
- 
-      static int        objectCount;     // num of similar objects in existence
-      static int*       portObjectCount; // objects connected to particular port
-      static int        numDevices;      // number of output ports
-      static int*       trace;           // for printing messages to output
-      static std::ostream*   tracedisplay;    // for printing trace messages
-
-   private:
-      void            deinitialize               (void); 
-      void            initialize                 (void); 
-      void            setPortStatus              (int aStatus);
-
-      static int      channelOffset;     // channel offset, either 0 or 1.
-                                         // not being used right now.
-};
-
-
-
-#endif  /* ALSA */
-#endif  /* LINUX */
-#endif  /* _MIDIOUTPUT_ALSA_H_INCLUDED */
-
-
-// md5sum:	5b7648c7b493df7cb0d1fae3bbb8be24  - MidiOutPort_alsa.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/MidiOutPort_linux.h b/extensions/gripd/src/midiio/include/MidiOutPort_linux.h
deleted file mode 100644
index a02dc22a5..000000000
--- a/extensions/gripd/src/midiio/include/MidiOutPort_linux.h
+++ /dev/null
@@ -1,80 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Wed May 10 16:03:52 PDT 2000
-// Last Modified: Thu May 18 23:37:17 PDT 2000
-// Last Modified: Sat Nov  2 20:40:01 PST 2002 (added ALSA OSS def)
-// Filename:      ...sig/code/control/MidiOutPort_linux/MidiOutPort_linux.h
-// Web Address:   http://sig.sapp.org/include/sig/MidiOutPort_linux.h
-// Syntax:        C++ 
-//
-// Description:   Linux MIDI output class which detects which
-//                type of MIDI drivers are available: either
-//                ALSA or OSS. 
-//
-
-#ifndef _MIDIOUTPORT_LINUX_H_INCLUDED
-#define _MIDIOUTPORT_LINUX_H_INCLUDED
-
-#ifdef LINUX
-#if defined(ALSA) && defined(OSS)
-
-#include "MidiOutPort_oss.h"
-#include "MidiOutPort_alsa.h"
-#include "MidiOutPort_unsupported.h"
-
-#define UNKNOWN_MIDI_SELECT   0    /* use dummy MIDI output */
-#define OSS_MIDI_SELECT       1    /* use OSS MIDI output */
-#define ALSA_MIDI_SELECT      2    /* use ALSA MIDI output */
-
-class MidiOutPort_linux {
-   public:
-                      MidiOutPort_linux     (void);
-                      MidiOutPort_linux     (int aPort, int autoOpen = 1);
-                     ~MidiOutPort_linux     ();
-
-      void            close                 (void);
-      void            closeAll              (void);
-      int             getChannelOffset      (void) const;
-      const char*     getName               (void);
-      static const    char* getName         (int i);
-      static int      getNumPorts           (void);
-      int             getPort               (void);
-      int             getPortStatus         (void);
-      int             getTrace              (void);
-      int             open                  (void);
-      int             rawsend               (int command, int p1, int p2);
-      int             rawsend               (int command, int p1);
-      int             rawsend               (int command);
-      int             rawsend               (uchar* array, int size);
-      void            setAndOpenPort        (int aPort);
-      void            setChannelOffset      (int aChannel);
-      void            setPort               (int aPort);
-      int             setTrace              (int aState);
-      int             sysex                 (uchar* array, int size);
-      void            toggleTrace           (void);
-
-      static int      getSelect             (void);
-      static int      selectOSS             (void);
-      static int      selectALSA            (void);
-      static int      selectUnknown         (void);
-
-   private:
-      static int      current;              // the type of MIDI out selected
-      static int      alsaQ;                // boolean for if ALSA is present
-      static int      ossQ;                 // boolean for if OSS is present
-
-      static int                       objectCount;
-      static MidiOutPort_oss          *oss_output;
-      static MidiOutPort_alsa         *alsa_output;
-      static MidiOutPort_unsupported  *unknown_output;
-
-      void            determineDrivers      (void);
-};
-
-#endif  /* ALSA and OSS */
-#endif  /* LINUX */
-
-#endif  /* _MIDIOUTPORT_LINUX_H_INCLUDED */
-
-
-// md5sum:	c80f9f47c45a6d4a20b6549743cae9fb  - MidiOutPort_linux.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/MidiOutPort_oss.h b/extensions/gripd/src/midiio/include/MidiOutPort_oss.h
deleted file mode 100644
index 22cf32de2..000000000
--- a/extensions/gripd/src/midiio/include/MidiOutPort_oss.h
+++ /dev/null
@@ -1,75 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Fri Dec 18 19:15:00 PST 1998
-// Last Modified: Wed May 10 17:00:11 PDT 2000 (name change from _linux to _oss)
-// Filename:      ...sig/maint/code/control/MidiOutPort/linux/MidiOutPort_oss.h
-// Web Address:   http://sig.sapp.org/include/sig/MidiOutPort_oss.h
-// Syntax:        C++
-//
-// Description:   Operating-System specific interface for
-//                basic MIDI output capabilities in Linux using
-//                OSS sound drivers.  Privately inherited by the
-//                MidiOutPort class.
-// 
-
-#ifndef _MIDIOUTPORT_OSS_H_INCLUDED
-#define _MIDIOUTPORT_OSS_H_INCLUDED
-
-#ifdef LINUX
-
-#include "Sequencer_oss.h"
-
-typedef unsigned char uchar;
-
-
-class MidiOutPort_oss : public Sequencer_oss {
-   public:
-                      MidiOutPort_oss            (void);
-                      MidiOutPort_oss            (int aPort, int autoOpen = 1);
-                     ~MidiOutPort_oss            ();
-
-      void            close                      (void);
-      void            closeAll                   (void);
-      int             getChannelOffset           (void) const;
-      const char*     getName                    (void);
-      static const char* getName                 (int i);
-      int             getPort                    (void);
-      static int      getNumPorts                (void);
-      int             getPortStatus              (void);
-      int             getTrace                   (void);
-      int             rawsend                    (int command, int p1, int p2);
-      int             rawsend                    (int command, int p1);
-      int             rawsend                    (int command);
-      int             rawsend                    (uchar* array, int size);
-      int             open                       (void);
-      void            setChannelOffset           (int aChannel);
-      void            setPort                    (int aPort);
-      int             setTrace                   (int aState);
-      int             sysex                      (uchar* array, int size);
-      void            toggleTrace                (void);
-
-   protected:
-      int    port;     // the port to which this object belongs
- 
-      static int        objectCount;     // num of similar objects in existence
-      static int*       portObjectCount; // objects connected to particular port
-      static int        numDevices;      // number of output ports
-      static int*       trace;           // for printing messages to output
-      static std::ostream*   tracedisplay;    // for printing trace messages
-
-   private:
-      void            deinitialize               (void); 
-      void            initialize                 (void); 
-      void            setPortStatus              (int aStatus);
-
-      static int      channelOffset;     // channel offset, either 0 or 1.
-                                         // not being used right now.
-};
-
-
-
-#endif  /* LINUX */
-#endif  /* _MIDIOUTPUT_OSS_H_INCLUDED */
-
-
-// md5sum:	f60183e23c49741e93d9b965bbe9a6d8  - MidiOutPort_oss.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/MidiOutPort_unsupported.h b/extensions/gripd/src/midiio/include/MidiOutPort_unsupported.h
deleted file mode 100644
index a5e8c35d9..000000000
--- a/extensions/gripd/src/midiio/include/MidiOutPort_unsupported.h
+++ /dev/null
@@ -1,71 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Mon Jan 12 21:36:26 GMT-0800 1998
-// Last Modified: Mon Jan 12 21:36:31 GMT-0800 1998
-// Filename:      ...sig/code/control/MidiOutPort/unsupported/MidiOutPort_unsupported.h
-// Web Address:   http://www-ccrma.stanford.edu/~craig/improv/include/MidiOutPort_unsupported.h
-// Syntax:        C++ 
-//
-// Description:   Operating-System specific interface for basic MIDI output
-//                capabilities in an unknown operating system.  Privately 
-//                inherited by the MidiOutPort class. Used for compiling
-//                and running MIDI programs on a computer with no
-//                MIDI output.
-//
-
-#ifndef _MIDIOUTPUT_UNSUPPORTED_H_INCLUDED
-#define _MIDIOUTPUT_UNSUPPORTED_H_INCLUDED
-
-typedef unsigned char uchar;
-
-class MidiOutPort_unsupported {
-   public:
-                        MidiOutPort_unsupported  (void);
-                        MidiOutPort_unsupported  (int aPort, int autoOpen = 1);
-                       ~MidiOutPort_unsupported  ();
-
-      void              close                    (void);
-      void              closeAll                 (void);
-      int               getChannelOffset         (void) const;
-      const char*       getName                  (void) const;
-      const char*       getName                  (int i) const;
-      int               getPort                  (void) const;
-      int               getNumPorts              (void) const;
-      int               getPortStatus            (void) const;
-      int               getTrace                 (void) const;
-      int               rawsend                  (int command, int p1, int p2);
-      int               rawsend                  (int command, int p1);
-      int               rawsend                  (int command);
-      int               rawsend                  (uchar* array, int size);
-      int               open                     (void);
-      void              setChannelOffset         (int aChannel);
-      void              setPort                  (int aPort);
-      int               setTrace                 (int aState);
-      int               sysex                    (uchar* array, int size);
-      void              toggleTrace              (void);
-
-   protected:
-      int    port;     // the port to which this object belongs
-      int    trace;    // for printing out midi messages to standard output
- 
-      static int        objectCount;     // num of similar objects in existence
-      static int*       portObjectCount; // objects connected to particular port
-      static int*       openQ;           // for open/close status of port
-      static int        numDevices;      // number of output ports
-
-   private:
-      void              deinitialize             (void); 
-      void              initialize               (void); 
-      void              setPortStatus            (int aStatus);
-      
-      static int      channelOffset;     // channel offset, either 0 or 1
-                                         // not being used right now.
-};
-
-
-
-#endif  /* _MIDIOUTPUT_UNSUPPORTED_H_INCLUDED */
-
-
-
-// md5sum:	e244688a99d220addc7b1c6f6f6a8022  - MidiOutPort_unsupported.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/MidiOutPort_visual.h b/extensions/gripd/src/midiio/include/MidiOutPort_visual.h
deleted file mode 100644
index d6a398405..000000000
--- a/extensions/gripd/src/midiio/include/MidiOutPort_visual.h
+++ /dev/null
@@ -1,75 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Sun Dec 28 15:18:46 GMT-0800 1997
-// Last Modified: Mon Jan 12 20:05:27 GMT-0800 1998
-// Filename:      ...sig/code/control/MidiOutPort/visual/MidiOutPort_visual.h
-// Web Address:   http://www-ccrma.stanford.edu/~craig/improv/include/MidiOutPort_visual.h
-// Syntax:        C++ 
-//
-// Description:   Operating-System specific interface for
-//                basic MIDI output capabilities in Windows 95/NT/98
-//                using winmm.lib.  Privately inherited by the
-//                MidiOutPort class.
-// 
-
-#ifndef _MIDIOUTPUT_VISUAL_H_INCLUDED
-#define _MIDIOUTPUT_VISUAL_H_INCLUDED
-
-#ifdef VISUAL
-
-typedef unsigned char uchar;
-
-#include <windows.h>
-#include <mmsystem.h>
-
-class MidiOutPort_visual {
-   public:
-                         MidiOutPort_visual  (void);
-                         MidiOutPort_visual  (int aPort, int autoOpen = 1);
-                        ~MidiOutPort_visual  ();
-
-      void               close               (void);
-      void               closeAll            (void);
-      int                getChannelOffset    (void) const;
-      const char*        getName             (void);
-      static const char* getName             (int i);
-      int                getPort             (void);
-      static int         getNumPorts         (void);
-      int                getPortStatus       (void);
-      int                getTrace            (void);
-      int                rawsend             (int command, int p1, int p2);
-      int                rawsend             (int command, int p1);
-      int                rawsend             (int command);
-      int                rawsend             (uchar* array, int size);
-      int                open                (void);
-      void               setChannelOffset    (int aChannel);
-      void               setPort             (int aPort);
-      int                setTrace            (int aState);
-      int                sysex               (uchar* array, int size);
-      void               toggleTrace         (void);
-
-   protected:
-      int    port;     // the port to which this object belongs
-      int    trace;    // for printing out Midi messages to standard output
- 
-      static int        objectCount;     // num of similar objects in existence
-      static int*       portObjectCount; // objects connected to particular port
-      static int*       openQ;           // for open/close status of port
-      static int        numDevices;      // number of output ports
-      static HMIDIOUT*  device;          // Windoze midi out device structure
-
-   private:
-      void            deinitialize               (void); 
-      void            initialize                 (void); 
-      void            setPortStatus              (int aStatus);
-
-      static int      channelOffset;     // channel offset, either 0 or 1.
-                                         // not being used right now.
-};
-
-
-#endif  /* VISUAL */
-#endif  /* _MIDIOUTPUT_VISUAL_H_INCLUDED */
-
-
-// md5sum:	47799e340effa57676be8a3943cabb70  - MidiOutPort_visual.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/MidiOutput.h b/extensions/gripd/src/midiio/include/MidiOutput.h
deleted file mode 100644
index d42481678..000000000
--- a/extensions/gripd/src/midiio/include/MidiOutput.h
+++ /dev/null
@@ -1,140 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: 18 December 1997
-// Last Modified: Mon Jan 26 23:53:05 GMT-0800 1998
-// Last Modified: Sat Jan 30 14:00:29 PST 1999
-// Last Modified: Sun Jul 18 18:52:42 PDT 1999 (added RPN functions)
-// Filename:      ...sig/maint/code/control/MidiOutput/MidiOutput.h
-// Web Address:   http://www-ccrma.stanford.edu/~craig/improv/include/MidiOutput.h
-// Syntax:        C++
-//
-// Description:   The MIDI output interface for MIDI synthesizers/equipment
-//                which has many convienience functions defined for
-//                various types of MIDI output.
-//
-
-#ifndef _MIDIOUTPUT_H_INCLUDED
-#define _MIDIOUTPUT_H_INCLUDED
-
-#include "MidiOutPort.h"
-#include "FileIO.h"
-#include "SigTimer.h"
-#include "Array.h"
-
-
-class MidiOutput : public MidiOutPort {
-   public:
-                MidiOutput     (void);
-                MidiOutput     (int aPort, int autoOpen = 1);
-               ~MidiOutput     ();
-
-      // Basic user MIDI output commands:
-      int       cont           (int channel, int controller, int data);
-      int       off            (int channel, int keynum, int releaseVelocity);
-      int       pc             (int channel, int timbre);
-      int       play           (int channel, int keynum, int velocity);
-      int       pw             (int channel, int mostByte, int leastByte);
-      int       pw             (int channel, int tuningData);
-      int       pw             (int channel, double tuningData);
-      void      recordStart    (char *filename, int format);
-      void      recordStop     (void);
-      void      reset          (void);
-      int       send           (int command, int p1, int p2);
-      int       send           (int command, int p1);
-      int       send           (int command);
-      void      silence        (int aChannel = -1);
-      void      sustain        (int channel, int status);
-      int       sysex          (char* data, int length);
-      int       sysex          (uchar* data, int length);
-
-   protected:
-      int       outputRecordQ;     // boolean for recording
-      int       outputRecordType;  // what form to record MIDI data in
-      int       lastFlushTime;     // for recording midi data
-      FileIO    outputRecordFile;  // file for recording midi data
-      static SigTimer timer;       // for recording midi data
-      static Array<int>* rpn_lsb_status;  // for RPN messages
-      static Array<int>* rpn_msb_status;  // for RPN messages
-      static int objectCount;             // for RPN messages
-
-      void      deinitializeRPN    (void);
-      void      initializeRPN      (void);
-      void      writeOutputAscii   (int channel, int p1, int p2);
-      void      writeOutputBinary  (int channel, int p1, int p2); 
-      void      writeOutputMidifile(int channel, int p1, int p2);
-
-   public: // RPN controller functions
-      int    NRPN                    (int channel, int nrpn_msb, int nrpn_lsb, 
-                                           int data_msb, int data_lsb);
-      int    NRPN                    (int channel, int nrpn_msb, int nrpn_lsb, 
-                                           int data_msb);
-      int    NRPN                    (int channel, int nrpn_msb, int nrpn_lsb, 
-                                           double data);
-      int    NRPN_null               (int channel);
-      int    NRPN_attack             (int channel, double value);
-      int    NRPN_attack             (int channel, int value);
-      int    NRPN_decay              (int channel, double value);
-      int    NRPN_decay              (int channel, int value);
-      int    NRPN_drumAttack         (int drum, double value);
-      int    NRPN_drumAttack         (int drum, int value);
-      int    NRPN_drumChorus         (int drum, double value);
-      int    NRPN_drumChorus         (int drum, int value);
-      int    NRPN_drumDecay          (int drum, double value);
-      int    NRPN_drumDecay          (int drum, int value);
-      int    NRPN_drumLevel          (int drum, double value);
-      int    NRPN_drumLevel          (int drum, int value);
-      int    NRPN_drumPan            (int drum, double value);
-      int    NRPN_drumPan            (int drum, int value);
-      int    NRPN_drumPitch          (int drum, double value);
-      int    NRPN_drumPitch          (int drum, int value);
-      int    NRPN_drumFilterCutoff   (int drum, double value);
-      int    NRPN_drumFilterCutoff   (int drum, int value);
-      int    NRPN_drumFilterResonance(int drum, double value);
-      int    NRPN_drumFilterResonance(int drum, int value);
-      int    NRPN_drumReverb         (int drum, double value);
-      int    NRPN_drumReverb         (int drum, int value);
-      int    NRPN_drumVariation      (int drum, double value);
-      int    NRPN_drumVariation      (int drum, int value);
-      int    NRPN_filterCutoff       (int channel, double value);
-      int    NRPN_filterCutoff       (int channel, int value);
-      int    NRPN_release            (int channel, double value);
-      int    NRPN_release            (int channel, int value);
-      int    NRPN_vibratoDelay       (int channel, double value);
-      int    NRPN_vibratoDelay       (int channel, int value);
-      int    NRPN_vibratoDepth       (int channel, double value);
-      int    NRPN_vibratoDepth       (int channel, int value);
-      int    NRPN_vibratoRate        (int channel, double value);
-      int    NRPN_vibratoRate        (int channel, int value);
-
-      int    RPN                     (int channel, int rpn_msb, int rpn_lsb, 
-                                           int data_msb, int data_lsb);
-      int    RPN                     (int channel, int rpn_msb, int rpn_lsb, 
-                                           int data_msb);
-      int    RPN                     (int channel, int rpn_msb, int rpn_lsb, 
-                                           double data);
-      int    RPN_null                (void);
-      int    RPN_null                (int channel);
-      int    pbRange                 (int channel, int steps);
-      int    tuneFine                (int channel, int cents);
-      int    fineTune                (int channel, int cents);
-      int    tuneCoarse              (int channel, int steps);
-      int    coarseTune              (int channel, int steps);
-      int    tuningProgram           (int channel, int program);
-      int    tuningBank              (int channel, int bank);
-
-};
-
-
-#endif /* _MIDIOUTPUT_H_INCLUDED */
-
-// Brief description of MidiOutput public member functions:
-//
-// send:    sends a MIDI command to the MIDI output with up to two parameters
-// play:    sends a playnote command to the MIDI output
-// pc:      Patch Change.  changes the timbre (instrument) on the given channel
-// cont:    sends a CONTinuous CONTroller MIDI command
-// sysex:   sends a system exclusive command to the MIDI output
-//
-
-
-// md5sum:	12ee02c32563ae219aaa8c7599de55db  - MidiOutput.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/MidiPort.h b/extensions/gripd/src/midiio/include/MidiPort.h
deleted file mode 100644
index 834877ed8..000000000
--- a/extensions/gripd/src/midiio/include/MidiPort.h
+++ /dev/null
@@ -1,49 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: 21 December 1997
-// Last Modified: Fri Jan 23 10:21:25 GMT-0800 1998
-// Filename:      .../sig/code/control/MidiPort/MidiPort.h
-// Web Address:   http://www-ccrma.stanford.edu/~craig/improv/include/MidiPort.h
-// Syntax:        C++
-//
-// Description:   A unified object that handles basic MIDI input and output.
-//                Derived from the MidiInPort and MidiOutPort classes.
-//
-
-#ifndef _MIDIPORT_H_INCLUDED
-#define _MIDIPORT_H_INCLUDED
-
-
-#include "MidiInPort.h"
-#include "MidiOutPort.h"
-
-
-class MidiPort : public MidiOutPort, public MidiInPort {
-   public:
-                 MidiPort            (void);
-                 MidiPort            (int outputPort, int inputPort);
-                ~MidiPort            ();
-
-      int        getChannelInOffset  (void) const;
-      int        getChannelOutOffset (void) const;
-      int        getInputPort        (void);
-      int        getInputTrace       (void);
-      int        getOutputPort       (void);
-      int        getOutputTrace      (void);
-      void       setChannelOffset    (int anOffset);
-      void       setInputPort        (int aPort);
-      int        setInputTrace       (int aState);
-      void       setOutputPort       (int aPort);
-      int        setOutputTrace      (int aState);
-      void       toggleInputTrace    (void);
-      void       toggleOutputTrace   (void);
-
-};
-
-
-
-#endif  /* _MIDIPORT_H_INCLUDED */
-
-
-
-// md5sum:	84d8155528b06c9aa902e8f06649385f  - MidiPort.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/Options.h b/extensions/gripd/src/midiio/include/Options.h
deleted file mode 100644
index 71754fb48..000000000
--- a/extensions/gripd/src/midiio/include/Options.h
+++ /dev/null
@@ -1,106 +0,0 @@
-//
-// Copyright 1998-2000 by Craig Stuart Sapp, All Rights Reserved.
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Sun Apr  5 13:07:18 PDT 1998
-// Last Modified: Fri Jan 15 07:24:00 PST 1999
-// Last Modified: Sat Mar 27 18:17:59 PST 1999
-// Last Modified: Thu Apr 13 14:02:52 PDT 2000 (added 2nd define function)
-// Last Modified: Fri May  5 17:57:50 PDT 2000 (added --options suppression)
-// Filename:      ...sig/maint/code/base/Options/Options.h
-// Web Address:   http://sig.sapp.org/include/sigBase/Options.h
-// Documentation: http://sig.sapp.org/doc/classes/Options
-// Syntax:        C++ 
-//
-// Description:   Handles command-line options in a graceful manner.
-//
-
-#ifndef _OPTIONS_H_INCLUDED
-#define _OPTIONS_H_INCLUDED
-
-#include "Array.h"
-
-class option_list;
-class option_register;
-
-
-class Options {
-   public:
-                    Options             (void);
-                    Options             (int argc, char** argv);
-                   ~Options             ();
-
-      int           argc                (void) const;
-      char**        argv                (void) const;
-      void          define              (const char* aDefinition);
-      void          define              (const char* aDefinition, 
-                                           const char* description);
-      char*         getArg              (int index);
-      char*         getArgument         (int index);
-      int           getArgCount         (void);
-      int           getArgumentCount    (void);
-      int           getBoolean          (const char* optionName);
-      const char*   getCommand          (void);
-      const char*   getCommandLine      (void);
-      const char*   getString           (void);
-      const char*   getDefinition       (const char* optionName);
-      double        getDouble           (const char* optionName);
-      char          getFlag             (void);
-      float         getFloat            (const char* optionName);
-      int           getInt              (const char* optionName);
-      int           getInteger          (const char* optionName);
-      const char*   getString           (const char* optionName);
-      char          getType             (const char* optionName);
-      int           optionsArg          (void);
-      void          print               (void); 
-      void          process             (int error_check = 1, int suppress = 0);
-      void          process             (int argc, char** argv,
-                                              int error_check = 1,
-                                              int suppress = 0);
-      void          reset               (void);
-      void          verify              (int argc, char** argv, 
-                                              int error_check = 1,
-                                              int suppress = 0);
-      void          verify              (int error_check = 1,
-                                              int suppress = 0);
-      void          setFlag             (char aFlag);
-      void          setModified         (const char* optionName, 
-                                           const char* optionValue);
-      void          setOptions          (int argc, char** argv);
-
-   protected:
-      int                      options_error_check;  // for verify command
-      int                      gargc;
-      char**                   gargv;
-      char*                    commandString;
-      char                     optionFlag;
-      Array<char*>             argument;
-      Array<option_register*>  optionRegister;
-      Array<option_list*>      optionList;
-      int                      processedQ;
-      int                      sortedQ;
-      int                      suppressQ;       // prevent the --options option
-      int                      optionsArgument; // indicates --options present
-
-      int         getRegIndex                (const char* optionName);
-      int         optionQ                    (const char* aString, int& argp);
-      void        sortOptionNames            (void);
-      int         storeOption                (int gargp, int& position, 
-                                                 int& running);
-
-};
-
-#define OPTION_BOOLEAN_TYPE   'b'
-#define OPTION_CHAR_TYPE      'c'
-#define OPTION_DOUBLE_TYPE    'd'
-#define OPTION_FLOAT_TYPE     'f'
-#define OPTION_INT_TYPE       'i'
-#define OPTION_STRING_TYPE    's'
-#define OPTION_UNKNOWN_TYPE   'x'
-
-
-
-#endif  /* _OPTIONS_H_INCLUDED */
-
-
-
-// md5sum:	c59d297a8081cb48f61b534484819f48  - Options.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/Options_private.h b/extensions/gripd/src/midiio/include/Options_private.h
deleted file mode 100644
index 8349d5549..000000000
--- a/extensions/gripd/src/midiio/include/Options_private.h
+++ /dev/null
@@ -1,73 +0,0 @@
-//
-// Copyright 1998-1999 by Craig Stuart Sapp, All Rights Reserved.
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Sun Apr  5 13:07:18 PDT 1998
-// Last Modified: Sun Jan 10 05:44:48 PST 1999
-// Filename:      ...sig/maint/code/base/Options/Options_private.h
-// Web Address:   http://sig.sapp.org/include/sigBase/Options_private.h
-// Syntax:        C++ 
-//
-// Description:   A private function for use in the Options class.
-//
-
-#ifndef _OPTIONS_PRIVATE_H_INCLUDED
-#define _OPTIONS_PRIVATE_H_INCLUDED
-
-
-class option_register {
-   public:
-                 option_register          (void);
-                 option_register          (const char* aDefinition, char aType,
-                                             const char* aDefaultOption,
-                                             const char* aModifiedOption);
-                 ~option_register         ();
-     void         clearModified           (void);
-     const char*  getDefinition           (void);
-     const char*  getDefault              (void);
-     const char*  getOption               (void);
-     const char*  getModified             (void);
-     int          getModifiedQ            (void);
-     char         getType                 (void);
-     void         reset                   (void);
-     void         setDefault              (const char* aString);
-     void         setDefinition           (const char* aString);
-     void         setModified             (const char* aString);
-     void         setType                 (char aType);
-
-   protected:
-      char*       definition;
-      char*       defaultOption;
-      char*       modifiedOption;
-      char        type;
-
-};
-
-
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-
-
-class option_list {
-   public:
-                     option_list       (void);
-                     option_list       (const char* optionName, int anIndex);
-                    ~option_list       ();
-
-      int            getIndex          (void);
-      const char*    getName           (void);
-      void           setName           (const char* aString);
-      void           setIndex          (int anIndex);
-
-   protected:
-      char*          name;
-      int            index;
-
-};
-
-
-
-#endif  /* _OPTIONS_PRIVATE_H_INCLUDED */
-
-
-
-// md5sum:	b440ad2158e9921d0e31463a8c3e1ae0  - Options_private.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/Sequencer_alsa.h b/extensions/gripd/src/midiio/include/Sequencer_alsa.h
deleted file mode 100644
index 4ac213684..000000000
--- a/extensions/gripd/src/midiio/include/Sequencer_alsa.h
+++ /dev/null
@@ -1,139 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Thu May 11 21:06:21 PDT 2000
-// Last Modified: Sat Oct 13 14:50:04 PDT 2001 (updated for ALSA 0.9 interface)
-// Filename:      ...sig/maint/code/control/MidiOutPort/Sequencer_alsa.h
-// Web Address:   http://sig.sapp.org/include/sig/Sequencer_alsa.h
-// Syntax:        C++ 
-//
-// Description:   Basic MIDI input/output functionality for the 
-//                Linux ALSA midi device /dev/snd/midiXX.  This class
-//                is inherited by the classes MidiInPort_alsa and
-//                MidiOutPort_alsa.
-//
-// to get information of status a alsa hardware & software
-//    cat /proc/asound/version
-//    cat /proc/asound/devices
-//    cat /proc/asound/card0/midi0
-//
-
-#ifndef _SEQUENCER_ALSA_H_INCLUDED
-#define _SEQUENCER_ALSA_H_INCLUDED
-
-#include <iostream>
-
-#ifdef ALSA
-
-#include <alsa/asoundlib.h>
-#include "Collection.h"
-
-#define MIDI_EXTERNAL  (1)
-#define MIDI_INTERNAL  (2)
-
-typedef unsigned char uchar;
-
-
-class Sequencer_alsa {
-   public:
-                    Sequencer_alsa       (int autoOpen = 1);
-                   ~Sequencer_alsa       ();
-
-      void          close                (void);
-      void          closeInput           (int index);
-      void          closeOutput          (int index);
-      void          displayInputs        (std::ostream& out = std::cout, 
-                                            char* initial = "\t");
-      void          displayOutputs       (std::ostream& out = std::cout, 
-                                            char* initial = "\t");
-      static const char*   getInputName  (int aDevice);
-      static const char*   getOutputName (int aDevice);
-      static int    getNumInputs         (void);
-      static int    getNumOutputs        (void);
-      int           is_open              (int mode, int index);
-      int           is_open_in           (int index);
-      int           is_open_out          (int index);
-      int           open                 (int direction, int index);
-      int           openInput            (int index);
-      int           openOutput           (int index);
-      void          read                 (int dev, uchar* buf, int count);
-      void          rebuildInfoDatabase  (void);
-      int           write                (int aDevice, int aByte);
-      int           write                (int aDevice, uchar* bytes, int count);
-      int           write                (int aDevice, char* bytes, int count);
-      int           write                (int aDevice, int* bytes, int count);
-      
-      int           getInCardValue       (int aDevice) const;
-      int           getOutCardValue      (int aDevice) const;
-   protected:
-      static int    class_count;            // number of existing classes using
-      static int    indevcount;             // number of MIDI input devices
-      static int    outdevcount;            // number of MIDI output devices
-      static int    initialized;            // for starting buileinfodatabase
-
-      static Collection<snd_rawmidi_t*>  rawmidi_in;
-      static Collection<snd_rawmidi_t*>  rawmidi_out;
-      static Collection<int>             midiincard;
-      static Collection<int>             midioutcard;
-      static Collection<int>             midiindevice;
-      static Collection<int>             midioutdevice;
-      static Collection<char*>           midiinname;
-      static Collection<char*>           midioutname;
-
-   private:
-      static void   buildInfoDatabase     (void);
-      static void   getPossibleMidiStreams(Collection<int>& cards,
-                                           Collection<int>& devices);
-      int           getInDeviceValue      (int aDevice) const;
-      int           getInputType          (int aDevice) const;
-      int           getOutDeviceValue     (int aDevice) const;
-      int           getOutputType         (int aDevice) const;
-      void          removeInfoDatabase    (void);
-
-
-   friend void *interpretMidiInputStreamPrivateALSA(void * x);
-
-};
-
-#else  /* ALSA is not defined */
-
-typedef unsigned char uchar;
-
-class Sequencer_alsa {
-   public:
-                    Sequencer_alsa       (int autoOpen = 1) { }
-                   ~Sequencer_alsa       () { }
-
-      void          close                (void) { };
-      void          displayInputs        (std::ostream& out = std::cout, 
-                                            char* initial = "\t") 
-                                         { out << initial << "NONE\n"; }
-      void          displayOutputs       (std::ostream& out = std::cout, 
-                                            char* initial = "\t") 
-                                         { out << initial << "NONE\n"; }
-      static const char*   getInputName  (int aDevice) { return ""; }
-      static const char*   getOutputName (int aDevice) { return ""; }
-      static int    getNumInputs         (void) { return 0; }
-      static int    getNumOutputs        (void) { return 0; }
-      int           is_open              (int mode, int index) { return 0; }
-      int           is_open_in           (int index) { return 0; }
-      int           is_open_out          (int index) { return 0; }
-      int           open                 (void) { return 0; }
-      void          read                 (int dev, uchar* buf, int count) { }
-      void          rebuildInfoDatabase  (void) { }
-      int           write                (int aDevice, int aByte) { return 0; }
-      int           write                (int aDevice, uchar* bytes, int count) { return 0; }
-      int           write                (int aDevice, char* bytes, int count) { return 0; }
-      int           write                (int aDevice, int* bytes, int count) { return 0; }
-      int           getInCardValue       (int aDevice) const { return 0; }
-      int           getOutCardValue      (int aDevice) const { return 0; }
-
-};
-
-
-#endif /* ALSA */
-
-
-#endif  /* _SEQUENCER_ALSA_H_INCLUDED */
-
-
-// md5sum:	6147020b0646fca8245f653505308949  - Sequencer_alsa.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/Sequencer_oss.h b/extensions/gripd/src/midiio/include/Sequencer_oss.h
deleted file mode 100644
index 5f269a7f9..000000000
--- a/extensions/gripd/src/midiio/include/Sequencer_oss.h
+++ /dev/null
@@ -1,92 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Sun Jan  3 21:02:02 PST 1999
-// Last Modified: Sat Jan 30 14:11:18 PST 1999
-// Last Modified: Wed May 10 17:00:11 PDT 2000 (name change from _oss to _oss)
-// Filename:      ...sig/maint/code/control/MidiOutPort/Sequencer_oss.h
-// Web Address:   http://sig.sapp.org/include/sig/Sequencer_oss.h
-// Syntax:        C++ 
-//
-// Description:   Basic MIDI input/output functionality for the 
-//                Linux OSS midi device /dev/sequencer.  This class
-//                is inherited by the classes MidiInPort_oss and
-//                MidiOutPort_oss.
-//
-
-#ifndef _SEQUENCER_OSS_H_INCLUDED
-#define _SEQUENCER_OSS_H_INCLUDED
-
-#include <iostream>
-
-#define MIDI_EXTERNAL  (1)
-#define MIDI_INTERNAL  (2)
-
-typedef unsigned char uchar;
-
-
-class Sequencer_oss {
-   public:
-                    Sequencer_oss        (int autoOpen = 1);
-                   ~Sequencer_oss        ();
-
-      void          close                (void);
-      void          displayInputs        (std::ostream& out = std::cout, 
-                                            char* initial = "\t");
-      void          displayOutputs       (std::ostream& out = std::cout, 
-                                            char* initial = "\t");
-      static int    getNumInputs         (void);
-      static int    getNumOutputs        (void);
-      static const char*   getInputName  (int aDevice);
-      static const char*   getOutputName (int aDevice);
-      int           is_open              (void);
-      int           open                 (void);
-      void          read                 (uchar* buf, uchar* dev, int count);
-      void          rawread              (uchar* buf, int packetCount);
-      void          rebuildInfoDatabase  (void);
-      int           write                (int aDevice, int aByte);
-      int           write                (int aDevice, uchar* bytes, int count);
-      int           write                (int aDevice, char* bytes, int count);
-      int           write                (int aDevice, int* bytes, int count);
-      
-   protected:
-      static const char* sequencer;         // name of sequencer device
-      static int    sequencer_fd;           // sequencer file descriptor
-      static int    class_count;            // number of existing classes using
-      static uchar  midi_write_packet[4];   // for writing MIDI bytes out
-      static uchar  midi_read_packet[4];    // for reading MIDI bytes out
-      static uchar  synth_write_message[8]; // for writing to internal seq
-      static int    indevcount;             // number of MIDI input devices
-      static int    outdevcount;            // number of MIDI output devices
-      static char** indevnames;             // MIDI input device names
-      static char** outdevnames;            // MIDI output device names
-      static int*   indevnum;               // total number of MIDI inputs
-      static int*   outdevnum;              // total number of MIDI outputs
-      static int*   indevtype;              // 1 = External, 2 = Internal
-      static int*   outdevtype;             // 1 = External, 2 = Internal
-      static uchar  synth_message_buffer[1024];   // hold bytes for synth dev
-      static int    synth_message_buffer_count;   // count of synth buffer
-      static int    synth_message_bytes_expected; // expected count of synth
-      static int    synth_message_curr_device;    // for keeping track of dev
-      static int    initialized;            // for starting buileinfodatabase
-
-   private:
-      static void   buildInfoDatabase     (void);
-      static int    getFd                 (void);   
-      int           getInDeviceValue      (int aDevice) const;
-      int           getInputType          (int aDevice) const;
-      int           getOutDeviceValue     (int aDevice) const;
-      int           getOutputType         (int aDevice) const;
-      void          removeInfoDatabase    (void);
-      void          setFd                 (int anFd);   
-
-      int           writeInternal(int aDevice, int aByte);
-      int           transmitMessageToInternalSynth(void);
-      int           transmitVoiceMessage(void);
-      int           transmitCommonMessage(void);
-};
-
-
-#endif  /* _SEQUENCER_OSS_H_INCLUDED */
-
-
-// md5sum:	1df08cd946c609b9b42aadbc96b7a296  - Sequencer_oss.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/SigTimer.h b/extensions/gripd/src/midiio/include/SigTimer.h
deleted file mode 100644
index e93345c0f..000000000
--- a/extensions/gripd/src/midiio/include/SigTimer.h
+++ /dev/null
@@ -1,104 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Thanks to:     Erik Neuenschwander <erikn@leland.stanford.edu>
-//                   for Windows 95 assembly code for Pentium clock cycles.
-//                Ozgur Izmirli <ozgur@ccrma.stanford.edu> 
-//                   for concept of periodic timer.
-// Creation Date: Mon Oct 13 11:34:57 GMT-0800 1997
-// Last Modified: Tue Feb 10 21:05:19 GMT-0800 1998
-// Last Modified: Sat Sep 19 15:56:48 PDT 1998
-// Last Modified: Mon Feb 22 04:44:25 PST 1999
-// Last Modified: Sun Nov 28 12:39:39 PST 1999   (added adjustPeriod())
-// Filename:      .../sig/code/control/SigTimer/SigTimer.h
-// Web Address:   http://www-ccrma.stanford.edu/~craig/improv/include/SigTimer.h
-// Syntax:        C++ 
-//
-// Description:   This class can only be used on Motorola Pentinum 75 Mhz
-//                chips or better because the timing information is
-//                extracted from the clock cycle count from a register
-//                on the CPU itself.  This class will estimate the 
-//                speed of the computer, but it would be better if there
-//                was a way of finding out the speed from some function.
-//                This class is used primarily for timing of MIDI input 
-//                and output at a millisecond resolution.
-//
-// Interesting:   http://www.datasilicon.nl/I786/timer_1.htm
-//
-
-#ifndef _SIGTIMER_H_INCLUDED
-#define _SIGTIMER_H_INCLUDED
-
-
-#ifdef VISUAL
-   #include <wtypes.h>
-   typedef LONGLONG int64bits;
-#else
-   typedef long long int int64bits;
-   #include <unistd.h>                 /* for millisleep function */
-#endif
-
-
-class SigTimer {
-   public:
-                       SigTimer           (void);
-                       SigTimer           (int aSpeed);
-                       SigTimer           (SigTimer& aTimer);
-                      ~SigTimer           ();
-
-      void             adjustPeriod       (double periodDelta);
-      int              expired            (void) const;
-      double           getPeriod          (void) const;
-      double           getPeriodCount     (void) const;
-      double           getTempo           (void) const;
-      int              getTicksPerSecond  (void) const;
-      int              getTime            (void) const;
-      double           getTimeInSeconds   (void) const;
-      int              getTimeInTicks     (void) const;
-      void             reset              (void);
-      void             setPeriod          (double aPeriod);
-      void             setTempo           (double beatsPerMinute);
-      void             setPeriodCount     (double aCount);
-      void             setTicksPerSecond  (int aTickRate);
-      void             start              (void);
-      void             sync               (SigTimer& aTimer);
-      void             update             (void);
-      void             update             (int periodCount);
-
-      // The following functions are semi-private.  They do not have
-      // anything to do with timing themselves, but are a by-product
-      // of the timer implementation.  They are useful, so they have
-      // been left public; however, they should be used judiciously.
-      static int       getCpuSpeed        (void);
-      static int       measureCpuSpeed    (int quantize = 0);
-      static void      setCpuSpeed        (int aSpeed);
-      
-      // the following function is hardware specific to Intel Pentium
-      // computers with a processor speed of at least 75 MHz.
-      // This function is the only non-portable function in this
-      // class, but everything else is based on it.
-      static int64bits clockCycles        (void);
-
-   protected:
-      static int64bits globalOffset;
-      static int       cpuSpeed;         
-
-      int64bits        offset;          
-      int              ticksPerSecond;    
-      double           period;
-
-   // protected functions
-      double           getFactor          (void) const;
-
-};
-
-
-// The following function is mostly for Linux:
-void millisleep(int milliseconds);
-void millisleep(float milliseconds);
-
-   
-#endif  /* _SIGTIMER_H_INCLUDED */
-
-
-
-// md5sum:	601fa3caae4e3bacc4e6fb87f545c86b  - SigTimer.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/Voice.h b/extensions/gripd/src/midiio/include/Voice.h
deleted file mode 100644
index 3cddf9f3f..000000000
--- a/extensions/gripd/src/midiio/include/Voice.h
+++ /dev/null
@@ -1,70 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Sun Oct 11 18:21:46 PDT 1998
-// Last Modified: Sun Oct 11 18:33:04 PDT 1998
-// Filename:      ...sig/maint/code/control/Voice/Voice.h
-// Web Address:   http://www-ccrma.stanford.edu/~craig/improv/include/Voice.h
-// Syntax:        C++
-//
-// Description:   The Voice class is a MIDI output class which keeps
-//                track of the last note played in to it.  If the last
-//                note was not turned off when a new note is played,
-//                then the old note will be turned off before the 
-//                new note is played.
-//
-
-#ifndef _VOICE_H_INCLUDED
-#define _VOICE_H_INCLUDED
-
-#include "MidiOutput.h"
-
-class Voice : public MidiOutput {
-   public:
-                   Voice          (int aChannel);
-                   Voice          (const Voice& aVoice);
-                   Voice          (void);
-                  ~Voice          ();
-
-      void         cont           (int controler, int data);
-      int          getChan        (void) const;
-      int          getChannel     (void) const;
-      int          getKey         (void) const;
-      int          getKeynum      (void) const;
-      int          getOffTime     (void) const;
-      int          getOnTime      (void) const;
-      int          getVel         (void) const;
-      int          getVelocity    (void) const;
-      void         off            (void);
-      void         pc             (int aTimbre);
-      void         play           (int aChannel, int aKeyno, int aVelocity);
-      void         play           (int aKeyno, int aVelocity);
-      void         play           (void);
-      void         setChan        (int aChannel);
-      void         setChannel     (int aChannel);
-      void         setKey         (int aKeyno);
-      void         setKeynum      (int aKeyno);
-      void         setVel         (int aVelocity);
-      void         setVelocity    (int aVelocity);
-      int          status         (void) const;
-      void         sustain        (int aStatus);
-
-   protected:
-      int          chan;         // the current channel number
-      int          key;          // the current key number
-      int          vel;          // the current velocity value
-
-      int          onTime;       // last note on message sent
-      int          offTime;      // last note off message sent
-
-      int          oldChan;      // last channel played on
-      int          oldKey;       // last key to be played
-      int          oldVel;       // last velocity of last key
-
-      static SigTimer timer;     // for recording on/off times
-};
-
-
-#endif /* _VOICE_H_INCLUDED */
-
-
-// md5sum:	8a5495ecc10d42be6b1832492e107723  - Voice.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/gminstruments.h b/extensions/gripd/src/midiio/include/gminstruments.h
deleted file mode 100644
index 0e567da29..000000000
--- a/extensions/gripd/src/midiio/include/gminstruments.h
+++ /dev/null
@@ -1,251 +0,0 @@
-// 
-// Copyright 1997-2000 by Craig Stuart Sapp, All Rights Reserved.
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu> (from 18Dec1997) 
-// Creation Date: 26 December 1997 
-// Last Modified: Tue Apr 18 11:38:28 PDT 2000 (put CH_X defines here)
-// Filename:      ...sig/include/sigInfo/gminstruments.h 
-// Web Address:   http://sig.sapp.org/include/sigInfo/gminstruments.h
-// Syntax:        C 
-// 
-// Description:   Defines names for instruments as arranged in General MIDI. 
-// 
-
-#ifndef _GMINSTRUMENTS_H_INCLUDED
-#define _GMINSTRUMENTS_H_INCLUDED
-
-#define  CH_1                             0
-#define  CH_2                             1
-#define  CH_3                             2
-#define  CH_4                             3
-#define  CH_5                             4
-#define  CH_6                             5
-#define  CH_7                             6
-#define  CH_8                             7
-#define  CH_9                             8
-#define  CH_10                            9
-#define  CH_11                            10
-#define  CH_12                            11
-#define  CH_13                            12
-#define  CH_14                            13
-#define  CH_15                            14
-#define  CH_16                            15
-
-#define  GM_PIANO(X)                      (0+(X))
-#define  GM_ACOUSTIC_GRAND_PIANO          (0)
-#define  GM_BRIGHT_ACOUSTIC_PIANO         (1)
-#define  GM_ELECTRIC_GRAND_PIANO          (1)
-#define  GM_HONKYTONK_PIANO               (2)
-#define  GM_HONKY_TONK_PIANO              (3)
-#define  GM_ELECTRIC_PIANO_1              (4)
-#define  GM_ELECTRIC_PIANO_2              (5)
-#define  GM_HARPSICHORD                   (6)
-#define  GM_CLAVI                         (7)
-
-#define  GM_CHROMATIC(X)                  (8+(X))
-#define  GM_CELESTA                       (8)
-#define  GM_GLOCKENSPIEL                  (9)
-#define  GM_MUSIC_BOX                     (10)
-#define  GM_VIBRAPHONE                    (11)
-#define  GM_MARIMBA                       (12)
-#define  GM_XYLOPHONE                     (13)
-#define  GM_TUBULAR_BELLS                 (14)
-#define  GM_DULCIMER                      (15)
-                                 
-#define  GM_ORGAN(X)                      (16+(X))
-#define  GM_DRAWBAR_ORGAN                 (16)
-#define  GM_PERCUSSIVE_ORGAN              (17)
-#define  GM_ROCK_ORGAN                    (18)
-#define  GM_CHURCH_ORGAN                  (19)
-#define  GM_REED_ORGAN                    (20)
-#define  GM_ACCORDION                     (21)
-#define  GM_HARMONICA                     (22)
-#define  GM_TANGO_ACCORDION               (23)
-
-#define  GM_GUITAR(X)                     (24+(X))
-#define  GM_ACOUSTIC_GUITAR_NYLON         (24)
-#define  GM_ACOUSTIC_GUITAR_STEEL         (25)
-#define  GM_ELECTRIC_GUITAR_JAZZ          (26)
-#define  GM_ELECTRIC_GUITAR_CLEAN         (27)
-#define  GM_ELECTRIC_GUITAR_MUTED         (28)
-#define  GM_OVERDRIVEN_GUITAR             (29)
-#define  GM_DISTORTION_GUITAR             (30)
-#define  GM_GUITAR_HARMONICS              (31)
-                       
-#define  GM_BASS(X)                       (32+(X))
-#define  GM_ACOUSTIC_BASS                 (32)
-#define  GM_ELECTRIC_BASS_FINGER          (33)
-#define  GM_ELECTRIC_BASS_PICK            (34)
-#define  GM_FRETLESS_BASS                 (35)
-#define  GM_SLAP_BASS_1                   (36)
-#define  GM_SLAP_BASS_2                   (37)
-#define  GM_SYNTH_BASS_1                  (38)
-#define  GM_SYNTH_BASS_2                  (39)
-                        
-#define  GM_STRINGS(X)                    (40+(X))
-#define  GM_VIOLIN                        (40)
-#define  GM_VIOLA                         (41)
-#define  GM_CELLO                         (42)
-#define  GM_CONTRABASS                    (43)
-#define  GM_TREMOLO_STRINGS               (44)
-#define  GM_PIZZACATO_STRINGS             (45)
-#define  GM_ORCHESTRAL_HARP               (46)
-#define  GM_TIMPANI                       (47)
-                         
-#define  GM_ENSEMBLE(X)                   (48+(X))
-#define  GM_STRING_ENSEMBLE_1             (48)
-#define  GM_STRING_ENSEMBLE_2             (49)
-#define  GM_SYNTHSTRINGS_1                (50)
-#define  GM_SYNTHSTRINGS_2                (51)
-#define  GM_CHOIR_AAHS                    (52)
-#define  GM_VOICE_OOHS                    (53)
-#define  GM_SYNTH_VOICE                   (54)
-#define  GM_ORCHESTRA_HIT                 (55)
-                          
-#define  GM_BRASS(X)                      (56+(X))
-#define  GM_TRUMPET                       (56)
-#define  GM_TROMBONE                      (57)
-#define  GM_TUBA                          (58)
-#define  GM_MUTED_TRUMPED                 (59)
-#define  GM_FRENCH_HORN                   (60)
-#define  GM_BRASS_SECTION                 (61)
-#define  GM_SYNTHBRASS_1                  (62)
-#define  GM_SYNTHBRASS_2                  (63)
-                           
-#define  GM_REED(X)                       (64+(X))
-#define  GM_SOPRANO_SAX                   (64)
-#define  GM_ALTO_SAX                      (65)
-#define  GM_TENOR_SAX                     (66)
-#define  GM_BARITONE_SAX                  (67)
-#define  GM_OBOE                          (68)
-#define  GM_ENGLISH_HORN                  (69)
-#define  GM_BASSOON                       (70)
-#define  GM_CLARINET                      (71)
-                            
-#define  GM_PIPE(X)                       (72+(X))
-#define  GM_PICCOLO                       (72)
-#define  GM_FLUTE                         (73)
-#define  GM_RECORDER                      (74)
-#define  GM_PAN_FLUTE                     (75)
-#define  GM_BLOWN_BOTTLE                  (76)
-#define  GM_SHAKUHACHI                    (77)
-#define  GM_WHISTLE                       (78)
-#define  GM_OCARINA                       (79)
-                             
-#define  GM_LEAD(X)                       (80+(X))
-#define  GM_LEAD_SQUARE                   (80)
-#define  GM_LEAD_SAWTOOTH                 (81)
-#define  GM_LEAD_CALLIOPE                 (82)
-#define  GM_LEAD_CHIFF                    (83)
-#define  GM_LEAD_CHARANG                  (84)
-#define  GM_LEAD_VOICE                    (85)
-#define  GM_LEAD_FIFTHS                   (86)
-#define  GM_LEAD_BASS                     (87)
-                              
-#define  GM_PAD(X)                        (88+(X))
-#define  GM_PAD_NEW_AGE                   (88)
-#define  GM_PAD_WARM                      (89)
-#define  GM_PAD_POLYSYNTH                 (90)
-#define  GM_PAD_CHOIR                     (91)
-#define  GM_PAD_BOWED                     (92)
-#define  GM_PAD_METALLIC                  (93)
-#define  GM_PAD_HALO                      (94)
-#define  GM_PAD_SWEEP                     (95)
-                               
-#define  GM_FX(X)                         (96+(X))
-#define  GM_FX_TRAIN                      (96)
-#define  GM_FX_SOUNDTRACK                 (97)
-#define  GM_FX_CRYSTAL                    (98)
-#define  GM_FX_ATMOSPHERE                 (99)
-#define  GM_FX_BRIGHTNESS                 (100)
-#define  GM_FX_GOBLINS                    (101)
-#define  GM_FX_ECHOES                     (102)
-#define  GM_FX_SCI_FI                     (103)
-                                
-#define  GM_ETHNIC(X)                     (104+(X))
-#define  GM_SITAR                         (104)
-#define  GM_BANJO                         (105)
-#define  GM_SHAMISEN                      (106)
-#define  GM_KOTO                          (107)
-#define  GM_KALIMBA                       (108)
-#define  GM_BAGPIPE                       (109)
-#define  GM_FIDDLE                        (110)
-#define  GM_SHANAI                        (111)
-                                 
-#define  GM_PERCUSSION(X)                 (112+(X))
-#define  GM_TINKLE_BELL                   (112)
-#define  GM_AGOGO                         (113)
-#define  GM_STEEL_DRUMS                   (114)
-#define  GM_WOODBLOCKS                    (115)
-#define  GM_TAIKO_DRUM                    (116)
-#define  GM_MELODIC_DRUM                  (117)
-#define  GM_SYNTH_DRUM                    (118)
-#define  GM_REVERSE_CYMBAL                (119)
-                                  
-#define  GM_SOUNDEFFECT(X)                (120+(X))
-#define  GM_GUITAR_FRET_NOISE             (120)
-#define  GM_BREATH_NOISE                  (121)
-#define  GM_SEASHORE                      (122)
-#define  GM_BIRD_TWEET                    (123)
-#define  GM_TELEPHONE_RING                (124)
-#define  GM_HELICOPTER                    (125)
-#define  GM_APPLAUSE                      (126)
-#define  GM_GUNSHOT                       (127)
-
-//
-// Percussion instruments on channel 10
-//
-
-#define  GM_ACOUSTIC_BASS_DRUM            (35)
-#define  GM_BASS_DRUM_1                   (36)
-#define  GM_SIDE_STICK                    (37)
-#define  GM_ACOUSTIC_SNARE                (38)
-#define  GM_HAND_CLAP                     (39)
-#define  GM_ELECTRIC_SNARE                (40)
-#define  GM_LOW_FLOOR_TOM                 (41)
-#define  GM_CLOSED_HI_HAT                 (42)
-#define  GM_HIGH_FLOOR_TOM                (43)
-#define  GM_PEDAL_HI_HAT                  (44)
-#define  GM_LOW_TOM                       (45)
-#define  GM_OPEN_HI_HAT                   (46)
-#define  GM_LOW_MID_TOM                   (47)
-#define  GM_HIGH_MID_TOM                  (48)
-#define  GM_CRASH_CYMBAL_1                (49)
-#define  GM_HIGH_TOM                      (50)
-#define  GM_RIDE_CYMBAL_1                 (51)
-#define  GM_CHINESE_CYMBAL                (52)
-#define  GM_RIDE_BELL                     (53)
-#define  GM_TAMBOURINE                    (54)
-#define  GM_SPLASH_CYMBAL                 (55)
-#define  GM_COWBELL                       (56)
-#define  GM_CRASH_CYMBAL_2                (57)
-#define  GM_VIBRASLAP                     (58)
-#define  GM_RIDE_CYMBAL_2                 (59)
-#define  GM_HI_BONGO                      (60)
-#define  GM_LOW_BONGO                     (61)
-#define  GM_MUTE_HI_CONGA                 (62)
-#define  GM_OPEN_HI_CONGA                 (63)
-#define  GM_LOW_CONGA                     (64)
-#define  GM_HIGH_TIMBALE                  (65)
-#define  GM_LOW_TIMBALE                   (66)
-#define  GM_HIGH_AGOGO                    (67)
-#define  GM_LOW_AGOGO                     (68)
-#define  GM_CABASA                        (69)
-#define  GM_MARACAS                       (70)
-#define  GM_SHORT_WHISTLE                 (71)
-#define  GM_LONG_WHISTLE                  (72)
-#define  GM_SHORT_GUIRO                   (73)
-#define  GM_LONG_GUIRO                    (74)
-#define  GM_CLAVES                        (75)
-#define  GM_HI_WOOD_BLOCK                 (76)
-#define  GM_LOW_WOOD_BLOCK                (77)
-#define  GM_MUTE_CUICA                    (78)
-#define  GM_OPEN_CUICA                    (79)
-#define  GM_MUTE_TRIANGLE                 (80)
-#define  GM_OPEN_TRIANGLE                 (81)
-
-
-#endif  /* _GMINSTRUMENTS_H_INCLUDED */
-
-
-
-// md5sum:	6299d04892a6899533b9164aa9e1a874  - gminstruments.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/midichannels.h b/extensions/gripd/src/midiio/include/midichannels.h
deleted file mode 100644
index 452681335..000000000
--- a/extensions/gripd/src/midiio/include/midichannels.h
+++ /dev/null
@@ -1,42 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: 21 December 1997
-// Last Modified: Wed Feb 11 22:49:59 GMT-0800 1998
-// Filename:      ...sig/code/control/misc/midichannels.h
-// Web Address:   http://www-ccrma.stanford.edu/~craig/improv/include/midichannels.h
-// Syntax:        C++
-//
-// Description:   Offset by 1 MIDI channel names.
-//
-
-#ifndef _MIDICHANNELS_H_INCLUDED
-#define _MIDICHANNELS_H_INCLUDED
-
-/* temporarily changed :
-
-// channel defines: offset from 0
-#define CH_1           (0x00)
-#define CH_2           (0x01)
-#define CH_3           (0x02)
-#define CH_4           (0x03)
-#define CH_5           (0x04)
-#define CH_6           (0x05)
-#define CH_7           (0x06)
-#define CH_8           (0x07)
-#define CH_9           (0x08)
-#define CH_10          (0x09)
-#define CH_11          (0x0a)
-#define CH_12          (0x0b)
-#define CH_13          (0x0c)
-#define CH_14          (0x0d)
-#define CH_15          (0x0e)
-#define CH_16          (0x0f)
-
-*/
-
-#endif  /* _MIDICHANNELS_H_INCLUDED */
-
-
- 
-
-// md5sum:	5267399f7ff90a6ea3ad2dc132afae3e  - midichannels.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/mididefines.h b/extensions/gripd/src/midiio/include/mididefines.h
deleted file mode 100644
index 4161c2fe4..000000000
--- a/extensions/gripd/src/midiio/include/mididefines.h
+++ /dev/null
@@ -1,34 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: 21 December 1997
-// Last Modified: Wed Feb 11 22:49:59 GMT-0800 1998
-// Filename:      ...sig/code/control/misc/mididefines.h
-// Web Address:   http://www-ccrma.stanford.edu/~craig/improv/include/mididefines.h
-// Syntax:        C++
-//
-// Description:   Collection of all of the MIDI convienience defines.
-//
-
-#ifndef _MIDIDEFINES_H_INCLUDED
-#define _MIDIDEFINES_H_INCLUDED
-
-
-// include channel defines
-#include "midichannels.h"
-
-
-// include note name defines
-#include "notenames.h"
-
-
-// include General MIDI instrument names
-#include "gminstruments.h"
-
-
-
-#endif  /* _MIDIDEFINES_H_INCLUDED */
-
-
- 
-
-// md5sum:	0f081c8e0b386a11e448b6088bfcd489  - mididefines.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/midiiolib.h b/extensions/gripd/src/midiio/include/midiiolib.h
deleted file mode 100644
index 17d043093..000000000
--- a/extensions/gripd/src/midiio/include/midiiolib.h
+++ /dev/null
@@ -1,57 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Sat Nov  2 20:20:24 PST 2002
-// Last Modified: Thu Jan  2 18:51:20 PST 2003 (changed name from midio.h)
-// Filename:      ...sig/code/misc/midiiolib.h
-// Web Address:   http://sig.sapp.org/include/sig/midiiolib.h
-// Syntax:        C++ 
-//
-// Description:   Includes all of the header files for using the midiio
-//                Library.
-//
-
-#ifndef _MIDIIOLIB_H_INCLUDED
-#define _MIDIIOLIB_H_INCLUDED
-
-#include "Array.h"
-#include "CircularBuffer.h"
-#include "Collection.h"
-#include "FileIO.h"
-#include "gminstruments.h"
-#include "midichannels.h"
-#include "mididefines.h"
-#include "MidiFile.h"
-#include "MidiFileWrite.h"
-#include "MidiInPort_alsa05.h"
-#include "MidiInPort_alsa.h"
-#include "MidiInPort.h"
-#include "MidiInPort_linux.h"
-#include "MidiInPort_oss.h"
-#include "MidiInPort_unsupported.h"
-#include "MidiInPort_visual.h"
-#include "MidiInput.h"
-#include "MidiIO.h"
-#include "MidiMessage.h"
-#include "MidiOutPort_alsa.h"
-#include "MidiOutPort.h"
-#include "MidiOutPort_linux.h"
-#include "MidiOutPort_oss.h"
-#include "MidiOutPort_unsupported.h"
-#include "MidiOutPort_visual.h"
-#include "MidiOutput.h"
-#include "MidiPort.h"
-#include "notenames.h"
-#include "Options.h"
-#include "Options_private.h"
-#include "Sequencer_alsa.h"
-#include "Sequencer_oss.h"
-#include "sigConfiguration.h"
-#include "SigTimer.h"
-#include "Voice.h"
-
-
-#endif  /* _MIDIIO_H_INCLUDED */
-
-
-
-// md5sum:	b389c20c620865344d827a88a0fb048d  - midiiolib.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/notenames.h b/extensions/gripd/src/midiio/include/notenames.h
deleted file mode 100644
index ce9d505cd..000000000
--- a/extensions/gripd/src/midiio/include/notenames.h
+++ /dev/null
@@ -1,219 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu> (from 18Dec1997)
-// Creation Date: 26 December 1997
-// Last Modified: 26 December 1997
-// Filename:      ...sig/code/control/misc/notenames.h
-// Web Address:   http://www-ccrma.stanford.edu/~craig/improv/include/notenames.h
-// Syntax:        C
-//
-// Description:   Defines for pitch names of midi key numbers 
-//
-
-#ifndef _NOTENAMES_H_INCLUDED
-#define _NOTENAMES_H_INCLUDED
-
-#define  C00    (0)
-#define  Cs00   (1)
-#define  Db00   (1)
-#define  D00    (2)
-#define  Ds00   (3)
-#define  Eb00   (3)
-#define  E00    (4)
-#define  F00    (5)
-#define  Fs00   (6)
-#define  Gb00   (6)
-#define  G00    (7)
-#define  Gs00   (8)
-#define  Ab00   (8)
-#define  A00    (9)
-#define  As00   (10)
-#define  Bb00   (10)
-#define  B00    (11)
-
-#define  C0     (12)
-#define  Cs0    (13)
-#define  Db0    (13)
-#define  D0     (14)
-#define  Ds0    (15)
-#define  Eb0    (15)
-#define  E0     (16)
-#define  F0     (17)
-#define  Fs0    (18)
-#define  Gb0    (18)
-#define  G0     (19)
-#define  Gs0    (20)
-#define  Ab0    (20)
-#define  A0     (21)
-#define  As0    (22)
-#define  Bb0    (22)
-
-/* 
- * Note that the following symbol B0 is used in
- * unix in the file /usr/include/termios.h also as
- * a symbol, so It is disabled for now in this file.
- * termios.h is need in Unix for the KeyboardInput.h file
- */
-
-// #define  B0     (23)
-
-#define  C1     (24)
-#define  Cs1    (25)
-#define  Db1    (25)
-#define  D1     (26)
-#define  Ds1    (27)
-#define  Eb1    (27)
-#define  E1     (28)
-#define  F1     (29)
-#define  Fs1    (30)
-#define  Gb1    (30)
-#define  G1     (31)
-#define  Gs1    (32)
-#define  Ab1    (32)
-#define  A1     (33)
-#define  As1    (34)
-#define  Bb1    (34)
-#define  B1     (35)
-
-#define  C2     (36)
-#define  Cs2    (37)
-#define  Db2    (37)
-#define  D2     (38)
-#define  Ds2    (39)
-#define  Eb2    (39)
-#define  E2     (40)
-#define  F2     (41)
-#define  Fs2    (42)
-#define  Gb2    (42)
-#define  G2     (43)
-#define  Gs2    (44)
-#define  Ab2    (44)
-#define  A2     (45)
-#define  As2    (46)
-#define  Bb2    (46)
-#define  B2     (47)
-
-#define  C3     (48)
-#define  Cs3    (49)
-#define  Db3    (49)
-#define  D3     (50)
-#define  Ds3    (51)
-#define  Eb3    (51)
-#define  E3     (52)
-#define  F3     (53)
-#define  Fs3    (54)
-#define  Gb3    (54)
-#define  G3     (55)
-#define  Gs3    (56)
-#define  Ab3    (56)
-#define  A3     (57)
-#define  As3    (58)
-#define  Bb3    (58)
-#define  B3     (59)
-
-#define  C4     (60)
-#define  Cs4    (61)
-#define  Db4    (61)
-#define  D4     (62)
-#define  Ds4    (63)
-#define  Eb4    (63)
-#define  E4     (64)
-#define  F4     (65)
-#define  Fs4    (66)
-#define  Gb4    (66)
-#define  G4     (67)
-#define  Gs4    (68)
-#define  Ab4    (68)
-#define  A4     (69)
-#define  As4    (70)
-#define  Bb4    (70)
-#define  B4     (71)
-
-#define  C5     (72)
-#define  Cs5    (73)
-#define  Db5    (73)
-#define  D5     (74)
-#define  Ds5    (75)
-#define  Eb5    (75)
-#define  E5     (76)
-#define  F5     (77)
-#define  Fs5    (78)
-#define  Gb5    (78)
-#define  G5     (79)
-#define  Gs5    (80)
-#define  Ab5    (81)
-#define  A5     (81)
-#define  As5    (82)
-#define  Bb5    (82)
-#define  B5     (83)
-
-#define  C6     (84)
-#define  Cs6    (85)
-#define  Db6    (85)
-#define  D6     (86)
-#define  Ds6    (87)
-#define  Eb6    (87)
-#define  E6     (88)
-#define  F6     (89)
-#define  Fs6    (90)
-#define  Gb6    (90)
-#define  G6     (91)
-#define  Gs6    (92)
-#define  Ab6    (92)
-#define  A6     (93)
-#define  As6    (94)
-#define  Bb6    (94)
-#define  B6     (95)
-
-#define  C7     (96)
-#define  Cs7    (97)
-#define  Db7    (97)
-#define  D7     (98)
-#define  Ds7    (99)
-#define  Eb7    (99)
-#define  E7     (100)
-#define  F7     (101)
-#define  Fs7    (102)
-#define  Gb7    (102)
-#define  G7     (103)
-#define  Gs7    (104)
-#define  Ab7    (104)
-#define  A7     (105)
-#define  As7    (106)
-#define  Bb7    (106)
-#define  B7     (107)
-
-#define  C8     (108)
-#define  Cs8    (109)
-#define  Db8    (109)
-#define  D8     (110)
-#define  Ds8    (111)
-#define  Eb8    (111)
-#define  E8     (112)
-#define  F8     (113)
-#define  Fs8    (114)
-#define  Gb8    (114)
-#define  G8     (115)
-#define  Gs8    (116)
-#define  Ab8    (116)
-#define  A8     (117)
-#define  As8    (118)
-#define  Bb8    (118)
-#define  B8     (119)
-
-#define  C9     (120)
-#define  Cs9    (121)
-#define  Db9    (121)
-#define  D9     (122)
-#define  Ds9    (123)
-#define  Eb9    (123)
-#define  E9     (124)
-#define  F9     (125)
-#define  Fs9    (126)
-#define  Gb9    (126)
-#define  G9     (127)
-
-
-#endif  /* _NOTENAMES_H_INCLUDED */
-
-
-// md5sum:	c0f727163d32e04212a0ce5c8b6c4a6f  - notenames.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/include/sigConfiguration.h b/extensions/gripd/src/midiio/include/sigConfiguration.h
deleted file mode 100644
index b1e5f1757..000000000
--- a/extensions/gripd/src/midiio/include/sigConfiguration.h
+++ /dev/null
@@ -1,100 +0,0 @@
-//
-// Copyright 1997 by Craig Stuart Sapp, All Rights Reserved.
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Mon Dec  1 18:16:57 GMT-0800 1997
-// Last Modified: Mon Dec  1 18:16:57 GMT-0800 1997
-// Filename:      ...sig/maint/code/misc/sigConfiguration.h
-// Web Address:   http://sig.sapp.org/include/sig/sigConfiguration.h
-// Syntax:        C 
-//
-// Description:  This file defines flags for different code setups: 
-//	         You specify the OS in a compiler flag and this file takes care
-//	         of the rest of the defines for that OS.  This file should
-//         	 automatically be included in any file which uses any of the 
-//	         define flags below.
-//
-// OS setup defines to use in compiling files:
-//
-// -DLINUX:  Linux running on intel computers
-// -DNEXTI:  NeXT OS on Intel Hardware
-// -DNEXTM:  NeXT OS on Motorola Hardware
-// -DSUN:    Sun SPARCstations
-// -DVISUAL: Windows 95/NT using Microsoft Visual C++ 5.0
-// -DHPUX:   Hewlett-Packard Unix Workstations.
-// -DIRIX:   SGI computers with IRIX OS.
-//
-//
-// Various options that can be defined for each OS.  These
-// defines may be mixed and matched in different OSes:
-//
-// -DOTHEREND: If the computer is little-endian, then this
-//	define switches the byte ordering behavior for writing/reading
-//	soundfiles.  Intel computers need this define, most others
-//	will not.need this define.
-//
-// -DSHORTRAND: Indicates that the rand() function generates
-//	numbers between 0 and 0x7fff.  The default without this
-//	option is a range between 0 and 0x7fffffff.
-//
-// -DINTEL: Indicates that the computer hardware uses an
-//	intel x86 CPU.  Not used for anything right now except to
-//	define the endian flag (OTHEREND).
-//
-// -DMOTOROLA: Indicates that the computer hardware uses a
-//      Motorola 68k CPU.  Not used for anything right now.
-//
-//
-
-#ifndef _SIGCONFIGURATION_H_INCLUDED
-#define _SIGCONFIGURATION_H_INCLUDED
-
-
-#ifdef LINUX
-   #define INTEL
-#endif
-
-
-#ifdef NEXTI
-   #define INTEL
-#endif
-
-
-#ifdef NEXT
-   #define MOTOROLA
-#endif
-
-
-#ifdef VISUAL
-   #define INTEL
-#endif
-
-
-#ifdef SUN
-   #define SHORTRAND
-#endif
-
-
-#ifdef HPUX
-   #define SHORTRAND
-#endif
-
-
-#ifdef IRIX
-   #define SHORTRAND
-#endif
-
-
-// These defines must come after the previous defines:
-
-
-#ifdef INTEL
-   #define OTHEREND
-#endif
-
-
-
-#endif  /* _SIGCONFIGURATION_H_INCLUDED */
-
-
-
-// md5sum:	32f74a7c264b158b83ff38db1ea885f8  - sigConfiguration.h =css= 20030102
diff --git a/extensions/gripd/src/midiio/src/FileIO.cpp b/extensions/gripd/src/midiio/src/FileIO.cpp
deleted file mode 100644
index 93ef153dd..000000000
--- a/extensions/gripd/src/midiio/src/FileIO.cpp
+++ /dev/null
@@ -1,761 +0,0 @@
-//
-// Copyright 1997 by Craig Stuart Sapp, All Rights Reserved.
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Fri May  9 22:30:32 PDT 1997
-// Last Modified: Sun Dec 14 03:29:39 GMT-0800 1997
-// Filename:      ...sig/maint/code/sigBase/FileIO.cpp
-// Web Address:   http://sig.sapp.org/src/sigBase/FileIO.cpp
-// Documentation: http://sig.sapp.org/doc/classes/FileIO
-// Syntax:        C++ 
-//
-// Description:   Derived from the fstream class, this class has
-//                functions which allow writing binary files in
-//                both little and big endian formats.  Useful for
-//                writing files such as soundfiles and MIDI files
-//                which require numbers to be stored in a particular
-//                endian format.
-//
-
-#include "FileIO.h"
-#include "sigConfiguration.h"
-
-//////////////////////////////
-//
-// FileIO::FileIO --
-//
-
-FileIO::FileIO(void) {
-   // do nothing
-};
-
-FileIO::FileIO(const char* filename, std::ios::openmode state) :
-#ifdef VISUAL                 /* for stupid LF-CR prevention in DOS */
-   std::fstream(filename, state | ios::binary) { 
-#else
-   std::fstream(filename, state) { 
-#endif
-   // do nothing
-};
-
-
-
-//////////////////////////////
-//
-// FileIO::~FileIO --
-//
-
-FileIO::~FileIO() {
-   // do nothing
-}
-
-
-
-//////////////////////////////
-//
-// FileIO::readBigEndian --
-//	Read numbers from a file as big endian
-//
-
-void FileIO::readBigEndian(char& aNumber) {
-   #ifdef OTHEREND
-      readNotMachineEndian(aNumber);
-   #else
-      readMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::readBigEndian(uchar& aNumber) {
-   #ifdef OTHEREND
-      readNotMachineEndian(aNumber);
-   #else
-      readMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::readBigEndian(short& aNumber) {
-   #ifdef OTHEREND
-      readNotMachineEndian(aNumber);
-   #else
-      readMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::readBigEndian(ushort& aNumber) {
-   #ifdef OTHEREND
-      readNotMachineEndian(aNumber);
-   #else
-      readMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::readBigEndian(long& aNumber) {
-   #ifdef OTHEREND
-      readNotMachineEndian(aNumber);
-   #else
-      readMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::readBigEndian(ulong& aNumber) {
-   #ifdef OTHEREND
-      readNotMachineEndian(aNumber);
-   #else
-      readMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::readBigEndian(int& aNumber) {
-   #ifdef OTHEREND
-      readNotMachineEndian(aNumber);
-   #else
-      readMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::readBigEndian(uint& aNumber) {
-   #ifdef OTHEREND
-      readNotMachineEndian(aNumber);
-   #else
-      readMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::readBigEndian(float& aNumber) {
-   #ifdef OTHEREND
-      readNotMachineEndian(aNumber);
-   #else
-      readMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::readBigEndian(double& aNumber) {
-   #ifdef OTHEREND
-      readNotMachineEndian(aNumber);
-   #else
-      readMachineEndian(aNumber);
-   #endif
-}
-
-
-
-//////////////////////////////
-//
-// FileIO::readLittleEndian --
-//	Read numbers from a file as little endian
-//
-
-void FileIO::readLittleEndian(char& aNumber) {
-   #ifdef OTHEREND
-      readMachineEndian(aNumber);
-   #else
-      readNotMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::readLittleEndian(uchar& aNumber) {
-   #ifdef OTHEREND
-      readMachineEndian(aNumber);
-   #else
-      readNotMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::readLittleEndian(short& aNumber) {
-   #ifdef OTHEREND
-      readMachineEndian(aNumber);
-   #else
-      readNotMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::readLittleEndian(ushort& aNumber) {
-   #ifdef OTHEREND
-      readMachineEndian(aNumber);
-   #else
-      readNotMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::readLittleEndian(long& aNumber) {
-   #ifdef OTHEREND
-      readMachineEndian(aNumber);
-   #else
-      readNotMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::readLittleEndian(ulong& aNumber) {
-   #ifdef OTHEREND
-      readMachineEndian(aNumber);
-   #else
-      readNotMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::readLittleEndian(int& aNumber) {
-   #ifdef OTHEREND
-      readMachineEndian(aNumber);
-   #else
-      readNotMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::readLittleEndian(uint& aNumber) {
-   #ifdef OTHEREND
-      readMachineEndian(aNumber);
-   #else
-      readNotMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::readLittleEndian(float& aNumber) {
-   #ifdef OTHEREND
-      readMachineEndian(aNumber);
-   #else
-      readNotMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::readLittleEndian(double& aNumber) {
-   #ifdef OTHEREND
-      readMachineEndian(aNumber);
-   #else
-      readNotMachineEndian(aNumber);
-   #endif
-}
-
-
-
-//////////////////////////////
-//
-// FileIO::readMachineEndian --
-//	Read numbers from a file in the same endian as the computer.
-//
-
-void FileIO::readMachineEndian(char& aNumber) {
-   this->read(&aNumber, sizeof(aNumber));
-}
-
-void FileIO::readMachineEndian(uchar& aNumber) {
-   this->read((char*)&aNumber, sizeof(aNumber));
-}
-
-void FileIO::readMachineEndian(short& aNumber) {
-   this->read((char*)&aNumber, sizeof(aNumber));
-}
-
-void FileIO::readMachineEndian(ushort& aNumber) {
-   this->read((char*)&aNumber, sizeof(aNumber));
-}
-
-void FileIO::readMachineEndian(long& aNumber) {
-   this->read((char*)&aNumber, sizeof(aNumber));
-}
-
-void FileIO::readMachineEndian(ulong& aNumber) {
-   this->read((char*)&aNumber, sizeof(aNumber));
-}
-
-void FileIO::readMachineEndian(int& aNumber) {
-   this->read((char*)&aNumber, sizeof(aNumber));
-}
-
-void FileIO::readMachineEndian(uint& aNumber) {
-   this->read((char*)&aNumber, sizeof(aNumber));
-}
-
-void FileIO::readMachineEndian(float& aNumber) {
-   this->read((char*)&aNumber, sizeof(aNumber));
-}
-
-void FileIO::readMachineEndian(double& aNumber) {
-   this->read((char*)&aNumber, sizeof(aNumber));
-}
-
-
-
-//////////////////////////////
-//
-// FileIO::readNotMachineEndian --
-//	Read numbers from a file with different endian from the computer.
-//
-
-void FileIO::readNotMachineEndian(char& aNumber) {
-   this->read(&aNumber, sizeof(aNumber));
-   aNumber = flipBytes(aNumber);
-}
-
-void FileIO::readNotMachineEndian(uchar& aNumber) {
-   this->read((char*)&aNumber, sizeof(aNumber));
-   aNumber = flipBytes(aNumber);
-}
-
-void FileIO::readNotMachineEndian(short& aNumber) {
-   this->read((char*)&aNumber, sizeof(aNumber));
-   aNumber = flipBytes(aNumber);
-}
-
-void FileIO::readNotMachineEndian(ushort& aNumber) {
-   this->read((char*)&aNumber, sizeof(aNumber));
-   aNumber = flipBytes(aNumber);
-}
-
-void FileIO::readNotMachineEndian(long& aNumber) {
-   this->read((char*)&aNumber, sizeof(aNumber));
-   aNumber = flipBytes(aNumber);
-}
-
-void FileIO::readNotMachineEndian(ulong& aNumber) {
-   this->read((char*)&aNumber, sizeof(aNumber));
-   aNumber = flipBytes(aNumber);
-}
-
-void FileIO::readNotMachineEndian(int& aNumber) {
-   this->read((char*)&aNumber, sizeof(aNumber));
-   aNumber = flipBytes(aNumber);
-}
-
-void FileIO::readNotMachineEndian(uint& aNumber) {
-   this->read((char*)&aNumber, sizeof(aNumber));
-   aNumber = flipBytes(aNumber);
-}
-
-void FileIO::readNotMachineEndian(float& aNumber) {
-   this->read((char*)&aNumber, sizeof(aNumber));
-   aNumber = flipBytes(aNumber);
-}
-
-void FileIO::readNotMachineEndian(double& aNumber) {
-   this->read((char*)&aNumber, sizeof(aNumber));
-   aNumber = flipBytes(aNumber);
-}
-
-
-
-//////////////////////////////
-//
-// FileIO::writeBigEndian --
-//
-
-void FileIO::writeBigEndian(char aNumber) {
-   #ifdef OTHEREND
-      writeNotMachineEndian(aNumber);
-   #else
-      writeMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::writeBigEndian(uchar aNumber) {
-   #ifdef OTHEREND
-      writeNotMachineEndian(aNumber);
-   #else
-      writeMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::writeBigEndian(short aNumber) {
-   #ifdef OTHEREND
-      writeNotMachineEndian(aNumber);
-   #else
-      writeMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::writeBigEndian(ushort aNumber) {
-   #ifdef OTHEREND
-      writeNotMachineEndian(aNumber);
-   #else
-      writeMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::writeBigEndian(long aNumber) {
-   #ifdef OTHEREND
-      writeNotMachineEndian(aNumber);
-   #else
-      writeMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::writeBigEndian(ulong aNumber) {
-   #ifdef OTHEREND
-      writeNotMachineEndian(aNumber);
-   #else
-      writeMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::writeBigEndian(int aNumber) {
-   #ifdef OTHEREND
-      writeNotMachineEndian(aNumber);
-   #else
-      writeMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::writeBigEndian(uint aNumber) {
-   #ifdef OTHEREND
-      writeNotMachineEndian(aNumber);
-   #else
-      writeMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::writeBigEndian(float aNumber) {
-   #ifdef OTHEREND
-      writeNotMachineEndian(aNumber);
-   #else
-      writeMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::writeBigEndian(double aNumber) {
-   #ifdef OTHEREND
-      writeNotMachineEndian(aNumber);
-   #else
-      writeMachineEndian(aNumber);
-   #endif
-}
-
-
-
-//////////////////////////////
-//
-// FileIO::writeLittleEndian --
-//
-
-void FileIO::writeLittleEndian(char aNumber) {
-   #ifdef OTHEREND
-      writeMachineEndian(aNumber);
-   #else
-      writeNotMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::writeLittleEndian(uchar aNumber) {
-   #ifdef OTHEREND
-      writeMachineEndian(aNumber);
-   #else
-      writeNotMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::writeLittleEndian(short aNumber) {
-   #ifdef OTHEREND
-      writeMachineEndian(aNumber);
-   #else
-      writeNotMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::writeLittleEndian(ushort aNumber) {
-   #ifdef OTHEREND
-      writeMachineEndian(aNumber);
-   #else
-      writeNotMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::writeLittleEndian(long aNumber) {
-   #ifdef OTHEREND
-      writeMachineEndian(aNumber);
-   #else
-      writeNotMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::writeLittleEndian(ulong aNumber) {
-   #ifdef OTHEREND
-      writeMachineEndian(aNumber);
-   #else
-      writeNotMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::writeLittleEndian(int aNumber) {
-   #ifdef OTHEREND
-      writeMachineEndian(aNumber);
-   #else
-      writeNotMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::writeLittleEndian(uint aNumber) {
-   #ifdef OTHEREND
-      writeMachineEndian(aNumber);
-   #else
-      writeNotMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::writeLittleEndian(float aNumber) {
-   #ifdef OTHEREND
-      writeMachineEndian(aNumber);
-   #else
-      writeNotMachineEndian(aNumber);
-   #endif
-}
-
-void FileIO::writeLittleEndian(double aNumber) {
-   #ifdef OTHEREND
-      writeMachineEndian(aNumber);
-   #else
-      writeNotMachineEndian(aNumber);
-   #endif
-}
-
-
-
-//////////////////////////////
-//
-// FileIO::writeMachineEndian --
-//
-
-void FileIO::writeMachineEndian(char aNumber) {
-   this->write(&aNumber, sizeof(aNumber));
-}
-
-void FileIO::writeMachineEndian(uchar aNumber) {
-   this->write((char*)&aNumber, sizeof(aNumber));
-}
-
-void FileIO::writeMachineEndian(short aNumber) {
-   this->write((char*)&aNumber, sizeof(aNumber));
-}
-
-void FileIO::writeMachineEndian(ushort aNumber) {
-   this->write((char*)&aNumber, sizeof(aNumber));
-}
-
-void FileIO::writeMachineEndian(long aNumber) {
-   this->write((char*)&aNumber, sizeof(aNumber));
-}
-
-void FileIO::writeMachineEndian(ulong aNumber) {
-   this->write((char*)&aNumber, sizeof(aNumber));
-}
-
-void FileIO::writeMachineEndian(int aNumber) {
-   this->write((char*)&aNumber, sizeof(aNumber));
-}
-
-void FileIO::writeMachineEndian(uint aNumber) {
-   this->write((char*)&aNumber, sizeof(aNumber));
-}
-
-void FileIO::writeMachineEndian(float aNumber) {
-   this->write((char*)&aNumber, sizeof(aNumber));
-}
-
-void FileIO::writeMachineEndian(double aNumber) {
-   this->write((char*)&aNumber, sizeof(aNumber));
-}
-
-
-
-//////////////////////////////
-//
-// FileIO::writeNotMachineEndian --
-//
-
-void FileIO::writeNotMachineEndian(char aNumber) {
-   // aNumber = flipBytes(aNumber);
-   this->write(&aNumber, sizeof(aNumber));
-}
-
-void FileIO::writeNotMachineEndian(uchar aNumber) {
-   // aNumber = flipBytes(aNumber);
-   this->write((char*)&aNumber, sizeof(aNumber));
-}
-
-void FileIO::writeNotMachineEndian(short aNumber) {
-   aNumber = flipBytes(aNumber);
-   this->write((char*)&aNumber, sizeof(aNumber));
-}
-
-void FileIO::writeNotMachineEndian(ushort aNumber) {
-   aNumber = flipBytes(aNumber);
-   this->write((char*)&aNumber, sizeof(aNumber));
-}
-
-void FileIO::writeNotMachineEndian(long aNumber) {
-   aNumber = flipBytes(aNumber);
-   this->write((char*)&aNumber, sizeof(aNumber));
-}
-
-void FileIO::writeNotMachineEndian(ulong aNumber) {
-   aNumber = flipBytes(aNumber);
-   this->write((char*)&aNumber, sizeof(aNumber));
-}
-
-void FileIO::writeNotMachineEndian(int aNumber) {
-   aNumber = flipBytes(aNumber);
-   this->write((char*)&aNumber, sizeof(aNumber));
-}
-
-void FileIO::writeNotMachineEndian(uint aNumber) {
-   aNumber = flipBytes(aNumber);
-   this->write((char*)&aNumber, sizeof(aNumber));
-}
-
-void FileIO::writeNotMachineEndian(float aNumber) {
-   aNumber = flipBytes(aNumber);
-   this->write((char*)&aNumber, sizeof(aNumber));
-}
-
-void FileIO::writeNotMachineEndian(double aNumber) {
-   aNumber = flipBytes(aNumber);
-   this->write((char*)&aNumber, sizeof(aNumber));
-}
-
-
-///////////////////////////////////////////////////////////////////////////
-// 
-// private functions
-//
-
-
-//////////////////////////////
-//
-// flipBytes -- flip the bytes in a number
-//
-
-char FileIO::flipBytes(char aNumber) {
-   return aNumber;
-}
-
-
-uchar FileIO::flipBytes(uchar aNumber) {
-   return aNumber;
-}
-
-
-short FileIO::flipBytes(short aNumber) {
-   static uchar output[2];
-   static uchar* input;
-   input = (uchar*)(&aNumber);
-
-   output[0] = input[1];
-   output[1] = input[0];
-
-   return *((short*)(&output));
-}
-
-
-ushort FileIO::flipBytes(ushort aNumber) {
-   static uchar output[2];
-   static uchar* input;
-   input = (uchar*)(&aNumber);
-
-   output[0] = input[1];
-   output[1] = input[0];
- 
-   return *((ushort*)(&output));
-}
-
-
-long FileIO::flipBytes(long aNumber) {
-   static uchar output[4];
-   static uchar* input;
-   input = (uchar*)(&aNumber);
-
-   output[0] = input[3];
-   output[1] = input[2];
-   output[2] = input[1];
-   output[3] = input[0];
-
-   return *((long*)(&output));
-}
-
-
-ulong FileIO::flipBytes(ulong aNumber) {
-   static uchar output[4];
-   static uchar* input;
-   input = (uchar*)(&aNumber);
-
-   output[0] = input[3];
-   output[1] = input[2];
-   output[2] = input[1];
-   output[3] = input[0];
-
-   return *((ulong*)(&output));
-}
-
-
-int FileIO::flipBytes(int aNumber) {
-   static uchar output[sizeof(uint)];
-   static uchar* input;
-   input = (uchar*)(&aNumber);
-
-   for(uint i=0; i<sizeof(int); i++) {
-      output[i] = input[sizeof(int)-1-i];
-   }
-
-   return *((int*)(&output));
-}
-
-
-uint FileIO::flipBytes(uint aNumber) {
-   static uchar output[sizeof(uint)];
-   static uchar* input;
-   input = (uchar*)(&aNumber);
-
-   for(uint i=0; i<sizeof(uint); i++) {
-      output[i] = input[sizeof(uint)-1-i];
-   }
-
-   return *((uint*)(&output));
-}
-
- 
-   
-float FileIO::flipBytes(float aNumber) {
-   static uchar output[4];
-   static uchar* input;
-   input = (uchar*)(&aNumber);
-
-   output[0] = input[3];
-   output[1] = input[2];
-   output[2] = input[1];
-   output[3] = input[0];
-
-   return *((float*)(&output));
-}
-
-
-double FileIO::flipBytes(double aNumber) {
-   static uchar output[8];
-   static uchar* input;
-   input = (uchar*)(&aNumber);
-
-   output[0] = input[7];
-   output[1] = input[6];
-   output[2] = input[5];
-   output[3] = input[4];
-   output[4] = input[3];
-   output[5] = input[2];
-   output[6] = input[1];
-   output[7] = input[0];
-
-   return *((double*)(&output));
-}
-
-
-
-/*   This is what I want to use
-template<class type>
-type FileIO::flipBytes(type aThing) {
-   uchar* input = (uchar*)(&aNumber);
-   uchar output[sizeof(aThing)];
-
-   for(int i=0; i<sizeof(aThing); i++) {
-      output[i] = input[sizeof(aThing) - 1 - i];
-   }
-
-   return *((type*)(&output));
-}
-*/
- 
-   
-
-// md5sum:	a82bcb961043a48d2cae34d5eaac0101  - FileIO.cpp =css= 20030102
diff --git a/extensions/gripd/src/midiio/src/MidiFile.cpp b/extensions/gripd/src/midiio/src/MidiFile.cpp
deleted file mode 100644
index e3307cafb..000000000
--- a/extensions/gripd/src/midiio/src/MidiFile.cpp
+++ /dev/null
@@ -1,1200 +0,0 @@
-//
-// Copyright 1999 by Craig Stuart Sapp, All Rights Reserved.
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Fri Nov 26 14:12:01 PST 1999
-// Last Modified: Fri Dec  2 13:26:29 PST 1999
-// Last Modified: Wed Dec 13 10:33:30 PST 2000 (modified sorting routine)
-// Last Modified: Tue Jan 22 23:23:37 PST 2002 (allowed reading of meta events)
-// Filename:      ...sig/src/sigInfo/MidiFile.cpp
-// Web Address:   http://sig.sapp.org/src/sigInfo/MidiFile.cpp
-// Syntax:        C++ 
-//
-// Description:   A class which can read/write Standard MIDI files.
-//                MIDI data is stored by track in an array.  This
-//                class is used for example in the MidiPerform class.
-//
-
-#include "MidiFile.h"
-#include <iomanip>
-
-//////////////////////////////
-//
-// _MFEvent::_MFEvent --
-//
-
-_MFEvent::_MFEvent(void) { 
-   time = 0;
-   track = 0;
-   data.allowGrowth();
-   data.setSize(0);
-}
-
-_MFEvent::_MFEvent(int command) { 
-   time = 0;
-   track = 0;
-   data.allowGrowth();
-   data.setSize(1);
-   data[0] = (uchar)command;
-}
-
-_MFEvent::_MFEvent(int command, int param1) { 
-   time = 0;
-   track = 0;
-   data.allowGrowth();
-   data.setSize(2);
-   data[0] = (uchar)command;
-   data[1] = (uchar)param1;
-}
-
-_MFEvent::_MFEvent(int command, int param1, int param2) { 
-   time = 0;
-   track = 0;
-   data.allowGrowth();
-   data.setSize(3);
-   data[0] = (uchar)command;
-   data[1] = (uchar)param1;
-   data[2] = (uchar)param2;
-}
-
-_MFEvent::_MFEvent(int aTrack, int command, int param1, int param2) { 
-   time = 0;
-   track = aTrack;
-   data.allowGrowth();
-   data.setSize(3);
-   data[0] = (uchar)command;
-   data[1] = (uchar)param1;
-   data[2] = (uchar)param2;
-}
-
-_MFEvent::_MFEvent(int aTime, int aTrack, int command, int param1, int param2) {
-   time = aTime;
-   track = aTrack;
-   data.allowGrowth();
-   data.setSize(3);
-   data[0] = (uchar)command;
-   data[1] = (uchar)param1;
-   data[2] = (uchar)param2;
-}
-
-
-
-//////////////////////////////
-//
-// _MFEvent::~MFEvent
-//
-
-_MFEvent::~_MFEvent() { 
-   time = -1;
-   track = -1;
-   data.setSize(0);
-}
-
-
-
-//////////////////////////////
-//
-// MidiFile::MidiFile --
-//
-
-MidiFile::MidiFile(void) { 
-   ticksPerQuarterNote = 48;             // time base of file
-   trackCount = 1;                       // # of tracks in file
-   theTrackState = TRACK_STATE_SPLIT;    // joined or split
-   theTimeState = TIME_STATE_DELTA;      // absolute or delta
-   events.setSize(1);
-   events[0] = new Collection<_MFEvent>;
-   events[0]->setSize(0);
-   events[0]->allowGrowth(1);
-   readFileName = new char[1];
-   readFileName[0] = '\0';
-}
-
-
-MidiFile::MidiFile(char* aFile) { 
-   ticksPerQuarterNote = 48;             // time base of file
-   trackCount = 1;                       // # of tracks in file
-   theTrackState = TRACK_STATE_SPLIT;    // joined or split
-   theTimeState = TIME_STATE_DELTA;      // absolute or delta
-   events.setSize(1);
-   events[0] = new Collection<_MFEvent>;
-   events[0]->setSize(0);
-   events[0]->allowGrowth(1);
-   readFileName = new char[1];
-   readFileName[0] = '\0';
-   read(aFile);
-}
-
-
-
-//////////////////////////////
-//
-// MidiFile::~MidiFile --
-//
-
-MidiFile::~MidiFile() { 
-   if (readFileName != NULL) {
-      delete [] readFileName;
-      readFileName = NULL;
-   }
-
-   erase();
-
-   if (events[0] != NULL) {  
-      delete events[0];
-      events[0] = NULL;
-   }
-
-}
-
-
-
-//////////////////////////////
-//
-// MidiFile::absoluteTime -- convert the time data to
-//    absolute time, which means that the time field
-//    in the _MFEvent struct represents the exact tick
-//    time to play the event rather than the time since
-//    the last event to wait untill playing the current
-//    event.
-//
-
-void MidiFile::absoluteTime(void) { 
-   if (getTimeState() == TIME_STATE_ABSOLUTE) {
-      return;
-   }
-   int i, j;
-   int length = getNumTracks();
-   int* timedata = new int[length];
-   for (i=0; i<length; i++) {
-      timedata[i] = 0;
-      if (events[i]->getSize() > 0) {
-         timedata[i] = (*events[i])[0].time;
-      } else {
-         continue;
-      }
-      for (j=1; j<events[i]->getSize(); j++) {
-         timedata[i] += (*events[i])[j].time;
-         (*events[i])[j].time = timedata[i];
-      }
-   }
-   theTimeState = TIME_STATE_ABSOLUTE;
-   delete [] timedata;
-}
-
-//////////////////////////////
-//
-// MidiFile::addEvent -- 
-//
-
-int MidiFile::addEvent(int aTrack, int aTime, Array<uchar>& midiData) {
-   _MFEvent anEvent;
-   anEvent.time = aTime;
-   anEvent.track = aTrack;
-   anEvent.data = midiData;
-
-   events[aTrack]->append(anEvent);
-   return events[aTrack]->getSize() - 1;
-}
-
-
-
-//////////////////////////////
-//
-// MidiFile::addTrack -- adds a blank track at end of the 
-//    track list.  Returns the track number of the added
-//    track.
-//
-
-int MidiFile::addTrack(void) { 
-   int length = getNumTracks();
-   events.setSize(length+1);
-   events[length] = new Collection<_MFEvent>;
-   events[length]->setSize(10000);
-   events[length]->setSize(0);
-   events[length]->allowGrowth(1);
-   return length;
-}
-
-int MidiFile::addTrack(int count) {
-   int length = getNumTracks();
-   events.setSize(length+count);
-   int i;
-   for (i=0; i<count; i++) {
-      events[length + i] = new Collection<_MFEvent>;
-      events[length + i]->setSize(10000);
-      events[length + i]->setSize(0);
-      events[length + i]->allowGrowth(1);
-   }
-   return length + count - 1;
-}
-
-
-//////////////////////////////
-//
-// MidiFile::allocateEvents --
-//
-
-void MidiFile::allocateEvents(int track, int aSize) {
-   int oldsize = events[track]->getSize();
-   if (oldsize < aSize) {
-      events[track]->setSize(aSize);
-      events[track]->setSize(oldsize);
-   } 
-}
-
-
-
-//////////////////////////////
-//
-// MidiFile::deleteTrack -- remove a track from the MidiFile.
-//   Tracks are numbered starting at track 0.
-//
-
-void MidiFile::deleteTrack(int aTrack) { 
-   int length = getNumTracks();
-   if (aTrack < 0 || aTrack >= length) {
-      return;
-   }
-   if (length == 1) {
-      return;
-   }
-   delete events[aTrack];
-   for (int i=aTrack; i<length-1; i++) {
-      events[i] = events[i+1];
-   }
-
-   events[length] = NULL;
-   events.setSize(length-1);
-}
-
-
-
-//////////////////////////////
-//
-// MidiFile::deltaTime -- convert the time data to
-//     delta time, which means that the time field
-//     in the _MFEvent struct represents the time
-//     since the last event was played. When a MIDI file
-//     is read from a file, this is the default setting.
-//
-
-void MidiFile::deltaTime(void) { 
-   if (getTimeState() == TIME_STATE_DELTA) {
-      return;
-   }
-   int i, j;
-   int temp;
-   int length = getNumTracks();
-   int *timedata = new int[length];
-   for (i=0; i<length; i++) {
-      timedata[i] = 0;
-      if (events[i]->getSize() > 0) {
-         timedata[i] = (*events[i])[0].time;
-      } else {
-         continue;
-      }
-      for (j=1; j<events[i]->getSize(); j++) {
-         temp = (*events[i])[j].time;
-         (*events[i])[j].time = temp - timedata[i];
-         timedata[i] = temp;
-      }
-   }
-   theTimeState = TIME_STATE_DELTA;
-   delete [] timedata;
-}
-
-
-
-//////////////////////////////
-//
-// MidiFile::erase -- make the MIDI file empty with one
-//     track with no data in it.
-//
-
-void MidiFile::erase(void) { 
-   int length = getNumTracks();
-   for (int i=0; i<length; i++) {
-      delete events[i];
-      events[i] = NULL;
-   }
-   events.setSize(1);
-   events[0] = new Collection<_MFEvent>;
-   events[0]->setSize(0);
-   events[0]->allowGrowth(1);
-}
-
-
-void MidiFile::clear(void) {
-   MidiFile::erase();
-}
-
-
-
-//////////////////////////////
-//
-// MidiFile::getEvent -- return the event at the given index in the
-//    specified track.
-//
-
-_MFEvent& MidiFile::getEvent(int aTrack, int anIndex) {
-   return (*events[aTrack])[anIndex];
-}
-
-
-
-//////////////////////////////
-//
-// MidiFile::getTicksPerQuarterNote -- returns the number of
-//   time units that are supposed to occur during a quarternote.
-//
-
-int MidiFile::getTicksPerQuarterNote(void) { 
-   return ticksPerQuarterNote;
-}
-
-
-
-//////////////////////////////
-//
-// MidiFile::getTrackCount -- return the number of tracks in 
-//   the Midi File.
-//
-
-int MidiFile::getTrackCount(void) { 
-   return events.getSize();
-}
-
-int MidiFile::getNumTracks(void) { 
-   return events.getSize();
-}
-
-
-
-//////////////////////////////
-//
-// MidiFile::getNumEvents -- returns the number of events
-//   in a given track.
-//
-
-int MidiFile::getNumEvents(int aTrack) { 
-   return events[aTrack]->getSize();
-}
-
-
-
-//////////////////////////////
-//
-// MidiFile::joinTracks -- merge the data from all tracks,
-//   but keeping the identity of the tracks unique so that
-//   the function splitTracks can be called to split the 
-//   tracks into separate units again.  The style of the 
-//   MidiFile when read from a file is with tracks split.
-//
-
-void MidiFile::joinTracks(void) { 
-   if (getTrackState() == TRACK_STATE_JOINED) {
-      return;
-   }
-   if (getNumTracks() == 1) {
-      return;
-   }
-
-   Collection <_MFEvent>* joinedTrack;
-   joinedTrack = new Collection<_MFEvent>;
-   joinedTrack->setSize(200000);
-   joinedTrack->setSize(0);
-   int oldTimeState = getTimeState();
-   if (oldTimeState == TIME_STATE_DELTA) {
-      absoluteTime();
-   }
-   int i, j;
-   int length = getNumTracks();
-   for (i=0; i<length; i++) {
-      for (j=0; j<events[i]->getSize(); j++) {
-         joinedTrack->append((*events[i])[j]);
-      }
-   }
-
-   erase(); 
-
-   delete events[0];
-   events[0] = joinedTrack;
-   sortTracks();
-   if (oldTimeState == TIME_STATE_DELTA) {
-      deltaTime();
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiFile::mergeTracks -- combine the data from two
-//   tracks into one.  Placing the data in the first
-//   track location listed, and Moving the other tracks
-//   in the file around to fill in the spot where Track2
-//   used to be.  The results of this function call cannot
-//   be reversed.
-//
-
-void MidiFile::mergeTracks(int aTrack1, int aTrack2) { 
-   Collection <_MFEvent>* mergedTrack;
-   mergedTrack = new Collection<_MFEvent>;
-   mergedTrack->setSize(0);
-   int oldTimeState = getTimeState();
-   if (oldTimeState == TIME_STATE_DELTA) {
-      absoluteTime();
-   }
-   int i, j;
-   int length = getNumTracks();
-   for (i=0; i<events[aTrack1]->getSize(); i++) {
-      mergedTrack->append((*events[aTrack1])[i]);
-   }
-   for (j=0; j<events[aTrack2]->getSize(); i++) {
-      (*events[aTrack2])[i].track = aTrack1;
-      mergedTrack->append((*events[aTrack2])[i]);
-   }
-
-   sortTrack(*mergedTrack);
-
-   delete events[aTrack1];
-
-   events[aTrack1] = mergedTrack;
-
-   for (i=aTrack2; i<length-1; i++) {
-      events[i] = events[i+1];
-   }
-
-   events[length] = NULL;
-   events.setSize(length-1);
-
-   if (oldTimeState == TIME_STATE_DELTA) {
-      deltaTime();
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiFile::read -- read a MIDI file and store its contents.
-//
-
-int MidiFile::read(char* aFile) { 
-
-   #ifdef VISUAL
-      FileIO inputfile(aFile, std::ios::in | std::ios::nocreate | std::ios::binary);
-   #else
-      // ios::nocreate does not exists anymore in GCC 3.x
-      FileIO inputfile(aFile, std::ios::in /*| std::ios::nocreate */);
-   #endif 
-
-   if (!inputfile.is_open()) {
-      return 0;
-   }
-
-   // Read the MIDI header (4 bytes of ID, 4 byte data size, 6 bytes
-   // of data.
-
-   ulong longdata;
-   uchar chardata;
-   ushort shortdata;
-   
-   inputfile.readBigEndian(chardata);
-   if (chardata != 'M') {
-      std::cout << "File: " << aFile << " is not a MIDI file" << std::endl;
-      std::cout << "Chara data is" << chardata << std::endl;
-      return 0;
-   }
-
-   inputfile.readBigEndian(chardata);
-   if (chardata != 'T') {
-      std::cout << "File: " << aFile << " is not a MIDI file" << std::endl;
-      return 0;
-   }
-
-   inputfile.readBigEndian(chardata);
-   if (chardata != 'h') {
-      std::cout << "File: " << aFile << " is not a MIDI file" << std::endl;
-      return 0;
-   }
-
-   inputfile.readBigEndian(chardata);
-   if (chardata != 'd') {
-      std::cout << "File: " << aFile << " is not a MIDI file" << std::endl;
-      return 0;
-   }
-
-   // read header size
-   inputfile.readBigEndian(longdata);
-   if (longdata != 6) {
-      std::cout << "File: " << aFile 
-           << " is not a MIDI 1.0 Standard MIDI file." << std::endl;
-      std::cout << "The header size is: " << longdata << std::endl;
-      return 0;
-   }
-
-   // read file type
-   int type;
-   inputfile.readBigEndian(shortdata);
-   switch (shortdata) {
-      case 0:
-         type = 0;
-         break;
-      case 1:
-         type = 1;
-         break;
-      default:
-         std::cout << "Error: cannot handle type " << shortdata 
-              << " MIDI file" << std::endl;
-         return 0;
-   }
- 
-   // read number of tracks
-   int tracks;
-   inputfile.readBigEndian(shortdata);
-   if (type == 0 && shortdata != 1) {
-      std::cout << "Error: Type 0 MIDI file can only contain one track" << std::endl;
-      return 0;
-   } else {
-      tracks = shortdata;
-   }
-   // std::cout << "Track count is: " << tracks << std::endl;
-   erase();
-   if (events[0] != NULL) {
-      delete events[0];
-   }
-   events.setSize(tracks);
-   for (int z=0; z<tracks; z++) {
-      events[z] = new Collection<_MFEvent>;
-      events[z]->setAllocSize(10000);
-      events[z]->setSize(0);
-      events[z]->allowGrowth(1);
-   }
-
-   // read ticks per quarter note
-   short signeddata;
-   inputfile.readBigEndian(signeddata);
-   if (signeddata <= 0) {
-      std::cout << "Error: cannot handle SMTP tick values for quarter notes"
-              " yet" << std::endl;   
-      return 0;
-   } 
-   ticksPerQuarterNote = signeddata;
-
-   //////////////////////////////////////////////////
-   //
-   // now read individual tracks:
-   //
-
-   uchar runningCommand = 0;
-   _MFEvent event;
-   int absticks;
-   int barline;
-   
-   for (int i=0; i<tracks; i++) {
-      // std::cout << "\nReading Track: " << i + 1 << flush;
-      // read track header...
-     
-      inputfile.readBigEndian(chardata);
-      if (chardata != 'M') {
-         std::cout << "File: " << aFile << " has bad track info" << std::endl;
-         std::cout << "character 1 is: " << (int)chardata << std::endl;
-         inputfile.readBigEndian(chardata);
-         if (inputfile.eof()) {
-            std::cout << "End of file reached" << std::endl;
-         }
-         return 0;
-      }
-
-      inputfile.readBigEndian(chardata);
-      if (chardata != 'T') {
-         std::cout << "File: " << aFile << " has bad track info" << std::endl;
-         std::cout << "character 2 is: " << (int)chardata << std::endl;
-         return 0;
-      }
-
-      inputfile.readBigEndian(chardata);
-      if (chardata != 'r') {
-         std::cout << "File: " << aFile << " has bad track info" << std::endl;
-         std::cout << "character 3 is: " << (int)chardata << std::endl;
-         return 0;
-      }
-
-      inputfile.readBigEndian(chardata);
-      if (chardata != 'k') {
-         std::cout << "File: " << aFile << " has bad track info" << std::endl;
-         std::cout << "character 4 is: " << (int)chardata << std::endl;
-         return 0;
-      }
-
-      // Now read track chunk size and throw it away because it is
-      // not really necessary since the track MUST end with an
-      // end of track meta event, and 50% of Midi files or so
-      // do not correctly give the track size.
-      inputfile.readBigEndian(longdata);
-
-      // set the size of the track allocation so that it might
-      // approximately fit the data.
-      events[i]->setSize(longdata/2);
-      events[i]->setSize(0);
-
-      // process the track
-      absticks = 0;
-      barline = 1;
-      while (!inputfile.eof()) {
-         longdata = extractVlvTime(inputfile);
-//std::cout << "ticks = " << longdata << std::endl;
-         absticks += longdata;
-         extractMidiData(inputfile, event.data, runningCommand);
-//std::cout << "command = " << std::hex << (int)event.data[0] << std::dec << std::endl;
-         if (event.data[0] == 0xff && (event.data[1] == 1 || 
-             event.data[1] == 2 || event.data[1] == 3 || event.data[1] == 4)) {
-           // mididata.append('\0');
-           // std::cout << '\t';
-           // for (int m=0; m<event.data[2]; m++) {
-           //    std::cout << event.data[m+3];
-           // }
-           // std::cout.flush();
-         } else if (event.data[0] == 0xff && event.data[1] == 0x2f) {
-            break;
-         }
-
-         if (event.data[0] != 0xff && event.data[0] != 0xf0) {
-            event.time = absticks;
-            if ((event.data[0] & 0xf0) == 0x90) {
-               if (event.data[1] < 12) {
-                  event.data[0] = event.data[1];
-                  switch (event.data[0]) {
-                     case 2: event.data[2] = barline++;    // barline
-                             break; 
-                     case 0: break;                        // beat
-                  }
-               }
-            }
-            event.track = i;
-            events[i]->append(event);
-         } else {
-            event.time = absticks;
-            event.track = i;
-            events[i]->append(event);
-         }
-
-      }
-
-   }
-   // std::cout << std::endl;
-
-   theTimeState = TIME_STATE_ABSOLUTE;
-   return 1;
-}
-
-
-
-//////////////////////////////
-//
-// MidiFile::setTicksPerQuarterNote -- 
-//
-
-void MidiFile::setTicksPerQuarterNote(int ticks) {
-   ticksPerQuarterNote = ticks;
-}
-
-
-
-//////////////////////////////
-//
-// MidiFile::sortTrack -- 
-//
-
-void MidiFile::sortTrack(Collection<_MFEvent>& trackData) { 
-   qsort(trackData.getBase(), trackData.getSize(), 
-      sizeof(_MFEvent), eventcompare);
-}
-
-
-
-//////////////////////////////
-//
-// MidiFile::sortTracks -- sort all tracks in the MidiFile.
-//
-
-void MidiFile::sortTracks(void) { 
-   for (int i=0; i<getTrackCount(); i++) {
-      sortTrack(*events[i]);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiFile::splitTracks -- take the joined tracks and split them
-//   back into their separate track identities.
-//
-
-void MidiFile::splitTracks(void) { 
-   if (getTrackState() == TRACK_STATE_SPLIT) {
-      return;
-   }
-
-   int oldTimeState = getTimeState();
-   if (oldTimeState == TIME_STATE_DELTA) {
-      absoluteTime();
-   }
-
-   int maxTrack = 0;
-   int i;
-   int length = events[0]->getSize();
-   for (i=0; i<length; i++) {
-      if ((*events[0])[i].track > maxTrack) {
-          maxTrack = (*events[0])[i].track;
-      }
-   }
-
-   Collection<_MFEvent>* olddata = events[0];
-   events[0] = NULL;
-   events.setSize(maxTrack);
-   for (i=0; i<maxTrack; i++) {
-      events[i] = new Collection<_MFEvent>;
-      events[i]->setSize(0);
-      events[i]->allowGrowth();
-   }
-
-   int trackValue = 0;
-   for (i=0; length; i++) {
-      trackValue = (*olddata)[i].track;
-      events[trackValue]->append((*olddata)[i]);
-   }
-
-   delete olddata;
-
-   if (oldTimeState == TIME_STATE_DELTA) {
-      deltaTime();
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiFile::timeState -- returns what type of time method is
-//   being used: either TIME_STATE_ABSOLUTE or TIME_STATE_DELTA.
-//
-
-int MidiFile::getTimeState(void) { 
-   return theTimeState;
-}
-
-
-
-//////////////////////////////
-//
-// MidiFile::getTrackState -- returns what type of track method
-//     is being used: either TRACK_STATE_JOINED or TRACK_STATE_SPLIT.
-//
-
-int MidiFile::getTrackState(void) { 
-   return theTrackState;
-}
-
-
-
-//////////////////////////////
-//
-// MidiFile::write -- write a standard MIDI file from data.
-//
-
-int MidiFile::write(const char* aFile) { 
-   int oldTimeState = getTimeState();
-   if (oldTimeState == TIME_STATE_ABSOLUTE) {
-      deltaTime();
-   }
-
-   #ifdef VISUAL
-      FileIO outputfile(aFile, ios::out | ios::noreplace | ios::binary);
-   #else
-      // ios::noreplace does not exists anymore in GCC 3.x
-      FileIO outputfile(aFile, std::ios::out /* | std::ios::noreplace */);
-   #endif 
-
-   if (!outputfile.is_open()) {
-      std::cout << "Error: could not write: " << aFile << std::endl;
-      exit(1);
-   }
-
-   // write the header of the Standard MIDI File
-   
-   char ch;
-   // 1. The characters "MThd"
-   ch = 'M';
-   outputfile.writeBigEndian(ch);
-   ch = 'T';
-   outputfile.writeBigEndian(ch);
-   ch = 'h';
-   outputfile.writeBigEndian(ch);
-   ch = 'd';
-   outputfile.writeBigEndian(ch);
-
-   // 2. write the size of the header (alwas a "6" stored in unsigned long
-   ulong longdata = 6;
-   outputfile.writeBigEndian(longdata);
-
-   // 3. MIDI file format, type 0, 1, or 2
-   ushort shortdata;
-   if (getNumTracks() == 1) {
-      shortdata = 0;
-   } else {
-      shortdata = 1;
-   }
-   outputfile.writeBigEndian(shortdata);
-      
-   // 4. write out the number of tracks.
-   shortdata = getNumTracks();
-   outputfile.writeBigEndian(shortdata);
-
-   // 5. write out the number of ticks per quarternote. (avoiding SMTPE for now)
-   shortdata = getTicksPerQuarterNote();
-   outputfile.writeBigEndian(shortdata);
-
-   // now write each track.
-   Array<uchar> trackdata;
-   uchar endoftrack[4] = {0, 0xff, 0x2f, 0x00};
-   int i, j, k;
-   int size;
-   for (i=0; i<getNumTracks(); i++) {
-      trackdata.setSize(1000000);   // make the track data larger than
-                                    // expected data input
-      trackdata.setGrowth(1000000);
-      trackdata.setSize(0);
-      trackdata.allowGrowth();
-      for (j=0; j<events[i]->getSize(); j++) {
-         writeVLValue((*events[i])[j].time, trackdata);
-         for (k=0; k<(*events[i])[j].data.getSize(); k++) {
-            trackdata.append((*events[i])[j].data[k]);
-         }
-      }
-      size = trackdata.getSize();
-      if ((trackdata[size-3] != 0xff) && (trackdata[size-2] != 0x2f)) {
-         trackdata.append(endoftrack[0]);
-         trackdata.append(endoftrack[1]);
-         trackdata.append(endoftrack[2]);
-         trackdata.append(endoftrack[3]);
-      }
-
-      // now ready to write to MIDI file.
-   
-      // first write the track ID marker "MTrk":
-      ch = 'M';
-      outputfile.writeBigEndian(ch);
-      ch = 'T';
-      outputfile.writeBigEndian(ch);
-      ch = 'r';
-      outputfile.writeBigEndian(ch);
-      ch = 'k';
-      outputfile.writeBigEndian(ch);
-
-      // A. write the size of the MIDI data to follow:
-      longdata = trackdata.getSize();
-      outputfile.writeBigEndian(longdata);
-
-      // B. write the actual data
-      outputfile.write((char*)trackdata.getBase(), trackdata.getSize());
-   }
-
-   if (oldTimeState == TIME_STATE_ABSOLUTE) {
-      absoluteTime();
-   }
- 
-   outputfile.close();
-
-   return 1;
-}
-
-
-
-///////////////////////////////////////////////////////////////////////////
-//
-// private functions
-//
-   
-
-//////////////////////////////
-//
-// MidiF::extractMidiData --
-//
-
-void MidiFile::extractMidiData(FileIO& inputfile, Array<uchar>& array, 
-   uchar& runningCommand) {
-
-   uchar byte;
-   array.setSize(0);
-   array.allowGrowth();
-   int runningQ;
-
-   inputfile.readBigEndian(byte);
-
-   if (byte < 0x80) {
-      runningQ = 1;
-      if (runningCommand == 0) {
-         std::cout << "Error: running command with no previous command" << std::endl;
-         exit(1);
-      }
-   } else {
-      runningCommand = byte;
-      runningQ = 0;
-   }
-
-   array.append(runningCommand);
-   if (runningQ) {
-      array.append(byte);
-   }
-
-   uchar metai;
-   switch (runningCommand & 0xf0) {
-      case 0x80:        // note off (2 more bytes)
-      case 0x90:        // note on (2 more bytes)
-      case 0xA0:        // aftertouch (2 more bytes)
-      case 0xB0:        // cont. controller (2 more bytes)
-      case 0xE0:        // pitch wheel (2 more bytes)
-         inputfile.readBigEndian(byte);
-         array.append(byte);
-         if (!runningQ) {
-            inputfile.readBigEndian(byte);
-            array.append(byte);
-         }
-         break;
-      case 0xC0:        // patch change (1 more byte)
-      case 0xD0:        // channel pressure (1 more byte)
-         if (!runningQ) {
-            inputfile.readBigEndian(byte);
-            array.append(byte);
-         }
-         break;
-      case 0xF0:
-         switch (runningCommand) {
-            case 0xff:                 // meta event
-               {
-               if (!runningQ) {
-                  inputfile.readBigEndian(byte);  // meta type
-               array.append(byte);
-               }
-               inputfile.readBigEndian(metai);  // meta size
-               array.append(metai);
-               for (uchar j=0; j<metai; j++) {
-                  inputfile.readBigEndian(byte);  // meta data
-                  array.append(byte);
-               }
-               }
-               break;
-            case 0xf0:                // sysex
-               // read until you find a 0xf7 character
-               byte = 0;
-               while (byte != 0xf7 && !inputfile.eof()) {
-                  inputfile.readBigEndian(byte);  // meta data
-               }
-               break;
-         }
-         break; 
-      default:
-         std::cout << "Error reading midifile" << std::endl;
-         std::cout << "Command byte was " << (int)runningCommand << std::endl;
-         exit(1);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiF::extractVlvTime -- 
-//
-
-ulong MidiFile::extractVlvTime(FileIO& inputfile) {
-   uchar b[5] = {0};
- 
-   for (int i=0; i<5; i++) {
-      inputfile.readBigEndian(b[i]);
-      if (b[i] < 0x80) {
-         break;
-      }
-   }
-  
-   return unpackVLV(b[0], b[1], b[2], b[3], b[4]);
-}
-
-
-
-//////////////////////////////
-//
-// MidiF::unpackVLV -- converts a VLV value to pure unsigned long value.
-// default values: a = b = c = d = e = 0;
-//
-
-ulong MidiFile::unpackVLV(uchar a, uchar b, uchar c, uchar d, uchar e) {
-   if (e > 0x7f) {
-      std::cout << "Error: VLV value was too long" << std::endl;
-      exit(1);
-   }
-
-   uchar bytes[5] = {a, b, c, d, e};
-   int count = 0;
-   while (bytes[count] > 0x7f && count < 5) {
-      count++;
-   }
-   count++;
-
-   ulong output = 0;
-   for (int i=0; i<count; i++) {
-      output = output << 7;
-      output = output | (bytes[i] & 0x7f);
-   }
-   
-   return output;
-}
-   
-
-//////////////////////////////
-//
-// MidiFileWrite::writeVLValue -- write a number to the midifile
-//    as a variable length value which segments a file into 7-bit
-//    values.  Maximum size of aValue is 0x7fffffff
-//
-
-void MidiFile::writeVLValue(long aValue, Array<uchar>& outdata) {
-   uchar bytes[5] = {0};
-   bytes[0] = (uchar)(((ulong)aValue >> 28) & 0x7f);  // most significant 5 bits
-   bytes[1] = (uchar)(((ulong)aValue >> 21) & 0x7f);  // next largest 7 bits
-   bytes[2] = (uchar)(((ulong)aValue >> 14) & 0x7f);
-   bytes[3] = (uchar)(((ulong)aValue >> 7)  & 0x7f);
-   bytes[4] = (uchar)(((ulong)aValue)       & 0x7f);  // least significant 7 bits
-
-   int start = 0;
-   while (start<5 && bytes[start] == 0)  start++;
-
-   for (int i=start; i<4; i++) {
-      bytes[i] = bytes[i] | 0x80;    
-      outdata.append(bytes[i]);
-   }
-   outdata.append(bytes[4]);
-}
-
-          
-/////////////////////////////////////////////////////////////////////////////////////////////////////////
-// 
-// external functions
-//
-
-
-//////////////////////////////
-//
-// eventcompare -- for sorting the tracks
-//
-
-int eventcompare(const void* a, const void* b) {
-   _MFEvent& aevent = *((_MFEvent*)a);
-   _MFEvent& bevent = *((_MFEvent*)b);
-
-   if (aevent.time > bevent.time) {
-      return 1;
-   } else if (aevent.time < bevent.time) {
-      return -1;
-   } else if (aevent.data[0] == 0xff && bevent.data[0] != 0xff) {
-      return 1;
-   } else if (bevent.data[0] == 0xff && aevent.data[0] != 0xff) {
-      return -1;
-   } else if (bevent.data[0] == 0xff && bevent.data[1] == 0x2f) {
-      return -1;
-   } else if (aevent.data[0] == 0xff && aevent.data[1] == 0x2f) {
-      return 1;
-   } else {
-      return 0;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// operator<< -- for printing an ASCII version of the MIDI file
-//
-
-std::ostream& operator<<(std::ostream& out, MidiFile& aMidiFile) {
-   int i, j, k;
-   out << "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
-   out << "Number of Tracks: " << aMidiFile.getTrackCount() << "\n";
-   out << "Time method: " << aMidiFile.getTimeState();
-   if (aMidiFile.getTimeState() == TIME_STATE_DELTA) {
-      out << " (Delta timing)";
-   } else if (aMidiFile.getTimeState() == TIME_STATE_ABSOLUTE) {
-      out << " (Absolute timing)";
-   } else {
-      out << " (unknown method)";
-   } 
-   out << "\n";
-    
-   out << "Divisions per Quarter Note: " << std::dec << aMidiFile.getTicksPerQuarterNote() << "\n";
-   for (i=0; i<aMidiFile.getNumTracks(); i++) {
-      out << "\nTrack " << i 
-          << "   +++++++++++++++++++++++++++++++++++++++++++++++++++\n\n";
-      for (j=0; j<aMidiFile.getNumEvents(i); j++) {
-         out << std::dec << aMidiFile.getEvent(i, j).time << "\t"
-             << "0x" << std::hex << (int)aMidiFile.getEvent(i, j).data[0] << " ";
-         if (aMidiFile.getEvent(i, j).data[0] == 0xff) {
-
-            if (aMidiFile.getEvent(i, j).data[1] == 0x01) {
-               out << "TEXT [";
-               for (k=3; k<aMidiFile.getEvent(i, j).data.getSize(); k++) {
-                  out << (char)aMidiFile.getEvent(i, j).data[k];
-               }
-               out << "]";
-
-            } else if (aMidiFile.getEvent(i, j).data[1] == 0x02) {
-               out << "COPY [";
-               for (k=3; k<aMidiFile.getEvent(i, j).data.getSize(); k++) {
-                  out << (char)aMidiFile.getEvent(i, j).data[k];
-               }
-               out << "]";
-
-            } else if (aMidiFile.getEvent(i, j).data[1] == 0x03) {
-               out << "TRACK [";
-               for (k=3; k<aMidiFile.getEvent(i, j).data.getSize(); k++) {
-                  out << (char)aMidiFile.getEvent(i, j).data[k];
-               }
-               out << "]";
-
-            } else if (aMidiFile.getEvent(i, j).data[1] == 0x04) {
-               out << "INSTR [";
-               for (k=3; k<aMidiFile.getEvent(i, j).data.getSize(); k++) {
-                  out << (char)aMidiFile.getEvent(i, j).data[k];
-               }
-               out << "]";
-
-            } else if (aMidiFile.getEvent(i, j).data[1] == 0x05) {
-               out << "LYRIC [";
-               for (k=3; k<aMidiFile.getEvent(i, j).data.getSize(); k++) {
-                  out << (char)aMidiFile.getEvent(i, j).data[k];
-               }
-               out << "]";
-
-            } else {
-               for (k=1; k<aMidiFile.getEvent(i, j).data.getSize(); k++) {
-                  out << std::dec << (int)aMidiFile.getEvent(i, j).data[k] << " ";
-               }
-            }
-
-         } else {
-            for (k=1; k<aMidiFile.getEvent(i, j).data.getSize(); k++) {
-               out << std::dec << (int)aMidiFile.getEvent(i, j).data[k] << " ";
-            }
-         }
-         out << "\n";
-      }
-   }
-   out << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\n";
-   return out;
-}
-
-
-
-// md5sum:	cd4fb330dd874cc263921ec55222a199  - MidiFile.cpp =css= 20030102
diff --git a/extensions/gripd/src/midiio/src/MidiFileWrite.cpp b/extensions/gripd/src/midiio/src/MidiFileWrite.cpp
deleted file mode 100644
index a22e70c90..000000000
--- a/extensions/gripd/src/midiio/src/MidiFileWrite.cpp
+++ /dev/null
@@ -1,259 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Sun Mar 15 10:55:56 GMT-0800 1998
-// Last Modified: Sun Mar 15 10:55:56 GMT-0800 1998
-// Filename:      ...sig/code/control/MidiFileWrite/MidiFileWrite.cpp
-// Web Address:   http://www-ccrma.stanford.edu/~craig/improv/src/MidiFileWrite.cpp
-// Syntax:        C++ 
-//
-// Description:   The MidiFileWrite class will write out a Type 0 MidiFile.
-//                Used for recording MIDI data streams into Standard
-//                MIDI files.
-//
-
-#include "MidiFileWrite.h"
-#include "SigTimer.h"
-#include <assert.h>
-
-
-//////////////////////////////
-//
-// MidiFileWrite::MidiFileWrite
-//    default value: startTime = -1
-//
-
-MidiFileWrite::MidiFileWrite(void) {
-   trackSize = 0;
-   lastPlayTime = 0;
-   midifile = NULL;
-   openQ = 0;
-}
-
-
-MidiFileWrite::MidiFileWrite(const char* aFilename, int startTime) {
-   trackSize = 0;
-   lastPlayTime = 0;
-   midifile = NULL;
-   openQ = 0;
-   setup(aFilename, startTime);
-}
-
-
-
-//////////////////////////////
-//
-// MidiFileWrite::~MidiFileWrite
-//
-
-MidiFileWrite::~MidiFileWrite() {
-   close();
-}
-
-
-
-//////////////////////////////
-//
-// MidiFileWrite::close
-//
-
-void MidiFileWrite::close(void) {
-   writeRaw(0, 0xff, 0x2f, 0);       // end of track meta event
-
-   midifile->seekg(18);
-   midifile->writeBigEndian(trackSize);
-
-   midifile->close();
-
-   midifile = NULL;
-   openQ = 0;
-}
-
-
-
-//////////////////////////////
-//
-// MidiFileWrite::setup -- writes the Midi file header and
-//	prepares the midifile for writing of data
-//   default value: startTime = -1
-//
-
-void MidiFileWrite::setup(const char* aFilename, int startTime) {
-   if (openQ) {
-      close();
-   }
-
-   if (midifile != NULL)  delete midifile;
-   midifile = new FileIO;
-   midifile->open(aFilename, std::ios::out);
-   
-   // write the header chunk
-   *midifile << "MThd";                    // file identification: MIDI file
-   midifile->writeBigEndian(6L);          // size of header (always 6)
-   midifile->writeBigEndian((short)0);    // format: type 0;
-   midifile->writeBigEndian((short)0);    // num of tracks (always 0 for type 0)
-   midifile->writeBigEndian((short)1000); // divisions per quarter note
-   
-
-   // write the track header
-   *midifile << "MTrk"; 
-   midifile->writeBigEndian(0xffffL);     // the track size which will
-                                          // be corrected with close()
-
-
-   // the midifile stream is now setup for writing
-   // track events
-
-   openQ = 1;
- 
-   start();  // start can be called later and will behave well
-             // as long as no track events have been written
-}
-
-
-
-//////////////////////////////
-//
-// MidiFileWrite::start
-//	default value: startTime = -1;
-//
-
-void MidiFileWrite::start(int startTime) {
-   if (startTime < 0) {
-      SigTimer localTime;
-      lastPlayTime = localTime.getTime();
-   } else {
-      lastPlayTime = startTime;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiFileWrite::writeAbsolute -- considers the time data
-//	to be the current time.  It will generate a difference
-//	time with the previously stored last playing time.
-//
-
-void MidiFileWrite::writeAbsolute(int aTime, int command, int p1, int p2) {
-   writeVLValue(aTime - lastPlayTime);
-   writeRaw((uchar)command, (uchar)p1, (uchar)p2);
-   lastPlayTime = aTime;
-}
-
-void MidiFileWrite::writeAbsolute(int aTime, int command, int p1) {
-   writeVLValue(aTime - lastPlayTime);
-   writeRaw((uchar)command, (uchar)p1);
-   lastPlayTime = aTime;
-}
-
-void MidiFileWrite::writeAbsolute(int aTime, int command) {
-   writeVLValue(aTime - lastPlayTime);
-   writeRaw((uchar)command);
-   lastPlayTime = aTime;
-}
-
-
-
-//////////////////////////////
-//
-// MidiFileWrite::writeRaw -- write an event byte to the midifile
-//
-
-void MidiFileWrite::writeRaw(uchar aByte) {
-   assert(midifile != NULL);
-   *midifile << aByte;
-   trackSize++;
-}
-
-
-void MidiFileWrite::writeRaw(uchar aByte, uchar bByte) {
-   writeRaw(aByte);
-   writeRaw(bByte);
-}
-
-
-void MidiFileWrite::writeRaw(uchar aByte, uchar bByte, uchar cByte) {
-   writeRaw(aByte);
-   writeRaw(bByte);
-   writeRaw(cByte);
-}
-
-
-void MidiFileWrite::writeRaw(uchar aByte, uchar bByte, uchar cByte, 
-      uchar dByte) {
-   writeRaw(aByte);
-   writeRaw(bByte);
-   writeRaw(cByte);
-   writeRaw(dByte);
-}
-
-
-void MidiFileWrite::writeRaw(uchar aByte, uchar bByte, uchar cByte, 
-      uchar dByte, uchar eByte) {
-   writeRaw(aByte);
-   writeRaw(bByte);
-   writeRaw(cByte);
-   writeRaw(dByte);
-   writeRaw(eByte);
-}
-
-
-void MidiFileWrite::writeRaw(uchar* anArray, int arraySize) {
-   for (int i=0; i<arraySize; i++) {
-      writeRaw(anArray[i]);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiFileWrite::writeRelative -- cosiders the time data
-//	to be a delta time from the last input message.
-//
-
-void MidiFileWrite::writeRelative(int aTime, int command, int p1, int p2) {
-   writeVLValue(aTime);
-   writeRaw((uchar)command, (uchar)p1, (uchar)p2);
-   lastPlayTime += aTime;
-}
-
-void MidiFileWrite::writeRelative(int aTime, int command, int p1) {
-   writeVLValue(aTime);
-   writeRaw((uchar)command, (uchar)p1);
-   lastPlayTime += aTime;
-}
-
-void MidiFileWrite::writeRelative(int aTime, int command) {
-   writeVLValue(aTime);
-   writeRaw((uchar)command);
-   lastPlayTime += aTime;
-}
-
-
-//////////////////////////////
-//
-// MidiFileWrite::writeVLValue -- write a number to the midifile
-//    as a variable length value which segments a file into 7-bit
-//    values.  Maximum size of aValue is 0x7fffffff
-//
-
-void MidiFileWrite::writeVLValue(long aValue) {
-   uchar bytes[5];
-    bytes[0] = (uchar)((aValue >> 28) & 0x7f);    // most significant 5 bits
-    bytes[1] = (uchar)((aValue >> 21) & 0x7f);    // next largest 7 bits
-    bytes[2] = (uchar)((aValue >> 14) & 0x7f);
-    bytes[3] = (uchar)((aValue >> 7)  & 0x7f);
-    bytes[4] = (uchar)((aValue)       & 0x7f);    // least significant 7 bits
-
-   int start = 0;
-   while (start<5 && bytes[start] == 0)  start++;
-
-   for (int i=start; i<4; i++) {
-      writeRaw((uchar)(bytes[i] | 0x80));
-   }
-   writeRaw(bytes[4]);
-}
-
-// md5sum:	251468fa23862745f0cf36f359bccc17  - MidiFileWrite.cpp =css= 20030102
diff --git a/extensions/gripd/src/midiio/src/MidiIO.cpp b/extensions/gripd/src/midiio/src/MidiIO.cpp
deleted file mode 100644
index 26363f2b6..000000000
--- a/extensions/gripd/src/midiio/src/MidiIO.cpp
+++ /dev/null
@@ -1,283 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: 21 December 1997
-// Last Modified: Sun Jan 25 15:45:18 GMT-0800 1998
-// Filename:      ...sig/code/control/MidiIO/MidiIO.cpp
-// Web Address:   http://www-ccrma.stanford.edu/~craig/improv/src/MidiIO.cpp
-// Syntax:        C++
-// 
-// Description:   A unified class for MidiInput and MidiOutput that handles 
-//                MIDI input and output connections.  The Synthesizer
-//                and RadioBaton classes are derived from this class.
-//
-
-#include "MidiIO.h"
-
-
-//////////////////////////////
-//
-// MidiIO::MidiIO
-//
-
-MidiIO::MidiIO(void) : MidiOutput(), MidiInput() {
-   // does nothing
-}
-
-
-MidiIO::MidiIO(int outPort, int inPort) :
-      MidiOutput(outPort), MidiInput(inPort) {
-   // does nothing
-}
-
-
-
-//////////////////////////////
-//
-// MidiIO::~MidiIO
-//
-
-MidiIO::~MidiIO() {
-   // does nothing
-}
-
-
-
-//////////////////////////////
-//
-// MidiIO::close
-//
-
-void MidiIO::close(void) {
-   MidiInput::close();
-   MidiOutput::close();
-}
-
-
-
-//////////////////////////////
-//
-// MidiIO::closeInput
-//
-
-void MidiIO::closeInput(void) {
-   MidiInput::close();
-}
-
-
-
-//////////////////////////////
-//
-// MidiIO::closeOutput
-//
-
-void MidiIO::closeOutput(void) {
-   MidiOutput::close();
-}
-
-
-
-//////////////////////////////
-//
-// MidiIO::getChannelInOffset -- return the MIDI channel offset of
-//     the MIDI input.
-//
-
-int MidiIO::getChannelInOffset(void) const {
-   return MidiInPort::getChannelOffset();
-}
-
-
-
-//////////////////////////////
-//
-// MidiIO::getChannelOutOffset -- return the MIDI channel offset of
-//     the MIDI output.
-//
-
-int MidiIO::getChannelOutOffset (void) const {
-   return MidiOutPort::getChannelOffset();
-}
-
-
-
-//////////////////////////////
-//
-// MidiIO::getInputPort
-//
-
-int MidiIO::getInputPort(void) {
-   return MidiInput::getPort();
-}
-
-
-
-//////////////////////////////
-//
-// MidiIO::getInputTrace
-//
-
-int MidiIO::getInputTrace(void) {
-   return MidiInput::getTrace();
-}
-
-
-
-//////////////////////////////
-//
-// MidiIO::getNumInputPorts
-//
-
-int MidiIO::getNumInputPorts(void) {
-   return MidiInput::getNumPorts();
-}
-
-
-
-//////////////////////////////
-//
-// MidiIO::getNumOutputPorts
-//
-
-int MidiIO::getNumOutputPorts(void) {
-   return MidiOutput::getNumPorts();
-}
-
-
-
-//////////////////////////////
-//
-// MidiIO::getOutputPort
-//
- 
-int MidiIO::getOutputPort(void) {
-   return MidiOutput::getPort();
-}
-
-
-
-//////////////////////////////
-//
-// MidiIO::getOutputTrace
-//
-
-int MidiIO::getOutputTrace(void) {
-   return MidiOutput::getTrace();
-}
-
-
-
-//////////////////////////////
-//
-// MidiIO::open
-//
-
-int MidiIO::open(void) {
-   if (MidiInput::open()) {
-      return MidiOutput::open();
-   } else {
-      return 0;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiIO::openInput
-//
-
-int MidiIO::openInput(void) {
-   return MidiInput::open();
-}
-
-
-
-//////////////////////////////
-//
-// MidiIO::openOutput
-//
-
-int MidiIO::openOutput(void) {
-   return MidiOutput::open();
-}
-
-
-
-//////////////////////////////
-//
-// MidiIO::setChannelOffset -- sets the MIDI channel offset
-//
-
-void MidiIO::setChannelOffset(int anOffset) {
-   MidiInPort::setChannelOffset(anOffset);
-   MidiOutPort::setChannelOffset(anOffset);
-}
-
-
-
-//////////////////////////////
-//
-// MidiIO::setInputPort
-//   
- 
-void MidiIO::setInputPort(int aPort) {
-   MidiInput::setPort(aPort);
-}
-
-
-
-//////////////////////////////
-//
-// MidiIO::setInputTrace
-//
-
-void MidiIO::setInputTrace(int aState) {
-   MidiInput::setTrace(aState);
-}
-
-
-
-//////////////////////////////
-//
-// MidiIO::setOutputPort
-//
-
-void MidiIO::setOutputPort(int aPort) {
-   MidiOutput::setPort(aPort);
-}
-
-
-
-//////////////////////////////
-//
-// MidiIO::setOutputTrace
-//
-
-void MidiIO::setOutputTrace(int aState) {
-   MidiOutput::setTrace(aState);
-}
-
-
-
-//////////////////////////////
-//
-// MidiIO::toggleInputTrace
-//
-
-void MidiIO::toggleInputTrace(void) {
-   MidiInput::toggleTrace();
-}
-
-
-//////////////////////////////
-//
-// MidiIO::toggleOutputTrace
-//
-
-void MidiIO::toggleOutputTrace(void) {
-   MidiOutput::toggleTrace();
-}
-
-
-
-// md5sum:	860227c67236eb6f8897ae67f1338cb0  - MidiIO.cpp =css= 20030102
diff --git a/extensions/gripd/src/midiio/src/MidiInPort_alsa.cpp b/extensions/gripd/src/midiio/src/MidiInPort_alsa.cpp
deleted file mode 100644
index 55d22b058..000000000
--- a/extensions/gripd/src/midiio/src/MidiInPort_alsa.cpp
+++ /dev/null
@@ -1,1038 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Sun May 14 22:03:16 PDT 2000
-// Last Modified: Sat Oct 13 16:11:10 PDT 2001 (updated for ALSA 0.9)
-// Last Modified: Fri Oct 26 14:41:36 PDT 2001 (running status for 0xa0 and 0xd0 
-//                                              fixed by Daniel Gardner)
-// Last Modified: Mon Nov 19 17:52:15 PST 2001 (thread on exit improved)
-// Filename:      ...sig/code/control/MidiInPort/linux/MidiInPort_alsa.cpp
-// Web Address:   http://sig.sapp.org/src/sig/MidiInPort_alsa.cpp
-// Syntax:        C++ 
-//
-// Description:   An interface for MIDI input capabilities of
-//                linux ALSA sound driver's specific MIDI input methods.
-//                This class is inherited privately by the MidiInPort class.
-//
-
-#if defined(LINUX) && defined(ALSA)
-
-#include "MidiInPort_alsa.h"
-#include <iostream>
-#include <stdlib.h>
-#include <pthread.h>
-#include <alsa/asoundlib.h>
-#include <unistd.h>
-
-#define DEFAULT_INPUT_BUFFER_SIZE (1024)
-
-// initialized static variables
-
-int       MidiInPort_alsa::numDevices                     = 0;
-int       MidiInPort_alsa::objectCount                    = 0;
-int*      MidiInPort_alsa::portObjectCount                = NULL;
-CircularBuffer<MidiMessage>** MidiInPort_alsa::midiBuffer = NULL;
-int       MidiInPort_alsa::channelOffset                  = 0;
-SigTimer  MidiInPort_alsa::midiTimer;
-int*      MidiInPort_alsa::pauseQ                         = NULL;
-int*      MidiInPort_alsa::trace                          = NULL;
-std::ostream*  MidiInPort_alsa::tracedisplay                   = &std::cout;
-Array<pthread_t> MidiInPort_alsa::midiInThread;    
-int*      MidiInPort_alsa::sysexWriteBuffer               = NULL;
-Array<uchar>** MidiInPort_alsa::sysexBuffers              = NULL;
-
-Array<int> MidiInPort_alsa::threadinitport;
-
-
-
-//////////////////////////////
-// 
-// MidiInPort_alsa::MidiInPort_alsa
-//	default values: autoOpen = 1
-//
-
-MidiInPort_alsa::MidiInPort_alsa(void) {
-   if (objectCount == 0) {
-      initialize();
-   }
-   objectCount++;
-
-   port = -1;
-   setPort(0);
-}
-
-
-MidiInPort_alsa::MidiInPort_alsa(int aPort, int autoOpen) {
-   if (objectCount == 0) {
-      initialize();
-   }
-   objectCount++;
-
-   port = -1;
-   setPort(aPort);
-   if (autoOpen) {
-      open();
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa::~MidiInPort_alsa
-//
-
-MidiInPort_alsa::~MidiInPort_alsa() {
-   objectCount--;
-   if (objectCount == 0) {
-      deinitialize();
-   } else if (objectCount < 0) {
-      std::cerr << "Error: bad MidiInPort_alsa object count!: " 
-           << objectCount << std::endl;
-      exit(1);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa::clearSysex -- clears the data from a sysex
-//      message and sets the allocation size to the default size (of 32
-//      bytes).
-//
-
-void MidiInPort_alsa::clearSysex(int buffer) {
-   buffer = 0x7f | buffer;    // limit buffer range from 0 to 127
- 
-   if (getPort() == -1) {
-      return;
-   }
-   
-   sysexBuffers[getPort()][buffer].setSize(0);
-   if (sysexBuffers[getPort()][buffer].getAllocSize() != 32) {
-      // shrink the storage buffer's size if necessary
-      sysexBuffers[getPort()][buffer].setAllocSize(32);
-   }
-}
-
-
-void MidiInPort_alsa::clearSysex(void) {
-   // clear all sysex buffers
-   for (int i=0; i<128; i++) {
-      clearSysex(i);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa::close
-//
-
-void MidiInPort_alsa::close(void) {
-   if (getPort() == -1) return;
-
-   pauseQ[getPort()] = 1;
-   Sequencer_alsa::closeInput(getPort());
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa::closeAll --
-//
-
-void MidiInPort_alsa::closeAll(void) {
-   for (int i=0; i<getNumPorts(); i++) {
-      pauseQ[i] = 1;
-      Sequencer_alsa::closeInput(i);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa::extract -- returns the next MIDI message
-//	received since that last extracted message.
-//
-
-MidiMessage MidiInPort_alsa::extract(void) {
-   if (getPort() == -1) {
-      MidiMessage temp;
-      return temp;
-   }
-
-   return midiBuffer[getPort()]->extract();
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa::getBufferSize -- returns the maximum possible number
-//	of MIDI messages that can be stored in the buffer
-//
-
-int MidiInPort_alsa::getBufferSize(void) {
-   if (getPort() == -1)   return 0;
-
-   return midiBuffer[getPort()]->getSize();
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa::getChannelOffset -- returns zero if MIDI channel 
-//     offset is 0, or 1 if offset is 1.
-//
-
-int MidiInPort_alsa::getChannelOffset(void) const {
-   return channelOffset;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa::getCount -- returns the number of unexamined
-//	MIDI messages waiting in the input buffer.
-//
-
-int MidiInPort_alsa::getCount(void) {
-   if (getPort() == -1)   return 0;
-   return midiBuffer[getPort()]->getCount();
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa::getName -- returns the name of the port.
-//	returns "" if no name. Name is valid until all instances
-//      of MIDI classes are.
-//
-
-const char* MidiInPort_alsa::getName(void) {
-   if (getPort() == -1) {
-      return "Null ALSA MIDI Input";
-   }
-   return getInputName(getPort());
-}
-
-
-const char* MidiInPort_alsa::getName(int i) {
-   return getInputName(i);
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa::getNumPorts -- returns the number of available
-// 	ports for MIDI input
-//
-
-int MidiInPort_alsa::getNumPorts(void) {
-   return getNumInputs();
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa::getPort -- returns the port to which this
-//	object belongs (as set with the setPort function).
-//
-
-int MidiInPort_alsa::getPort(void) {
-   return port;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa::getPortStatus -- 0 if closed, 1 if open
-//
-
-int MidiInPort_alsa::getPortStatus(void) {
-   return is_open_in(getPort());
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa::getSysex -- returns the sysex message contents
-//    of a given buffer.  You should check to see that the size is
-//    non-zero before looking at the data.  The data pointer will
-//    be NULL if there is no data in the buffer.
-//
-
-uchar* MidiInPort_alsa::getSysex(int buffer) {
-   buffer &= 0x7f;     // limit the buffer access to indices 0 to 127.
-   if (getPort() == -1) {
-      return NULL;
-   }
-
-   if (sysexBuffers[getPort()][buffer].getSize() < 2) {
-      return NULL;
-   } else {
-      return sysexBuffers[getPort()][buffer].getBase();
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa::getSysexSize -- returns the sysex message byte
-//    count of a given buffer.   Buffers are in the range from 
-//    0 to 127.
-//
-
-int MidiInPort_alsa::getSysexSize(int buffer) {
-   if (getPort() == -1) {
-      return 0;
-   } else {
-      return sysexBuffers[getPort()][buffer & 0x7f].getSize();
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa::getTrace -- returns true if trace is on or false
-//	if trace is off.  if trace is on, then prints to standard
-// 	output the Midi message received.
-//
-
-int MidiInPort_alsa::getTrace(void) {
-   if (getPort() == -1)   return -1;
-
-   return trace[getPort()];
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa::insert
-//
-
-void MidiInPort_alsa::insert(const MidiMessage& aMessage) {
-   if (getPort() == -1)   return;
-
-   midiBuffer[getPort()]->insert(aMessage);
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa::installSysex -- put a sysex message into a
-//      buffer.  The buffer number that it is put into is returned.
-//
-
-int MidiInPort_alsa::installSysex(uchar* anArray, int aSize) {
-   if (getPort() == -1) {
-      return -1;
-   } else {
-      return installSysexPrivate(getPort(), anArray, aSize);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa::installSysexPrivate -- put a sysex message into a
-//      buffer.  The buffer number that it is put into is returned.
-//
-
-int MidiInPort_alsa::installSysexPrivate(int port, uchar* anArray, int aSize) {
-   // choose a buffer to install sysex data into:
-   int bufferNumber = sysexWriteBuffer[port];
-   sysexWriteBuffer[port]++;
-   if (sysexWriteBuffer[port] >= 128) {
-      sysexWriteBuffer[port] = 0;
-   }
-
-   // copy contents of sysex message into the chosen buffer
-   sysexBuffers[port][bufferNumber].setSize(aSize);
-   uchar* dataptr = sysexBuffers[port][bufferNumber].getBase();
-   uchar* indataptr = anArray;
-   for (int i=0; i<aSize; i++) { 
-      *dataptr = *indataptr;
-      dataptr++;
-      indataptr++;
-   }
-
-   // return the buffer number that was used
-   return bufferNumber;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa::message --  look at an incoming MIDI message
-//     without extracting it from the input buffer.
-//
-
-MidiMessage& MidiInPort_alsa::message(int index) {
-   if (getPort() == -1) {
-      static MidiMessage x;
-      return x;
-   }
-
-   CircularBuffer<MidiMessage>& temp = *midiBuffer[getPort()];
-   return temp[index];
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa::open -- returns true if MIDI input port was
-//	opened.
-//
-
-int MidiInPort_alsa::open(void) {
-   if (getPort() == -1)   return 0;
-
-   int status = Sequencer_alsa::openInput(getPort());
-   if (status) {
-      pauseQ[getPort()] = 0;
-      return 1;
-   } else {
-      pauseQ[getPort()] = 1;
-      return 0;
-   }
-
-   return 0;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa::pause -- stop the Midi input port from
-//	inserting MIDI messages into the buffer, but keeps the
-//	port open.  Use unpause() to reverse the effect of pause().
-//
-
-void MidiInPort_alsa::pause(void) {
-   if (getPort() == -1)   return;
-
-   pauseQ[getPort()] = 1;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa::setBufferSize -- sets the allocation
-//	size of the MIDI input buffer.
-//
-
-void MidiInPort_alsa::setBufferSize(int aSize) {
-   if (getPort() == -1)  return;
-
-   midiBuffer[getPort()]->setSize(aSize);
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa::setChannelOffset -- sets the MIDI chan offset, 
-//     either 0 or 1.
-//
-
-void MidiInPort_alsa::setChannelOffset(int anOffset) {
-   switch (anOffset) {
-      case 0:   channelOffset = 0;   break;
-      case 1:   channelOffset = 1;   break;
-      default:
-         std::cout << "Error:  Channel offset can be only 0 or 1." << std::endl;
-         exit(1);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa::setPort --
-//
-
-void MidiInPort_alsa::setPort(int aPort) {
-//   if (aPort == -1) return;
-   if (aPort < -1 || aPort >= getNumPorts()) {
-//      std::cerr << "Error: maximum port number is: " << getNumPorts()-1
-//           << ", but you tried to access port: " << aPort << std::endl;
-//      exit(1);
-   }
-   else {
-       if (port != -1) {
-          portObjectCount[port]--;
-       }
-       port = aPort;
-       if (port != -1) {
-          portObjectCount[port]++;
-       }
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa::setTrace -- if false, then don't print MIDI messages
-// 	to the screen.
-//
-
-int MidiInPort_alsa::setTrace(int aState) {
-   if (getPort() == -1)   return -1;
-
-
-   int oldtrace = trace[getPort()];
-   if (aState == 0) {
-      trace[getPort()] = 0;
-   } else {
-      trace[getPort()] = 1;
-   }
-   return oldtrace;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa::toggleTrace -- switches the state of trace
-//	Returns the previous value of the trace variable.
-//
-
-void MidiInPort_alsa::toggleTrace(void) {
-   if (getPort() == -1)   return;
-
-   trace[getPort()] = !trace[getPort()];
-}
-   
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa::unpause -- enables the Midi input port 
-//	to inserting MIDI messages into the buffer after the 
-//	port is already open.
-//
-
-void MidiInPort_alsa::unpause(void) {
-   if (getPort() == -1)   return;
-  
-   pauseQ[getPort()] = 0;
-}
-
-
-
-///////////////////////////////////////////////////////////////////////////
-//
-// Private functions
-//
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa::deinitialize -- sets up storage if necessary
-//	This function should be called if the current object is
-//	the first object to be created.
-//
-
-void MidiInPort_alsa::deinitialize(void) {
-   closeAll();
-
-   for (int i=0; i<getNumPorts(); i++) {
-      if (sysexBuffers != NULL && sysexBuffers[i] != NULL) {
-         delete [] sysexBuffers[i];
-         sysexBuffers[i] = NULL;
-      }
-   }
-
-   if (sysexBuffers != NULL) {
-      delete [] sysexBuffers;
-      sysexBuffers = NULL;
-   }
-
-   if (midiBuffer != NULL) {
-      delete [] midiBuffer;
-      midiBuffer = NULL;
-   }
-
-   if (portObjectCount != NULL) {
-      delete [] portObjectCount;
-      portObjectCount = NULL;
-   }
-
-   if (trace != NULL) {
-      delete [] trace;
-      trace = NULL;
-   }
-
-   if (pauseQ != NULL) {
-      delete [] pauseQ;
-      pauseQ = NULL;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa::initialize -- sets up storage if necessary
-//	This function should be called if the current object is
-//	the first object to be created.
-//
-
-void MidiInPort_alsa::initialize(void) {
-   // set the number of ports
-   numDevices = Sequencer_alsa::indevcount;
-
-   if  (getNumPorts() <= 0) {
-//      std::cerr << "Warning: no MIDI input devices" << std::endl;
-   } else {
-   
-      // allocate space for pauseQ, the port pause status
-      if (pauseQ != NULL) {
-         delete [] pauseQ;
-      }
-      pauseQ = new int[numDevices];
-   
-      // allocate space for object count on each port:
-      if (portObjectCount != NULL) {
-         delete [] portObjectCount;
-      }
-      portObjectCount = new int[numDevices];
-   
-      // allocate space for object count on each port:
-      if (trace != NULL) {
-         delete [] trace;
-      }
-      trace = new int[numDevices];
-   
-      // allocate space for the Midi input buffers
-      if (midiBuffer != NULL) {
-         delete [] midiBuffer;
-      }
-      midiBuffer = new CircularBuffer<MidiMessage>*[numDevices];
-
-      // allocate space for Midi input sysex buffer write indices
-      if (sysexWriteBuffer != NULL) {
-         delete [] sysexWriteBuffer;
-      }
-      sysexWriteBuffer = new int[numDevices];
-
-      // allocate space for Midi input sysex buffers
-      if (sysexBuffers != NULL) {
-         std::cout << "Error: memory leak on sysex buffers initialization" << std::endl;
-         exit(1);
-      }
-      sysexBuffers = new Array<uchar>*[numDevices];
-   
-      int flag;
-      midiInThread.setSize(getNumPorts());
-      threadinitport.setSize(getNumPorts());
-      // initialize the static arrays
-      for (int i=0; i<getNumPorts(); i++) {
-         portObjectCount[i] = 0;
-         trace[i] = 0;
-         pauseQ[i] = 0;
-         midiBuffer[i] = new CircularBuffer<MidiMessage>;
-         midiBuffer[i]->setSize(DEFAULT_INPUT_BUFFER_SIZE);
-
-         sysexWriteBuffer[i] = 0;
-         sysexBuffers[i] = new Array<uchar>[128];
-         for (int n=0; n<128; n++) {
-            sysexBuffers[i][n].allowGrowth(0);      // shouldn't need to grow
-            sysexBuffers[i][n].setAllocSize(32);
-            sysexBuffers[i][n].setSize(0);
-            sysexBuffers[i][n].setGrowth(32);       // in case it will ever grow
-         }
-    
-         threadinitport[i] = i;
-         flag = pthread_create(&midiInThread[i], NULL, 
-            interpretMidiInputStreamPrivateALSA, &threadinitport[i]);
-         if (flag == -1) {
-            std::cout << "Unable to create MIDI input thread." << std::endl;
-            exit(1);
-         }
-      }
-   
-   }
-}
-
-
-
-///////////////////////////////////////////////////////////////////////////
-//
-// friendly functions 
-//
-
-
-//////////////////////////////
-//
-// interpretMidiInputStreamPrivateALSA -- handles the MIDI input stream
-//     for the various input devices from the ALSA MIDI driver.
-//
-//  Note about system exclusive messages:
-//     System Exclusive messages are stored in a separate buffer from
-//     Other Midi messages since they can be variable in length.  If
-//     The Midi Input returns a message with command byte 0xf0, then
-//     the p1() byte indicates the system exclusive buffer number that is
-//     holding the system exclusive data for that Midi message.  There
-//     are 128 system exclusive buffers that are numbered between
-//     0 and 127.  These buffers are filled in a cycle.
-//     To extract a System exclusive message from MidiInPort_alsa,
-//     you first will receive a Message with a command byte of 0xf0.
-//     you can then access the data for that sysex by the command:
-//     MidiInPort_alsa::getSysex(buffer_number), this will return
-//     a pointer to the beginning of the sysex data.  The first byte
-//     of the sysex data should be 0xf0, and the last byte of the data
-//     is 0xf7.  All other bytes of data should be in the range from
-//     0 to 127.  You can also get the size of the sysex buffer by the
-//     following command:   MidiInPort_alsa::getSysexSize(buffer_number).
-//     This command will tell you the number of bytes in the system 
-//     exclusive message including the starting 0xf0 and the ending 0xf7.
-//
-//     If you want to minimize memory useage of the system exclusive
-//     buffers you can run the command:  
-//     MidiInPort_alsa::clearSysex(buffer_number);  Otherwise the sysex
-//     buffer will be erased automatically the next time that the 
-//     buffer number is cycled through when receiving more system exclusives.
-//     Allocated the allocated size of the system exclusive storage will 
-//     not be adjusted when the computer replaces the system exclusive
-//     message unless more storage size is needed, clearSysex however,
-//     will resize the sysex buffer to its default size (currently 32 bytes).
-//     clearSysex() without arguments will resize all buffers so that
-//     they are allocated to the default size and will erase data from
-//     all buffers.  You can spoof a system exclusive message coming in
-//     by installing a system exclusive message and then inserting
-//     the system message command into the input buffer of the MidiInPort
-//     class,  int sysex_buffer = MidiInPort_alsa::installSysex(
-//     uchar *data, int size); will put the data into a sysex buffer and
-//     return the buffer number that it was placed into.
-//
-//     This function assumes that System Exclusive messages cannot be sent 
-//     as a running status messages.
-//
-// Note about MidiMessage time stamps:
-//     The MidiMessage::time field is a recording of the time that the 
-//     first byte of the MidiMessage arrived.  If the message is from
-//     running status mode, then the time that the first parameter byte
-//     arrived is stored.   System exclusive message arrival times are
-//     recoreded at the time of the last byte (0xf7) arriving.  This is
-//     because other system messages can be coming in while the sysex
-//     message is coming in.  Anyway, sysex messages are not really to
-//     be used for real time MIDI messaging, so the exact moment that the
-//     first byte of the sysex came in is not important to me.
-//
-//
-
-void *interpretMidiInputStreamPrivateALSA(void * arg) {
-   int portToWatch = *(int*)arg;
-   if (portToWatch < 0 || portToWatch > 1000) {
-      // the port to watch is invalid -- because the program has died 
-      // before the thread function could start.  Cause of invalid port 
-      // data should be examined more carefully.
-      return NULL;
-   }
-
-   int* argsExpected = NULL;     // MIDI parameter bytes expected to follow
-   int* argsLeft     = NULL;     // MIDI parameter bytes left to wait for
-   uchar packet[1];              // bytes for sequencer driver
-   MidiMessage* message = NULL;  // holder for current MIDI message
-   int newSigTime = 0;           // for millisecond timer
-   int lastSigTime = -1;         // for millisecond timer
-   int zeroSigTime = -1;         // for timing incoming events
-   int device = -1;              // for sorting out the bytes by input device
-   Array<uchar>* sysexIn;        // MIDI Input sysex temporary storage
-
-   // Note on the use of argsExpected and argsLeft for sysexs:
-   // If argsExpected is -1, then a sysex message is coming in.
-   // If argsLeft < 0, then the sysex message has not finished comming
-   // in.  If argsLeft == 0 and argsExpected == -1, then the sysex
-   // has finished coming in and is to be sent to the correct
-   // location.
-
-   // allocate space for MIDI messages, each device has a different message
-   // holding spot in case the messages overlap in the input stream
-   message      = new MidiMessage[MidiInPort_alsa::numDevices];
-   argsExpected = new int[MidiInPort_alsa::numDevices];
-   argsLeft     = new int[MidiInPort_alsa::numDevices];
-
-   sysexIn = new Array<uchar>[MidiInPort_alsa::numDevices];
-   for (int j=0; j<MidiInPort_alsa::numDevices; j++) {
-      sysexIn[j].allowGrowth();
-      sysexIn[j].setSize(32);
-      sysexIn[j].setSize(0);
-      sysexIn[j].setGrowth(512);
-   }
-
-   // interpret MIDI bytes as they come into the computer
-   // and repackage them as MIDI messages.
-   int packetReadCount;
-   while (1) {
-top_of_loop:
-      packetReadCount = 0;
-
-      // If the all Sequencer_alsa classes have been deleted,
-      // then Sequencer_alsa::rawmidi_in will have zero size.
-      // If the size is zero, then that means the thread will be
-      // killed soon, and we do not want any processing to happen
-      // in this thread.  If the port to watch is NULL, then that
-      // means that the MIDI input is not open, and we should not
-      // add any MIDI data to the input buffers.  These cases are
-      // handled by the following if-else statement:
-      if (Sequencer_alsa::rawmidi_in.getSize() > 0 && 
-            Sequencer_alsa::rawmidi_in[portToWatch] != NULL) {
-         packetReadCount = snd_rawmidi_read(
-               Sequencer_alsa::rawmidi_in[portToWatch], packet, 1);
-      } else {
-         usleep(100000);  // sleep for 1/10th of a second if the Input 
-                          // port is not open.         
-         continue;
-      }
-
-
-      if (packetReadCount != 1) {
-         // this if statement is used to prevent cases where the
-         // read function above will time out and return 0 bytes 
-         // read.  This if statment will also take care of -1 
-         // error return values by ignoring them.
-         continue;
-      }
-
-      if (Sequencer_alsa::initialized == 0) {
-         continue;
-      }
-
-      // determination of a full MIDI message from the input MIDI
-      // stream is based here on the observation that MIDI status
-      // bytes and subsequent data bytes are NOT returned in the same
-      // read() call.  Rather, they are spread out over multiple read()
-      // returns, with only a single value per return.  So if we
-      // find a status byte, we then determine the number of expected
-      // operands and process that number of subsequent read()s to
-      // to determine the complete midi message.
-
-      // store the MIDI input device to which the incoming MIDI
-      // byte belongs.
-      device = portToWatch;
-     
-      // ignore the active sensing 0xfe and MIDI clock 0xf8 commands:
-      if (packet[0] == 0xfe || packet[0] == 0xf8) {
-         continue;
-      }
-
-      if (packet[0] & 0x80) {   // a command byte has arrived
-         switch (packet[0] & 0xf0) {
-            case 0xf0:   
-               if (packet[0] == 0xf0) {
-                  argsExpected[device] = -1;
-                  argsLeft[device] = -1;
-                  if (sysexIn[device].getSize() != 0) {
-                     // ignore the command for now.  It is most
-                     // likely an active sensing message.
-                     goto top_of_loop;
-                  } else {
-                     uchar datum = 0xf0;
-                     sysexIn[device].append(datum);
-                  }
-               } if (packet[0] == 0xf7) {
-                  argsLeft[device] = 0;         // indicates sysex is done
-                  uchar datum = 0xf7;
-                  sysexIn[device].append(datum);
-               } else if (argsExpected[device] != -1) {
-                  // this is a system message that may or may
-                  // not be coming while a sysex is coming in
-                  argsExpected[device] = 0;
-               } else {
-                  // this is a system message that is not coming
-                  // while a system exclusive is coming in
-                  //argsExpected[device] = 0;
-               }
-               break;
-            case 0xc0:   
-               if (argsExpected[device] < 0) {
-                  std::cout << "Error: received program change during sysex" 
-                       << std::endl;
-                  exit(1);
-               } else {
-                  argsExpected[device] = 1;    
-               }
-               break;
-            case 0xd0:   
-               if (argsExpected[device] < 0) {
-                  std::cout << "Error: received aftertouch message during" 
-                          " sysex" << std::endl;
-                  exit(1);
-               } else {
-                  argsExpected[device] = 1;    
-               }
-               break;
-            default:     
-               if (argsExpected[device] < 0) {
-                  std::cout << "Error: received another message during sysex" 
-                       << std::endl;
-                  exit(1);
-               } else {
-                  argsExpected[device] = 2;    
-               }
-               break;
-         }
-         if (argsExpected[device] >= 0) {
-            argsLeft[device] = argsExpected[device];
-         }
-
-         newSigTime = MidiInPort_alsa::midiTimer.getTime();
-         message[device].time = newSigTime - zeroSigTime;
-
-         if (packet[0] != 0xf7) {
-            message[device].p0() = packet[0];
-         } 
-         message[device].p1() = 0;
-         message[device].p2() = 0;
-         message[device].p3() = 0;
-
-         if (packet[0] == 0xf7) {
-            goto sysex_done;
-         }
-      } else if (argsLeft[device]) {   // not a command byte coming in
-         if (message[device].time == 0) {
-            // store the receipt time of the first message byte
-            newSigTime = MidiInPort_alsa::midiTimer.getTime();
-            message[device].time = newSigTime - zeroSigTime;
-         }
-            
-         if (argsExpected[device] < 0) {
-            // continue processing a sysex message
-            sysexIn[device].append(packet[0]);
-         } else {
-            // handle a message other than a sysex message
-            if (argsLeft[device] == argsExpected[device]) {
-               message[device].p1() = packet[0];
-            } else {
-               message[device].p2() = packet[0];
-            }
-            argsLeft[device]--;
-         }
-
-         // if MIDI message is complete, setup for running status, and 
-         // insert note into proper buffer.
-
-         if (argsExpected[device] >= 0 && !argsLeft[device]) {
-
-            // store parameter data for running status
-            switch (message[device].p0() & 0xf0) {
-               case 0xc0:      argsLeft[device] = 1;      break;
-               case 0xd0:      argsLeft[device] = 1;      break;  // fix by dan
-               default:        argsLeft[device] = 2;      break;
-                  // 0x80 expects two arguments
-                  // 0x90 expects two arguments
-                  // 0xa0 expects two arguments
-                  // 0xb0 expects two arguments
-                  // 0xe0 expects two arguments
-            }
-
-            lastSigTime = newSigTime;
-
-            sysex_done:      // come here when a sysex is completely done
-
-            // insert the MIDI message into the appropriate buffer
-            // do not insert into buffer if the MIDI input device
-            // is paused (which can mean closed).  Or if the
-            // pauseQ array is pointing to NULL (which probably means that
-            // things are about to shut down).
-            if (MidiInPort_alsa::pauseQ != NULL &&
-                  MidiInPort_alsa::pauseQ[device] == 0) {
-               if (argsExpected[device] < 0) {
-                  // store the sysex in the MidiInPort_alsa
-                  // buffer for sysexs and return the storage
-                  // location:
-                  int sysexlocation = 
-                     MidiInPort_alsa::installSysexPrivate(device,
-                        sysexIn[device].getBase(),
-                        sysexIn[device].getSize());
-
-                  message[device].p0() = 0xf0;
-                  message[device].p1() = sysexlocation;
-
-                  sysexIn[device].setSize(0); // empty the sysex storage
-                  argsExpected[device] = 0;   // no run status for sysex
-                  argsLeft[device] = 0;       // turn off sysex input flag
-               }
-               MidiInPort_alsa::midiBuffer[device]->insert(
-                     message[device]);
-//                   if (MidiInPort_alsa::callbackFunction != NULL) {
-//                      MidiInPort_alsa::callbackFunction(device);
-//                   }
-               if (MidiInPort_alsa::trace[device]) {
-                  std::cout << '[' << std::hex << (int)message[device].p0()
-                       << ':' << std::dec << (int)message[device].p1()
-                       << ',' << (int)message[device].p2() << ']'
-                       << std::flush;
-               }
-               message[device].time = 0;
-            } else {
-               if (MidiInPort_alsa::trace[device]) {
-                  std::cout << '[' << std::hex << (int)message[device].p0()
-                       << 'P' << std::dec << (int)message[device].p1()
-                       << ',' << (int)message[device].p2() << ']'
-                       << std::flush;
-               }
-            }
-         }
-      }
-
-   } // end while (1)
-
-   // This code is not yet reached, but should be made to do so eventually
-
-   if (message != NULL) {
-      delete message;
-      message = NULL;
-   }
-
-   if (argsExpected != NULL) {
-      delete argsExpected;
-      argsExpected = NULL;
-   }
-
-   if (argsLeft != NULL) {
-      delete argsLeft;
-      argsLeft = NULL;
-   }
-
-   if (sysexIn != NULL) { 
-      delete sysexIn;
-      sysexIn = NULL;
-   }
-
-
-   return NULL;
-}
-
-
-
-#endif  // LINUX && ALSA
-
-
-
-// md5sum:	14663a91d1f5283e05ca36399d5ab767  - MidiInPort_alsa.cpp =css= 20030102
diff --git a/extensions/gripd/src/midiio/src/MidiInPort_alsa05.cpp b/extensions/gripd/src/midiio/src/MidiInPort_alsa05.cpp
deleted file mode 100644
index 1aad84951..000000000
--- a/extensions/gripd/src/midiio/src/MidiInPort_alsa05.cpp
+++ /dev/null
@@ -1,995 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Sun May 14 22:03:16 PDT 2000
-// Last Modified: Wed Oct  3 22:28:20 PDT 2001 (frozen for ALSA 0.5)
-// Last Modified: Fri Oct 26 14:41:36 PDT 2001 (running status for 0xa0 and 0xd0 
-//                                              fixed by Daniel Gardner)
-// Filename:      ...sig/code/control/MidiInPort/linux/MidiInPort_alsa05.cpp
-// Web Address:   http://sig.sapp.org/src/sig/MidiInPort_alsa05.cpp
-// Syntax:        C++ 
-//
-// Description:   An interface for MIDI input capabilities of
-//                linux ALSA sound driver's specific MIDI input methods.
-//                This class is inherited privately by the MidiInPort class.
-//
-
-#if defined(LINUX) && defined(ALSA05)
-
-#include "MidiInPort_alsa05.h"
-#include <iostream.h>
-#include <stdlib.h>
-#include <pthread.h>
-#include <sys/asoundlib.h>
-
-#define DEFAULT_INPUT_BUFFER_SIZE (1024)
-
-// initialized static variables
-
-int       MidiInPort_alsa05::numDevices                     = 0;
-int       MidiInPort_alsa05::objectCount                    = 0;
-int*      MidiInPort_alsa05::portObjectCount                = NULL;
-CircularBuffer<MidiMessage>** MidiInPort_alsa05::midiBuffer = NULL;
-int       MidiInPort_alsa05::channelOffset                  = 0;
-SigTimer  MidiInPort_alsa05::midiTimer;
-int*      MidiInPort_alsa05::pauseQ                         = NULL;
-int*      MidiInPort_alsa05::trace                          = NULL;
-ostream*  MidiInPort_alsa05::tracedisplay                   = &cout;
-Array<pthread_t> MidiInPort_alsa05::midiInThread;    
-int*      MidiInPort_alsa05::sysexWriteBuffer               = NULL;
-Array<uchar>** MidiInPort_alsa05::sysexBuffers              = NULL;
-
-Array<int> MidiInPort_alsa05::threadinitport;
-
-
-
-//////////////////////////////
-// 
-// MidiInPort_alsa05::MidiInPort_alsa05
-//	default values: autoOpen = 1
-//
-
-MidiInPort_alsa05::MidiInPort_alsa05(void) {
-   if (objectCount == 0) {
-      initialize();
-   }
-   objectCount++;
-
-   port = -1;
-   setPort(0);
-}
-
-
-MidiInPort_alsa05::MidiInPort_alsa05(int aPort, int autoOpen) {
-   if (objectCount == 0) {
-      initialize();
-   }
-   objectCount++;
-
-   port = -1;
-   setPort(aPort);
-   if (autoOpen) {
-      open();
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa05::~MidiInPort_alsa05
-//
-
-MidiInPort_alsa05::~MidiInPort_alsa05() {
-   objectCount--;
-   if (objectCount == 0) {
-      deinitialize();
-   } else if (objectCount < 0) {
-      cerr << "Error: bad MidiInPort_alsa05 object count!: " 
-           << objectCount << endl;
-      exit(1);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa05::clearSysex -- clears the data from a sysex
-//      message and sets the allocation size to the default size (of 32
-//      bytes).
-//
-
-void MidiInPort_alsa05::clearSysex(int buffer) {
-   buffer = 0x7f | buffer;    // limit buffer range from 0 to 127
- 
-   if (getPort() == -1) {
-      return;
-   }
-   
-   sysexBuffers[getPort()][buffer].setSize(0);
-   if (sysexBuffers[getPort()][buffer].getAllocSize() != 32) {
-      // shrink the storage buffer's size if necessary
-      sysexBuffers[getPort()][buffer].setAllocSize(32);
-   }
-}
-
-
-void MidiInPort_alsa05::clearSysex(void) {
-   // clear all sysex buffers
-   for (int i=0; i<128; i++) {
-      clearSysex(i);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa05::close
-//
-
-void MidiInPort_alsa05::close(void) {
-   if (getPort() == -1) return;
-
-   pauseQ[getPort()] = 1;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa05::closeAll --
-//
-
-void MidiInPort_alsa05::closeAll(void) {
-   Sequencer_alsa05::close();
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa05::extract -- returns the next MIDI message
-//	received since that last extracted message.
-//
-
-MidiMessage MidiInPort_alsa05::extract(void) {
-   if (getPort() == -1) {
-      MidiMessage temp;
-      return temp;
-   }
-
-   return midiBuffer[getPort()]->extract();
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa05::getBufferSize -- returns the maximum possible number
-//	of MIDI messages that can be stored in the buffer
-//
-
-int MidiInPort_alsa05::getBufferSize(void) {
-   if (getPort() == -1)   return 0;
-
-   return midiBuffer[getPort()]->getSize();
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa05::getChannelOffset -- returns zero if MIDI channel 
-//     offset is 0, or 1 if offset is 1.
-//
-
-int MidiInPort_alsa05::getChannelOffset(void) const {
-   return channelOffset;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa05::getCount -- returns the number of unexamined
-//	MIDI messages waiting in the input buffer.
-//
-
-int MidiInPort_alsa05::getCount(void) {
-   if (getPort() == -1)   return 0;
-   return midiBuffer[getPort()]->getCount();
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa05::getName -- returns the name of the port.
-//	returns "" if no name. Name is valid until all instances
-//      of MIDI classes are.
-//
-
-const char* MidiInPort_alsa05::getName(void) {
-   if (getPort() == -1) {
-      return "Null ALSA MIDI Input";
-   }
-   return getInputName(getPort());
-}
-
-
-const char* MidiInPort_alsa05::getName(int i) {
-   return getInputName(i);
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa05::getNumPorts -- returns the number of available
-// 	ports for MIDI input
-//
-
-int MidiInPort_alsa05::getNumPorts(void) {
-   return getNumInputs();
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa05::getPort -- returns the port to which this
-//	object belongs (as set with the setPort function).
-//
-
-int MidiInPort_alsa05::getPort(void) {
-   return port;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa05::getPortStatus -- 0 if closed, 1 if open
-//
-
-int MidiInPort_alsa05::getPortStatus(void) {
-   return is_open_in(0);
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa05::getSysex -- returns the sysex message contents
-//    of a given buffer.  You should check to see that the size is
-//    non-zero before looking at the data.  The data pointer will
-//    be NULL if there is no data in the buffer.
-//
-
-uchar* MidiInPort_alsa05::getSysex(int buffer) {
-   buffer &= 0x7f;     // limit the buffer access to indices 0 to 127.
-   if (getPort() == -1) {
-      return NULL;
-   }
-
-   if (sysexBuffers[getPort()][buffer].getSize() < 2) {
-      return NULL;
-   } else {
-      return sysexBuffers[getPort()][buffer].getBase();
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa05::getSysexSize -- returns the sysex message byte
-//    count of a given buffer.   Buffers are in the range from 
-//    0 to 127.
-//
-
-int MidiInPort_alsa05::getSysexSize(int buffer) {
-   if (getPort() == -1) {
-      return 0;
-   } else {
-      return sysexBuffers[getPort()][buffer & 0x7f].getSize();
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa05::getTrace -- returns true if trace is on or false
-//	if trace is off.  if trace is on, then prints to standard
-// 	output the Midi message received.
-//
-
-int MidiInPort_alsa05::getTrace(void) {
-   if (getPort() == -1)   return -1;
-
-   return trace[getPort()];
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa05::insert
-//
-
-void MidiInPort_alsa05::insert(const MidiMessage& aMessage) {
-   if (getPort() == -1)   return;
-
-   midiBuffer[getPort()]->insert(aMessage);
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa05::installSysex -- put a sysex message into a
-//      buffer.  The buffer number that it is put into is returned.
-//
-
-int MidiInPort_alsa05::installSysex(uchar* anArray, int aSize) {
-   if (getPort() == -1) {
-      return -1;
-   } else {
-      return installSysexPrivate(getPort(), anArray, aSize);
-   }
-}
-
-//////////////////////////////
-//
-// MidiInPort_alsa05::installSysexPrivate -- put a sysex message into a
-//      buffer.  The buffer number that it is put into is returned.
-//
-
-int MidiInPort_alsa05::installSysexPrivate(int port, uchar* anArray, int aSize) {
-   // choose a buffer to install sysex data into:
-   int bufferNumber = sysexWriteBuffer[port];
-   sysexWriteBuffer[port]++;
-   if (sysexWriteBuffer[port] >= 128) {
-      sysexWriteBuffer[port] = 0;
-   }
-
-   // copy contents of sysex message into the chosen buffer
-   sysexBuffers[port][bufferNumber].setSize(aSize);
-   uchar* dataptr = sysexBuffers[port][bufferNumber].getBase();
-   uchar* indataptr = anArray;
-   for (int i=0; i<aSize; i++) { 
-      *dataptr = *indataptr;
-      dataptr++;
-      indataptr++;
-   }
-
-   // return the buffer number that was used
-   return bufferNumber;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa05::message
-//
-
-MidiMessage& MidiInPort_alsa05::message(int index) {
-   if (getPort() == -1) {
-      static MidiMessage x;
-      return x;
-   }
-
-   CircularBuffer<MidiMessage>& temp = *midiBuffer[getPort()];
-   return temp[index];
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa05::open -- returns true if MIDI input port was
-//	opened.
-//
-
-int MidiInPort_alsa05::open(void) {
-   if (getPort() == -1)   return 0;
-
-   return Sequencer_alsa05::open();
-   pauseQ[getPort()] = 0;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa05::pause -- stop the Midi input port from
-//	inserting MIDI messages into the buffer, but keeps the
-//	port open.  Use unpause() to reverse the effect of pause().
-//
-
-void MidiInPort_alsa05::pause(void) {
-   if (getPort() == -1)   return;
-
-   pauseQ[getPort()] = 1;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa05::setBufferSize -- sets the allocation
-//	size of the MIDI input buffer.
-//
-
-void MidiInPort_alsa05::setBufferSize(int aSize) {
-   if (getPort() == -1)  return;
-
-   midiBuffer[getPort()]->setSize(aSize);
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa05::setChannelOffset -- sets the MIDI chan offset, 
-//     either 0 or 1.
-//
-
-void MidiInPort_alsa05::setChannelOffset(int anOffset) {
-   switch (anOffset) {
-      case 0:   channelOffset = 0;   break;
-      case 1:   channelOffset = 1;   break;
-      default:
-         cout << "Error:  Channel offset can be only 0 or 1." << endl;
-         exit(1);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa05::setPort --
-//
-
-void MidiInPort_alsa05::setPort(int aPort) {
-//   if (aPort == -1) return;
-   if (aPort < -1 || aPort >= getNumPorts()) {
-      cerr << "Error: maximum port number is: " << getNumPorts()-1
-           << ", but you tried to access port: " << aPort << endl;
-      exit(1);
-   }
-
-   if (port != -1) {
-      portObjectCount[port]--;
-   }
-   port = aPort;
-   if (port != -1) {
-      portObjectCount[port]++;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa05::setTrace -- if false, then don't print MIDI messages
-// 	to the screen.
-//
-
-int MidiInPort_alsa05::setTrace(int aState) {
-   if (getPort() == -1)   return -1;
-
-
-   int oldtrace = trace[getPort()];
-   if (aState == 0) {
-      trace[getPort()] = 0;
-   } else {
-      trace[getPort()] = 1;
-   }
-   return oldtrace;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa05::toggleTrace -- switches the state of trace
-//	Returns the previous value of the trace variable.
-//
-
-void MidiInPort_alsa05::toggleTrace(void) {
-   if (getPort() == -1)   return;
-
-   trace[getPort()] = !trace[getPort()];
-}
-   
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa05::unpause -- enables the Midi input port 
-//	to inserting MIDI messages into the buffer after the 
-//	port is already open.
-//
-
-void MidiInPort_alsa05::unpause(void) {
-   if (getPort() == -1)   return;
-  
-   pauseQ[getPort()] = 0;
-}
-
-
-
-///////////////////////////////////////////////////////////////////////////
-//
-// Private functions
-//
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa05::deinitialize -- sets up storage if necessary
-//	This function should be called if the current object is
-//	the first object to be created.
-//
-
-void MidiInPort_alsa05::deinitialize(void) {
-   closeAll();
-
-   for (int i=0; i<getNumPorts(); i++) {
-      if (sysexBuffers != NULL && sysexBuffers[i] != NULL) {
-         delete [] sysexBuffers[i];
-         sysexBuffers[i] = NULL;
-      }
-   }
-
-   if (sysexBuffers != NULL) {
-      delete [] sysexBuffers;
-      sysexBuffers = NULL;
-   }
-
-   if (midiBuffer != NULL) {
-      delete [] midiBuffer;
-      midiBuffer = NULL;
-   }
-
-   if (portObjectCount != NULL) {
-      delete [] portObjectCount;
-      portObjectCount = NULL;
-   }
-
-   if (trace != NULL) {
-      delete [] trace;
-      trace = NULL;
-   }
-
-   if (pauseQ != NULL) {
-      delete [] pauseQ;
-      pauseQ = NULL;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_alsa05::initialize -- sets up storage if necessary
-//	This function should be called if the current object is
-//	the first object to be created.
-//
-
-void MidiInPort_alsa05::initialize(void) {
-   // set the number of ports
-   numDevices = Sequencer_alsa05::indevcount;
-
-   if  (getNumPorts() <= 0) {
-      cerr << "Warning: no MIDI input devices" << endl;
-   } else {
-   
-      // allocate space for pauseQ, the port pause status
-      if (pauseQ != NULL) {
-         delete [] pauseQ;
-      }
-      pauseQ = new int[numDevices];
-   
-      // allocate space for object count on each port:
-      if (portObjectCount != NULL) {
-         delete [] portObjectCount;
-      }
-      portObjectCount = new int[numDevices];
-   
-      // allocate space for object count on each port:
-      if (trace != NULL) {
-         delete [] trace;
-      }
-      trace = new int[numDevices];
-   
-      // allocate space for the Midi input buffers
-      if (midiBuffer != NULL) {
-         delete [] midiBuffer;
-      }
-      midiBuffer = new CircularBuffer<MidiMessage>*[numDevices];
-
-      // allocate space for Midi input sysex buffer write indices
-      if (sysexWriteBuffer != NULL) {
-         delete [] sysexWriteBuffer;
-      }
-      sysexWriteBuffer = new int[numDevices];
-
-      // allocate space for Midi input sysex buffers
-      if (sysexBuffers != NULL) {
-         cout << "Error: memory leak on sysex buffers initialization" << endl;
-         exit(1);
-      }
-      sysexBuffers = new Array<uchar>*[numDevices];
-   
-      int flag;
-      midiInThread.setSize(getNumPorts());
-      threadinitport.setSize(getNumPorts());
-      // initialize the static arrays
-      for (int i=0; i<getNumPorts(); i++) {
-         portObjectCount[i] = 0;
-         trace[i] = 0;
-         pauseQ[i] = 0;
-         midiBuffer[i] = new CircularBuffer<MidiMessage>;
-         midiBuffer[i]->setSize(DEFAULT_INPUT_BUFFER_SIZE);
-
-         sysexWriteBuffer[i] = 0;
-         sysexBuffers[i] = new Array<uchar>[128];
-         for (int n=0; n<128; n++) {
-            sysexBuffers[i][n].allowGrowth(0);      // shouldn't need to grow
-            sysexBuffers[i][n].setAllocSize(32);
-            sysexBuffers[i][n].setSize(0);
-            sysexBuffers[i][n].setGrowth(32);       // in case it will ever grow
-         }
-    
-         threadinitport[i] = i;
-         flag = pthread_create(&midiInThread[i], NULL, 
-            interpretMidiInputStreamPrivateALSA05, &threadinitport[i]);
-         if (flag == -1) {
-            cout << "Unable to create MIDI input thread." << endl;
-            exit(1);
-         }
-      }
-   
-   }
-}
-
-
-
-///////////////////////////////////////////////////////////////////////////
-//
-// friendly functions 
-//
-
-
-//////////////////////////////
-//
-// interpretMidiInputStreamPrivateALSA05 -- handles the MIDI input stream
-//     for the various input devices from the ALSA MIDI driver.
-//
-//  Note about system exclusive messages:
-//     System Exclusive messages are stored in a separate buffer from
-//     Other Midi messages since they can be variable in length.  If
-//     The Midi Input returns a message with command byte 0xf0, then
-//     the p1() byte indicates the system exclusive buffer number that is
-//     holding the system exclusive data for that Midi message.  There
-//     are 128 system exclusive buffers that are numbered between
-//     0 and 127.  These buffers are filled in a cycle.
-//     To extract a System exclusive message from MidiInPort_alsa05,
-//     you first will receive a Message with a command byte of 0xf0.
-//     you can then access the data for that sysex by the command:
-//     MidiInPort_alsa05::getSysex(buffer_number), this will return
-//     a pointer to the beginning of the sysex data.  The first byte
-//     of the sysex data should be 0xf0, and the last byte of the data
-//     is 0xf7.  All other bytes of data should be in the range from
-//     0 to 127.  You can also get the size of the sysex buffer by the
-//     following command:   MidiInPort_alsa05::getSysexSize(buffer_number).
-//     This command will tell you the number of bytes in the system 
-//     exclusive message including the starting 0xf0 and the ending 0xf7.
-//
-//     If you want to minimize memory useage of the system exclusive
-//     buffers you can run the command:  
-//     MidiInPort_alsa05::clearSysex(buffer_number);  Otherwise the sysex
-//     buffer will be erased automatically the next time that the that
-//     buffer number is cycled through when receiving more system exclusives.
-//     Allocated the allocated size of the system exclusive storage will 
-//     not be adjusted when the computer replaces the system exclusive
-//     message unless more storage size is needed, clearSysex however,
-//     will resize the sysex buffer to its default size (currently 32 bytes).
-//     clearSysex() without arguments will resize all buffers so that
-//     they are allocated to the default size and will erase data from
-//     all buffers.  You can spoof a system exclusive message coming in
-//     by installing a system exclusive message and then inserting
-//     the system message command into the input buffer of the MidiInPort
-//     class,  int sysex_buffer = MidiInPort_alsa05::installSysex(
-//     uchar *data, int size); will put the data into a sysex buffer and
-//     return the buffer number that it was placed into.
-//
-//     This function assumes that System Exclusive messages cannot be sent 
-//     as a running status messages.
-//
-// Note about MidiMessage time stamps:
-//     The MidiMessage::time field is a recording of the time that the 
-//     first byte of the MidiMessage arrived.  If the message is from
-//     running status mode, then the time that the first parameter byte
-//     arrived is stored.   System exclusive message arrival times are
-//     recoreded at the time of the last byte (0xf7) arriving.  This is
-//     because other system messages can be coming in while the sysex
-//     message is coming in.  Anyway, sysex messages are not really to
-//     be used for real time MIDI messaging, so the exact moment that the
-//     first byte of the sysex came in is not important to me.
-//
-//
-
-void *interpretMidiInputStreamPrivateALSA05(void * arg) {
-   int portToWatch = *(int*)arg;
-
-   int* argsExpected = NULL;     // MIDI parameter bytes expected to follow
-   int* argsLeft     = NULL;     // MIDI parameter bytes left to wait for
-   uchar packet[1];              // bytes for sequencer driver
-   MidiMessage* message = NULL;  // holder for current MIDI message
-   int newSigTime = 0;           // for millisecond timer
-   int lastSigTime = -1;         // for millisecond timer
-   int zeroSigTime = -1;         // for timing incoming events
-   int device = -1;              // for sorting out the bytes by input device
-   Array<uchar>* sysexIn;        // MIDI Input sysex temporary storage
-
-   // Note on the use of argsExpected and argsLeft for sysexs:
-   // If argsExpected is -1, then a sysex message is coming in.
-   // If argsLeft < 0, then the sysex message has not finished comming
-   // in.  If argsLeft == 0 and argsExpected == -1, then the sysex
-   // has finished coming in and is to be sent to the correct
-   // location.
-
-   // allocate space for MIDI messages, each device has a different message
-   // holding spot in case the messages overlap in the input stream
-   message      = new MidiMessage[MidiInPort_alsa05::numDevices];
-   argsExpected = new int[MidiInPort_alsa05::numDevices];
-   argsLeft     = new int[MidiInPort_alsa05::numDevices];
-
-   sysexIn = new Array<uchar>[MidiInPort_alsa05::numDevices];
-   for (int j=0; j<MidiInPort_alsa05::numDevices; j++) {
-      sysexIn[j].allowGrowth();
-      sysexIn[j].setSize(32);
-      sysexIn[j].setSize(0);
-      sysexIn[j].setGrowth(512);
-   }
-
-   // interpret MIDI bytes as they come into the computer
-   // and repackage them as MIDI messages.
-   int packetReadCount;
-   while (1) {
-top_of_loop:
-      packetReadCount = snd_rawmidi_read(
-            Sequencer_alsa05::rawmidi_in[portToWatch], packet, 1);
-      if (packetReadCount != 1) {
-         // this if statement is used to prevent cases where the
-         // read function above will time out and return 0 bytes 
-         // read.  This if statment will also take care of -1 
-         // error return values by ignoring them.
-         continue;
-      }
-
-      if (Sequencer_alsa05::initialized == 0) {
-         continue;
-      }
-
-      // determination of a full MIDI message from the input MIDI
-      // stream is based here on the observation that MIDI status
-      // bytes and subsequent data bytes are NOT returned in the same
-      // read() call.  Rather, they are spread out over multiple read()
-      // returns, with only a single value per return.  So if we
-      // find a status byte, we then determine the number of expected
-      // operands and process that number of subsequent read()s to
-      // to determine the complete midi message.
-
-      // store the MIDI input device to which the incoming MIDI
-      // byte belongs.
-      device = portToWatch;
-     
-      // ignore the active sensing 0xfe and MIDI clock 0xf8 commands:
-      if (packet[0] == 0xfe || packet[0] == 0xf8) {
-         continue;
-      }
-
-      if (packet[0] & 0x80) {   // a command byte has arrived
-         switch (packet[0] & 0xf0) {
-            case 0xf0:   
-               if (packet[0] == 0xf0) {
-                  argsExpected[device] = -1;
-                  argsLeft[device] = -1;
-                  if (sysexIn[device].getSize() != 0) {
-                     // ignore the command for now.  It is most
-                     // likely an active sensing message.
-                     goto top_of_loop;
-                  } else {
-                     uchar datum = 0xf0;
-                     sysexIn[device].append(datum);
-                  }
-               } if (packet[0] == 0xf7) {
-                  argsLeft[device] = 0;         // indicates sysex is done
-                  uchar datum = 0xf7;
-                  sysexIn[device].append(datum);
-               } else if (argsExpected[device] != -1) {
-                  // this is a system message that may or may
-                  // not be coming while a sysex is coming in
-                  argsExpected[device] = 0;
-               } else {
-                  // this is a system message that is not coming
-                  // while a system exclusive is coming in
-                  //argsExpected[device] = 0;
-               }
-               break;
-            case 0xc0:   
-               if (argsExpected[device] < 0) {
-                  cout << "Error: received program change during sysex" 
-                       << endl;
-                  exit(1);
-               } else {
-                  argsExpected[device] = 1;    
-               }
-               break;
-            case 0xd0:   
-               if (argsExpected[device] < 0) {
-                  cout << "Error: received aftertouch message during" 
-                          " sysex" << endl;
-                  exit(1);
-               } else {
-                  argsExpected[device] = 1;    
-               }
-               break;
-            default:     
-               if (argsExpected[device] < 0) {
-                  cout << "Error: received another message during sysex" 
-                       << endl;
-                  exit(1);
-               } else {
-                  argsExpected[device] = 2;    
-               }
-               break;
-         }
-         if (argsExpected[device] >= 0) {
-            argsLeft[device] = argsExpected[device];
-         }
-
-         newSigTime = MidiInPort_alsa05::midiTimer.getTime();
-         message[device].time = newSigTime - zeroSigTime;
-
-         if (packet[0] != 0xf7) {
-            message[device].p0() = packet[0];
-         } 
-         message[device].p1() = 0;
-         message[device].p2() = 0;
-         message[device].p3() = 0;
-
-         if (packet[0] == 0xf7) {
-            goto sysex_done;
-         }
-      } else if (argsLeft[device]) {   // not a command byte coming in
-         if (message[device].time == 0) {
-            // store the receipt time of the first message byte
-            newSigTime = MidiInPort_alsa05::midiTimer.getTime();
-            message[device].time = newSigTime - zeroSigTime;
-         }
-            
-         if (argsExpected[device] < 0) {
-            // continue processing a sysex message
-            sysexIn[device].append(packet[0]);
-         } else {
-            // handle a message other than a sysex message
-            if (argsLeft[device] == argsExpected[device]) {
-               message[device].p1() = packet[0];
-            } else {
-               message[device].p2() = packet[0];
-            }
-            argsLeft[device]--;
-         }
-
-         // if MIDI message is complete, setup for running status, and 
-         // insert note into proper buffer.
-
-         if (argsExpected[device] >= 0 && !argsLeft[device]) {
-
-            // store parameter data for running status
-            switch (message[device].p0() & 0xf0) {
-               case 0xc0:      argsLeft[device] = 1;      break;
-               case 0xd0:      argsLeft[device] = 1;      break;  // fix by dan
-               default:        argsLeft[device] = 2;      break;
-                  // 0x80 expects two arguments
-                  // 0x90 expects two arguments
-                  // 0xa0 expects two arguments
-                  // 0xb0 expects two arguments
-                  // 0xe0 expects two arguments
-            }
-
-            lastSigTime = newSigTime;
-
-            sysex_done:      // come here when a sysex is completely done
-
-            // insert the MIDI message into the appropriate buffer
-            // do not insert into buffer if the MIDI input device
-            // is paused (which can mean closed).  Or if the
-            // pauseQ array is pointing to NULL (which probably means that
-            // things are about to shut down).
-            if (MidiInPort_alsa05::pauseQ != NULL &&
-                  MidiInPort_alsa05::pauseQ[device] == 0) {
-               if (argsExpected[device] < 0) {
-                  // store the sysex in the MidiInPort_alsa05
-                  // buffer for sysexs and return the storage
-                  // location:
-                  int sysexlocation = 
-                     MidiInPort_alsa05::installSysexPrivate(device,
-                        sysexIn[device].getBase(),
-                        sysexIn[device].getSize());
-
-                  message[device].p0() = 0xf0;
-                  message[device].p1() = sysexlocation;
-
-                  sysexIn[device].setSize(0); // empty the sysex storage
-                  argsExpected[device] = 0;   // no run status for sysex
-                  argsLeft[device] = 0;       // turn off sysex input flag
-               }
-               MidiInPort_alsa05::midiBuffer[device]->insert(
-                     message[device]);
-//                   if (MidiInPort_alsa05::callbackFunction != NULL) {
-//                      MidiInPort_alsa05::callbackFunction(device);
-//                   }
-               if (MidiInPort_alsa05::trace[device]) {
-                  cout << '[' << hex << (int)message[device].p0()
-                       << ':' << dec << (int)message[device].p1()
-                       << ',' << (int)message[device].p2() << ']'
-                       << flush;
-               }
-               message[device].time = 0;
-            } else {
-               if (MidiInPort_alsa05::trace[device]) {
-                  cout << '[' << hex << (int)message[device].p0()
-                       << 'P' << dec << (int)message[device].p1()
-                       << ',' << (int)message[device].p2() << ']'
-                       << flush;
-               }
-            }
-         }
-      }
-
-   } // end while (1)
-
-   // This code is not yet reached, but should be made to do so eventually
-
-   if (message != NULL) {
-      delete message;
-      message = NULL;
-   }
-
-   if (argsExpected != NULL) {
-      delete argsExpected;
-      argsExpected = NULL;
-   }
-
-   if (argsLeft != NULL) {
-      delete argsLeft;
-      argsLeft = NULL;
-   }
-
-   if (sysexIn != NULL) { 
-      delete sysexIn;
-      sysexIn = NULL;
-   }
-
-
-   return NULL;
-}
-
-
-
-#endif  /* LINUX and ALSA05 */
-
-
-
-// md5sum:	cc5ea6a6078cb534fc6c39543aa57a83  - MidiInPort_alsa05.cpp =css= 20030102
diff --git a/extensions/gripd/src/midiio/src/MidiInPort_linux.cpp b/extensions/gripd/src/midiio/src/MidiInPort_linux.cpp
deleted file mode 100644
index 01274e2e7..000000000
--- a/extensions/gripd/src/midiio/src/MidiInPort_linux.cpp
+++ /dev/null
@@ -1,491 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Sun May 14 22:35:27 PDT 2000
-// Last Modified: Thu May 18 23:36:00 PDT 2000
-// Last Modified: Sat Nov  2 20:37:49 PST 2002 (added ifdef ALSA OSS)
-// Filename:      ...sig/maint/code/control/MidiInPort/MidiInPort_linux.cpp
-// Web Address:   http://sig.sapp.org/include/sig/MidiInPort_linux.cpp
-// Syntax:        C++ 
-//
-// Description:   An interface for MIDI input capabilities of an
-//                operating-system specific MIDI input method.
-//                Provides control of all low-level MIDI input
-//                functionality such that it will work on all
-//                computers in the same manner.
-//
-
-#ifdef LINUX
-#if defined(ALSA) && defined(OSS)
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include "MidiInPort_linux.h"
-
-
-// initialize static variables oss_input->close(); break;
-int MidiInPort_linux::objectCount = 0;
-int MidiInPort_linux::current = MIDI_IN_OSS_SELECT; 
-int MidiInPort_linux::alsaQ   = 0;         
-int MidiInPort_linux::ossQ    = 0;          
-MidiInPort_oss          *MidiInPort_linux::oss_input     = NULL;
-MidiInPort_alsa         *MidiInPort_linux::alsa_input    = NULL;
-MidiInPort_unsupported  *MidiInPort_linux::unknown_input = NULL;
-
-
-MidiInPort_linux::MidiInPort_linux(void) {
-   if (objectCount == 0) {
-      determineDrivers();
-   } else if (objectCount < 0) {
-      cout << "Error: unusual MidiInPort_linux object count" << endl;
-      exit(1);
-   } 
-
-   objectCount++;
-} 
-
-
-MidiInPort_linux::MidiInPort_linux(int aPort, int autoOpen = 1) {
-   if (objectCount == 0) {
-      determineDrivers();
-      setAndOpenPort(aPort);
-   } else if (objectCount < 0) {
-      cout << "Error: unusual MidiInPort_linux object count" << endl;
-      exit(1);
-   } 
-
-   objectCount++;
-} 
-
-
-MidiInPort_linux::~MidiInPort_linux() {
-   objectCount--;
-   if (objectCount == 0) {
-      if (oss_input != NULL) {
-         delete oss_input;
-         oss_input = NULL;
-      }
-      if (alsa_input != NULL) {
-         delete alsa_input;
-         alsa_input = NULL;
-      }
-      if (unknown_input != NULL) {
-         delete unknown_input;
-         unknown_input = NULL;
-      }
-   }
-
-   if (objectCount < 0) {
-      cout << "Error: unusual MidiOutPort_linux count when destructing" << endl;
-      exit(1);
-   }
-} 
-
-
-void MidiInPort_linux::clearSysex(void) {
-   switch (getSelect()) {
-      case MIDI_IN_OSS_SELECT:  oss_input->clearSysex(); break;
-      case MIDI_IN_ALSA_SELECT: alsa_input->clearSysex(); break;
-      default:                  unknown_input->clearSysex(); break;
-   }
-}
-
-
-void MidiInPort_linux::clearSysex(int buffer) {
-   switch (getSelect()) {
-      case MIDI_IN_OSS_SELECT:  oss_input->clearSysex(); break;
-      case MIDI_IN_ALSA_SELECT: alsa_input->clearSysex(); break;
-      default:                  unknown_input->clearSysex(); break;
-   }
-}
-
-
-void MidiInPort_linux::close(void) {
-   switch (getSelect()) {
-      case MIDI_IN_OSS_SELECT:  oss_input->close(); break;
-      case MIDI_IN_ALSA_SELECT: alsa_input->close(); break;
-      default:                  unknown_input->close(); break;
-   }
-}
-
-
-void MidiInPort_linux::closeAll(void) {
-   switch (getSelect()) {
-      case MIDI_IN_OSS_SELECT:  oss_input->closeAll(); break;
-      case MIDI_IN_ALSA_SELECT: alsa_input->closeAll(); break;
-      default:                  unknown_input->closeAll(); break;
-   }
-}
-
-
-MidiMessage MidiInPort_linux::extract(void) {
-   switch (getSelect()) {
-      case MIDI_IN_OSS_SELECT:  return oss_input->extract(); break;
-      case MIDI_IN_ALSA_SELECT: return alsa_input->extract(); break;
-      default:                  return unknown_input->extract(); break;
-   }
-}
-
-
-int MidiInPort_linux::getBufferSize(void) {
-   switch (getSelect()) {
-      case MIDI_IN_OSS_SELECT:  return oss_input->getBufferSize(); break;
-      case MIDI_IN_ALSA_SELECT: return alsa_input->getBufferSize(); break;
-      default:                  return unknown_input->getBufferSize(); break;
-   }
-}
-
-
-int MidiInPort_linux::getChannelOffset(void) const {
-   switch (getSelect()) {
-      case MIDI_IN_OSS_SELECT:  return oss_input->getChannelOffset(); break;
-      case MIDI_IN_ALSA_SELECT: return alsa_input->getChannelOffset(); break;
-      default:                  return unknown_input->getChannelOffset(); break;
-   }
-}
-
-
-int MidiInPort_linux::getCount(void) {
-   switch (getSelect()) {
-      case MIDI_IN_OSS_SELECT:  return oss_input->getCount(); break;
-      case MIDI_IN_ALSA_SELECT: return alsa_input->getCount(); break;
-      default:                  return unknown_input->getCount(); break;
-   }
-}
-
-
-const char* MidiInPort_linux::getName(void) {
-   switch (getSelect()) {
-      case MIDI_IN_OSS_SELECT:  return oss_input->getName(); break;
-      case MIDI_IN_ALSA_SELECT: return alsa_input->getName(); break;
-      default:                  return unknown_input->getName(); break;
-   }
-}
-
-
-const char* MidiInPort_linux::getName(int i) {
-   switch (getSelect()) {
-      case MIDI_IN_OSS_SELECT:  return oss_input->getName(i); break;
-      case MIDI_IN_ALSA_SELECT: return alsa_input->getName(i); break;
-      default:                  return unknown_input->getName(i); break;
-   }
-}
-
-
-int MidiInPort_linux::getNumPorts(void) {
-   switch (getSelect()) {
-      case MIDI_IN_OSS_SELECT:  return oss_input->getNumPorts(); break;
-      case MIDI_IN_ALSA_SELECT: return alsa_input->getNumPorts(); break;
-      default:                  return unknown_input->getNumPorts(); break;
-   }
-}
-
-
-int MidiInPort_linux::getPort(void) {
-   switch (getSelect()) {
-      case MIDI_IN_OSS_SELECT:  return oss_input->getPort(); break;
-      case MIDI_IN_ALSA_SELECT: return alsa_input->getPort(); break;
-      default:                  return unknown_input->getPort(); break;
-   }
-}
-
-
-int MidiInPort_linux::getPortStatus(void) {
-   switch (getSelect()) {
-      case MIDI_IN_OSS_SELECT:  return oss_input->getPortStatus(); break;
-      case MIDI_IN_ALSA_SELECT: return alsa_input->getPortStatus(); break;
-      default:                  return unknown_input->getPortStatus(); break;
-   }
-}
-
-
-uchar* MidiInPort_linux::getSysex(int buffer) {
-   switch (getSelect()) {
-      case MIDI_IN_OSS_SELECT:  return oss_input->getSysex(buffer); break;
-      case MIDI_IN_ALSA_SELECT: return alsa_input->getSysex(buffer); break;
-      default:                  return unknown_input->getSysex(buffer); break;
-   }
-}
-
-
-int MidiInPort_linux::getSysexSize(int buffer) {
-   switch (getSelect()) {
-      case MIDI_IN_OSS_SELECT:  return oss_input->getSysexSize(buffer); break;
-      case MIDI_IN_ALSA_SELECT: return alsa_input->getSysexSize(buffer); break;
-      default: return unknown_input->getSysexSize(buffer); break;
-   }
-}
-
-
-int MidiInPort_linux::getTrace(void) {
-   switch (getSelect()) {
-      case MIDI_IN_OSS_SELECT:  return oss_input->getTrace(); break;
-      case MIDI_IN_ALSA_SELECT: return alsa_input->getTrace(); break;
-      default:                  return unknown_input->getTrace(); break;
-   }
-}
-
-
-void MidiInPort_linux::insert(const MidiMessage& aMessage) {
-   switch (getSelect()) {
-      case MIDI_IN_OSS_SELECT:  oss_input->insert(aMessage); break;
-      case MIDI_IN_ALSA_SELECT: alsa_input->insert(aMessage); break;
-      default:                  unknown_input->insert(aMessage); break;
-   }
-}
-
-
-int MidiInPort_linux::installSysex(uchar* anArray, int aSize) {
-   switch (getSelect()) {
-      case MIDI_IN_OSS_SELECT:  
-         return oss_input->installSysex(anArray, aSize);
-         break;
-      case MIDI_IN_ALSA_SELECT: 
-         return alsa_input->installSysex(anArray, aSize); 
-         break;
-      default:                  
-         return unknown_input->installSysex(anArray, aSize); 
-         break;
-   }
-}
-
-
-MidiMessage& MidiInPort_linux::message(int index) {
-   switch (getSelect()) {
-      case MIDI_IN_OSS_SELECT:  return oss_input->message(index); break;
-      case MIDI_IN_ALSA_SELECT: return alsa_input->message(index); break;
-      default:                  return unknown_input->message(index); break;
-   }
-}
-
-int MidiInPort_linux::open(void) {
-   switch (getSelect()) {
-      case MIDI_IN_OSS_SELECT:  return oss_input->open(); break;
-      case MIDI_IN_ALSA_SELECT: return alsa_input->open(); break;
-      default:                  return unknown_input->open(); break;
-   }
-}
-
-
-MidiMessage& MidiInPort_linux::operator[](int index) {
-   switch (getSelect()) {
-      case MIDI_IN_OSS_SELECT:  return oss_input->message(index); break;
-      case MIDI_IN_ALSA_SELECT: return alsa_input->message(index); break;
-      default:                  return unknown_input->message(index); break;
-   }
-}
-
-
-void MidiInPort_linux::pause(void) {
-   switch (getSelect()) {
-      case MIDI_IN_OSS_SELECT:  oss_input->pause(); break;
-      case MIDI_IN_ALSA_SELECT: alsa_input->pause(); break;
-      default:                  unknown_input->pause(); break;
-   }
-}
-
-
-void MidiInPort_linux::setBufferSize(int aSize) {
-   switch (getSelect()) {
-      case MIDI_IN_OSS_SELECT:  oss_input->setBufferSize(aSize); break;
-      case MIDI_IN_ALSA_SELECT: alsa_input->setBufferSize(aSize); break;
-      default:                  unknown_input->setBufferSize(aSize); break;
-   }
-}
-
-
-void MidiInPort_linux::setChannelOffset(int anOffset) {
-   switch (getSelect()) {
-      case MIDI_IN_OSS_SELECT:  oss_input->setChannelOffset(anOffset); break;
-      case MIDI_IN_ALSA_SELECT: alsa_input->setChannelOffset(anOffset); break;
-      default:                  unknown_input->setChannelOffset(anOffset); break;
-   }
-}
-
-
-void MidiInPort_linux::setAndOpenPort(int aPort) {
-   switch (getSelect()) {
-      case MIDI_IN_OSS_SELECT:  
-         oss_input->setPort(aPort); 
-         oss_input->open();
-         break;
-      case MIDI_IN_ALSA_SELECT:
-         alsa_input->setPort(aPort); 
-         alsa_input->open();
-         break;
-      default:
-         unknown_input->setPort(aPort); 
-         unknown_input->open();
-         break;
-   }
-}
-
-
-void MidiInPort_linux::setPort(int aPort) {
-   switch (getSelect()) {
-      case MIDI_IN_OSS_SELECT:  oss_input->setPort(aPort); break;
-      case MIDI_IN_ALSA_SELECT: alsa_input->setPort(aPort); break;
-      default:                  unknown_input->setPort(aPort); break;
-   }
-}
-
-
-int MidiInPort_linux::setTrace(int aState) {
-   switch (getSelect()) {
-      case MIDI_IN_OSS_SELECT:  return oss_input->setTrace(aState); break;
-      case MIDI_IN_ALSA_SELECT: return alsa_input->setTrace(aState); break;
-      default:                  return unknown_input->setTrace(aState); break;
-   }
-}
-
-
-void MidiInPort_linux::toggleTrace(void) {
-   switch (getSelect()) {
-      case MIDI_IN_OSS_SELECT:  oss_input->toggleTrace(); break;
-      case MIDI_IN_ALSA_SELECT: alsa_input->toggleTrace(); break;
-      default:                  unknown_input->toggleTrace(); break;
-   }
-}
-
-
-void MidiInPort_linux::unpause(void) {
-   switch (getSelect()) {
-      case MIDI_IN_OSS_SELECT:  oss_input->unpause(); break;
-      case MIDI_IN_ALSA_SELECT: alsa_input->unpause(); break;
-      default:                  unknown_input->unpause(); break;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_linux::getSelect -- return the type of MIDI which
-//      is being used to send MIDI output.
-//
-
-int MidiInPort_linux::getSelect(void) {
-   return current;
-}
-
-
-//////////////////////////////
-//
-// MidiInPort_linux::selectOSS -- select the OSS MIDI output
-//   returns 1 if OSS is available, otherwise returns 0.
-//
-
-int MidiInPort_linux::selectOSS(void) {
-   if (ossQ) {
-      current = MIDI_IN_OSS_SELECT;
-      return 1;
-   } else {
-      return 0;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_linux::selectALSA -- select the ALSA MIDI output
-//   returns 1 if ALSA is available, otherwise returns 0.
-//
-
-int MidiInPort_linux::selectALSA(void) {
-   if (alsaQ) {
-      current = MIDI_IN_ALSA_SELECT;
-      return 1;
-   } else {
-      return 0;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_linux::selectUnknown -- select the Unknown MIDI output
-//   returns 1 always.
-//
-
-int MidiInPort_linux::selectUnknown(void) {
-   current = MIDI_IN_UNKNOWN_SELECT;
-   return 1;
-}
-
-
-//////////////////////////////////////////////////////////////////////////
-//
-// Private Functions
-//
-
-//////////////////////////////
-//
-// MidiInPort_linux::determineDrivers -- see if OSS/ALSA are
-//      available.  If /dev/sequencer is present, assume that OSS is
-//      available.  If /dev/snd/sdq is present, assume that ALSA is
-//      available.  
-//
-
-void MidiInPort_linux::determineDrivers(void) {
-   struct stat filestats;
-   int status;
-   status = stat("/dev/sequencer", &filestats);
-
-   if (status != 0) {
-      ossQ = 0;
-   } else {
-      ossQ = 1;
-   }
-
-   status = stat("/dev/snd/seq", &filestats);
-
-   if (status != 0) {
-      alsaQ = 0;
-   } else {
-      alsaQ = 1;
-   }
-
-
-   current = MIDI_IN_UNKNOWN_SELECT;
-
-   if (ossQ) {
-      current = MIDI_IN_OSS_SELECT;
-   }
-
-   if (alsaQ) {
-      current = MIDI_IN_ALSA_SELECT;
-   }
-
-   // create MIDI output types which are available:
-
-   if (oss_input != NULL) {
-      delete oss_input;
-      oss_input = NULL;
-   }
-   if (alsa_input != NULL) {
-      delete alsa_input;
-      alsa_input = NULL;
-   }
-   if (unknown_input != NULL) {
-      delete unknown_input;
-      unknown_input = NULL;
-   }
-
-   if (ossQ) {
-      oss_input = new MidiInPort_oss;
-   }
-   if (alsaQ) {
-      alsa_input = new MidiInPort_alsa;
-   }
-
-   unknown_input = new MidiInPort_unsupported;
-
-}
-
-
-#endif /* ALSA and OSS */
-#endif /* LINUX */
-
-
-// md5sum:	d634dd5c3b7e8c4d75b99d7459c3f073  - MidiInPort_linux.cpp =css= 20030102
diff --git a/extensions/gripd/src/midiio/src/MidiInPort_oss.cpp b/extensions/gripd/src/midiio/src/MidiInPort_oss.cpp
deleted file mode 100644
index d16c86584..000000000
--- a/extensions/gripd/src/midiio/src/MidiInPort_oss.cpp
+++ /dev/null
@@ -1,1036 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Wed Jan 21 22:46:30 GMT-0800 1998
-// Last Modified: Sat Jan  9 06:05:24 PST 1999
-// Last Modified: Tue Jun 29 16:18:45 PDT 1999 (added sysex capability)
-// Last Modified: Mon Dec  6 16:28:45 PST 1999 
-// Last Modified: Wed Jan 12 10:59:33 PST 2000 (orphan 0xf0 behavior change)
-// Last Modified: Wed May 10 17:10:05 PDT 2000 (name change from _linux to _oss)
-// Last Modified: Fri Oct 26 14:41:36 PDT 2001 (running status for 0xa0 and 0xd0 
-//                                              fixed by Daniel Gardner)
-// Filename:      ...sig/code/control/MidiInPort/linux/MidiInPort_oss.cpp
-// Web Address:   http://sig.sapp.org/src/sig/MidiInPort_oss.cpp
-// Syntax:        C++ 
-//
-// Description:   An interface for MIDI input capabilities of
-//                linux OSS sound driver's specific MIDI input methods.
-//                This class is inherited privately by the MidiInPort class.
-//
-
-#ifdef LINUX
-
-#include "MidiInPort_oss.h"
-#include <iostream>
-#include <stdlib.h>
-#include <pthread.h>
-#include <linux/soundcard.h>
-
-
-#define DEFAULT_INPUT_BUFFER_SIZE (1024)
-
-// initialized static variables
-
-int       MidiInPort_oss::numDevices                     = 0;
-int       MidiInPort_oss::objectCount                    = 0;
-int*      MidiInPort_oss::portObjectCount                = NULL;
-CircularBuffer<MidiMessage>** MidiInPort_oss::midiBuffer = NULL;
-int       MidiInPort_oss::channelOffset                  = 0;
-SigTimer  MidiInPort_oss::midiTimer;
-int*      MidiInPort_oss::pauseQ                         = NULL;
-int*      MidiInPort_oss::trace                          = NULL;
-std::ostream*  MidiInPort_oss::tracedisplay                   = &std::cout;
-pthread_t MidiInPort_oss::midiInThread;    
-int*      MidiInPort_oss::sysexWriteBuffer               = NULL;
-Array<uchar>** MidiInPort_oss::sysexBuffers              = NULL;
-
-
-
-//////////////////////////////
-// 
-// MidiInPort_oss::MidiInPort_oss
-//	default values: autoOpen = 1
-//
-
-MidiInPort_oss::MidiInPort_oss(void) {
-   if (objectCount == 0) {
-      initialize();
-   }
-   objectCount++;
-
-   port = -1;
-   setPort(0);
-}
-
-
-MidiInPort_oss::MidiInPort_oss(int aPort, int autoOpen) {
-   if (objectCount == 0) {
-      initialize();
-   }
-   objectCount++;
-
-   port = -1;
-   setPort(aPort);
-   if (autoOpen) {
-      open();
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_oss::~MidiInPort_oss
-//
-
-MidiInPort_oss::~MidiInPort_oss() {
-   objectCount--;
-   if (objectCount == 0) {
-      deinitialize();
-   } else if (objectCount < 0) {
-      std::cerr << "Error: bad MidiInPort_oss object count!: " 
-           << objectCount << std::endl;
-      exit(1);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_oss::clearSysex -- clears the data from a sysex
-//      message and sets the allocation size to the default size (of 32
-//      bytes).
-//
-
-void MidiInPort_oss::clearSysex(int buffer) {
-   buffer = 0x7f | buffer;    // limit buffer range from 0 to 127
-   if (getPort() == -1) {
-      return;
-   }
-   
-   sysexBuffers[getPort()][buffer].setSize(0);
-   if (sysexBuffers[getPort()][buffer].getAllocSize() != 32) {
-      // shrink the storage buffer's size if necessary
-      sysexBuffers[getPort()][buffer].setAllocSize(32);
-   }
-}
-
-
-void MidiInPort_oss::clearSysex(void) {
-   // clear all sysex buffers
-   for (int i=0; i<128; i++) {
-      clearSysex(i);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_oss::close
-//
-
-void MidiInPort_oss::close(void) {
-   if (getPort() == -1) return;
-
-   pauseQ[getPort()] = 1;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_oss::closeAll --
-//
-
-void MidiInPort_oss::closeAll(void) {
-   Sequencer_oss::close();
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_oss::extract -- returns the next MIDI message
-//	received since that last extracted message.
-//
-
-MidiMessage MidiInPort_oss::extract(void) {
-   if (getPort() == -1) {
-      MidiMessage temp;
-      return temp;
-   }
-
-   return midiBuffer[getPort()]->extract();
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_oss::getBufferSize -- returns the maximum possible number
-//	of MIDI messages that can be stored in the buffer
-//
-
-int MidiInPort_oss::getBufferSize(void) {
-   if (getPort() == -1)   return 0;
-
-   return midiBuffer[getPort()]->getSize();
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_oss::getChannelOffset -- returns zero if MIDI channel 
-//     offset is 0, or 1 if offset is 1.
-//
-
-int MidiInPort_oss::getChannelOffset(void) const {
-   return channelOffset;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_oss::getCount -- returns the number of unexamined
-//	MIDI messages waiting in the input buffer.
-//
-
-int MidiInPort_oss::getCount(void) {
-   if (getPort() == -1)   return 0;
-
-   return midiBuffer[getPort()]->getCount();
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_oss::getName -- returns the name of the port.
-//	returns "" if no name. Name is valid until all instances
-//      of MIDI classes are.
-//
-
-const char* MidiInPort_oss::getName(void) {
-   if (getPort() == -1) {
-      return "Null OSS MIDI Input";
-   }
-   return getInputName(getPort());
-}
-
-
-const char* MidiInPort_oss::getName(int i) {
-   return getInputName(i);
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_oss::getNumPorts -- returns the number of available
-// 	ports for MIDI input
-//
-
-int MidiInPort_oss::getNumPorts(void) {
-   return getNumInputs();
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_oss::getPort -- returns the port to which this
-//	object belongs (as set with the setPort function).
-//
-
-int MidiInPort_oss::getPort(void) {
-   return port;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_oss::getPortStatus -- 0 if closed, 1 if open
-//
-
-int MidiInPort_oss::getPortStatus(void) {
-   return is_open();
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_oss::getSysex -- returns the sysex message contents
-//    of a given buffer.  You should check to see that the size is
-//    non-zero before looking at the data.  The data pointer will
-//    be NULL if there is no data in the buffer.
-//
-
-uchar* MidiInPort_oss::getSysex(int buffer) {
-   buffer &= 0x7f;     // limit the buffer access to indices 0 to 127.
-
-   if (getPort() == -1) {
-      return NULL;
-   }
-
-   if (sysexBuffers[getPort()][buffer].getSize() < 2) {
-      return NULL;
-   } else {
-      return sysexBuffers[getPort()][buffer].getBase();
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_oss::getSysexSize -- returns the sysex message byte
-//    count of a given buffer.   Buffers are in the range from 
-//    0 to 127.
-//
-
-int MidiInPort_oss::getSysexSize(int buffer) {
-   if (getPort() == -1) {
-      return 0;
-   } else {
-      return sysexBuffers[getPort()][buffer & 0x7f].getSize();
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_oss::getTrace -- returns true if trace is on or false
-//	if trace is off.  if trace is on, then prints to standard
-// 	output the Midi message received.
-//
-
-int MidiInPort_oss::getTrace(void) {
-   if (getPort() == -1)   return -1;
-
-   return trace[getPort()];
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_oss::insert
-//
-
-void MidiInPort_oss::insert(const MidiMessage& aMessage) {
-   if (getPort() == -1)   return;
-
-   midiBuffer[getPort()]->insert(aMessage);
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_oss::installSysex -- put a sysex message into a
-//      buffer.  The buffer number that it is put into is returned.
-//
-
-int MidiInPort_oss::installSysex(uchar* anArray, int aSize) {
-   if (getPort() == -1) {
-      return -1;
-   } else {
-      return installSysexPrivate(getPort(), anArray, aSize);
-   }
-}
-
-//////////////////////////////
-//
-// MidiInPort_oss::installSysexPrivate -- put a sysex message into a
-//      buffer.  The buffer number that it is put into is returned.
-//
-
-int MidiInPort_oss::installSysexPrivate(int port, uchar* anArray, int aSize) {
-   // choose a buffer to install sysex data into:
-   int bufferNumber = sysexWriteBuffer[port];
-   sysexWriteBuffer[port]++;
-   if (sysexWriteBuffer[port] >= 128) {
-      sysexWriteBuffer[port] = 0;
-   }
-
-   // copy contents of sysex message into the chosen buffer
-   sysexBuffers[port][bufferNumber].setSize(aSize);
-   uchar* dataptr = sysexBuffers[port][bufferNumber].getBase();
-   uchar* indataptr = anArray;
-   for (int i=0; i<aSize; i++) { 
-      *dataptr = *indataptr;
-      dataptr++;
-      indataptr++;
-   }
-
-   // return the buffer number that was used
-   return bufferNumber;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_oss::message
-//
-
-MidiMessage& MidiInPort_oss::message(int index) {
-   if (getPort() == -1) {
-      static MidiMessage x;
-      return x;
-   }
-
-   CircularBuffer<MidiMessage>& temp = *midiBuffer[getPort()];
-   return temp[index];
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_oss::open -- returns true if MIDI input port was
-//	opened.
-//
-
-int MidiInPort_oss::open(void) {
-   if (getPort() == -1)   return 0;
-
-   return Sequencer_oss::open();
-   pauseQ[getPort()] = 0;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_oss::pause -- stop the Midi input port from
-//	inserting MIDI messages into the buffer, but keeps the
-//	port open.  Use unpause() to reverse the effect of pause().
-//
-
-void MidiInPort_oss::pause(void) {
-   if (getPort() == -1)   return;
-
-   pauseQ[getPort()] = 1;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_oss::setBufferSize -- sets the allocation
-//	size of the MIDI input buffer.
-//
-
-void MidiInPort_oss::setBufferSize(int aSize) {
-   if (getPort() == -1)  return;
-
-   midiBuffer[getPort()]->setSize(aSize);
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_oss::setChannelOffset -- sets the MIDI chan offset, 
-//     either 0 or 1.
-//
-
-void MidiInPort_oss::setChannelOffset(int anOffset) {
-   switch (anOffset) {
-      case 0:   channelOffset = 0;   break;
-      case 1:   channelOffset = 1;   break;
-      default:
-         std::cout << "Error:  Channel offset can be only 0 or 1." << std::endl;
-         exit(1);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_oss::setPort
-//
-
-void MidiInPort_oss::setPort(int aPort) {
-//   if (aPort == -1) return;
-   if (aPort < -1 || aPort >= getNumPorts()) {
-//      std::cerr << "Error: maximum port number is: " << getNumPorts()-1
-//           << ", but you tried to access port: " << aPort << std::endl;
-//     exit(1);
-   }
-   else {
-      if (port != -1) {
-         portObjectCount[port]--;
-      }
-      port = aPort;
-      if (port != -1) {
-         portObjectCount[port]++;
-      }
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_oss::setTrace -- if false, then don't print MIDI messages
-// 	to the screen.
-//
-
-int MidiInPort_oss::setTrace(int aState) {
-   if (getPort() == -1)   return -1;
-
-
-   int oldtrace = trace[getPort()];
-   if (aState == 0) {
-      trace[getPort()] = 0;
-   } else {
-      trace[getPort()] = 1;
-   }
-   return oldtrace;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_oss::toggleTrace -- switches the state of trace
-//	Returns the previous value of the trace variable.
-//
-
-void MidiInPort_oss::toggleTrace(void) {
-   if (getPort() == -1)   return;
-
-   trace[getPort()] = !trace[getPort()];
-}
-   
-
-
-//////////////////////////////
-//
-// MidiInPort_oss::unpause -- enables the Midi input port 
-//	to inserting MIDI messages into the buffer after the 
-//	port is already open.
-//
-
-void MidiInPort_oss::unpause(void) {
-   if (getPort() == -1)   return;
-  
-   pauseQ[getPort()] = 0;
-}
-
-
-
-///////////////////////////////////////////////////////////////////////////
-//
-// Private functions
-//
-
-
-
-//////////////////////////////
-//
-// MidiInPort_oss::deinitialize -- sets up storage if necessary
-//	This function should be called if the current object is
-//	the first object to be created.
-//
-
-void MidiInPort_oss::deinitialize(void) {
-   closeAll();
-
-   for (int i=0; i<getNumPorts(); i++) {
-      if (sysexBuffers != NULL && sysexBuffers[i] != NULL) {
-         delete [] sysexBuffers[i];
-         sysexBuffers[i] = NULL;
-      }
-   }
-
-   if (sysexBuffers != NULL) {
-      delete [] sysexBuffers;
-      sysexBuffers = NULL;
-   }
-
-   if (midiBuffer != NULL) {
-      delete [] midiBuffer;
-      midiBuffer = NULL;
-   }
-
-   if (portObjectCount != NULL) {
-      delete [] portObjectCount;
-      portObjectCount = NULL;
-   }
-
-   if (trace != NULL) {
-      delete [] trace;
-      trace = NULL;
-   }
-
-   if (pauseQ != NULL) {
-      delete [] pauseQ;
-      pauseQ = NULL;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_oss::initialize -- sets up storage if necessary
-//	This function should be called if the current object is
-//	the first object to be created.
-//
-
-void MidiInPort_oss::initialize(void) {
-   // set the number of ports
-   numDevices = Sequencer_oss::indevcount;
-
-   if  (getNumPorts() <= 0) {
-//      std::cerr << "Warning: no MIDI input devices" << std::endl;
-   } else {
-   
-      // allocate space for pauseQ, the port pause status
-      if (pauseQ != NULL) {
-         delete [] pauseQ;
-      }
-      pauseQ = new int[numDevices];
-   
-      // allocate space for object count on each port:
-      if (portObjectCount != NULL) {
-         delete [] portObjectCount;
-      }
-      portObjectCount = new int[numDevices];
-   
-      // allocate space for object count on each port:
-      if (trace != NULL) {
-         delete [] trace;
-      }
-      trace = new int[numDevices];
-   
-      // allocate space for the Midi input buffers
-      if (midiBuffer != NULL) {
-         delete [] midiBuffer;
-      }
-      midiBuffer = new CircularBuffer<MidiMessage>*[numDevices];
-
-      // allocate space for Midi input sysex buffer write indices
-      if (sysexWriteBuffer != NULL) {
-         delete [] sysexWriteBuffer;
-      }
-      sysexWriteBuffer = new int[numDevices];
-
-      // allocate space for Midi input sysex buffers
-      if (sysexBuffers != NULL) {
-         std::cout << "Error: memory leak on sysex buffers initialization" << std::endl;
-         exit(1);
-      }
-      sysexBuffers = new Array<uchar>*[numDevices];
-   
-      // initialize the static arrays
-      for (int i=0; i<getNumPorts(); i++) {
-         portObjectCount[i] = 0;
-         trace[i] = 0;
-         pauseQ[i] = 0;
-         midiBuffer[i] = new CircularBuffer<MidiMessage>;
-         midiBuffer[i]->setSize(DEFAULT_INPUT_BUFFER_SIZE);
-
-         sysexWriteBuffer[i] = 0;
-         sysexBuffers[i] = new Array<uchar>[128];
-         for (int n=0; n<128; n++) {
-            sysexBuffers[i][n].allowGrowth(0);      // shouldn't need to grow
-            sysexBuffers[i][n].setAllocSize(32);
-            sysexBuffers[i][n].setSize(0);
-            sysexBuffers[i][n].setGrowth(32);       // in case it will ever grow
-         }
-      }
-
-      int flag = pthread_create(&midiInThread, NULL, 
-         interpretMidiInputStreamPrivate, NULL);
-      if (flag == -1) {
-         std::cout << "Unable to create MIDI input thread." << std::endl;
-         exit(1);
-      }
-   
-   }
-}
-
-
-
-///////////////////////////////////////////////////////////////////////////
-//
-// friendly functions 
-//
-
-
-//////////////////////////////
-//
-// interpretMidiInputStreamPrivate -- handles the MIDI input stream
-//     for the various input devices.
-//
-//  Note about system exclusive messages:
-//     System Exclusive messages are stored in a separate buffer from
-//     Other Midi messages since they can be variable in length.  If
-//     The Midi Input returns a message with command byte 0xf0, then
-//     the p1() byte indicates the system exclusive buffer number that is
-//     holding the system exclusive data for that Midi message.  There
-//     are 128 system exclusive buffers that are numbered between
-//     0 and 127.  These buffers are filled in a cycle.
-//     To extract a System exclusive message from MidiInPort_oss,
-//     you first will receive a Message with a command byte of 0xf0.
-//     you can then access the data for that sysex by the command:
-//     MidiInPort_oss::getSysex(buffer_number), this will return
-//     a pointer to the beginning of the sysex data.  The first byte
-//     of the sysex data should be 0xf0, and the last byte of the data
-//     is 0xf7.  All other bytes of data should be in the range from
-//     0 to 127.  You can also get the size of the sysex buffer by the
-//     following command:   MidiInPort_oss::getSysexSize(buffer_number).
-//     This command will tell you the number of bytes in the system 
-//     exclusive message including the starting 0xf0 and the ending 0xf7.
-//
-//     If you want to minimize memory useage of the system exclusive
-//     buffers you can run the command:  
-//     MidiInPort_oss::clearSysex(buffer_number);  Otherwise the sysex
-//     buffer will be erased automatically the next time that the that
-//     buffer number is cycled through when receiving more system exclusives.
-//     Allocated the allocated size of the system exclusive storage will 
-//     not be adjusted when the computer replaces the system exclusive
-//     message unless more storage size is needed, clearSysex however,
-//     will resize the sysex buffer to its default size (currently 32 bytes).
-//     clearSysex() without arguments will resize all buffers so that
-//     they are allocated to the default size and will erase data from
-//     all buffers.  You can spoof a system exclusive message coming in
-//     by installing a system exclusive message and then inserting
-//     the system message command into the input buffer of the MidiInPort
-//     class,  int sysex_buffer = MidiInPort_oss::installSysex(
-//     uchar *data, int size); will put the data into a sysex buffer and
-//     return the buffer number that it was placed into.
-//
-//     This function assumes that System Exclusive messages cannot be sent 
-//     as a running status messages.
-//
-// Note about MidiMessage time stamps:
-//     The MidiMessage::time field is a recording of the time that the 
-//     first byte of the MidiMessage arrived.  If the message is from
-//     running status mode, then the time that the first parameter byte
-//     arrived is stored.   System exclusive message arrival times are
-//     recoreded at the time of the last byte (0xf7) arriving.  This is
-//     because other system messages can be coming in while the sysex
-//     message is coming in.  Anyway, sysex messages are not really to
-//     be used for real time MIDI messaging, so the exact moment that the
-//     first byte of the sysex came in is not important to me.
-//
-//
-
-void *interpretMidiInputStreamPrivate(void *) {
-
-   int* argsExpected = NULL;     // MIDI parameter bytes expected to follow
-   int* argsLeft     = NULL;     // MIDI parameter bytes left to wait for
-   uchar packet[4];              // bytes for sequencer driver
-   MidiMessage* message = NULL;  // holder for current MIDI message
-   int newSigTime = 0;           // for millisecond timer
-   int lastSigTime = -1;         // for millisecond timer
-   int zeroSigTime = -1;         // for timing incoming events
-   int device = -1;              // for sorting out the bytes by input device
-   Array<uchar>* sysexIn;        // MIDI Input sysex temporary storage
-
-   // Note on the use of argsExpected and argsLeft for sysexs:
-   // If argsExpected is -1, then a sysex message is coming in.
-   // If argsLeft < 0, then the sysex message has not finished comming
-   // in.  If argsLeft == 0 and argsExpected == -1, then the sysex
-   // has finished coming in and is to be sent to the correct
-   // location.
-
-   static int count = 0;
-   if (count != 0) {
-      std::cerr << "Cannot run this function more than once" << std::endl;
-      exit(1);
-   } else {
-      // allocate space for MIDI messages, each device has a different message
-      // holding spot in case the messages overlap in the input stream
-      message      = new MidiMessage[MidiInPort_oss::numDevices];
-      argsExpected = new int[MidiInPort_oss::numDevices];
-      argsLeft     = new int[MidiInPort_oss::numDevices];
-
-      sysexIn = new Array<uchar>[MidiInPort_oss::numDevices];
-      for (int j=0; j<MidiInPort_oss::numDevices; j++) {
-         sysexIn[j].allowGrowth();
-         sysexIn[j].setSize(32);
-         sysexIn[j].setSize(0);
-         sysexIn[j].setGrowth(512);
-      }
-
-      count++;
-   }
-   
-   // interpret MIDI bytes as they come into the computer
-   // and repackage them as MIDI messages.
-   int packetReadCount;
-   while (1) {
-top_of_loop:
-      packetReadCount = ::read(MidiInPort_oss::sequencer_fd, 
-         &packet, sizeof(packet));
-
-      if (packetReadCount != 4) {
-         // this if statement is used to prevent cases where the
-         // read function above will time out and return 0 bytes 
-         // read.  This if statment will also take care of -1 
-         // error return values by ignoring them.
-         continue;
-      }
-     
-
-/*
-      std::cout << "packet bytes "
-           << " 0x" << std::hex << (int)packet[0]   // packet type
-           << " 0x" << std::hex << (int)packet[1]   // possible MIDI byte
-           << " 0x" << std::hex << (int)packet[2]   // device number
-           << " 0x" << std::hex << (int)packet[3]   // unused for MIDI bytes
-           << std::endl;
-*/
-
-      switch (packet[0]) {
-         case SEQ_WAIT:
-            // MIDI clock ticks ... the first MIDI message deltaTime is
-            // calculated wrt the start of the MIDI clock.
-            if (zeroSigTime < 0) {
-               zeroSigTime = MidiInPort_oss::midiTimer.getTime();
-            }
-/* 
-            int newTime;
-            newTime = packet[3];
-            newTime = (newTime << 8) | packet[2];
-            newTime = (newTime << 8) | packet[1];
-*/
-            break;
-
-         case SEQ_ECHO:
-            // echo events
-            break;
-
-         case SEQ_MIDIPUTC:          // SEQ_MIDIPUTC = 5
-            // determination of a full MIDI message from the input MIDI
-            // stream is based here on the observation that MIDI status
-            // bytes and subsequent data bytes are NOT returned in the same
-            // read() call.  Rather, they are spread out over multiple read()
-            // returns, with only a single value per return.  So if we
-            // find a status byte, we then determine the number of expected
-            // operands and process that number of subsequent read()s to
-            // to determine the complete midi message.
-
-/*
-            std::cout << "MIDI byte: " << (int)packet[1] << std::endl;
-*/
-
-            // store the MIDI input device to which the incoming MIDI
-            // byte belongs.
-            device = packet[2];
-           
-            // ignore the active sensing 0xfe and MIDI clock 0xf8 commands:
-            if (packet[1] == 0xfe || packet[1] == 0xf8) {
-               break;
-            }
-
-            if (packet[1] & 0x80) {   // a command byte has arrived
-               switch (packet[1] & 0xf0) {
-                  case 0xf0:   
-                     if (packet[1] == 0xf0) {
-                        argsExpected[device] = -1;
-                        argsLeft[device] = -1;
-                        if (sysexIn[device].getSize() != 0) {
-                           // ignore the command for now.  It is most
-                           // likely an active sensing message.
-                           goto top_of_loop;
-                        } else {
-                           uchar datum = 0xf0;
-                           sysexIn[device].append(datum);
-                        }
-                     } if (packet[1] == 0xf7) {
-                        argsLeft[device] = 0;         // indicates sysex is done
-                        uchar datum = 0xf7;
-                        sysexIn[device].append(datum);
-                     } else if (argsExpected[device] != -1) {
-                        // this is a system message that may or may
-                        // not be coming while a sysex is coming in
-                        argsExpected[device] = 0;
-                     } else {
-                        // this is a system message that is not coming
-                        // while a system exclusive is coming in
-                        //argsExpected[device] = 0;
-                     }
-                     break;
-                  case 0xc0:   
-                     if (argsExpected[device] < 0) {
-                        std::cout << "Error: received program change during sysex" 
-                             << std::endl;
-                        exit(1);
-                     } else {
-                        argsExpected[device] = 1;    
-                     }
-                     break;
-                  case 0xd0:   
-                     if (argsExpected[device] < 0) {
-                        std::cout << "Error: received aftertouch message during" 
-                                " sysex" << std::endl;
-                        exit(1);
-                     } else {
-                        argsExpected[device] = 1;    
-                     }
-                     break;
-                  default:     
-                     if (argsExpected[device] < 0) {
-                        std::cout << "Error: received another message during sysex" 
-                             << std::endl;
-                        exit(1);
-                     } else {
-                        argsExpected[device] = 2;    
-                     }
-                     break;
-               }
-               if (argsExpected[device] >= 0) {
-                  argsLeft[device] = argsExpected[device];
-               }
-
-               newSigTime = MidiInPort_oss::midiTimer.getTime();
-               message[device].time = newSigTime - zeroSigTime;
-
-               if (packet[1] != 0xf7) {
-                  message[device].p0() = packet[1];
-               } 
-               message[device].p1() = 0;
-               message[device].p2() = 0;
-               message[device].p3() = 0;
-
-               if (packet[1] == 0xf7) {
-                  goto sysex_done;
-               }
-            } else if (argsLeft[device]) {   // not a command byte coming in
-               if (message[device].time == 0) {
-                  // store the receipt time of the first message byte
-                  newSigTime = MidiInPort_oss::midiTimer.getTime();
-                  message[device].time = newSigTime - zeroSigTime;
-               }
-                  
-               if (argsExpected[device] < 0) {
-                  // continue processing a sysex message
-                  sysexIn[device].append(packet[1]);
-               } else {
-                  // handle a message other than a sysex message
-                  if (argsLeft[device] == argsExpected[device]) {
-                     message[device].p1() = packet[1];
-                  } else {
-                     message[device].p2() = packet[1];
-                  }
-                  argsLeft[device]--;
-               }
-
-               // if MIDI message is complete, setup for running status, and 
-               // insert note into proper buffer.
-
-               if (argsExpected[device] >= 0 && !argsLeft[device]) {
-
-                  // store parameter data for running status
-                  switch (message[device].p0() & 0xf0) {
-                     case 0xc0:  argsLeft[device] = 1;    break;
-                     case 0xd0:  argsLeft[device] = 1;    break;  // fix by dan
-                     default:    argsLeft[device] = 2;    break;
-                        // 0x80 expects two arguments
-                        // 0x90 expects two arguments
-                        // 0xa0 expects two arguments
-                        // 0xb0 expects two arguments
-                        // 0xe0 expects two arguments
-                  }
-
-                  lastSigTime = newSigTime;
-
-                  sysex_done:      // come here when a sysex is completely done
-
-                  // insert the MIDI message into the appropriate buffer
-                  // do not insert into buffer if the MIDI input device
-                  // is paused (which can mean closed).  Or if the
-                  // pauseQ array is pointing to NULL (which probably means that
-                  // things are about to shut down).
-                  if (MidiInPort_oss::pauseQ != NULL &&
-                        MidiInPort_oss::pauseQ[device] == 0) {
-                     if (argsExpected[device] < 0) {
-                        // store the sysex in the MidiInPort_oss
-                        // buffer for sysexs and return the storage
-                        // location:
-                        int sysexlocation = 
-                           MidiInPort_oss::installSysexPrivate(device,
-                              sysexIn[device].getBase(),
-                              sysexIn[device].getSize());
-
-                        message[device].p0() = 0xf0;
-                        message[device].p1() = sysexlocation;
-
-                        sysexIn[device].setSize(0); // empty the sysex storage
-                        argsExpected[device] = 0;   // no run status for sysex
-                        argsLeft[device] = 0;       // turn off sysex input flag
-                     }
-                     MidiInPort_oss::midiBuffer[device]->insert(
-                           message[device]);
-//                   if (MidiInPort_oss::callbackFunction != NULL) {
-//                      MidiInPort_oss::callbackFunction(device);
-//                   }
-                     if (MidiInPort_oss::trace[device]) {
-                        std::cout << '[' << std::hex << (int)message[device].p0()
-                             << ':' << std::dec << (int)message[device].p1()
-                             << ',' << (int)message[device].p2() << ']'
-                             << std::flush;
-                     }
-                     message[device].time = 0;
-                  } else {
-                     if (MidiInPort_oss::trace[device]) {
-                        std::cout << '[' << std::hex << (int)message[device].p0()
-                             << 'P' << std::dec << (int)message[device].p1()
-                             << ',' << (int)message[device].p2() << ']'
-                             << std::flush;
-                     }
-                  }
-               }
-            }
-            break;
-
-         default:
-            break;
-      } // end switch
-   } // end while (1)
-
-   // This code is not yet reached, but should be made to do so eventually
-
-   if (message != NULL) {
-      delete message;
-      message = NULL;
-   }
-
-   if (argsExpected != NULL) {
-      delete argsExpected;
-      argsExpected = NULL;
-   }
-
-   if (argsLeft != NULL) {
-      delete argsLeft;
-      argsLeft = NULL;
-   }
-
-   if (sysexIn != NULL) { 
-      delete sysexIn;
-      sysexIn = NULL;
-   }
-
-}
-
-
-
-#endif  // LINUX
-
-
-
-// md5sum:	2008f4a298bef0cd85620a5507815866  - MidiInPort_oss.cpp =css= 20030102
diff --git a/extensions/gripd/src/midiio/src/MidiInPort_unsupported.cpp b/extensions/gripd/src/midiio/src/MidiInPort_unsupported.cpp
deleted file mode 100644
index 584a46835..000000000
--- a/extensions/gripd/src/midiio/src/MidiInPort_unsupported.cpp
+++ /dev/null
@@ -1,487 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Wed Jan 21 22:46:30 GMT-0800 1998
-// Last Modified: Thu Jan 22 22:53:53 GMT-0800 1998
-// Last Modified: Wed Jun 30 11:42:59 PDT 1999 (added sysex capability)
-// Filename:      ...sig/code/control/MidiInPort/unsupported/MidiInPort_unsupported.cpp
-// Web Address:   http://www-ccrma.stanford.edu/~craig/improv/src/MidiInPort_unsupported.cpp
-// Syntax:        C++ 
-//
-// Description:   An interface for MIDI input capabilities of
-//                an unknown sound driver's specific MIDI input methods.
-//                This class is inherited privately by the MidiInPort class.
-//                This class is used when there is no MIDI input, so
-//                that MIDI programs can otherwise be compiled and run.
-//                This file can also serve as a template for creating
-//                an OS specific class for MIDI input.
-//
-
-#include "MidiInPort_unsupported.h"
-#include <iostream>
-#include <stdlib.h>
-
-
-#define DEFAULT_INPUT_BUFFER_SIZE (1024)
-
-// initialized static variables
-int       MidiInPort_unsupported::numDevices        = 0;
-int       MidiInPort_unsupported::objectCount       = 0;
-int*      MidiInPort_unsupported::openQ             = NULL;
-int*      MidiInPort_unsupported::portObjectCount   = NULL;
-CircularBuffer<MidiMessage>* MidiInPort_unsupported::midiBuffer = NULL;
-int       MidiInPort_unsupported::channelOffset     = 0;
-int*      MidiInPort_unsupported::sysexWriteBuffer  = NULL;
-Array<uchar>** MidiInPort_unsupported::sysexBuffers = NULL; 
-
-
-//////////////////////////////
-// 
-// MidiInPort_unsupported::MidiInPort_unsupported
-//	default values: autoOpen = 1
-//
-
-MidiInPort_unsupported::MidiInPort_unsupported(void) {
-   if (objectCount == 0) {
-      initialize();
-   }
-   objectCount++;
-
-   port = -1;
-   setPort(0);
-}
-
-
-MidiInPort_unsupported::MidiInPort_unsupported(int aPort, int autoOpen) {
-   if (objectCount == 0) {
-      initialize();
-   }
-   objectCount++;
-
-   port = -1;
-   setPort(aPort);
-   if (autoOpen) {
-      open();
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_unsupported::~MidiInPort_unsupported
-//
-
-MidiInPort_unsupported::~MidiInPort_unsupported() {
-   objectCount--;
-   if (objectCount == 0) {
-      deinitialize();
-   } else if (objectCount < 0) {
-      std::cerr << "Error: bad MidiInPort_unsupported object count!: " 
-           << objectCount << std::endl;
-      exit(1);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_unsupported::close
-//
-
-void MidiInPort_unsupported::close(void) {
-   if (getPortStatus() == 1) {
-      openQ[getPort()] = 0;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_unsupported::closeAll
-//
-
-void MidiInPort_unsupported::closeAll(void) {
-   for (int i=0; i<getNumPorts(); i++) {
-      if (openQ[i] == 1) {
-         openQ[i] = 0;
-      }
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_unsupported::extract -- returns the next MIDI message
-//	received since that last extracted message.
-//
-
-MidiMessage MidiInPort_unsupported::extract(void) {
-   return midiBuffer[getPort()].extract();
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_unsupported::getChannelOffset -- returns zero if MIDI channel 
-//     offset is 0, or 1 if offset is 1.
-//
-
-int MidiInPort_unsupported::getChannelOffset(void) const {
-   return channelOffset;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_unsupported::getCount -- returns the number of unexamined
-//	MIDI messages waiting in the input buffer.
-//
-
-int MidiInPort_unsupported::getCount(void) {
-   return midiBuffer[getPort()].getCount();
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_unsupported::getName -- returns the name of the port.
-//	returns "" if no name. Name is valid until getName is called again.
-//
-
-const char* MidiInPort_unsupported::getName(void) {
-   return "none";
-}
-
-const char* MidiInPort_unsupported::getName(int i) {
-   return "none";
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_unsupported::getNumPorts -- returns the number of available
-// 	ports for MIDI input
-//
-
-int MidiInPort_unsupported::getNumPorts(void) {
-   return numDevices;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_unsupported::getPort -- returns the port to which this
-//	object belongs (as set with the setPort function).
-//
-
-int MidiInPort_unsupported::getPort(void) {
-   return port;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_unsupported::getPortStatus -- 0 if closed, 1 if open
-//
-
-int MidiInPort_unsupported::getPortStatus(void) {
-   if (openQ[getPort()] == 1) {
-      return 1;
-   } else {
-      return 0;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_unsupported::getTrace -- returns true if trace is on or false
-//	if trace is off.  if trace is on, then prints to standard
-// 	output the Midi message received.
-//
-
-int MidiInPort_unsupported::getTrace(void) {
-   return trace;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_unsupported::insert
-//
-
-void MidiInPort_unsupported::insert(const MidiMessage& aMessage) {
-   midiBuffer[getPort()].insert(aMessage);
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_unsupported::message
-//
-
-MidiMessage& MidiInPort_unsupported::message(int index) {
-   return midiBuffer[getPort()][index];
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_unsupported::open -- returns true if MIDI input port was
-//	opened.
-//
-
-int MidiInPort_unsupported::open(void) {
-   if (getPortStatus() == 0) {
-      openQ[getPort()] = 1;
-   }
-   return openQ[getPort()];
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_unsupported::pause -- stop the Midi input port from
-//	inserting MIDI messages into the buffer, but keep the
-//	port open.  Use unpause() to reverse the effect of pause().
-//
-
-void MidiInPort_unsupported::pause(void) {
-   // nothing
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_unsupported::setBufferSize -- sets the allocation
-//	size of the MIDI input buffer.
-//
-
-void MidiInPort_unsupported::setBufferSize(int aSize) {
-   midiBuffer[getPort()].setSize(aSize);
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_unsupported::setChannelOffset -- sets the MIDI channel offset, either 0 or 1.
-//
-
-void MidiInPort_unsupported::setChannelOffset(int anOffset) {
-   switch (anOffset) {
-      case 0:   channelOffset = 0;   break;
-      case 1:   channelOffset = 1;   break;
-      default:
-         std::cout << "Error:  Channel offset can be only 0 or 1." << std::endl;
-         exit(1);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_unsupported::setPort
-//
-
-void MidiInPort_unsupported::setPort(int aPort) {
-   if (aPort < 0 || aPort >= getNumPorts()) {
-      std::cerr << "Error: maximum port number is: " << getNumPorts()-1
-           << ", but you tried to access port: " << aPort << std::endl;
-      exit(1);
-   }
-
-   if (port != -1) {
-      portObjectCount[port]--;
-   }
-   port = aPort;
-   portObjectCount[port]++;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_unsupported::setTrace -- if false, then don't print MIDI messages
-// 	to the screen.
-//
-
-int MidiInPort_unsupported::setTrace(int aState) {
-   int oldtrace = trace;
-   if (aState == 0) {
-      trace = 0;
-   } else {
-      trace = 1;
-   }
-   return oldtrace;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_unsupported::toggleTrace -- switches the state of trace
-//	Returns the previous value of the trace variable.
-//
-
-void MidiInPort_unsupported::toggleTrace(void) {
-   trace = !trace;
-}
-   
-
-
-//////////////////////////////
-//
-// MidiInPort_unsupported::unpause -- enables the Midi input port 
-//	to inserting MIDI messages into the buffer after the 
-//	port is already open.
-//
-
-void MidiInPort_unsupported::unpause(void) {
-   // nothing
-}
-
-
-
-///////////////////////////////////////////////////////////////////////////
-//
-// Private functions
-//
-
-
-
-//////////////////////////////
-//
-// MidiInPort_unsupported::deinitialize -- sets up storage if necessary
-//	This function should be called if the current object is
-//	the first object to be created.
-//
-
-void MidiInPort_unsupported::deinitialize(void) {
-   int deviceCount = numDevices;
-   closeAll();
-
-   if (sysexBuffers != NULL) {
-      for (int i=0; i<deviceCount; i++) {
-         if (sysexBuffers[i] != NULL) {
-            delete [] sysexBuffers[i];
-            sysexBuffers[i] = NULL;
-         }
-      }
-      delete [] sysexBuffers;
-      sysexBuffers = NULL;
-   }
-
-   if (sysexWriteBuffer != NULL) {
-      delete [] sysexWriteBuffer;
-      sysexWriteBuffer = NULL;
-   }
-
-   if (openQ != NULL) {
-      delete [] openQ;
-      openQ = NULL;
-   }
-
-   if (midiBuffer != NULL) {
-      delete [] midiBuffer;
-      midiBuffer = NULL;
-   }
-
-   if (portObjectCount != NULL) {
-      delete [] portObjectCount;
-      portObjectCount = NULL;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_unsupported::initialize -- sets up storage if necessary
-//	This function should be called if the current object is
-//	the first object to be created.
-//
-
-void MidiInPort_unsupported::initialize(void) {
-   // get the number of ports
-   numDevices = 9;
-   if  (getNumPorts() <= 0) {
-      std::cerr << "Error: no MIDI input devices" << std::endl;
-      exit(1);
-   }
-
-
-   // allocate space for sysexBuffers, the port open/close status
-   if (sysexBuffers != NULL) {
-      std::cout << "Error: sysexBuffers are not empty, don't know size" << std::endl;
-      exit(1);
-   }
-   sysexBuffers = new Array<uchar>*[numDevices];
-
-   // allocate space for sysexWriteBuffer, the port open/close status
-   if (sysexWriteBuffer != NULL) delete [] sysexWriteBuffer;
-   sysexWriteBuffer = new int[numDevices];
-
-   // allocate space for openQ, the port open/close status
-   if (openQ != NULL) delete [] openQ;
-   openQ = new int[numDevices];
-
-   // allocate space for object count on each port:
-   if (portObjectCount != NULL) delete [] portObjectCount;
-   portObjectCount = new int[numDevices];
-
-   // allocate space for the Midi input buffers
-   if (midiBuffer != NULL) delete [] midiBuffer;
-   midiBuffer = new CircularBuffer<MidiMessage>[numDevices];
-
-   // initialize the static arrays
-   for (int i=0; i<getNumPorts(); i++) {
-      openQ[i] = 0;
-      portObjectCount[i] = 0;
-      midiBuffer[i].setSize(DEFAULT_INPUT_BUFFER_SIZE);
-
-      sysexWriteBuffer[i] = 0;
-      sysexBuffers[i] = new Array<uchar>[128];
-      for (int n=0; n<128; n++) {
-         sysexBuffers[i][n].allowGrowth(0);      // shouldn't need to grow
-         sysexBuffers[i][n].setAllocSize(32);
-         sysexBuffers[i][n].setSize(0);
-         sysexBuffers[i][n].setGrowth(32);       // in case it will ever grow
-      }
-
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_unsupported::setPortStatus
-//
-
-void MidiInPort_unsupported::setPortStatus(int aStatus) {
-   if (aStatus) {
-      openQ[getPort()] = 1;
-   } else {
-      openQ[getPort()] = 0;
-   }
-}
-
-
-// md5sum:	d8b8f65af70a9b3c33e62794c2a4a91e  - MidiInPort_unsupported.cpp =css= 20030102
diff --git a/extensions/gripd/src/midiio/src/MidiInPort_visual.cpp b/extensions/gripd/src/midiio/src/MidiInPort_visual.cpp
deleted file mode 100644
index b4659bf55..000000000
--- a/extensions/gripd/src/midiio/src/MidiInPort_visual.cpp
+++ /dev/null
@@ -1,1267 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Wed Jan 21 22:46:30 GMT-0800 1998
-// Last Modified: Wed Jun 30 11:29:51 PDT 1999 (added sysex capability)
-// Last Modified: Wed Oct 13 10:18:22 PDT 1999 (midiInUnprepareHeader change)
-// Last Modified: Tue Nov 23 15:01:17 PST 1999 (fixed sysex NULL init)
-// Filename:      ...sig/code/control/MidiInPort/visual/MidiInPort_visual.cpp
-// Web Address:   http://www-ccrma.stanford.edu/~craig/improv/src/MidiInPort_visual.cpp
-// Syntax:        C++ 
-//
-// Description:   An interface for MIDI input capabilities of
-//                Windows 95/NT/98 specific MIDI input methods.
-//                as defined in winmm.lib.  This class is inherited 
-//                privately by the MidiInPort class.
-//
-
-#ifdef VISUAL
-
-
-#include "MidiInPort_visual.h"
-
-#include <windows.h>
-#include <mmsystem.h>
-
-#include <iostream.h>
-
-
-// initialized static variables
-int       MidiInPort_visual::numDevices         = 0;
-int       MidiInPort_visual::objectCount        = 0;
-int*      MidiInPort_visual::openQ              = NULL;
-int*      MidiInPort_visual::inrunningQ         = NULL;
-int*      MidiInPort_visual::portObjectCount    = NULL;
-HMIDIIN*  MidiInPort_visual::device             = NULL;
-MIDIHDR** MidiInPort_visual::sysexDriverBuffer1 = NULL; 
-MIDIHDR** MidiInPort_visual::sysexDriverBuffer2 = NULL; 
-int*      MidiInPort_visual::sysexDBnumber      = NULL;
-HANDLE*   MidiInPort_visual::hMutex             = NULL;
-CircularBuffer<MidiMessage>* MidiInPort_visual::midiBuffer = NULL;
-int       MidiInPort_visual::channelOffset      = 0;
-int*      MidiInPort_visual::sysexWriteBuffer   = NULL;
-Array<uchar>** MidiInPort_visual::sysexBuffers  = NULL;
-int*      MidiInPort_visual::sysexStatus        = NULL;  
-
-
-//////////////////////////////
-// 
-// MidiInPort_visual::MidiInPort_visual
-//	default values: autoOpen = 1
-//
-
-MidiInPort_visual::MidiInPort_visual(void) {
-   if (objectCount == 0) {
-      initialize();
-   }
-   objectCount++;
-
-   trace = 0;
-   port = -1;
-   setPort(0);
-}
-
-
-MidiInPort_visual::MidiInPort_visual(int aPort, int autoOpen) {
-   if (objectCount == 0) {
-      initialize();
-   }
-   objectCount++;
-
-   trace = 0;
-   port = -1;
-   setPort(aPort);
-   if (autoOpen) {
-      open();
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::~MidiInPort_visual
-//
-
-MidiInPort_visual::~MidiInPort_visual() {
-   objectCount--;
-   if (objectCount == 0) {
-      deinitialize();
-   } else if (objectCount < 0) {
-      cerr << "Error: bad MidiInPort_visual object count!: " 
-           << objectCount << endl;
-      exit(1);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::clearSysex -- clears the data from a sysex
-//      message and sets the allocation size to the default size (of 32
-//      bytes).
-//
-
-void MidiInPort_visual::clearSysex(int buffer) {
-   buffer = 0x7f | buffer;    // limit buffer range from 0 to 127
-   
-   if (getPort() == -1) {
-      return;
-   }
-
-   sysexBuffers[getPort()][buffer].setSize(0);
-   if (sysexBuffers[getPort()][buffer].getAllocSize() != 32) {
-      // shrink the storage buffer's size if necessary
-      sysexBuffers[getPort()][buffer].setAllocSize(32);
-   }
-}
-
-
-void MidiInPort_visual::clearSysex(void) {
-   // clear all sysex buffers
-   for (int i=0; i<128; i++) {
-      clearSysex(i);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::close
-//
-
-void MidiInPort_visual::close(void) {
-   if (getPort() == -1) {
-      return;
-   }
-   if (getPortStatus() == 1 && device[getPort()] != NULL) {
-      midiInReset(device[getPort()]);
-      midiInClose(device[getPort()]);
-      uninstallSysexStuff(device[getPort()], port);
-      openQ[getPort()] = 0;
-      inrunningQ[getPort()] = 0;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::closeAll
-//
-
-void MidiInPort_visual::closeAll(void) {
-   for (int i=0; i<getNumPorts(); i++) {
-      if (openQ[i] == 1 && device[i] != NULL) {
-         midiInReset(device[i]);
-         midiInClose(device[i]);
-         if (getPort() != 1) {
-            uninstallSysexStuff(device[getPort()], port);
-         }
-         openQ[i] = 0;
-         inrunningQ[i] = 0;
-      }
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::extract -- returns the next MIDI message
-//	received since that last extracted message.
-//
-
-MidiMessage MidiInPort_visual::extract(void) {
-   MidiMessage output;
-   
-   waitForMutex();
-   if (getPort() != -1) {
-      output = midiBuffer[getPort()].extract();
-   }
-   releaseMutex();
-
-   return output;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::getBufferSize
-//
-
-int MidiInPort_visual::getBufferSize(void) {
-   if (getPort() != -1) {
-      return midiBuffer[getPort()].getSize();
-   } else {
-      return 0;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::getChannelOffset -- returns zero if MIDI channel 
-//     offset is 0, or 1 if offset is 1.
-//
-
-int MidiInPort_visual::getChannelOffset(void) const {
-   return channelOffset;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::getCount -- returns the number of unexamined
-//	MIDI messages waiting in the input buffer.
-//
-
-int MidiInPort_visual::getCount(void) {
-   int output;
-  
-   waitForMutex();
-   if (getPort() != -1) {
-      output = midiBuffer[getPort()].getCount();
-   } else {
-      output = 0;
-   }
-   releaseMutex();
-
-   return output;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::getName -- returns the name of the port.
-//	returns "" if no name. Name is valid until getName is called again.
-//
-
-const char* MidiInPort_visual::getName(void) {
-   static MIDIINCAPS inputCapabilities;
-
-   if (getPort() == -1) {
-      return "Null MIDI Input";
-   }
-
-   if (openQ[getPort()]) {  // port already open
-      midiInGetDevCaps(getPort(), &inputCapabilities, sizeof(MIDIINCAPS));
-   } else {  // port is currently closed
-      if(open()) {;
-         midiInGetDevCaps(getPort(), &inputCapabilities, sizeof(MIDIINCAPS));
-         close();
-      } else {
-         return "";
-      }
-   }
-   return inputCapabilities.szPname;
-}
-
-
-const char* MidiInPort_visual::getName(int i) {
-   static MIDIINCAPS inputCapabilities;
-
-   if (i < 0 || i > getNumPorts()) {
-      cerr << "Error invalid index for getName: " << i << endl;
-      exit(1);
-   }
-
-   midiInGetDevCaps(i, &inputCapabilities, sizeof(MIDIINCAPS));
-
-   return inputCapabilities.szPname;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::getNumPorts -- returns the number of available
-// 	ports for MIDI input
-//
-
-int MidiInPort_visual::getNumPorts(void) {
-   return midiInGetNumDevs();
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::getPort -- returns the port to which this
-//	object belongs (as set with the setPort function).
-//
-
-int MidiInPort_visual::getPort(void) {
-   return port;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::getPortStatus -- 0 if closed, 1 if open, 2 if
-//    specifically not connected to any MIDI port.
-//
-
-int MidiInPort_visual::getPortStatus(void) {
-   if (getPort() == -1) {
-      return 2;
-   }
-
-   if (openQ[getPort()] == 1) {
-      return 1;
-   } else {
-      return 0;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::getSysex -- returns the sysex message contents
-//    of a given buffer.  You should check to see that the size is
-//    non-zero before looking at the data.  The data pointer will
-//    be NULL if there is no data in the buffer.
-//
-
-uchar* MidiInPort_visual::getSysex(int buffer) {
-   buffer &= 0x7f;     // limit the buffer access to indices 0 to 127.
-
-   if (getPort() == -1) {
-      return NULL;
-   }
-
-   if (sysexBuffers[getPort()][buffer].getSize() < 2) {
-      return NULL;
-   } else {
-      return sysexBuffers[getPort()][buffer].getBase();
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::getSysexSize -- returns the sysex message byte
-//    count of a given buffer.   Buffers are in the range from 
-//    0 to 127.
-//
-
-int MidiInPort_visual::getSysexSize(int buffer) {
-   if (getPort() == -1) {
-      return 0;
-   } else {
-      return sysexBuffers[getPort()][buffer & 0x7f].getSize();
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::getTrace -- returns true if trace is on or false
-//	if trace is off.  if trace is on, then prints to standard
-// 	output the Midi message received.
-//
-
-int MidiInPort_visual::getTrace(void) {
-   return trace;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::insert
-//
-
-void MidiInPort_visual::insert(const MidiMessage& aMessage) {
-   waitForMutex();
-   if (getPort() == -1) {
-      // do nothing
-   } else {
-      midiBuffer[getPort()].insert(aMessage);
-   }
-   releaseMutex();
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::installSysex -- put a sysex message into a
-//      buffer.  The buffer number that it is put into is returned.
-//
-
-int MidiInPort_visual::installSysex(uchar* anArray, int aSize) {
-   return installSysexPrivate(getPort(), anArray, aSize);
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::installSysexPrivate -- put a sysex message into a
-//      buffer.  The buffer number that it is put into is returned.
-//
-
-int MidiInPort_visual::installSysexPrivate(int port, uchar* anArray, int aSize){
-   if (port == -1) {
-      return -1;
-   }
-
-   // choose a buffer to install sysex data into:
-   int bufferNumber = sysexWriteBuffer[port];
-   sysexWriteBuffer[port]++;
-   if (sysexWriteBuffer[port] >= 128) {
-      sysexWriteBuffer[port] = 0;
-   }
-
-   // copy contents of sysex message into the chosen buffer
-   sysexBuffers[port][bufferNumber].setSize(aSize);
-   uchar* dataptr = sysexBuffers[port][bufferNumber].getBase();
-   uchar* indataptr = anArray;
-   for (int i=0; i<aSize; i++) { 
-      *dataptr = *indataptr;
-      dataptr++;
-      indataptr++;
-   }
-
-   // return the buffer number that was used
-   return bufferNumber;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::message
-//
-
-MidiMessage& MidiInPort_visual::message(int index) {
-   if (getPort() != -1) {
-      return midiBuffer[getPort()][index];
-   } else {
-      static MidiMessage nullmessage;
-      return nullmessage;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::open -- returns true if MIDI input port was
-//	opened.
-//
-
-int MidiInPort_visual::open(void) {
-   if (getPort() == -1) {
-      return 1;
-   }
-
-   if (getPortStatus() == 0) {
-      int flag;
-      flag = midiInOpen(&device[getPort()], getPort(), 
-         (DWORD)&midiInputCallback, (DWORD)this, CALLBACK_FUNCTION);
-      if (flag == MMSYSERR_NOERROR) {
-         openQ[getPort()] = 1;
-         installSysexStuff(device[getPort()], port);
-         unpause();
-         return 1;
-      } else { // failed to open
-         openQ[getPort()] = 0;
-         device[getPort()] = NULL;
-         return 0;
-      }
-   } else { // already open
-      return 1;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::pause -- stop the Midi input port from
-//	inserting MIDI messages into the buffer, but keep the
-//	port open.  Use unpause() to reverse the effect of pause().
-//
-
-void MidiInPort_visual::pause(void) {
-   if (getPort() == -1) {
-      return;
-   }
-
-   if (openQ[getPort()]) {
-      if (inrunningQ[getPort()] == 1) {
-         midiInStop(device[getPort()]);
-         inrunningQ[getPort()] = 0;
-      }
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::setBufferSize -- sets the allocation
-//	size of the MIDI input buffer.
-//
-
-void MidiInPort_visual::setBufferSize(int aSize) {
-   if (getPort() != -1) {
-      midiBuffer[getPort()].setSize(aSize);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::setChannelOffset -- sets the MIDI channel offset, either 0 or 1.
-//
-
-void MidiInPort_visual::setChannelOffset(int anOffset) {
-   switch (anOffset) {
-      case 0:   channelOffset = 0;   break;
-      case 1:   channelOffset = 1;   break;
-      default:
-         cout << "Error:  Channel offset can be only 0 or 1." << endl;
-         exit(1);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::setPort --
-//
-
-void MidiInPort_visual::setPort(int aPort) {
-   if (aPort < -1 || aPort >= getNumPorts()) {
-      cerr << "Error: maximum port number is: " << getNumPorts()-1
-           << ", but you tried to access port: " << aPort << endl;
-      exit(1);
-   }
-
-   if (port != -1) {
-      portObjectCount[port]--;
-   }
-   port = aPort;
-   if (port != -1) {
-      portObjectCount[port]++;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::setTrace -- if false, then don't print MIDI messages
-// 	to the screen.
-//
-
-int MidiInPort_visual::setTrace(int aState) {
-   int oldtrace = trace;
-   if (aState == 0) {
-      trace = 0;
-   } else {
-      trace = 1;
-   }
-   return oldtrace;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::toggleTrace -- switches the state of trace
-//	Returns the previous value of the trace variable.
-//
-
-void MidiInPort_visual::toggleTrace(void) {
-   trace = !trace;
-}
-   
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::unpause -- enables the Midi input port 
-//	to inserting MIDI messages into the buffer after the 
-//	port is already open.
-//
-
-void MidiInPort_visual::unpause(void) {
-   if (getPort() == -1) {
-      return;
-   }
-
-   if (openQ[getPort()]) {
-      if (inrunningQ[getPort()] == 0) {
-         midiInStart(device[getPort()]);
-         inrunningQ[getPort()] = 1;
-      }
-   }
-}
-
-
-
-///////////////////////////////////////////////////////////////////////////
-//
-// Private functions
-//
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::deinitialize -- sets up storage if necessary
-//	This function should be called if the current object is
-//	the first object to be created.
-//
-
-void MidiInPort_visual::deinitialize(void) {
-   int num = numDevices;
-
-   closeAll();
-
-   if (sysexBuffers != NULL) {
-      for (int i=0; i<numDevices; i++) {
-         if (sysexBuffers[i] != NULL) {
-            delete sysexBuffers[i];
-            sysexBuffers[i] = NULL;
-         }
-      }
-      delete [] sysexBuffers;
-      sysexBuffers = NULL;
-   }
-
-
-   if (sysexDriverBuffer1 != NULL) {
-      for (int i=0; i<numDevices; i++) {
-         if (sysexDriverBuffer1[i] != NULL) {
-            delete sysexDriverBuffer1[i];
-            sysexDriverBuffer1[i] = NULL;
-         }
-      }
-      delete [] sysexDriverBuffer1;
-      sysexDriverBuffer1 = NULL;
-   }
-
-   if (sysexDriverBuffer2 != NULL) {
-      for (int i=0; i<numDevices; i++) {
-         if (sysexDriverBuffer2[i] != NULL) {
-            delete sysexDriverBuffer2[i];
-            sysexDriverBuffer2[i] = NULL;
-         }
-      }
-      delete [] sysexDriverBuffer2;
-      sysexDriverBuffer2 = NULL;
-   }
-
-   if (sysexDBnumber != NULL) {
-      delete [] sysexDBnumber;
-      sysexDBnumber = NULL;
-   }
-
-
-   if (sysexWriteBuffer != NULL) {
-      delete [] sysexWriteBuffer;
-      sysexWriteBuffer = NULL;
-   }
-
-   if (sysexStatus != NULL) {
-      delete [] sysexStatus;
-      sysexStatus = NULL;
-   }
-
-   if (device != NULL) {
-      delete [] device;
-      device = NULL;
-   }
-
-   if (openQ != NULL) {
-      delete [] openQ;
-      openQ = NULL;
-   }
-
-   if (inrunningQ != NULL) {
-      delete [] inrunningQ;
-      inrunningQ = NULL;
-   }
-
-   if (hMutex != NULL) {
-      delete [] hMutex;
-      hMutex = NULL;
-   }
-
-   if (midiBuffer != NULL) {
-      delete [] midiBuffer;
-      midiBuffer = NULL;
-   }
-
-   if (portObjectCount != NULL) {
-      delete [] portObjectCount;
-      portObjectCount = NULL;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::initialize -- sets up storage if necessary
-//	This function should be called if the current object is
-//	the first object to be created.
-//
-
-void MidiInPort_visual::initialize(void) {
-   int i;
-
-   // get the number of ports
-   numDevices = midiInGetNumDevs();
-   if  (getNumPorts() <= 0) {
-      cerr << "Error: no MIDI input devices" << endl;
-      exit(1);
-   }
-
-   // allocate space for Windoze MIDI input structures
-   if (device != NULL) {
-      cerr << "Error: device array should be NULL when calling "
-           << "initialize() in MidiInPort_visual." << endl;
-      exit(1);
-   }
-   device = new HMIDIIN[numDevices];
-
-   // allocate space for openQ, the port open/close status
-   if (openQ != NULL) delete [] openQ;
-   openQ = new int[numDevices];
-
-   // allocate space to keep track of an active/inactive input port
-   if (inrunningQ != NULL) delete [] inrunningQ;
-   inrunningQ = new int[numDevices];
-
-   // allocate space for object count on each port:
-   if (portObjectCount != NULL) delete [] portObjectCount;
-   portObjectCount = new int[numDevices];
-
-   // allocate space for mutual exclusive
-   if (hMutex != NULL) delete [] hMutex;
-   hMutex = new HANDLE[numDevices];
-
-   // allocate space for the Midi input buffers
-   if (midiBuffer != NULL) delete [] midiBuffer;
-   midiBuffer = new CircularBuffer<MidiMessage>[numDevices];
-
-   // allocate space for the MIDI sysex buffer indices
-   if (sysexWriteBuffer != NULL) delete [] sysexWriteBuffer;
-   sysexWriteBuffer = new int[numDevices];
-
-   // allocate space for the sysex MIM_LONGDATA message tracking
-   if (sysexStatus != NULL) delete [] sysexStatus;
-   sysexStatus = new int[numDevices];
-
-   // allocate space for sysex buffers
-   if (sysexBuffers != NULL) {
-      cout << "Error: memory leak on sysex buffers initialization" << endl;
-      exit(1);
-   }
-   sysexBuffers = new Array<uchar>*[numDevices];
-
-   // allocate system exclusive buffers for MIDI driver
-   if (sysexDriverBuffer1 != NULL) {
-      cout << "Error: memory leak on sysex buffer for drivers creation" << endl;
-      exit(1);
-   }
-   sysexDriverBuffer1 = new MIDIHDR*[numDevices];   
-   for (i=0; i<numDevices; i++) {
-      sysexDriverBuffer1[i] = NULL;
-   }
-
-   // allocate system exclusive buffers for MIDI driver
-   if (sysexDriverBuffer2 != NULL) {
-      cout << "Error: memory leak on sysex buffer for drivers creation" << endl;
-      exit(1);
-   }
-   sysexDriverBuffer2 = new MIDIHDR*[numDevices];   
-   for (i=0; i<numDevices; i++) {
-      sysexDriverBuffer2[i] = NULL;
-   }
-
-   // allocate space for keeping track of which buffer to look at
-   if (sysexDBnumber != NULL) delete [] sysexDBnumber;
-   sysexDBnumber = new int[numDevices];
-
-
-   // initialize the static arrays
-   for (i=0; i<getNumPorts(); i++) {
-      device[i] = NULL;
-      openQ[i] = 0;
-      inrunningQ[i] = 0;
-      portObjectCount[i] = 0;
-      hMutex[i] = CreateMutex(NULL, FALSE, "M");
-      midiBuffer[i].setSize(DEFAULT_INPUT_BUFFER_SIZE);
-
-      sysexStatus[i] = -1;
-      sysexWriteBuffer[i] = 0;
-      sysexDBnumber[i] = 0;
-      sysexBuffers[i] = new Array<uchar>[128];
-      for (int n=0; n<128; n++) {
-         sysexBuffers[i][n].allowGrowth(0);      // shouldn't need to grow
-         sysexBuffers[i][n].setAllocSize(32);
-         sysexBuffers[i][n].setSize(0);
-         sysexBuffers[i][n].setGrowth(32);       // in case it will ever grow
-      }
-
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::installSysexStuff -- install all the mess that 
-//   a MIDIIN structure needs in order to receive system exclusives.
-//
-
-void MidiInPort_visual::installSysexStuff(HMIDIIN dev, int port) {
-   if (sysexDriverBuffer1 != NULL) {
-      if (sysexDriverBuffer1[port] != NULL) {
-         // some memory leaks here
-         delete sysexDriverBuffer1[port];
-         sysexDriverBuffer1[port] = NULL;
-      }
-   }
-   if (sysexDriverBuffer2 != NULL) {
-      if (sysexDriverBuffer2[port] != NULL) {
-         // some memory leaks here
-         delete sysexDriverBuffer2[port];
-         sysexDriverBuffer2[port] = NULL;
-      }
-   }
-
-   // allocate space for Drivers sysex byte buffer
-   sysexDriverBuffer1[port] = (LPMIDIHDR)GlobalLock(GlobalAlloc(GMEM_MOVEABLE |
-          GMEM_SHARE, sizeof(MIDIHDR)));
-   sysexDriverBuffer2[port] = (LPMIDIHDR)GlobalLock(GlobalAlloc(GMEM_MOVEABLE |
-          GMEM_SHARE, sizeof(MIDIHDR)));
-
-   if (sysexDriverBuffer1[port] == NULL) {
-      cout << "Error: could not allocate sysex driver's buffer" << endl;
-      exit(1);
-   }
-
-   if (sysexDriverBuffer2[port] == NULL) {
-      cout << "Error: could not allocate sysex driver's buffer" << endl;
-      exit(1);
-   }
-
-   // allocate buffer inside of sysexDriverBuffer
-   sysexDriverBuffer1[port]->lpData = (LPSTR)GlobalLock(GlobalAlloc(
-         GMEM_MOVEABLE | GMEM_SHARE, (DWORD)1024));
-   sysexDriverBuffer2[port]->lpData = (LPSTR)GlobalLock(GlobalAlloc(
-         GMEM_MOVEABLE | GMEM_SHARE, (DWORD)1024));
-
-   if (sysexDriverBuffer1[port]->lpData == NULL) {
-      cout << "Error: there was not enought space to allocate sysex buffer" 
-           << endl;
-      // leaking memory here
-      exit(1);
-   }
-
-   if (sysexDriverBuffer2[port]->lpData == NULL) {
-      cout << "Error: there was not enought space to allocate sysex buffer" 
-           << endl;
-      // leaking memory here
-      exit(1);
-   }
-
-
-   // setup other sysexDriverBuffer data fields
-   sysexDriverBuffer1[port]->dwBufferLength = 1024; // total size of buffer
-   sysexDriverBuffer1[port]->dwBytesRecorded = 0L;  // number of byte in buffer
-   sysexDriverBuffer1[port]->dwFlags = 0L;          // initialize flags
-   sysexDriverBuffer1[port]->dwUser = 0L;       // userdata: used for sysex time
-
-   // setup other sysexDriverBuffer data fields
-   sysexDriverBuffer2[port]->dwBufferLength = 1024; // total size of buffer
-   sysexDriverBuffer2[port]->dwBytesRecorded = 0L;  // number of byte in buffer
-   sysexDriverBuffer2[port]->dwFlags = 0L;          // initialize flags
-   sysexDriverBuffer2[port]->dwUser = 0L;       // userdata: used for sysex time
-
-   // prepare the header
-   int status = midiInPrepareHeader(device[port], sysexDriverBuffer1[port], 
-         sizeof(MIDIHDR));
-
-   if (status != 0) {
-      cout << "Error preparing sysex buffer number: " << port << endl;  
-      // leaking some memory here?
-      exit(1);
-   }
-
-   // prepare the header
-   status = midiInPrepareHeader(device[port], sysexDriverBuffer2[port], 
-         sizeof(MIDIHDR));
-
-   if (status != 0) {
-      cout << "Error preparing sysex buffer number: " << port << endl;  
-      // leaking some memory here?
-      exit(1);
-   }
-
-   // add the sysex buffer to the driver
-   status = midiInAddBuffer(device[port], sysexDriverBuffer1[port], 
-        sizeof(MIDIHDR));
-
-   if (status != 0) {
-      cout << "Error adding sysex buffer to driver: " << port << endl;
-      // leaking some memory here?
-      exit(1);
-   }
-
-   status = midiInAddBuffer(device[port], sysexDriverBuffer2[port], 
-        sizeof(MIDIHDR));
-
-   if (status != 0) {
-      cout << "Error adding sysex buffer to driver: " << port << endl;
-      // leaking some memory here?
-      exit(1);
-   }
-
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::uninstallSysexStuff -- uninstalls all the mess that 
-//   a MIDIIN structure needs in order to receive system exclusives.
-//
-
-void MidiInPort_visual::uninstallSysexStuff(HMIDIIN dev, int port) {
-   if (port == -1) { 
-      return;
-   }
-   // unprepare the headers
-   midiInUnprepareHeader(device[port], sysexDriverBuffer1[port], 
-         sizeof(MIDIHDR));
-   midiInUnprepareHeader(device[port], sysexDriverBuffer2[port], 
-         sizeof(MIDIHDR));
-
-   // deallocate buffer inside of sysexDriverBuffer
-   /* Following code caused problems: perhaps lpData was deleted by driver
-   delete [] sysexDriverBuffer1[port]->lpData;
-   sysexDriverBuffer1[port]->lpData = NULL;
-   delete [] sysexDriverBuffer2[port]->lpData;
-   sysexDriverBuffer2[port]->lpData = NULL;
-   */
-
-   // deallocate space for Drivers sysex byte buffer
-   delete sysexDriverBuffer1[port];
-   delete sysexDriverBuffer2[port];
-   sysexDriverBuffer1[port] = NULL;
-   sysexDriverBuffer2[port] = NULL;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::releaseMutex
-//
-
-void MidiInPort_visual::releaseMutex(void) {
-/*   int flag = */ ReleaseMutex(hMutex[getPort()]);
-/* 
-   if (flag != 0) {
-      cerr << "Error relasing mutex in MIDI input; flag was: " << flag << endl;
-   }
-*/
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::setPortStatus
-//
-
-void MidiInPort_visual::setPortStatus(int aStatus) {
-   if (getPort() == -1) {
-      return;
-   }
-
-   if (aStatus) {
-      openQ[getPort()] = 1;
-   } else {
-      openQ[getPort()] = 0;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInPort_visual::waitForMutex 
-//
-
-void MidiInPort_visual::waitForMutex(void) {
-/*
-   DWORD mutexResult = WaitForSingleObject(hMutex[getPort()], 5000L);
-   if (mutexResult != WAIT_OBJECT_0) {
-      cerr << "Error waiting for mutex in MIDI input" << endl;
-   }
-*/
-}
-
-
-
-///////////////////////////////////////////////////////////////////////////
-
-
-//////////////////////////////
-//
-// midiInputCallback -- the function the MIDI input driver calls when
-// 	it has a message from the Midi in cable ready
-//
-
-void CALLBACK midiInputCallback(HMIDIIN hMidiIn, UINT inputStatus,
-      DWORD instancePtr, DWORD midiMessage, DWORD timestamp) {
-   static MidiMessage newMessage;
-   
-   switch (inputStatus) {
-      case MIM_MOREDATA:
-         // There is more data waiting at the device.
-         // If this case is exists, then that means that the MIDI
-         // device is too slow and some data was lost.
-         // Windows sends a MIM_MOREDATA event only if you specify
-         // the MIDI_IO_STATUS flag to midiInOpen().
-
-         // no break;
-      case MIM_DATA:
-
-         // One regular (non sysex) message has been completely
-         // received.
-  
-         // ignore the Yamaha Active Sensing command and MIDI time clock
-         // at least for now.
-         if ((midiMessage & 0xff) == 0xfe || (midiMessage & 0xff) == 0xf8) {
-            break;
-         }
-
-         newMessage.time = timestamp;
-         newMessage.data = midiMessage;
-         ((MidiInPort_visual*)instancePtr)->insert(newMessage);
-         if (((MidiInPort_visual*)instancePtr)->getTrace()) {
-            cout << "[" << hex << (int)newMessage.command() << dec
-                 << ":" << (int)newMessage.p1() << ","
-                 << (int)newMessage.p2() << "]";
-            cout.flush();
-         }
-         break;
-
-      case MIM_LONGDATA:
-         {
-         // A sysex or part of a sysex message is coming in.
-         // The timestamp variable contains a pointer to a 
-         // MIDIHDR pointer
-
-         MIDIHDR* midiheader = (MIDIHDR*)midiMessage;
-         int dataCount = midiheader->dwBytesRecorded;
-         char* data = midiheader->lpData;
-         int port = ((MidiInPort_visual*)instancePtr)->getPort();
-         if (port == -1) {
-            break;
-         }
-         int* sysexStatus = ((MidiInPort_visual*)instancePtr)->sysexStatus;
-//         MIDIHDR** sysexDriverBuffer = ((MidiInPort_visual*)instancePtr)->
-//               sysexDriverBuffer;
-         HMIDIIN devicex = ((MidiInPort_visual*)instancePtr)->device[port];
-
-         if (dataCount == 0) {
-            // can't handle a zero-length sysex
-            break;
-         }
-
-         // step 1: determine if this is the first part of the sysex
-         // message or a continuation
-         int continuation = 0;
-         if (data[0] == (char)0xf0) {
-            continuation = 0;
-            if (sysexStatus[port] != -1) {
-               cout << "Error: there is another sysex command being "
-                       "received on port " << port << endl;
-               exit(1);
-            }
-         } else {
-            if (sysexStatus[port] == -1) {
-               cout << "Error: no sysex command is being "
-                       "received on port " << port << endl;
-               if (data[0] < 128) {
-                  cout << "First byte is: " << dec << (int)data[0] << endl;
-               } else { 
-                  cout << "First byte is: " << hex << (int)data[0] << endl;
-               }
-               if (data[1] < 128) {
-                  cout << "Second byte is: " << dec << (int)data[1] << endl;
-               } else { 
-                  cout << "Second byte is: " << hex << (int)data[1] << endl;
-               }
-                                                                           
-               exit(1);
-            }
-            continuation = 1;
-         }
-
-         // step 2: if continuing, add the data to the preallocated
-         // sysex buffer, otherwise, get a new buffer location
-         int buffer = -1;
-         if (continuation) {
-            buffer = sysexStatus[port];
-            if (buffer < 0 || buffer > 127) {
-               cout << "Sysex buffer was out of range: " << buffer << endl;
-            }
-            for (int i=0; i<dataCount; i++) {
-               unsigned char datum = data[i];
-               ((MidiInPort_visual*)instancePtr)->
-                     sysexBuffers[port][buffer].append(datum);
-               if (datum == 0xf7) {
-                  for (int k=i; k<dataCount; k++) {
-                     data[k-i] = data[k];
-                  }
-                  midiheader->dwBytesRecorded = dataCount - i - 1;
-
-                  goto insert_sysex_message;
-               }
-            }
-         } else { // if not a continuation of a sysex event
-            buffer = ((MidiInPort_visual*)instancePtr)->sysexWriteBuffer[port];
-            ((MidiInPort_visual*)instancePtr)->sysexWriteBuffer[port]++;
-            if (buffer == 127) {
-               ((MidiInPort_visual*)instancePtr)->sysexWriteBuffer[port] = 0;
-            }
-
-            ((MidiInPort_visual*)instancePtr)->
-                  sysexBuffers[port][buffer].setSize(0);
-            for (int j=0; j<dataCount; j++) {
-               unsigned char datum = data[j];
-               ((MidiInPort_visual*)instancePtr)->
-                     sysexBuffers[port][buffer].append(datum);
-               if (datum == 0xf7) {
-                  for (int k=j; k<dataCount; k++) {
-                     data[k-j] = data[k];
-                  }
-
-                  goto insert_sysex_message;
-               }
-            }
-
-         }
-
-         // recycle the MIDI input buffer for the driver
-         {
-         midiInPrepareHeader(devicex, midiheader, sizeof(MIDIHDR));
-         int dstatus = midiInAddBuffer(devicex, midiheader, sizeof(MIDIHDR));
-         if (dstatus != MMSYSERR_NOERROR) {
-            cout << "Error when calling midiInAddBuffer" << endl;
-            exit(1);
-         }
-         }
-
-         break;
-
-         insert_sysex_message:
-
-         // recycle the MIDI input buffer for the driver
-         {
-         midiInPrepareHeader(devicex, midiheader, sizeof(MIDIHDR));
-         int estatus = midiInAddBuffer(devicex, midiheader, sizeof(MIDIHDR));
-         if (estatus != MMSYSERR_NOERROR) {
-            cout << "Error when calling midiInAddBuffer" << endl;
-            exit(1);
-         }
-         }
-
-         // now that a sysex message is finished, send a midimessage
-         // out to the instancePtr MIDI buffer telling the user
-         // that a sysex message has come in.
-
-         // newMessage.time = timestamp; use last time stamp that came
-         // in because the timestamp variable is used for storing
-         // the pointer of the sysex data.
-
-         newMessage.time = timestamp;
-         newMessage.p0() = 0xf0;
-         newMessage.p1() = buffer;
-         newMessage.p2() = 0;
-         newMessage.p3() = 0;
-
-         ((MidiInPort_visual*)instancePtr)->insert(newMessage);
-         if (((MidiInPort_visual*)instancePtr)->getTrace()) {
-            cout << "[" << hex << (int)newMessage.command() << dec
-                 << ":" << (int)newMessage.p1() << ","
-                 << (int)newMessage.p2() << "]";
-            cout.flush();
-         }
-
-         } // end of local variable range
-         break;
-
-      case MIM_ERROR:
-         // An invalid regular MIDI message was received.
-  
-         break;
-
-      case MIM_LONGERROR:
-         {
-         // An invalid sysex MIDI message was received.
-  
-         // if a sysex message was continuing from a previous part,
-         // then kill that message.
-  
-         int port = ((MidiInPort_visual*)instancePtr)->getPort();
-         if (port == -1) {
-            break;
-         }
-         int buffer = ((MidiInPort_visual*)instancePtr)->sysexStatus[port];
-         if (buffer != -1) {
-            ((MidiInPort_visual*)instancePtr)->
-                  sysexBuffers[port][buffer].setSize(0);
-            ((MidiInPort_visual*)instancePtr)->sysexStatus[port] = -1;
-         }
-
-         HMIDIIN devicex = ((MidiInPort_visual*)instancePtr)->device[port];
-         MIDIHDR* midiheader = (MIDIHDR*)midiMessage;
-
-         // recycle the MIDI input buffer for the driver
-         midiInPrepareHeader(devicex, midiheader, sizeof(MIDIHDR));
-         int status = midiInAddBuffer(devicex, midiheader, sizeof(MIDIHDR));
-         if (status != MMSYSERR_NOERROR) {
-            cout << "Error when calling midiInAddBuffer" << endl;
-            exit(1);
-         }
-
-
-         break;
-         }
-      default: ;
-      // case MIM_OPEN:    // MIDI device is opening
-      // case MIM_CLOSE:   // MIDI device is closing
-   }
-}
-
-
-
-#endif  // VISUAL
-
-
-// md5sum:	db55d9f375b86f54c0c8340547c5701f  - MidiInPort_visual.cpp =css= 20030102
diff --git a/extensions/gripd/src/midiio/src/MidiInput.cpp b/extensions/gripd/src/midiio/src/MidiInput.cpp
deleted file mode 100644
index 93fce870c..000000000
--- a/extensions/gripd/src/midiio/src/MidiInput.cpp
+++ /dev/null
@@ -1,224 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu> 
-// Creation Date: 18 December 1997
-// Last Modified: Sun Jan 25 15:31:49 GMT-0800 1998
-// Last Modified: Thu Apr 27 17:56:03 PDT 2000 (added scale function)
-// Filename:      ...sig/code/control/MidiInput/MidiInput.cpp
-// Web Address:   http://sig.sapp.org/src/sig/MidiInput.cpp
-// Syntax:        C++
-//
-// Description:   A higher-level MIDI input interface than the 
-//                MidiInPort class.  Can be used to allow multiple
-//                objects to share a single MIDI input stream, or
-//                to fake a MIDI input connection.
-//
-
-#include "MidiInput.h"
-#include <stdlib.h>
-#include <iostream>
-
-
-//////////////////////////////
-//
-// MidiInput::MidiInput -- opens the specified MIDI input device and
-//    sets the size of the input buffer.
-//
-
-MidiInput::MidiInput(void) : MidiInPort() {
-   orphanBuffer = NULL;
-}
-
-
-MidiInput::MidiInput(int aPort, int autoOpen) : MidiInPort(aPort, autoOpen) {
-   orphanBuffer = NULL;
-}
-
-
-
-//////////////////////////////
-//
-// MidiInput::~MidiInput
-//
-
-MidiInput::~MidiInput() {
-   if (orphanBuffer != NULL) {
-      delete orphanBuffer;
-      orphanBuffer = NULL;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInput::getBufferSize 
-//
-
-int MidiInput::getBufferSize(void) {
-   if (isOrphan()) {
-      return orphanBuffer->getSize();
-   } else {
-      return MidiInPort::getBufferSize();
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInput::getCount
-//
-
-int MidiInput::getCount(void) {
-   if (isOrphan()) {
-      return orphanBuffer->getCount();
-   } else {
-      return MidiInPort::getCount();
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInput::extract
-//
-
-MidiMessage MidiInput::extract(void) {
-   if (isOrphan()) {
-      return orphanBuffer->extract();
-   } else {
-      return MidiInPort::extract();
-   }
-}
-
-
-
-//////////////////////////////
-//
-// fscale -- converts a value in the range from 0 to 127
-//      into a number in a new range.  For example the value
-//      64 scaled to the range from 0 to 2 would be 1.
-//
-
-double MidiInput::fscale(int value, double min, double max) {
-   return value >= 127 ? max : (value/127.0*(max-min)+min);
-}
-
-
-
-//////////////////////////////
-//
-// fscale14 -- converts a value in the range from 0 to 2^15-1
-//      into a number in a new range.
-//
-
-double MidiInput::fscale14(int value, double min, double max) {
-   return value >= 16383 ? max : (value/16383.0*(max-min)+min);
-}
-
-
-
-//////////////////////////////
-//
-// MidiInput::insert
-//
-
-void MidiInput::insert(const MidiMessage& aMessage) {
-   if (isOrphan()) {
-      orphanBuffer->insert(aMessage);
-   } else {
-      MidiInPort::insert(aMessage);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInput::isOrphan
-//
-
-int MidiInput::isOrphan(void) const {
-   if (orphanBuffer == NULL) {
-      return 0;
-   } else {
-      return 1;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInput::makeOrphanBuffer
-//     default value: aSize = 1024
-//
-
-void MidiInput::makeOrphanBuffer(int aSize) {
-   if (!isOrphan()) {
-      if (orphanBuffer == NULL) {
-         delete orphanBuffer;
-         orphanBuffer = NULL;
-      }
-      orphanBuffer = new CircularBuffer<MidiMessage>(aSize);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiInput::removeOrphanBuffer
-//
-
-void MidiInput::removeOrphanBuffer(void) {
-   if (isOrphan()) {
-      delete orphanBuffer;
-      orphanBuffer = NULL;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// scale -- converts a value in the range from 0 to 127
-//      into a number in a new range.  For example the value
-//      64 scaled to the range from 0 to 2 would be 1.
-//
-
-int MidiInput::scale(int value, int min, int max) {
-   return value >= 127 ? max : (int)(value/127.0*(max-min+1)+min);
-}
-
-
-
-//////////////////////////////
-//
-// scale14 -- converts a value in the range from 0 to 2^15-1
-//      into a number in a new range.  
-//
-
-int MidiInput::scale14(int value, int min, int max) {
-   return value >= 16383 ? max : (int)(value/16383.0*(max-min+1)+min);
-}
-
-
-
-//////////////////////////////
-//
-// MidiInput::setBufferSize
-//
-
-void MidiInput::setBufferSize(int aSize) {
-   if (isOrphan()) {
-      orphanBuffer->setSize(aSize);
-   } else {
-      MidiInPort::setBufferSize(aSize);
-   }
-}   
-
-
-
-// md5sum:	826d403708263eaf0089b4742179c58c  - MidiInput.cpp =css= 20030102
diff --git a/extensions/gripd/src/midiio/src/MidiMessage.cpp b/extensions/gripd/src/midiio/src/MidiMessage.cpp
deleted file mode 100644
index 5f3df1939..000000000
--- a/extensions/gripd/src/midiio/src/MidiMessage.cpp
+++ /dev/null
@@ -1,406 +0,0 @@
-//
-// Copyright 1997-1998 by Craig Stuart Sapp, All Rights Reserved.
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: 19 December 1997
-// Last Modified: Fri Jan 23 00:26:12 GMT-0800 1998
-// Last Modified: Sun Sep 20 12:17:26 PDT 1998
-// Last Modified: Mon Oct 15 14:29:12 PDT 2001 (added is_note functions)
-// Filename:      ...sig/src/sigControl/MidiMessage.cpp
-// Web Address:   http://sig.sapp.org/src/sigControl/MidiMessage.cpp
-// Syntax:        C++ 
-//
-// Description:   A structure for handling MIDI input messages.
-//                This class stores a time stamp plus up to 
-//                four MIDI message bytes.  System Exclusive messages
-//                are stored in a separate array in the MidiInPort
-//                class, and their storage index is passed to the
-//                user through a MIDI message for later extraction
-//                of the full sysex message.
-//
-
-#include "MidiMessage.h"
-
-
-//////////////////////////////
-//
-// MidiMessage::MidiMessage
-//
-
-MidiMessage::MidiMessage(void) {
-   // no initialization.  Note that the default contents are undefined.
-}
-
-
-// default value aTime = 0
-MidiMessage::MidiMessage(int aCommand, int aP1, int aP2, int aTime) {
-   time = aTime;
-   command() = (uchar)aCommand;
-   p1() = (uchar)aP1;
-   p2() = (uchar)aP2;
-}
-
-
-MidiMessage::MidiMessage(const MidiMessage& aMessage) {
-   time = aMessage.time;
-   data = aMessage.data;
-}
-
-
-
-//////////////////////////////
-//
-// MidiMessage::~MidiMessage -- Destructor.
-//
-
-MidiMessage::~MidiMessage() {
-   // do nothing
-}
-
-
-
-//////////////////////////////
-//
-// MidiMessage::command -- returns the MIDI command byte
-//
-
-uchar& MidiMessage::command(void) {
-   return p0();
-}
-
-
-
-//////////////////////////////
-//
-// MidiMessage::operator= -- defines how objects are to be copied
-//
-
-MidiMessage& MidiMessage::operator=(const MidiMessage& aMessage) {
-   time = aMessage.time;
-   data = aMessage.data;
-   return *this;
-}
-
-
-
-//////////////////////////////
-//
-// MidiMessage::operator[] -- access to byte data
-//     can only access index 0 to 3, other number will be
-//     chopped.
-//
-
-uchar& MidiMessage::operator[](int index) {
-   return *(((uchar*)&data)+(index & 0x3));
-}
-
-
-
-//////////////////////////////
-//
-// MidiMessage::p0 -- returns the command byte of the
-//    midi message.  Same as the command() function.
-//
-
-uchar& MidiMessage::p0(void) {
-   return *(((uchar*)&data)+0);
-}
-
-
-
-//////////////////////////////
-//
-// MidiMessage::p1 -- returns the first parameter of the
-//    midi message.  Valid if the command requires a parameter.
-//
-
-uchar& MidiMessage::p1(void) {
-   return *(((uchar*)&data)+1);
-}
-
-
-
-//////////////////////////////
-//
-// MidiMessage::p2 -- returns the second parameter of the
-//    midi message.  Valid if the command requires two parameters.
-//
-
-uchar& MidiMessage::p2(void) {
-   return *(((uchar*)&data)+2);
-}
-
-
-//////////////////////////////
-//
-// MidiMessage::p3 -- returns the third parameter of the
-//    midi message.  Valid if the command requires three parameters
-//    (but none of the MIDI command do).
-//
-
-uchar& MidiMessage::p3(void) {
-   return *(((uchar*)&data)+3);
-}
-
-
-
-//////////////////////////////
-//
-// MidiMessage:getArgCount -- 
-//
-
-int MidiMessage::getArgCount(void) const {
-   return getParameterCount();
-}
-
-
-
-//////////////////////////////
-//
-// MidiMessage::getParameterCount -- returns the number
-//	of valid parameters for the assiciated MIDI command
-//	stored in p0.  Returns -1 if MIDI command is invalid,
-//	or the number of valid parameters is unknown.
-//
-
-int MidiMessage::getParameterCount(void) const {
-   int output = -1;
-   switch (*(((uchar*)&data)+0) & 0xf0) {
-      case 0x80:                // note-off
-      case 0x90:                // note-on
-      case 0xa0:                // aftertouch
-      case 0xb0:                // continuous controller
-      case 0xe0:                // pitch wheel
-         output = 2;
-         break;
-      case 0xc0:                // patch change
-      case 0xd0:                // channel pressure
-         output = 1;
-         break;
-      case 0xf0:
-         switch (*(((uchar*)&data)+0)) {
-            // System Common Messages
-            case 0xf0: return -1;     // variable for sysex
-            case 0xf1: return  1;     // MIDI Time Code Quarter Frame
-            case 0xf2: return  2;     // Song Position Pointer
-            case 0xf3: return  1;     // Song Select
-            case 0xf4: return  0;     // Undefined
-            case 0xf5: return  0;     // Undefined
-            case 0xf6: return  0;     // Tune Request
-            case 0xf7: return  0;     // End of System exclusive
-            // System Real-Time Messages
-            case 0xf8: return  0;     // Timing Clock
-            case 0xf9: return  0;     // Undefined
-            case 0xfa: return  0;     // Start
-            case 0xfb: return  0;     // Continue
-            case 0xfc: return  0;     // Stop
-            case 0xfd: return  0;     // Undefined
-            case 0xfe: return  0;     // Active Sensing
-            case 0xff: return  0;     // System Reset
-         }
-         return -1;
-         break;
-      default:                  // don't know or invalid command
-         output = -1;
-         break;
-   }
-
-   return output;
-}
-
-
-
-//////////////////////////////
-//
-// MidiMessage::getCommand -- same as command().
-//
-
-uchar MidiMessage::getCommand(void) const {
-   return getP0();
-}
-
-
-
-//////////////////////////////
-//
-// MidiMessage::getP0 -- same as p0().
-//
-
-uchar MidiMessage::getP0(void) const {
-   return *(((uchar*)&data)+0);
-}
-
-
-
-//////////////////////////////
-//
-// MidiMessage::getP1 -- same as p1().
-//
-
-uchar MidiMessage::getP1(void) const {
-   return *(((uchar*)&data)+1);
-}
-
-
-
-//////////////////////////////
-//
-// MidiMessage::getP2 -- same as p2().
-//
-
-uchar MidiMessage::getP2(void) const {
-   return *(((uchar*)&data)+2);
-}
-
-
-
-//////////////////////////////
-//
-// MidiMessage::getP3 -- same as p3().
-//
-
-uchar MidiMessage::getP3(void) const {
-   return *(((uchar*)&data)+3);
-}
-
-
-
-//////////////////////////////
-//
-// MidiMessage::setCommand -- same as command().
-//
-
-void MidiMessage::setCommand(uchar aCommand) {
-   command() = aCommand;
-}
-
-
-
-//////////////////////////////
-//
-// MidiMessage::setData -- sets the message bytes
-//	default values: aP1 = 0, aP2 = 0, aP3 = 0.
-//
-
-void MidiMessage::setData(uchar aCommand, uchar aP1, uchar aP2, uchar aP3) {
-   setCommand(aCommand);
-   setP1(aP1);
-   setP2(aP2);
-   setP3(aP3);
-}
-
-
-
-//////////////////////////////
-//
-// MidiMessage::setP0 -- same as p0().
-//
-
-void MidiMessage::setP0(uchar aP0) {
-   p0() = aP0;
-}
-
-
-
-//////////////////////////////
-//
-// MidiMessage::setP1 -- same as p1().
-//
-
-void MidiMessage::setP1(uchar aP1) {
-   p1() = aP1;
-}
-
-
-
-//////////////////////////////
-//
-// MidiMessage::setP2 -- same as p2().
-//
-
-void MidiMessage::setP2(uchar aP2) {
-   p2() = aP2;
-}
-
-
-
-//////////////////////////////
-//
-// MidiMessage::setP3 -- same as p3().
-//
-
-void MidiMessage::setP3(uchar aP3) {
-   p3() = aP3;
-}
-
-
-
-//////////////////////////////
-//
-// MidiMessage::is_note -- Returns true if the MIDI command is 0x80 or 0x90.
-//
-
-int MidiMessage::is_note(void) {
-   if ((p0() & 0xf0) == 0x90) {         // note-on or note-off
-      return 1;
-   } else if ((p0() & 0xf0) == 0x80) {   // note-off
-      return 1;
-   } else {
-      return 0;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiMessage::is_note_on -- Returns true if the MIDI command is a note
-//     on message (0x90 series with p2() > 0).
-//
-
-int MidiMessage::is_note_on(void) {
-   if (((p0() & 0xf0) == 0x90) &&  p2() > 0) {
-      return 1;
-   } else {
-      return 0;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiMessage::is_note_off -- Returns true if the MIDI command is a note
-//     off message (0x80 series or 0x90 series with p2() == 0).
-//
-
-int MidiMessage::is_note_off(void) {
-   if ((p0() & 0xf0) == 0x80) { 
-      return 1;
-   } else if (((p0() & 0xf0) == 0x90) && (p2() == 0)) {
-      return 1;
-   } else {
-      return 0;
-   }
-}
-
-
-///////////////////////////////////////////////////////////////////////////
-
-//////////////////////////////
-//
-// operator<< MidiMessage
-//
-
-std::ostream& operator<<(std::ostream& out, MidiMessage& aMessage) {
-   out << "(" << aMessage.time << ") " 
-       << std::hex << (int)aMessage.getP0() << ": ";
-   for (int i=1; i<=aMessage.getArgCount(); i++) {
-      out << std::dec << (int)aMessage[i] << ' ';
-   }
-
-   return out;
-}
-
-
-
-// md5sum:	487f0fddeb8db20d81f9c039e2a460c9  - MidiMessage.cpp =css= 20030102
diff --git a/extensions/gripd/src/midiio/src/MidiOutPort_alsa.cpp b/extensions/gripd/src/midiio/src/MidiOutPort_alsa.cpp
deleted file mode 100644
index 07f4e5d0b..000000000
--- a/extensions/gripd/src/midiio/src/MidiOutPort_alsa.cpp
+++ /dev/null
@@ -1,469 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Wed May 10 16:16:21 PDT 2000
-// Last Modified: Sun May 14 20:44:12 PDT 2000
-// Filename:      ...sig/code/control/MidiOutPort/alsa/MidiOutPort_alsa.cpp
-// Web Address:   http://sig.sapp.org/src/sig/MidiOutPort_alsa.cpp
-// Syntax:        C++ 
-//
-// Description:   Operating-System specific interface for
-//                basic MIDI output capabilities in Linux using
-//                ALSA sound drivers.  Privately inherited by the
-//                MidiOutPort class via the MidiOutPort_alsa class.
-// 
-
-#if defined(LINUX) && defined(ALSA)
-
-#include "MidiOutPort_alsa.h"
-#include <iostream>
-#include <stdlib.h>
-
-// initialized static variables
-int       MidiOutPort_alsa::numDevices      = 0;
-int       MidiOutPort_alsa::objectCount     = 0;
-int*      MidiOutPort_alsa::portObjectCount = NULL;
-int       MidiOutPort_alsa::channelOffset   = 0;
-int*      MidiOutPort_alsa::trace           = NULL;
-std::ostream*  MidiOutPort_alsa::tracedisplay    = &std::cout;
-
-
-
-//////////////////////////////
-// 
-// MidiOutPort_alsa::MidiOutPort_alsa
-//	default values: autoOpen = 1
-//
-
-#include <unistd.h>
-
-MidiOutPort_alsa::MidiOutPort_alsa(void) {
-   if (objectCount == 0) {
-      initialize();
-   }
-   objectCount++;
-
-   port = -1;
-   setPort(0);
-}
-
-
-MidiOutPort_alsa::MidiOutPort_alsa(int aPort, int autoOpen) {
-   if (objectCount == 0) {
-      initialize();
-   }
-   objectCount++;
-
-   port = -1;
-   setPort(aPort);
-   if (autoOpen) {
-      open();
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_alsa::~MidiOutPort_alsa --
-//
-
-MidiOutPort_alsa::~MidiOutPort_alsa() {
-   objectCount--;
-   if (objectCount == 0) {
-      deinitialize();
-   } else if (objectCount < 0) {
-      std::cout << "Error: bad MidiOutPort object count!: " << objectCount << std::endl;
-      exit(1);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_alsa::close --
-//
-
-void MidiOutPort_alsa::close(void) {
-   Sequencer_alsa::closeOutput(getPort());
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_alsa::closeAll --
-//
-
-void MidiOutPort_alsa::closeAll(void) {
-   int i;
-   for (i=0; i<getNumPorts(); i++) {
-      Sequencer_alsa::closeOutput(i);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_alsa::getChannelOffset -- returns zero if MIDI channel 
-//     offset is 0, or 1 if offset is 1.
-//
-
-int MidiOutPort_alsa::getChannelOffset(void) const {
-   return channelOffset;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_alsa::getName -- returns the name of the port.
-//	returns "" if no name. Name is valid until getName is called again.
-//
-
-const char* MidiOutPort_alsa::getName(void) {
-   if (getPort() == -1) { 
-      return "Null ALSA Midi Output";
-   }
-   return getOutputName(getPort());
-}
-
-
-const char* MidiOutPort_alsa::getName(int i) {
-   return Sequencer_alsa::getOutputName(i);
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_alsa::getNumPorts -- returns the number of available
-// 	ports for MIDI output
-//
-
-int MidiOutPort_alsa::getNumPorts(void) {
-   return Sequencer_alsa::getNumOutputs();
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_alsa::getPort -- returns the port to which this
-//	object belongs (as set with the setPort function).
-//
-
-int MidiOutPort_alsa::getPort(void) {
-   return port;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_alsa::getPortStatus -- 0 if closed, 1 if open
-//
-
-int MidiOutPort_alsa::getPortStatus(void) {
-   return is_open_out(getPort());
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_alsa::getTrace -- returns true if trace is on or
-//	false if off.  If trace is on, then prints to standard output
-//	the Midi message being sent.
-//
-
-int MidiOutPort_alsa::getTrace(void) {
-   if (getPort() == -1) return -1;
-
-   return trace[getPort()];
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_alsa::rawsend -- send the Midi command and its parameters
-//
-
-int MidiOutPort_alsa::rawsend(int command, int p1, int p2) {
-   if (getPort() == -1) return 0;
-
-   int status;
-   uchar mdata[3] = {(uchar)command, (uchar)p1, (uchar)p2};
-   status = write(getPort(), mdata, 3);   
-
-   if (getTrace()) {
-      if (status == 1) {
-         std::cout << "(" << std::hex << (int)mdata[0] << std::dec << ":"
-              << (int)mdata[1] << "," << (int)mdata[2] << ")";
-         std::cout.flush();
-      } else {
-         std::cout << "(" << std::hex << (int)mdata[0] << std::dec << "X"
-              << (int)mdata[1] << "," << (int)mdata[2] << ")";
-         std::cout.flush();
-      }
-   }      
-
-   return status;
-}
-
-
-int MidiOutPort_alsa::rawsend(int command, int p1) {
-   if (getPort() == -1) return 0;   
-
-   int status;
-   uchar mdata[2] = {(uchar)command, (uchar)p1};
-
-   status = write(getPort(), mdata, 2);   
-
-   if (getTrace()) {
-      if (status == 1) {
-         std::cout << "(" << std::hex << (int)mdata[0] << std::dec << ":"
-              << (int)mdata[1] << ")";
-         std::cout.flush();
-      } else {
-         std::cout << "(" << std::hex << (int)mdata[0] << std::dec << "X"
-              << (int)mdata[1] << "," << (int)mdata[2] << ")";
-         std::cout.flush();
-      }
-   }
- 
-   return status;
-}
-
-
-int MidiOutPort_alsa::rawsend(int command) {
-   if (getPort() == -1) return 0;   
-
-   int status;
-   uchar mdata[1] = {(uchar)command};
-
-   status = write(getPort(), mdata, 1);
-
-   if (getTrace()) {
-      if (status == 1) {
-         std::cout << "(" << std::hex << (int)mdata[0] << ")";
-         std::cout.flush();
-      } else {
-         std::cout << "(" << std::hex << (int)mdata[0] << ")";
-         std::cout.flush();
-      }
-   }
-
-   return status;
-}
-
-
-int MidiOutPort_alsa::rawsend(uchar* array, int size) {
-   if (getPort() == -1) return 0;   
-
-   int status;
-   status = write(getPort(), array, size);
-   
-   if (getTrace()) {
-      if (status == 1) {
-         std::cout << "(array)";
-         std::cout.flush();
-      } else {
-         std::cout << "(XarrayX)";
-         std::cout.flush();
-      }
-   }
-
-   return status;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_alsa::open -- returns true if MIDI output port was
-//	opened.
-//
-
-int MidiOutPort_alsa::open(void) {
-   if (getPort() == -1) {
-      return 2;
-   } else {
-      return Sequencer_alsa::openOutput(getPort());
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_alsa::setChannelOffset -- sets the MIDI channel offset, 
-//     either 0 or 1.
-//
-
-void MidiOutPort_alsa::setChannelOffset(int anOffset) {
-   switch (anOffset) {
-      case 0:   channelOffset = 0;   break;
-      case 1:   channelOffset = 1;   break;
-      default:
-         std::cout << "Error:  Channel offset can be only 0 or 1." << std::endl;
-         exit(1);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_alsa::setPort --
-//
-
-void MidiOutPort_alsa::setPort(int aPort) {
-   if (aPort == -1) return;
- 
-   if (aPort < 0 || aPort >= getNumPorts()) {
-      std::cout << "Error: maximum port number is: " << getNumPorts()-1
-           << ", but you tried to access port: " << aPort << std::endl;
-      exit(1);
-   }
-
-   if (port != -1) {
-      portObjectCount[port]--;
-   }
-   port = aPort;
-   if (port != -1) {
-      portObjectCount[port]++;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_alsa::setTrace -- if false, then won't print
-//      Midi messages to standard output.
-//
-
-int MidiOutPort_alsa::setTrace(int aState) {
-   if (getPort() == -1) return -1;
-
-   int oldtrace = trace[getPort()];
-   if (aState == 0) {
-      trace[getPort()] = 0;
-   } else {
-      trace[getPort()] = 1;
-   }
-   return oldtrace;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_alsa::sysex -- send a system exclusive message.
-//     The message must start with a 0xf0 byte and end with
-//     a 0xf7 byte.
-//
-
-int MidiOutPort_alsa::sysex(uchar* array, int size) {
-   if (getPort() == -1) {
-      return 2;
-   }
-
-   if (size == 0 || array[0] != 0xf0 || array[size-1] != 0xf7) {
-      std::cout << "Error: invalid sysex message" << std::endl;
-      exit(1);
-   }
-
-   return rawsend(array,size);
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_alsa::toggleTrace --
-//
-
-void MidiOutPort_alsa::toggleTrace(void) {
-   if (getPort() == -1) return;
-
-   trace[getPort()] = !trace[getPort()];
-}
-
-
-
-///////////////////////////////////////////////////////////////////////////
-//
-// Private functions
-//
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_alsa::deinitialize -- sets up storage if necessary
-//	This function should be called if the current object is
-//	the first object to be created.
-//
-
-void MidiOutPort_alsa::deinitialize(void) {
-   closeAll();
-   if (portObjectCount != NULL) delete [] portObjectCount;
-   portObjectCount = NULL;
-   if (trace != NULL) delete [] trace;
-   trace = NULL;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_alsa::initialize -- sets up storage if necessary
-//	This function should be called if the current object is
-//	the first object to be created.
-//
-
-void MidiOutPort_alsa::initialize(void) {
-   // get the number of ports
-   numDevices = getNumOutputs();
-   if  (getNumPorts() <= 0) {
-      std::cout << "Warning: no MIDI output devices" << std::endl;
-      portObjectCount = NULL;
-      trace = NULL;
-   } else {
-      // allocate space for object count on each port:
-      if (portObjectCount != NULL) delete [] portObjectCount;
-      portObjectCount = new int[numDevices];
-   
-      // allocate space for trace variable for each port:
-      if (trace != NULL) delete [] trace;
-      trace = new int[numDevices];
-   
-      // initialize the static arrays
-      for (int i=0; i<getNumPorts(); i++) {
-         portObjectCount[i] = 0;
-         trace[i] = 0;
-      }
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_alsa::setPortStatus --
-//
-
-void MidiOutPort_alsa::setPortStatus(int aStatus) {
-   // not used in Linux implementation
-}
-
-
-#endif  /* LINUX and ALSA */
-
-
-
-// md5sum:	6f5d0ce75ae6e086ad949178e7deefcb  - MidiOutPort_alsa.cpp =css= 20030102
diff --git a/extensions/gripd/src/midiio/src/MidiOutPort_linux.cpp b/extensions/gripd/src/midiio/src/MidiOutPort_linux.cpp
deleted file mode 100644
index 43bba905d..000000000
--- a/extensions/gripd/src/midiio/src/MidiOutPort_linux.cpp
+++ /dev/null
@@ -1,381 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Sun May 14 20:58:32 PDT 2000
-// Last Modified: Thu May 18 23:37:11 PDT 2000
-// Last Modified: Sat Nov  2 20:40:01 PST 2002 (added ALSA OSS def)
-// Filename:      ...sig/code/control/MidiOutPort_linux/MidiOutPort_linux.cpp
-// Web Address:   http://sig.sapp.org/include/sig/MidiOutPort_linux.cpp
-// Syntax:        C++ 
-//
-// Description:   Linux MIDI output class which detects which
-//                type of MIDI drivers are available: either
-//                ALSA or OSS. 
-//
-
-#ifdef LINUX
-#if defined(ALSA) && defined(OSS)
-
-#include "MidiOutPort_linux.h"
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <stdlib.h>
-
-
-// initialize static members
-int MidiOutPort_linux::objectCount = 0;
-int MidiOutPort_linux::current   = UNKNOWN_MIDI_SELECT; // MIDI out selected
-int MidiOutPort_linux::alsaQ     = 0;    // boolean for if ALSA is present
-int MidiOutPort_linux::ossQ      = 0;    // boolean for if OSS is present
-
-MidiOutPort_oss         *MidiOutPort_linux::oss_output = NULL;
-MidiOutPort_alsa        *MidiOutPort_linux::alsa_output = NULL;
-MidiOutPort_unsupported *MidiOutPort_linux::unknown_output = NULL;
-
-
-MidiOutPort_linux::MidiOutPort_linux(void) {
-   if (objectCount == 0) {
-      determineDrivers();
-   } else if (objectCount < 0) {
-      cout << "Error: unusual MidiOutPort_linux object count" << endl;
-      exit(1);
-   } 
-
-   objectCount++;
-} 
-
-MidiOutPort_linux::MidiOutPort_linux(int aPort, int autoOpen = 1) {
-   determineDrivers();
-   setAndOpenPort(aPort);
-} 
-
-MidiOutPort_linux::~MidiOutPort_linux() {
-   objectCount--;
-   if (objectCount == 0) {
-      if (oss_output != NULL) {
-         delete oss_output;
-         oss_output = NULL;
-      }
-   
-      if (alsa_output != NULL) {
-         delete alsa_output;
-         alsa_output = NULL;
-      }
-   
-      if (unknown_output != NULL) {
-         delete unknown_output;
-         unknown_output = NULL;
-      }
-   }
-
-   if (objectCount < 0) {
-      cout << "Error: unusual MidiOutPort_linux count when destructing" << endl;
-      exit(1);
-   }
-} 
-
-
-void MidiOutPort_linux::close(void) {
-   switch (getSelect()) {
-      case OSS_MIDI_SELECT:       oss_output->close();       break;
-      case ALSA_MIDI_SELECT:      alsa_output->close();      break;
-      default:                    unknown_output->close();   break;
-   }
-}
-
-void MidiOutPort_linux::closeAll(void) {
-   switch (getSelect()) {
-      case OSS_MIDI_SELECT:       oss_output->closeAll();       break;
-      case ALSA_MIDI_SELECT:      alsa_output->closeAll();      break;
-      default:                    unknown_output->closeAll();   break;
-   }
-} 
-
-int MidiOutPort_linux::getChannelOffset(void) const {
-   switch (getSelect()) {
-      case OSS_MIDI_SELECT:  return oss_output->getChannelOffset();     break;
-      case ALSA_MIDI_SELECT: return alsa_output->getChannelOffset();    break;
-      default:               return unknown_output->getChannelOffset(); break;
-   }
-} 
-
-const char* MidiOutPort_linux::getName(void) {
-   switch (getSelect()) {
-      case OSS_MIDI_SELECT:  return oss_output->getName();     break;
-      case ALSA_MIDI_SELECT: return alsa_output->getName();    break;
-      default:               return unknown_output->getName(); break;
-   }
-} 
-
-const char* MidiOutPort_linux::getName(int i) {
-   switch (getSelect()) {
-      case OSS_MIDI_SELECT:  return oss_output->getName(i);     break;
-      case ALSA_MIDI_SELECT: return alsa_output->getName(i);    break;
-      default:               return unknown_output->getName(i); break;
-   }
-} 
-
-int MidiOutPort_linux::getNumPorts(void) {
-   switch (getSelect()) {
-      case OSS_MIDI_SELECT:  return oss_output->getNumPorts();     break;
-      case ALSA_MIDI_SELECT: return alsa_output->getNumPorts();    break;
-      default:               return unknown_output->getNumPorts(); break;
-   }
-} 
-
-int MidiOutPort_linux::getPort(void) {
-   switch (getSelect()) {
-      case OSS_MIDI_SELECT:  return oss_output->getPort();     break;
-      case ALSA_MIDI_SELECT: return alsa_output->getPort();    break;
-      default:               return unknown_output->getPort(); break;
-   }
-} 
-
-int MidiOutPort_linux::getPortStatus(void) {
-   switch (getSelect()) {
-      case OSS_MIDI_SELECT:  return oss_output->getPortStatus();     break;
-      case ALSA_MIDI_SELECT: return alsa_output->getPortStatus();    break;
-      default:               return unknown_output->getPortStatus(); break;
-   }
-} 
-
-int MidiOutPort_linux::getTrace(void) {
-   switch (getSelect()) {
-      case OSS_MIDI_SELECT:  return oss_output->getTrace();     break;
-      case ALSA_MIDI_SELECT: return alsa_output->getTrace();    break;
-      default:               return unknown_output->getTrace(); break;
-   }
-} 
-
-int MidiOutPort_linux::open(void) {
-   switch (getSelect()) {
-      case OSS_MIDI_SELECT:  return oss_output->open();     break;
-      case ALSA_MIDI_SELECT: return alsa_output->open();    break;
-      default:               return unknown_output->open(); break;
-   }
-} 
-
-int MidiOutPort_linux::rawsend(int command, int p1, int p2) {
-   switch (getSelect()) {
-      case OSS_MIDI_SELECT:  return oss_output->rawsend(command, p1, p2);     break;
-      case ALSA_MIDI_SELECT: return alsa_output->rawsend(command, p1, p2);    break;
-      default:               return unknown_output->rawsend(command, p1, p2); break;
-   }
-} 
-
-int MidiOutPort_linux::rawsend(int command, int p1) {
-   switch (getSelect()) {
-      case OSS_MIDI_SELECT:  return oss_output->rawsend(command, p1);     break;
-      case ALSA_MIDI_SELECT: return alsa_output->rawsend(command, p1);    break;
-      default:               return unknown_output->rawsend(command, p1); break;
-   }
-} 
-
-int MidiOutPort_linux::rawsend(int command) {
-   switch (getSelect()) {
-      case OSS_MIDI_SELECT:  return oss_output->rawsend(command);     break;
-      case ALSA_MIDI_SELECT: return alsa_output->rawsend(command);    break;
-      default:               return unknown_output->rawsend(command); break;
-   }
-} 
-
-int MidiOutPort_linux::rawsend(uchar* array, int size) {
-   switch (getSelect()) {
-      case OSS_MIDI_SELECT:  return oss_output->rawsend(array, size);     break;
-      case ALSA_MIDI_SELECT: return alsa_output->rawsend(array, size);    break;
-      default:               return unknown_output->rawsend(array, size); break;
-   }
-} 
-
-void MidiOutPort_linux::setAndOpenPort(int aPort) {
-   switch (getSelect()) {
-      case OSS_MIDI_SELECT:  
-         oss_output->setPort(aPort);
-         oss_output->open();
-         break;
-      case ALSA_MIDI_SELECT: 
-         alsa_output->setPort(aPort);
-         alsa_output->open();
-         break;
-      default:
-         unknown_output->setPort(aPort); 
-         unknown_output->open(); 
-         break;
-   }
-} 
-
-void MidiOutPort_linux::setChannelOffset(int aChannel) {
-   switch (getSelect()) {
-      case OSS_MIDI_SELECT:  oss_output->setChannelOffset(aChannel);     break;
-      case ALSA_MIDI_SELECT: alsa_output->setChannelOffset(aChannel);    break;
-      default:               unknown_output->setChannelOffset(aChannel); break;
-   }
-} 
-
-void MidiOutPort_linux::setPort(int aPort) {
-   switch (getSelect()) {
-      case OSS_MIDI_SELECT:  oss_output->setPort(aPort);     break;
-      case ALSA_MIDI_SELECT: 
-      alsa_output->setPort(aPort);    break;
-      default:               unknown_output->setPort(aPort); break;
-   }
-} 
-
-int MidiOutPort_linux::setTrace(int aState) {
-   switch (getSelect()) {
-      case OSS_MIDI_SELECT:  return oss_output->setTrace(aState);      break;
-      case ALSA_MIDI_SELECT: return alsa_output->setTrace(aState);     break;
-      default:               return unknown_output->setTrace(aState);  break;
-   }
-} 
-
-int MidiOutPort_linux::sysex(uchar* array, int size) {
-   switch (getSelect()) {
-      case OSS_MIDI_SELECT:  return oss_output->sysex(array, size);     break;
-      case ALSA_MIDI_SELECT: return alsa_output->sysex(array, size);    break;
-      default:               return unknown_output->sysex(array, size); break;
-   }
-} 
-
-void MidiOutPort_linux::toggleTrace(void) {
-   switch (getSelect()) {
-      case OSS_MIDI_SELECT:  oss_output->toggleTrace();       break;
-      case ALSA_MIDI_SELECT: alsa_output->toggleTrace();      break;
-      default:               unknown_output->toggleTrace();   break;
-   }
-} 
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_linux::getSelect -- return the type of MIDI which
-//      is being used to send MIDI output.
-//
-
-int MidiOutPort_linux::getSelect(void) {
-   return current;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_linux::selectOSS -- select the OSS MIDI output
-//   returns 1 if OSS is available, otherwise returns 0.
-//
-
-int MidiOutPort_linux::selectOSS(void) {
-   if (ossQ) {
-      current = OSS_MIDI_SELECT;
-      return 1;
-   } else {
-      return 0;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_linux::selectALSA -- select the ALSA MIDI output
-//   returns 1 if ALSA is available, otherwise returns 0.
-//
-
-int MidiOutPort_linux::selectALSA(void) {
-   if (alsaQ) {
-      current = ALSA_MIDI_SELECT;
-      return 1;
-   } else {
-      return 0;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_linux::selectUnknown -- select the Unknown MIDI output
-//   returns 1 always.
-//
-
-int MidiOutPort_linux::selectUnknown(void) {
-   current = UNKNOWN_MIDI_SELECT;
-   return 1;
-}
-
-
-
-///////////////////////////////////////////////////////////////////////////
-//
-// Private Functions
-//
-
-#include <unistd.h>
-
-//////////////////////////////
-//
-// MidiOutPort_linux::determineDrivers -- see if OSS/ALSA are
-//      available.  If /dev/sequencer is present, assume that OSS is
-//      available.  If /dev/snd/sdq is present, assume that ALSA is
-//      available.  
-//
-
-void MidiOutPort_linux::determineDrivers(void) {
-   struct stat filestats;
-   int status;
-   status = stat("/dev/sequencer", &filestats);
-
-   if (status != 0) {
-      ossQ = 0;
-   } else {
-      ossQ = 1;
-   }
-
-   status = stat("/dev/snd/seq", &filestats);
-
-   if (status != 0) {
-      alsaQ = 0;
-   } else {
-      alsaQ = 1;
-   }
-
-
-   current = UNKNOWN_MIDI_SELECT;
-
-   if (ossQ) {
-      current = OSS_MIDI_SELECT;
-   }
-
-   if (alsaQ) {
-      current = ALSA_MIDI_SELECT;
-   }
-
-   // create MIDI output types which are available:
-
-   if (oss_output != NULL) {
-      delete oss_output;
-      oss_output = NULL;
-   }
-   if (alsa_output != NULL) {
-      delete alsa_output;
-      alsa_output = NULL;
-   }
-   if (unknown_output != NULL) {
-      delete unknown_output;
-      unknown_output = NULL;
-   }
-
-   if (ossQ) {
-      oss_output = new MidiOutPort_oss;
-   }
-   if (alsaQ) {
-      alsa_output = new MidiOutPort_alsa;
-   }
-   unknown_output = new MidiOutPort_unsupported;
-}
-
-
-#endif /* ALSA and OSS */
-#endif /* LINUX */
-
-// md5sum:	be1ccf667122f1c9cf56a95b2ffb8e79  - MidiOutPort_linux.cpp =css= 20030102
diff --git a/extensions/gripd/src/midiio/src/MidiOutPort_oss.cpp b/extensions/gripd/src/midiio/src/MidiOutPort_oss.cpp
deleted file mode 100644
index 74f17c4e9..000000000
--- a/extensions/gripd/src/midiio/src/MidiOutPort_oss.cpp
+++ /dev/null
@@ -1,462 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Fri Dec 18 19:22:20 PST 1998
-// Last Modified: Fri Jan  8 04:26:16 PST 1999
-// Last Modified: Wed May 10 17:00:11 PDT 2000 (name change from _linux to _oss)
-// Filename:      ...sig/code/control/MidiOutPort/linux/MidiOutPort_oss.cpp
-// Web Address:   http://sig.sapp.org/src/sig/MidiOutPort_oss.cpp
-// Syntax:        C++ 
-//
-// Description:   Operating-System specific interface for
-//                basic MIDI output capabilities in Linux using
-//                OSS sound drivers.  Privately inherited by the
-//                MidiOutPort class.
-// 
-
-#ifdef LINUX
-
-#include "MidiOutPort_oss.h"
-#include <iostream>
-#include <stdlib.h>
-
-// initialized static variables
-int       MidiOutPort_oss::numDevices      = 0;
-int       MidiOutPort_oss::objectCount     = 0;
-int*      MidiOutPort_oss::portObjectCount = NULL;
-int       MidiOutPort_oss::channelOffset   = 0;
-int*      MidiOutPort_oss::trace           = NULL;
-std::ostream*  MidiOutPort_oss::tracedisplay    = &std::cout;
-
-
-
-//////////////////////////////
-// 
-// MidiOutPort_oss::MidiOutPort_oss
-//	default values: autoOpen = 1
-//
-
-
-MidiOutPort_oss::MidiOutPort_oss(void) {
-   if (objectCount == 0) {
-      initialize();
-   }
-   objectCount++;
-
-   port = -1;
-   setPort(0);
-}
-
-
-MidiOutPort_oss::MidiOutPort_oss(int aPort, int autoOpen) {
-   if (objectCount == 0) {
-      initialize();
-   }
-   objectCount++;
-
-   port = -1;
-   setPort(aPort);
-   if (autoOpen) {
-      open();
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_oss::~MidiOutPort_oss
-//
-
-MidiOutPort_oss::~MidiOutPort_oss() {
-   objectCount--;
-   if (objectCount == 0) {
-      deinitialize();
-   } else if (objectCount < 0) {
-      std::cerr << "Error: bad MidiOutPort object count!: " << objectCount << std::endl;
-      exit(1);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_oss::close
-//
-
-void MidiOutPort_oss::close(void) {
-   // don't close anything, because the 
-   // Linux driver keeps all of the ports open while the
-   // midi driver (/dev/sequencer) is running.
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_oss::closeAll
-//
-
-void MidiOutPort_oss::closeAll(void) {
-   // the Linux MIDI driver will close the /dev/sequencer device
-   // which will close all MIDI output ports at the same time.
-   Sequencer_oss::close();
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_oss::getChannelOffset -- returns zero if MIDI channel 
-//     offset is 0, or 1 if offset is 1.
-//
-
-int MidiOutPort_oss::getChannelOffset(void) const {
-   return channelOffset;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_oss::getName -- returns the name of the port.
-//	returns "" if no name. Name is valid until getName is called again.
-//
-
-const char* MidiOutPort_oss::getName(void) {
-   if (getPort() == -1) { 
-      return "Null OSS MIDI Output";
-   }
-   return getOutputName(getPort());
-}
-
-
-const char* MidiOutPort_oss::getName(int i) {
-   return Sequencer_oss::getOutputName(i);
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_oss::getNumPorts -- returns the number of available
-// 	ports for MIDI output
-//
-
-int MidiOutPort_oss::getNumPorts(void) {
-   return Sequencer_oss::getNumOutputs();
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_oss::getPort -- returns the port to which this
-//	object belongs (as set with the setPort function).
-//
-
-int MidiOutPort_oss::getPort(void) {
-   return port;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_oss::getPortStatus -- 0 if closed, 1 if open
-//
-
-int MidiOutPort_oss::getPortStatus(void) {
-   // Linux MIDI devices are all open at the same time,
-   // so if one is open, then they all are.
-   return is_open();
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_oss::getTrace -- returns true if trace is on or
-//	false if off.  If trace is on, then prints to standard output
-//	the Midi message being sent.
-//
-
-int MidiOutPort_oss::getTrace(void) {
-   if (getPort() == -1) return -1;
-
-   return trace[getPort()];
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_oss::rawsend -- send the Midi command and its parameters
-//
-
-int MidiOutPort_oss::rawsend(int command, int p1, int p2) {
-   if (getPort() == -1) return 0;
-
-   int status;
-   uchar mdata[3] = {(uchar)command, (uchar)p1, (uchar)p2};
-   status = write(getPort(), mdata, 3);   
-
-   if (getTrace()) {
-      if (status == 1) {
-         std::cout << "(" << std::hex << (int)mdata[0] << std::dec << ":"
-              << (int)mdata[1] << "," << (int)mdata[2] << ")";
-         std::cout.flush();
-      } else {
-         std::cout << "(" << std::hex << (int)mdata[0] << std::dec << "X"
-              << (int)mdata[1] << "," << (int)mdata[2] << ")";
-         std::cout.flush();
-      }
-   }      
-
-   return status;
-}
-
-
-int MidiOutPort_oss::rawsend(int command, int p1) {
-   if (getPort() == -1) return 0;   
-
-   int status;
-   uchar mdata[2] = {(uchar)command, (uchar)p1};
-
-   status = write(getPort(), mdata, 2);   
-
-   if (getTrace()) {
-      if (status == 1) {
-         std::cout << "(" << std::hex << (int)mdata[0] << std::dec << ":"
-              << (int)mdata[1] << ")";
-         std::cout.flush();
-      } else {
-         std::cout << "(" << std::hex << (int)mdata[0] << std::dec << "X"
-              << (int)mdata[1] << "," << (int)mdata[2] << ")";
-         std::cout.flush();
-      }
-   }
- 
-   return status;
-}
-
-
-int MidiOutPort_oss::rawsend(int command) {
-   if (getPort() == -1) return 0;   
-
-   int status;
-   uchar mdata[1] = {(uchar)command};
-
-   status = write(getPort(), mdata, 1);
-
-   if (getTrace()) {
-      if (status == 1) {
-         std::cout << "(" << std::hex << (int)mdata[0] << ")";
-         std::cout.flush();
-      } else {
-         std::cout << "(" << std::hex << (int)mdata[0] << ")";
-         std::cout.flush();
-      }
-   }
-
-   return status;
-}
-
-
-int MidiOutPort_oss::rawsend(uchar* array, int size) {
-   if (getPort() == -1) return 0;   
-
-   int status;
-   status = write(getPort(), array, size);
-   
-   if (getTrace()) {
-      if (status == 1) {
-         std::cout << "(array)";
-         std::cout.flush();
-      } else {
-         std::cout << "(XarrayX)";
-         std::cout.flush();
-      }
-   }
-
-   return status;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_oss::open -- returns true if MIDI output port was
-//	opened.
-//
-
-int MidiOutPort_oss::open(void) {
-   return Sequencer_oss::open();
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_oss::setChannelOffset -- sets the MIDI channel offset, 
-//     either 0 or 1.
-//
-
-void MidiOutPort_oss::setChannelOffset(int anOffset) {
-   switch (anOffset) {
-      case 0:   channelOffset = 0;   break;
-      case 1:   channelOffset = 1;   break;
-      default:
-         std::cout << "Error:  Channel offset can be only 0 or 1." << std::endl;
-         exit(1);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_oss::setPort --
-//
-
-void MidiOutPort_oss::setPort(int aPort) {
-   if (aPort < -1 || aPort >= getNumPorts()) {
-      std::cerr << "Error: maximum port number is: " << getNumPorts()-1
-           << ", but you tried to access port: " << aPort << std::endl;
-      exit(1);
-   }
-
-   if (port != -1) {
-      portObjectCount[port]--;
-   }
-   port = aPort;
-   if (port != -1) {
-      portObjectCount[port]++;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_oss::setTrace -- if false, then won't print
-//      Midi messages to standard output.
-//
-
-int MidiOutPort_oss::setTrace(int aState) {
-   if (getPort() == -1) return -1;
-
-   int oldtrace = trace[getPort()];
-   if (aState == 0) {
-      trace[getPort()] = 0;
-   } else {
-      trace[getPort()] = 1;
-   }
-   return oldtrace;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_oss::sysex -- send a system exclusive message.
-//     The message must start with a 0xf0 byte and end with
-//     a 0xf7 byte.
-//
-
-int MidiOutPort_oss::sysex(uchar* array, int size) {
-   if (size == 0 || array[0] != 0xf0) {
-      std::cout << "Error: invalid sysex message" << std::endl;
-      exit(1);
-   }
-
-   return rawsend(array,size);
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_oss::toggleTrace
-//
-
-void MidiOutPort_oss::toggleTrace(void) {
-   if (getPort() == -1) return;
-
-   trace[getPort()] = !trace[getPort()];
-}
-
-
-
-///////////////////////////////////////////////////////////////////////////
-//
-// Private functions
-//
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_oss::deinitialize -- sets up storage if necessary
-//	This function should be called if the current object is
-//	the first object to be created.
-//
-
-void MidiOutPort_oss::deinitialize(void) {
-   closeAll();
-   if (portObjectCount != NULL) delete [] portObjectCount;
-   portObjectCount = NULL;
-   if (trace != NULL) delete [] trace;
-   trace = NULL;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_oss::initialize -- sets up storage if necessary
-//	This function should be called if the current object is
-//	the first object to be created.
-//
-
-void MidiOutPort_oss::initialize(void) {
-   // get the number of ports
-   numDevices = getNumOutputs();
-   if  (getNumPorts() <= 0) {
-      std::cerr << "Warning: no MIDI output devices" << std::endl;
-      portObjectCount = NULL;
-      trace = NULL;
-   } else {
-      // allocate space for object count on each port:
-      if (portObjectCount != NULL) delete [] portObjectCount;
-      portObjectCount = new int[numDevices];
-   
-      // allocate space for trace variable for each port:
-      if (trace != NULL) delete [] trace;
-      trace = new int[numDevices];
-   
-      // initialize the static arrays
-      for (int i=0; i<getNumPorts(); i++) {
-         portObjectCount[i] = 0;
-         trace[i] = 0;
-      }
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_oss::setPortStatus
-//
-
-void MidiOutPort_oss::setPortStatus(int aStatus) {
-   // not used in Linux implementation
-}
-
-
-#endif  // LINUX
-
-
-
-// md5sum:	c09dbe18ce8a0ff6ff11030d43a98c4a  - MidiOutPort_oss.cpp =css= 20030102
diff --git a/extensions/gripd/src/midiio/src/MidiOutPort_unsupported.cpp b/extensions/gripd/src/midiio/src/MidiOutPort_unsupported.cpp
deleted file mode 100644
index f4b8c284b..000000000
--- a/extensions/gripd/src/midiio/src/MidiOutPort_unsupported.cpp
+++ /dev/null
@@ -1,402 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Mon Jan 12 21:40:35 GMT-0800 1998
-// Last Modified: Mon Jan 12 21:40:39 GMT-0800 1998
-// Filename:      ...sig/code/control/MidiOutPort/unsupported/MidiOutPort_unsupported.cpp
-// Web Address:   http://www-ccrma.stanford.edu/~craig/improv/src/MidiOutPort_unsupported.cpp
-// Syntax:        C++ 
-//
-// Description:   Operating-System specific interface for basic MIDI output
-//                capabilities in an unknown operating system.  Privately 
-//                inherited by the MidiOutPort class. Used for compiling
-//                and running MIDI programs on a computer with no
-//                MIDI output.
-//
-
-#include "MidiOutPort_unsupported.h"
-
-#include <iostream>
-#include <stdlib.h>
-#include <string.h>
-#include <sstream>
-
-// initialized static variables
-int       MidiOutPort_unsupported::numDevices      = 0;
-int       MidiOutPort_unsupported::objectCount     = 0;
-int*      MidiOutPort_unsupported::openQ           = NULL;
-int*      MidiOutPort_unsupported::portObjectCount = NULL;
-int       MidiOutPort_unsupported::channelOffset   = 0;
-
-
-//////////////////////////////
-// 
-// MidiOutPort_unsupported::MidiOutPort_unsupported
-//	default values: autoOpen = 1
-//
-
-
-MidiOutPort_unsupported::MidiOutPort_unsupported(void) {
-   if (objectCount == 0) {
-      initialize();
-   }
-   objectCount++;
-
-   port = -1;
-   setPort(0);
-}
-
-
-MidiOutPort_unsupported::MidiOutPort_unsupported(int aPort, int autoOpen) {
-   if (objectCount == 0) {
-      initialize();
-   }
-   objectCount++;
-
-   port = -1;
-   setPort(aPort);
-   if (autoOpen) {
-      open();
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_unsupported::~MidiOutPort_unsupported
-//
-
-MidiOutPort_unsupported::~MidiOutPort_unsupported() {
-   objectCount--;
-   if (objectCount == 0) {
-      deinitialize();
-   } else if (objectCount < 0) {
-      std::cerr << "Error: bad MidiOutPort object count!: " << objectCount << std::endl;
-      exit(1);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_unsupported::close
-//
-
-void MidiOutPort_unsupported::close(void) {
-   if (getPortStatus() == 1) {
-      setPortStatus(0);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_unsupported::closeAll
-//
-
-void MidiOutPort_unsupported::closeAll(void) {
-   for (int i=0; i<getNumPorts(); i++) {
-      if (openQ[i] == 1) {
-         openQ[i] = 0;
-      }
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_unsupported::getChannelOffset -- returns zero if MIDI channel 
-//     offset is 0, or 1 if offset is 1.
-//
-
-int MidiOutPort_unsupported::getChannelOffset(void) const {
-   return channelOffset;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_unsupported::getName -- returns the name of the port.
-//	returns "" if no name. Name is valid until getName is called again.
-//
-
-const char* MidiOutPort_unsupported::getName(void) const {
-   static char* name = NULL;
-   std::stringstream temp;
-   temp << "Inactive MIDI output test port #";
-   temp << getPort();
-   if (name != NULL) delete [] name;
-   name = new char[temp.str().length()+1];
-   strcpy(name, temp.str().c_str());
-   return name;
-}
-
-const char* MidiOutPort_unsupported::getName(int i) const {
-   static char* name = NULL;
-   std::stringstream temp;
-   temp << "Inactive MIDI output test port #";
-   temp << i;
-   if (name != NULL) delete [] name;
-   name = new char[temp.str().length()+1];
-   strcpy(name, temp.str().c_str());
-   return name;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_unsupported::getNumPorts -- returns the number of available
-// 	ports for MIDI output
-//
-
-int MidiOutPort_unsupported::getNumPorts(void) const {
-   return numDevices;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_unsupported::getPort -- returns the port to which this
-//	object belongs (as set with the setPort function).
-//
-
-int MidiOutPort_unsupported::getPort(void) const {
-   return port;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_unsupported::getPortStatus -- 0 if closed, 1 if open
-//
-
-int MidiOutPort_unsupported::getPortStatus(void) const {
-   if (openQ[getPort()] == 1) {
-      return 1;
-   } else {
-      return 0;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_unsupported::getTrace -- returns true if trace is on or
-//      false if off.  If trace is on, then prints to standard output
-//      the Midi message being sent.
-//
-
-int MidiOutPort_unsupported::getTrace(void) const {
-   return trace;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_unsupported::rawsend -- send the Midi command and its parameters
-//
-
-int MidiOutPort_unsupported::rawsend(int command, int p1, int p2) {
-   if (getTrace()) {
-      std::cout << "{" << std::hex << command << std::dec << ":" << (p1 & 0xff) 
-           << "," << (p2 & 0xff) << "}";
-      std::cout.flush();
-   }
-
-   return 1;
-}
-
-
-int MidiOutPort_unsupported::rawsend(int command, int p1) {
-   return 1;
-}
-
-
-int MidiOutPort_unsupported::rawsend(int command) {
-   return 1;
-}
-
-
-int MidiOutPort_unsupported::rawsend(uchar* array, int size) {
-   return 1;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_unsupported::open -- returns true if MIDI output port was
-//	opened.
-//
-
-int MidiOutPort_unsupported::open(void) {
-   if (getPortStatus() == 0) {
-      openQ[getPort()] = 1;
-   }
-   return 1;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_unsupported::setChannelOffset -- sets the MIDI channel offset, either 0 or 1.
-//
-
-void MidiOutPort_unsupported::setChannelOffset(int anOffset) {
-   switch (anOffset) {
-      case 0:   channelOffset = 0;   break;
-      case 1:   channelOffset = 1;   break;
-      default:
-         std::cout << "Error:  Channel offset can be only 0 or 1." << std::endl;
-         exit(1);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_unsupported::setPort --
-//
-
-void MidiOutPort_unsupported::setPort(int aPort) {
-   if (aPort < 0 || aPort >= getNumPorts()) {
-      std::cerr << "Error: maximum port number is: " << getNumPorts()-1
-           << ", but you tried to access port: " << aPort << std::endl;
-      exit(1);
-   }
-
-   if (port != -1) {
-      portObjectCount[port]--;
-   }
-   port = aPort;
-   portObjectCount[port]++;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_unsupported::setTrace -- if false, then won't print
-//	Midi messages to standard output.
-//
-
-int MidiOutPort_unsupported::setTrace(int aState) {
-   int oldtrace = trace;
-   if (aState == 0) {
-      trace = 0;
-   } else {
-      trace = 1;
-   }
-   return oldtrace;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_unsupported::sysex -- 
-//
-
-int MidiOutPort_unsupported::sysex(uchar* array, int size) {
-   return 1;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_unsupported::toggleTrace --
-//
-
-void MidiOutPort_unsupported::toggleTrace(void) {
-   trace = !trace;
-}
-
-
-
-///////////////////////////////////////////////////////////////////////////
-//
-// Private functions
-//
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_unsupported::deinitialize -- sets up storage if necessary
-//	This function should be called if the current object is
-//	the first object to be created.
-//
-
-void MidiOutPort_unsupported::deinitialize(void) {
-   closeAll();
-   if (openQ != NULL) delete [] openQ;
-   openQ = NULL;
-   if (portObjectCount != NULL) delete [] portObjectCount;
-   portObjectCount = NULL;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_unsupported::initialize -- sets up storage if necessary
-//	This function should be called if the current object is
-//	the first object to be created.
-//
-
-void MidiOutPort_unsupported::initialize(void) {
-   // get the number of ports
-   numDevices = 16;
-   if  (getNumPorts() <= 0) {
-      std::cerr << "Error: no MIDI output devices" << std::endl;
-      exit(1);
-   }
-
-
-   // allocate space for openQ, the port open/close status
-   if (openQ != NULL) delete [] openQ;
-   openQ = new int[numDevices];
-
-   // allocate space for object count on each port:
-   if (portObjectCount != NULL) delete [] portObjectCount;
-   portObjectCount = new int[numDevices];
-
-
-   // initialize the static arrays
-   for (int i=0; i<getNumPorts(); i++) {
-      openQ[i] = 0;
-      portObjectCount[i] = 0;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_unsupported::setPortStatus(int aStatus) {
-//
-
-void MidiOutPort_unsupported::setPortStatus(int aStatus) {
-   if (aStatus) {
-      openQ[getPort()] = 1;
-   } else {
-      openQ[getPort()] = 0;
-   }
-}
-
-
-
-
-// md5sum:	eff3d6cd2cab4c2def6ca60ef0ca197f  - MidiOutPort_unsupported.cpp =css= 20030102
diff --git a/extensions/gripd/src/midiio/src/MidiOutPort_visual.cpp b/extensions/gripd/src/midiio/src/MidiOutPort_visual.cpp
deleted file mode 100644
index d0808174e..000000000
--- a/extensions/gripd/src/midiio/src/MidiOutPort_visual.cpp
+++ /dev/null
@@ -1,532 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Sun Dec 28 15:18:46 GMT-0800 1997
-// Last Modified: Mon Jan 12 15:42:44 GMT-0800 1998
-// Last Modified: Tue Jun 29 13:10:30 PDT 1999 (verified sysex sending)
-// Last Modified: Tue Jun  4 22:10:16 PDT 2002 (getNumPorts fix for static use)
-// Filename:      ...sig/code/control/MidiOutPort/visual/MidiOutPort_visual.cpp
-// Web Address:   http://www-ccrma.stanford.edu/~craig/improv/src/MidiOutPort_visual.cpp
-// Syntax:        C++ 
-//
-// Description:   Operating-System specific interface for
-//                basic MIDI output capabilities in Windows 95/NT/98
-//                using winmm.lib.  Privately inherited by the
-//                MidiOutPort class.
-// 
-
-
-#ifdef VISUAL
-
-#include <iostream.h>
-#include "MidiOutPort_visual.h"
-
-typedef unsigned long ulong;
-typedef unsigned char uchar;
-
-
-// initialized static variables
-int       MidiOutPort_visual::numDevices      = 0;
-int       MidiOutPort_visual::objectCount     = 0;
-int*      MidiOutPort_visual::openQ           = NULL;
-int*      MidiOutPort_visual::portObjectCount = NULL;
-HMIDIOUT* MidiOutPort_visual::device          = NULL;
-int       MidiOutPort_visual::channelOffset   = 0;
-
-
-
-//////////////////////////////
-// 
-// MidiOutPort_visual::MidiOutPort_visual
-//	default values: autoOpen = 1
-//
-
-
-MidiOutPort_visual::MidiOutPort_visual(void) {
-   if (objectCount == 0) {
-      initialize();
-   }
-   objectCount++;
-
-   port = -1;
-   setPort(0);
-}
-
-
-MidiOutPort_visual::MidiOutPort_visual(int aPort, int autoOpen) {
-   if (objectCount == 0) {
-      initialize();
-   }
-   objectCount++;
-
-   port = -1;
-   setPort(aPort);
-   if (autoOpen) {
-      open();
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_visual::~MidiOutPort_visual
-//
-
-MidiOutPort_visual::~MidiOutPort_visual() {
-   objectCount--;
-   if (objectCount == 0) {
-      deinitialize();
-   } else if (objectCount < 0) {
-      cerr << "Error: bad MidiOutPort object count!: " << objectCount << endl;
-      exit(1);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_visual::close
-//
-
-void MidiOutPort_visual::close(void) {
-   if (getPort() == -1) {
-      return;
-   }
-
-   if (getPortStatus() == 1 && device[getPort()] != NULL) {
-
-      // The following function, midiOutClose, is not what I like.
-      // It will send note offs to any note which it thinks is
-      // on when the port is closed.  Uncomment the line if
-      // you want this feature.
-      // midiOutReset(device[getPort()]);
-
-      midiOutClose(device[getPort()]);
-      setPortStatus(0);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_visual::closeAll
-//
-
-void MidiOutPort_visual::closeAll(void) {
-   for (int i=0; i<getNumPorts(); i++) {
-      if (openQ[i] == 1 && device[i] != NULL) {
-         midiOutReset(device[i]);
-         midiOutClose(device[i]);
-         openQ[i] = 0;
-      }
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_visual::getChannelOffset -- returns zero if MIDI channel 
-//     offset is 0, or 1 if offset is 1.
-//
-
-int MidiOutPort_visual::getChannelOffset(void) const {
-   return channelOffset;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_visual::getName -- returns the name of the port.
-//	returns "" if no name. Name is valid until getName is called again.
-//
-
-const char* MidiOutPort_visual::getName(void) {
-   static MIDIOUTCAPS outputCapabilities;
-
-   if (getPort() == -1) {
-      return "Null MIDI Output";
-   }
-
-   if (openQ[getPort()]) {  // port already open
-      midiOutGetDevCaps(getPort(), &outputCapabilities, sizeof(MIDIOUTCAPS));
-   } else {  // port is currently closed
-      if(open()) {;
-         midiOutGetDevCaps(getPort(), &outputCapabilities, sizeof(MIDIOUTCAPS));
-         close();
-      } else {
-         return "";
-      }
-   }
-   return outputCapabilities.szPname;
-}
-
-
-const char* MidiOutPort_visual::getName(int i) {
-   static MIDIOUTCAPS outputCapabilities;
-
-   midiOutGetDevCaps(i, &outputCapabilities, sizeof(MIDIOUTCAPS));
-  
-   return outputCapabilities.szPname;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_visual::getNumPorts -- returns the number of available
-// 	ports for MIDI output
-//
-
-int MidiOutPort_visual::getNumPorts(void) {
-   if (numDevices <= 0) {
-      return midiOutGetNumDevs();
-   }
-   return numDevices;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_visual::getPort -- returns the port to which this
-//	object belongs (as set with the setPort function).
-//
-
-int MidiOutPort_visual::getPort(void) {
-   return port;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_visual::getPortStatus -- 0 if closed, 1 if open
-//   2 if null connection
-//
-
-int MidiOutPort_visual::getPortStatus(void) {
-   if (getPort() == -1) {
-      return 2;
-   }
-
-   if (openQ[getPort()] == 1) {
-      return 1;
-   } else {
-      return 0;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_visual::getTrace -- returns true if trace is on or
-//	false if off.  If trace is on, then prints to standard output
-//	the Midi message being sent.
-//
-
-int MidiOutPort_visual::getTrace(void) {
-   return trace;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_visual::rawsend -- send the Midi command and its parameters
-//
-
-int MidiOutPort_visual::rawsend(int command, int p1, int p2) {
-   union { ulong word; uchar data[4]; } u;
-   u.data[0] = (uchar)command;
-   u.data[1] = (uchar)(p1 & 0x7f);  // parameter limited to range 0-127;
-   u.data[2] = (uchar)(p2 & 0x7f);  // parameter limited to range 0-127;
-   u.data[3] = 0;
-  
-   if (getPort() == -1) {
-      return 2;
-   }
-
-   int flag = midiOutShortMsg(device[getPort()], u.word);
-   
-   if (getTrace()) {
-      if (flag == MMSYSERR_NOERROR) {
-         cout << "(" << hex << (int)u.data[0] << dec << ":"
-              << (int)u.data[1] << "," << (int)u.data[2] << ")";
-         cout.flush();
-      } else {
-         cout << "(" << hex << (int)u.data[0] << dec << "X"
-              << (int)u.data[1] << "," << (int)u.data[2] << ")";
-         cout.flush();
-      }
-   }
-
-   return flag;
-}
-
-
-int MidiOutPort_visual::rawsend(int command, int p1) {
-   return rawsend(command, p1, 0);
-}
-
-
-int MidiOutPort_visual::rawsend(int command) {
-   return rawsend(command, 0, 0);
-}
-
-
-int MidiOutPort_visual::rawsend(uchar* array, int size) {
-   // Note: this function will work in Windows 95 and Windows NT.
-   // This function will not work in Windows 3.x because a 
-   // different memory model is necessary.
-
-   if (size > 64000 || size < 1) {
-      cerr << "Warning: cannot write a MIDI stream larger than 64kB" << endl;
-      return 0;
-   }
-
-   MIDIHDR midiheader;   // structure for sending an array of MIDI bytes
-
-   midiheader.lpData = (char *)array;
-   midiheader.dwBufferLength = size;
-   // midiheader.dwBytesRecorded = size;  // example program doesn't set
-   midiheader.dwFlags = 0;                // flags must be set to 0
-
-   if (getPort() == -1) {
-      return -1;
-   }
-
-   int status = midiOutPrepareHeader(device[getPort()], &midiheader,
-      sizeof(MIDIHDR));
-
-   if (status != MMSYSERR_NOERROR) {
-      return 0;
-   }
-
-   status = midiOutLongMsg(device[getPort()], &midiheader, sizeof(MIDIHDR));
-
-   if (status != MMSYSERR_NOERROR) {
-      return 0;
-   }
-
-   while (MIDIERR_STILLPLAYING == midiOutUnprepareHeader(device[getPort()], 
-         &midiheader, sizeof(MIDIHDR))) {
-      Sleep(1);                           // sleep for 1 millisecond
-   }
-
-   return 1;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_visual::open -- returns true if MIDI output port was
-//	opened.
-//
-
-int MidiOutPort_visual::open(void) {
-   if (getPort() == -1) {
-      return 2;
-   }
-
-   if (getPortStatus() == 0) {
-      int flag;
-      flag = midiOutOpen(&device[getPort()], getPort(), 0, 0, CALLBACK_NULL);
-      if (flag == MMSYSERR_NOERROR) {
-         openQ[getPort()] = 1;
-         return 1;
-      } else { // faied to open
-         openQ[getPort()] = 0;
-         device[getPort()] = NULL;
-         return 0;
-      }
-   } else { // already open
-      return 1;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_visual::setChannelOffset -- sets the MIDI channel offset, 
-//     either 0 or 1.
-//
-
-void MidiOutPort_visual::setChannelOffset(int anOffset) {
-   switch (anOffset) {
-      case 0:   channelOffset = 0;   break;
-      case 1:   channelOffset = 1;   break;
-      default:
-         cout << "Error:  Channel offset can be only 0 or 1." << endl;
-         exit(1);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_visual::setPort
-//
-
-void MidiOutPort_visual::setPort(int aPort) {
-   if (aPort < 0 || aPort >= getNumPorts()) {
-      cerr << "Error: maximum port number is: " << getNumPorts()-1
-           << ", but you tried to access port: " << aPort << endl;
-      exit(1);
-   }
-
-   if (port != -1) {
-      portObjectCount[port]--;
-   }
-   port = aPort;
-   portObjectCount[port]++;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_visual::setTrace -- if false, then won't print
-//      Midi messages to standard output.
-//
-
-int MidiOutPort_visual::setTrace(int aState) {
-   int oldtrace = trace;
-   if (aState == 0) {
-      trace = 0;
-   } else {
-      trace = 1;
-   }
-   return oldtrace;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_visual::sysex -- send a system exclusive message.
-//    The first byte of the message must be a 0xf0 byte.
-//
-
-int MidiOutPort_visual::sysex(uchar* array, int size) {
-   if (size == 0 || array[0] != 0xf0) {
-      cout << "Error: invalid system exclusive message,"
-              " first byte must be 0xf0" << endl;
-      exit(1);
-   }
-
-   return rawsend(array, size);
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_visual::toggleTrace
-//
-
-void MidiOutPort_visual::toggleTrace(void) {
-   trace = !trace;
-}
-
-
-
-///////////////////////////////////////////////////////////////////////////
-//
-// Private functions
-//
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_visual::deinitialize -- sets up storage if necessary
-//	This function should be called if the current object is
-//	the first object to be created.
-//
-
-void MidiOutPort_visual::deinitialize(void) {
-   closeAll();
-   if (device != NULL) delete [] device;
-   device = NULL;
-   if (openQ != NULL) delete [] openQ;
-   openQ = NULL;
-   if (portObjectCount != NULL) delete [] portObjectCount;
-   portObjectCount = NULL;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_visual::initialize -- sets up storage if necessary
-//	This function should be called if the current object is
-//	the first object to be created.
-//
-
-void MidiOutPort_visual::initialize(void) {
-   // get the number of ports
-   numDevices = midiOutGetNumDevs();
-   if  (getNumPorts() <= 0) {
-      cerr << "Error: no MIDI output devices" << endl;
-      exit(1);
-   }
-
-   // allocate space for Windoze MIDI output structures
-   if (device != NULL) {
-      cerr << "Error: device array should be NULL when calling "
-           << "initialize() in MidiOutPort." << endl;
-      exit(1);
-   }
-   device = new HMIDIOUT[numDevices];
-
-   // allocate space for openQ, the port open/close status
-   if (openQ != NULL) delete [] openQ;
-   openQ = new int[numDevices];
-
-   // allocate space for object count on each port:
-   if (portObjectCount != NULL) delete [] portObjectCount;
-   portObjectCount = new int[numDevices];
-
-
-   // initialize the static arrays
-   for (int i=0; i<getNumPorts(); i++) {
-      device[i] = NULL;
-      openQ[i] = 0;
-      portObjectCount[i] = 0;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutPort_visual::setPortStatus
-//
-
-void MidiOutPort_visual::setPortStatus(int aStatus) {
-   if (getPort() == -1) {
-      return;
-   }
-
-   if (aStatus) {
-      openQ[getPort()] = 1;
-   } else {
-      openQ[getPort()] = 0;
-   }
-}
-
-
-#endif  // VISUAL
-
-
-
-
-// md5sum:	8cb60bfb5dc9ea42808ffa4540e0fc52  - MidiOutPort_visual.cpp =css= 20030102
diff --git a/extensions/gripd/src/midiio/src/MidiOutput.cpp b/extensions/gripd/src/midiio/src/MidiOutput.cpp
deleted file mode 100644
index d78460f61..000000000
--- a/extensions/gripd/src/midiio/src/MidiOutput.cpp
+++ /dev/null
@@ -1,1082 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu> 
-// Creation Date: 18 December 1997
-// Last Modified: Mon Jan 26 23:54:36 GMT-0800 1998
-// Last Modified: Tue Feb  2 08:30:28 PST 1999
-// Last Modified: Sun Jul 18 18:52:29 PDT 1999 (added RPN functions)
-// Last Modified: Sun Dec  9 15:01:33 PST 2001 (switched con/des code)
-// Filename:      ...sig/code/control/MidiOutput/MidiOutput.cpp
-// Web Address:   http://sig.sapp.org/src/sig/MidiOutput.cpp
-// Syntax:        C++
-//
-// Description:   The MIDI output interface for MIDI synthesizers/equipment
-//                which has many convienience functions defined for
-//                various types of MIDI output.
-//
-
-#include "MidiOutput.h"
-#include <iostream>
-#include <iomanip>
-
-#define RECORD_ASCII     (0)
-#define RECORD_BINARY    (1)
-#define RECORD_MIDI_FILE (2)
-
-
-// declaration of static variables
-SigTimer    MidiOutput::timer;
-Array<int>* MidiOutput::rpn_lsb_status = NULL;
-Array<int>* MidiOutput::rpn_msb_status = NULL;
-int         MidiOutput::objectCount    = 0;
-
-
-//////////////////////////////
-//
-// MidiOutput::MidiOutput --
-//
-
-
-MidiOutput::MidiOutput(void) : MidiOutPort() {
-   outputRecordQ = 0;
-
-   if (objectCount == 0) {
-      initializeRPN();
-   }
-   objectCount++;
-}
-
-
-
-MidiOutput::MidiOutput(int aPort, int autoOpen) : MidiOutPort(aPort, autoOpen) {
-   outputRecordQ = 0;
-
-   if (objectCount == 0) {
-      initializeRPN();
-   }
-   objectCount++;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutput::~MidiOutput
-//
-
-MidiOutput::~MidiOutput() {
-   objectCount--;
-   if (objectCount == 0) {
-      deinitializeRPN();
-   } else if (objectCount < 0) {
-      std::cout << "Error in MidiOutput decontruction" << std::endl; 
-   }
-
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutput::cont -- send a controller command MIDI message.
-//
-//    channel = the Midi channel ofset from 0 [0..15]
-//    controller = the continuous controller number [0..127]
-//    data = the value of the specified controller [0..127]
-//
-
-int MidiOutput::cont(int channel, int controller, int data) {
-   return send(0xb0 | (channel & 0x0f), controller, data);
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutput::off -- sends a Note Off MIDI message (0x80).
-//
-//    channel = MIDI channel to send note on. range is [0..15]
-//    keynum = MIDI key number to play (middle C = 60, C# = 61, etc.) [0..127]
-//    velocity = release velocity of the note, 127 = quickest possible
-//
-// Note: The more common method of turning off a note is to use the
-//	play() function (midi command 0x90) but send an attack velocity of 0.
-//
-
-int MidiOutput::off(int channel, int keynum, int releaseVelocity) {
-   return send(0x80 | (channel & 0x0f), keynum, releaseVelocity);
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutput::pc -- send a patch change MIDI message. changes the timbre
-//    on the specified channel.  
-//
-//    channel = MIDI channel to which to send the patch change [0..15]
-//    timbre = the voice to select on the specified channel [0..127]
-//
-
-int MidiOutput::pc(int channel, int timbre) {
-   return send(0xc0 | (channel & 0x0f), timbre);
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutput::play -- sends a Note On/Off MIDI message.
-//
-//    channel = MIDI channel to send note on. range is [0..15]
-//    keynum = MIDI key number to play (middle C = 60, C# = 61, etc.) [0..127]
-//    velocity = attack velocity of the note, 0 = 0ff, 127 = loudest possible
-//
-
-int MidiOutput::play(int channel, int keynum, int velocity) {
-   return send(0x90 | (channel & 0x0f), keynum, velocity);
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutput::pw -- Pitch Wheel: send a MIDI pitch bend.
-//      Parameters are:
-//         1. channel   -- MIDI channel offset from 0.
-//         2. mostByte  -- most significant 7 bits (coarse tuning)
-//         3. leastByte -- least significant 7 bits (fine tuning)
-//
-
-int MidiOutput::pw(int channel, int mostByte, int leastByte) {
-   return send(0xe0 | (channel & 0x0f), leastByte, mostByte);
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutput::pw -- Pitch Wheel: 14 bit number given as input
-//      range for 14 bit number is 0 to 16383.
-//
-
-int MidiOutput::pw(int channel, int tuningData) {
-   uchar greaterBits = (uchar)((tuningData >> 7) & 0x7f);
-   uchar lesserBits = (uchar)(tuningData & 0x7f);
-   return pw(channel, greaterBits, lesserBits);
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutput::pw -- Pitch Wheel: range between -1 to 1 given as input.
-//      Range is then converted to a 14 bit number.
-//      +1 = highest value of pitch wheel
-//       0 = rest position of pitch wheel
-//      -1 = lowest value of pitch wheel
-//
-
-int MidiOutput::pw(int channel, double tuningData) {
-   if (tuningData < -1.0 || tuningData > 1.0) {
-      std::cerr << "Error: pitch wheel data is out of range: " << tuningData << std::endl;
-      exit(1);
-   }
-
-   int output = (int)((tuningData+1.0)/2.0*16383 + 0.5);
-   return pw(channel, output);
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutput::recordStart
-//
-
-void MidiOutput::recordStart(char *filename, int format) {
-   if (outputRecordQ) {  // already recording, so close old file
-      recordStop();
-   }
-
-   outputRecordFile.open(filename, std::ios::out);
-   if (!outputRecordFile) {   // open file failed
-      std::cerr << "Error: cannot open file " << filename << std::endl;
-      outputRecordQ = 0;
-   } else {
-      outputRecordQ = 1;
-   }
-
-   if (outputRecordQ) {
-      switch (format) {
-         case RECORD_ASCII:   // ascii
-            outputRecordType = RECORD_ASCII;
-            outputRecordFile <<"; delta time/MIDI output at delta time" << std::endl;
-            break;
-         case RECORD_BINARY:   // binary
-            outputRecordType = RECORD_BINARY;
-            // record the magic number for binary format
-            outputRecordFile << (uchar)0xf8 << (uchar)0xf8
-                       << (uchar)0xf8 << (uchar)0xf8;
-            break;
-         case RECORD_MIDI_FILE: // standard MIDI file, type 0
-         default:
-            outputRecordType = RECORD_MIDI_FILE;
-            // header stuff to be written here
-            break;
-      }
-   }
-
-   lastFlushTime = timer.getTime();
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutput::recordStop
-//
-
-void MidiOutput::recordStop(void) {
-   if (outputRecordQ) {
-      outputRecordQ = 0;
-      outputRecordFile.close();
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutput::reset -- sends the MIDI command 0xFF which
-//      should force the MIDI devices on the other side of the
-//      MIDI cable into their power-on reset condition, clear running
-//      status, turn off any sounding notes, set Local Control on, and
-//      otherwise clean up the state of things.
-//
-
-void MidiOutput::reset(void) {
-   send(0xff, 0, 0);
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutput::send -- send a byte to the MIDI port but record it
-//	first.
-//
-
-int MidiOutput::send(int command, int p1, int p2) {
-   if (outputRecordQ) {
-      switch (outputRecordType) {
-         case 0:   // ascii
-            writeOutputAscii(command, p1, p2);
-            break;
-         case 1:   // binary
-            writeOutputBinary(command, p1, p2);
-            break;
-         case 2:   // standard MIDI file type 0
-            writeOutputMidifile(command, p1, p2);
-            break;
-      }
-      lastFlushTime = timer.getTime();  // only keep track if recording
-   }
-   return rawsend(command, p1, p2);
-}
-
-
-int MidiOutput::send(int command, int p1) {
-   if (outputRecordQ) {
-      switch (outputRecordType) {
-         case 0:   // ascii
-            writeOutputAscii(command, p1, -1);
-            break;
-         case 1:   // binary
-            writeOutputBinary(command, p1, -1);
-            break;
-         case 2:   // standard MIDI file type 0
-            writeOutputMidifile(command, p1, -1);
-            break;
-      }
-      lastFlushTime = timer.getTime();  // only keep track if recording
-   }
-   return rawsend(command, p1);
-}
-
-
-int MidiOutput::send(int command) {
-   if (outputRecordQ) {
-      switch (outputRecordType) {
-         case 0:   // ascii
-            writeOutputAscii(command, -1, -1);
-            break;
-         case 1:   // binary
-            writeOutputBinary(command, -1, -1);
-            break;
-         case 2:   // standard MIDI file type 0
-            writeOutputMidifile(command, -1, -1);
-            break;
-      }
-      lastFlushTime = timer.getTime();  // only keep track if recording
-   }
-   return rawsend(command);
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutput::silence -- send a note off to all notes on all channels.
-//    default value: aChannel = -1
-//
-
-void MidiOutput::silence(int aChannel) {
-   int keyno;
-   if (aChannel == -1) {
-      for (int channel=0; channel<16; channel++) {
-         for (keyno=0; keyno<128; keyno++) {
-            play(channel, keyno, 0);
-         }
-      }
-   } else {
-      for (keyno=0; keyno<128; keyno++) {
-         play(aChannel, keyno, 0);
-      }
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutput::sustain -- set the MIDI sustain continuous controller on or off.
-//	Equivalent to the command cont(channel, 0x40, status).
-//
-
-void MidiOutput::sustain(int channel, int status) {
-   if (status) {  // turn on sustain
-      cont(channel, 0x40, 127);
-   } else {       // turn off sustain
-      cont(channel, 0x40, 0);
-   }
-}
-
-
-
-///////////////////////////////
-//
-// MidiOutput::sysex -- sends a system exclusive MIDI message.
-//	you must supply the 0xf0 at the start of the array
-//	and the 0xf7 at the end of the array.
-//
-
-int MidiOutput::sysex(char* data, int length) {
-   return rawsend((uchar*)data, length);
-}
-
-
-int MidiOutput::sysex(uchar* data, int length) {
-   return rawsend(data, length);
-}
-
-
-///////////////////////////////////////////////////////////////////////////
-//
-// RPN functions
-//
-
-
-//////////////////////////////
-//
-// NRPN -- sends a Non-registered parameter number where:
-//   parameter #1: channel (0-15)
-//   parameter #2: NRPN MSB indicator (controller #99 data)
-//   parameter #3: NRPN LSB indicator (controller #98 data)
-//   parameter #4: NRPN MSB data      (controller #6  data)
-//  [parameter #5: NRPN LSB data      (controller #38 data)]
-// or:
-//   parameter #1: channel (0-15)
-//   parameter #2: NRPN MSB indicator (controller #99 data)
-//   parameter #3: NRPN LSB indicator (controller #98 data)
-//   parameter #4: NRPN Floating point in range (-1..1) (ccont#6 and #38 data)
-//
-//
-// NRPN (Non-registered parameter number) -- General MIDI and 
-//    Extended MIDI mess.  It becomes the receiving synthesizer's
-//    responsibility to determine the meaning of continuous
-//    controller (ccont) #6 from data sent with cconts #98,99 (for
-//    NRPNS) and cconts #100,101 (for RPNS).  NRPN parameters
-//    are not reset when the ccont#121 is sent to reset controllers.
-//
-// NRPN's are "non-standard" meaning that any synthesizer could
-//    do whatever they want with a given NRPN;  However, the 
-//    GS and XG specifications are given in the table further below.
-//
-// The data for NRPNs are transfered to synthesizer with 
-//    data slider ccont #6(MSB) and ccont #38(LSB).  Also data increment
-//    ccont#96 (data increment) and ccont#97 (data decrement) are in
-//    relation to the RPN or NRPN in effect.  Increment and Decrement
-//    are not recommend to use with RPN's because of confusion in the
-//    MIDI industry over which 7-bit data (#6 or #38) to increment.
-//  
-// Once you have selected an NRPN on a given channel, the
-//    channel will apply subsequent Data Entry to the 
-//    selected parameter.  After making the necessary settings
-//    you should set NRPN to NULL to reduce the risk of 
-//    operational errors.  a NUL RPN will disable the previous
-//    values of either RPN or NRPN data.
-// 
-// The following NRPN values are supported in Yamaha's XG specification:
-//    CCont #98 = LSB of NRPN parameter ID
-//    CCont #99 = MSB of NRPN parameter ID
-// 
-// NRPN
-// MSB LSB                           Data Range
-// #99 #98    Parameter              (ccont#6=MSB, ccont#38=LSB)
-// === ===== ====================== ======================
-//   1   8  Vibrato Rate            -64.. 0..+63 logical range or (-50..+50)
-//                                    0..64..127 MIDI data range  ( 14..114)
-//   1   9  Vibrato Depth           same ranges as above      
-//   1  10  Vibrato Delay           same ranges as above      
-//   1  32  Filter Cutoff Freq.     same ranges as above      
-//   1  33  Filter Resonance        same ranges as above      
-//   1  99  EG Attack Time          same ranges as above      
-//   1 100  EG Decay Time           same ranges as above      
-//   1 102  EG Release Time         same ranges as above
-//  20  xx  Drum Filter Cutoff Freq same ranges as above          
-//          xx = drum MIDI key number
-//  21  xx  Drum Filter Resonance   same ranges as above          
-//          xx = drum MIDI key number
-//  22  xx  Drum EG Attack Rage     same ranges as above          
-//          xx = drum MIDI key number
-//  23  xx  Drum EG Decay Rate      same ranges as above          
-//          xx = drum MIDI key number
-//  24  xx  Drum Pitch Coarse       same ranges as above          
-//          xx = drum MIDI key number
-//  25  xx  Drum Pitch Fine         same ranges as above          
-//          xx = drum MIDI key number
-//  26  xx  Drum Level                0..64..127 MIDI data range
-//          xx = drum MIDI key number
-//  28  xx  Drum Pan                  Random, Left..Center..Right
-//                                    0.......1.....64......127 MIDI data range
-//          xx = drum MIDI key number
-//  29  xx  Drum Reverb Send Level    0..64..127 MIDI data range
-//          xx = drum MIDI key number
-//  30  xx  Drum Chorus Send Level    0..64..127 MIDI data range
-//          xx = drum MIDI key number
-//  31  xx  Drum Variation Send Level 0..64..127 MIDI data range
-//          xx = drum MIDI key number
-// 127 127  Null RPN (disables RPN/NRPN parameters from being altered).
-//
-//
-
-int MidiOutput::NRPN(int channel, int nrpn_msb, int nrpn_lsb, 
-      int data_msb, int data_lsb) {
-   channel  = channel  & 0x0f;
-   nrpn_msb = nrpn_msb & 0x7f;
-   nrpn_lsb = nrpn_msb & 0x7f;
-   data_msb = nrpn_msb & 0x7f;
-   data_lsb = nrpn_msb & 0x7f;
- 
-   int status = 1;
-
-   // check to see if the nrpn_msb and nrpn_lsb are the same
-   // as the last call to this function, if not, then send
-   // the appropriate MIDI controller values.
-   if (rpn_msb_status[getPort()][channel] != nrpn_msb) {
-      status &= cont(channel, 99, nrpn_msb);
-      rpn_msb_status[getPort()][channel] = nrpn_msb;
-   }
-   if (rpn_lsb_status[getPort()][channel] != nrpn_lsb) {
-      status &= cont(channel, 98, nrpn_lsb);
-      rpn_lsb_status[getPort()][channel] = nrpn_lsb;
-   }
-
-   // now that the NRPN state is set, send the NRPN data values
-   // but do not bother sending any data if the Null RPN is in effect.
-   if (nrpn_msb != 127 && nrpn_lsb != 127) {
-      status &= cont(channel, 6, data_msb);
-      status &= cont(channel, 38, data_msb);
-   }
-
-   return status;
-}
-
-
-int MidiOutput::NRPN(int channel, int nrpn_msb, int nrpn_lsb, int data_msb) {
-   channel  = channel  & 0x0f;
-   nrpn_msb = nrpn_msb & 0x7f;
-   nrpn_lsb = nrpn_msb & 0x7f;
-   data_msb = nrpn_msb & 0x7f;
- 
-   int status = 1;
-
-   // check to see if the nrpn_msb and nrpn_lsb are the same
-   // as the last call to this function, if not, then send
-   // the appropriate MIDI controller values.
-   if (rpn_msb_status[getPort()][channel] != nrpn_msb) {
-      status &= cont(channel, 99, nrpn_msb);
-      rpn_msb_status[getPort()][channel] = nrpn_msb;
-   }
-   if (rpn_lsb_status[getPort()][channel] != nrpn_lsb) {
-      status &= cont(channel, 98, nrpn_lsb);
-      rpn_lsb_status[getPort()][channel] = nrpn_lsb;
-   }
-
-   // now that the NRPN state is set, send the NRPN data value,
-   // but do not bother sending any data if the Null RPN is in effect.
-   if (nrpn_msb != 127 && nrpn_lsb != 127) {
-      status &= cont(channel, 6, data_msb);
-   }
-
-   return status;
-}
- 
-
-int MidiOutput::NRPN(int channel, int nrpn_msb, int nrpn_lsb, double data) {
-   channel  = channel  & 0x0f;
-   nrpn_msb = nrpn_msb & 0x7f;
-   nrpn_lsb = nrpn_msb & 0x7f;
-   if (data < -1.0) {
-      data = -1.0;
-   } else if (data > 1.0) {
-      data = 1.0;
-   }
-
-   int status = 1;
-
-   // check to see if the nrpn_msb and nrpn_lsb are the same
-   // as the last call to this function, if not, then send
-   // the appropriate MIDI controller values.
-   if (rpn_msb_status[getPort()][channel] != nrpn_msb) {
-      status &= cont(channel, 99, nrpn_msb);
-      rpn_msb_status[getPort()][channel] = nrpn_msb;
-   }
-   if (rpn_lsb_status[getPort()][channel] != nrpn_lsb) {
-      status &= cont(channel, 98, nrpn_lsb);
-      rpn_lsb_status[getPort()][channel] = nrpn_lsb;
-   }
-
-   // convert data into 14 bit number
-   int data14 = (int)((data+1.0)/2.0*16383 + 0.5);
-
-   // send the NRPN data values, two message of 7 bits each
-   // but do not bother sending any data if the Null RPN is in effect.
-   if (nrpn_msb != 127 && nrpn_lsb != 127) {
-      status &= cont(channel,  6, data14 >> 7);
-      status &= cont(channel, 38, data14 & 0x7f);
-   }
-
-   return status;
-}
-
-
-//////////
-//
-// Convenience functions for use of NRPN function.  Note that these
-// are "Non-Registered" Parameter Numbers which means that each
-// synthesizer manufacture can do whatever they want, so these
-// functions might not behave the way you expect them to do so.
-// Yamaha XG and Roland GS NRPN specifications are given below.
-//
-
-int MidiOutput::NRPN_null(int channel) {
-   return NRPN(channel, 127, 127, 0);
-}
-
-int MidiOutput::NRPN_vibratoRate(int channel, int value) {
-   // value in range -64..+63
-   return NRPN(channel, 1, 8, value+64);
-}
-
-int MidiOutput::NRPN_vibratoRate(int channel, double value) {
-   // value in range -1.0..+1.0
-   return NRPN(channel, 1, 8, value);
-}
-
-int MidiOutput::NRPN_vibratoDepth(int channel, int value) {
-   // value in range -64..+63
-   return NRPN(channel, 1, 9, value+64);
-}
-
-int MidiOutput::NRPN_vibratoDepth(int channel, double value) {
-   // value in range -1.0..+1.0
-   return NRPN(channel, 1, 9, value);
-}
-
-int MidiOutput::NRPN_vibratoDelay(int channel, int value) {
-   // value in range -64..+63
-   return NRPN(channel, 1, 32, value+64);
-}
-
-int MidiOutput::NRPN_vibratoDelay(int channel, double value) {
-   // value in range -1.0..+1.0
-   return NRPN(channel, 1, 32, value);
-}
-
-int MidiOutput::NRPN_filterCutoff(int channel, int value) {
-   // value in range -64..+63
-   return NRPN(channel, 1, 33, value+64);
-}
-
-int MidiOutput::NRPN_filterCutoff(int channel, double value) {
-   // value in range -1.0..+1.0
-   return NRPN(channel, 1, 33, value);
-}
-
-int MidiOutput::NRPN_attack(int channel, int value) {
-   // value in range -64..+63
-   return NRPN(channel, 1, 99, value+64);
-}
-
-int MidiOutput::NRPN_attack(int channel, double value) {
-   // value in range -1.0..+1.0
-   return NRPN(channel, 1, 99, value);
-}
-
-int MidiOutput::NRPN_decay(int channel, int value) {
-   // value in range -64..+63
-   return NRPN(channel, 1, 100, value+64);
-}
-
-int MidiOutput::NRPN_decay(int channel, double value) {
-   // value in range -1.0..+1.0
-   return NRPN(channel, 1, 100, value);
-}
-
-int MidiOutput::NRPN_release(int channel, int value) {
-   // value in range -64..+63
-   return NRPN(channel, 1, 102, value+64);
-}
-
-int MidiOutput::NRPN_release(int channel, double value) {
-   // value in range -1.0..+1.0
-   return NRPN(channel, 1, 102, value);
-}
-
-int MidiOutput::NRPN_drumFilterCutoff(int drum, int value) {
-   // value in range -64..+63
-   return NRPN(9, 20, drum, value+64);
-}
-
-int MidiOutput::NRPN_drumFilterCutoff(int drum, double value) {
-   // value in range -1.0..+1.0
-   return NRPN(9, 20, drum, value);
-}
-
-int MidiOutput::NRPN_drumFilterResonance(int drum, int value) {
-   // value in range -64..+63
-   return NRPN(9, 21, drum, value+64);
-}
-
-int MidiOutput::NRPN_drumFilterResonance(int drum, double value) {
-   // value in range -1.0..+1.0
-   return NRPN(9, 21, drum, value);
-}
-
-int MidiOutput::NRPN_drumAttack(int drum, int value) {
-   // value in range -64..+63
-   return NRPN(9, 22, drum, value+64);
-}
-
-int MidiOutput::NRPN_drumAttack(int drum, double value) {
-   // value in range -1.0..+1.0
-   return NRPN(9, 22, drum, value);
-}
-
-int MidiOutput::NRPN_drumDecay(int drum, int value) {
-   // value in range -64..+63
-   return NRPN(9, 23, drum, value+64);
-}
-
-int MidiOutput::NRPN_drumDecay(int drum, double value) {
-   // value in range -1.0..+1.0
-   return NRPN(9, 23, drum, value);
-}
-
-int MidiOutput::NRPN_drumPitch(int drum, int value) {
-   // value in range -64..+63
-   return NRPN(9, 24, drum, value+64);
-}
-
-int MidiOutput::NRPN_drumPitch(int drum, double value) {
-   // value in range -1.0..+1.0
-   return NRPN(9, 24, drum, value);
-}
-
-int MidiOutput::NRPN_drumLevel(int drum, int value) {
-   // value in range -64..+63
-   return NRPN(9, 26, drum, value+64);
-}
-
-int MidiOutput::NRPN_drumLevel(int drum, double value) {
-   // value in range -1.0..+1.0
-   return NRPN(9, 26, drum, value);
-}
-
-int MidiOutput::NRPN_drumPan(int drum, int value) {
-   return NRPN(9, 28, drum, value+64);
-}
-
-int MidiOutput::NRPN_drumPan(int drum, double value) {
-   // value in range -1.0..+1.0
-   return NRPN(9, 28, drum, value);
-}
-
-int MidiOutput::NRPN_drumReverb(int drum, int value) {
-   // note offset from 0 not -64
-   return NRPN(9, 29, drum, value);
-}
-
-int MidiOutput::NRPN_drumReverb(int drum, double value) {
-   // value in range -1.0..+1.0
-   return NRPN(9, 29, drum, value);
-}
-
-int MidiOutput::NRPN_drumChorus(int drum, int value) {
-   // note offset from 0 not -64
-   return NRPN(9, 30, drum, value);
-}
-
-int MidiOutput::NRPN_drumChorus(int drum, double value) {
-   // value in range -1.0..+1.0
-   return NRPN(9, 30, drum, value);
-}
-
-int MidiOutput::NRPN_drumVariation(int drum, int value) {
-   // note offset from 0 not -64
-   return NRPN(9, 31, drum, value);
-}
-
-int MidiOutput::NRPN_drumVariation(int drum, double value) {
-   // value in range -1.0..+1.0
-   return NRPN(9, 31, drum, value);
-}
-
-//
-// Convenience functions for use of NRPN function.
-//
-//////////
-
-
-
-//////////////////////////////
-//
-// RPN -- sends a registered parameter number where:
-//   parameter #1: channel (0-15)
-//   parameter #2: RPN MSB indicator (controller #101 data)
-//   parameter #3: RPN LSB indicator (controller #100 data)
-//   parameter #4: RPN MSB data      (controller #6  data)
-//  [parameter #5: RPN LSB data      (controller #38 data)]
-// or:
-//   parameter #1: channel (0-15)
-//   parameter #2: NRPN MSB indicator (controller #99 data)
-//   parameter #3: NRPN LSB indicator (controller #98 data)
-//   parameter #4: NRPN Floating point in range (-1..1) (ccont#6 and #38 data)
-//
-//
-// RPN (registered parameter number) -- General MIDI and 
-//    Extended MIDI mess.  It becomes the receiving synthesizer's
-//    responsibility to determine the meaning of continuous
-//    controller (ccont) #6 from data sent with cconts #100,101 (for
-//    RPNS) and cconts #98,99 (for NRPNS).  
-//
-// The data for RPNs are transfered to synthesizer with 
-//    data slider ccont #6(MSB) and ccont #38(LSB).  Also data increment
-//    ccont#96 (data increment) and ccont#97 (data decrement) are in
-//    relation to the RPN or NRPN in effect.  Increment and Decrement
-//    are not recommend to use with RPN's because of confusion in the
-//    MIDI industry over which 7-bit data (#6 or #38) to increment.
-//  
-// Once you have selected an RPN on a given channel, the
-//    channel will apply subsequent Data Entry to the 
-//    selected parameter.  After making the necessary settings
-//    you should set RPN's to NULL to reduce the risk of 
-//    operational errors.  a NULL RPN will disable the previous
-//    values of either RPN or NRPN data.
-// 
-// The following RPN values are registered:
-//    CCont #100 = LSB of RPN parameter ID
-//    CCont #101 = MSB of RPN parameter ID
-// 
-// RPN                               Data Range
-// MSB LSB     Parameter              (ccont#6=MSB, ccont#38=LSB)
-// === ===== ====================== ======================
-
-//   0   0   Pitchbend Sensitivity  0-127 (default 2) (LSB ignored)
-//                                  (The number of +/- half steps in
-//                                  pitch wheel range).
-//   0   1   Fine Tune              -64.. 0..+63 logical range
-//                                    0..64..127 MIDI data range
-//   0   2   Coarse Tune            same range as above.
-//   0   3   Change Tuning Program  0..127
-//   0   4   Change Tuning Bank     0..127
-//   
-
-int MidiOutput::RPN(int channel, int rpn_msb, int rpn_lsb, 
-      int data_msb, int data_lsb) {
-   channel  = channel & 0x0f;
-   rpn_msb  = rpn_msb & 0x7f;
-   rpn_lsb  = rpn_msb & 0x7f;
-   data_msb = rpn_msb & 0x7f;
-   data_lsb = rpn_msb & 0x7f;
- 
-   int status = 1;
-
-   // check to see if the rpn_msb and rpn_lsb are the same
-   // as the last call to this function, if not, then send
-   // the appropriate MIDI controller values.
-   if (rpn_msb_status[getPort()][channel] != rpn_msb) {
-      status &= cont(channel, 101, rpn_msb);
-      rpn_msb_status[getPort()][channel] = rpn_msb;
-   }
-   if (rpn_lsb_status[getPort()][channel] != rpn_lsb) {
-      status &= cont(channel, 100, rpn_lsb);
-      rpn_lsb_status[getPort()][channel] = rpn_lsb;
-   }
-
-   // now that the RPN state is set, send the RPN data values
-   // but do not bother sending any data if the Null RPN is in effect.
-   if (rpn_msb != 127 && rpn_lsb != 127) {
-      status &= cont(channel, 6, data_msb);
-      status &= cont(channel, 38, data_msb);
-   }
-
-   return status;
-}
-
-
-int MidiOutput::RPN(int channel, int rpn_msb, int rpn_lsb, int data_msb) {
-   channel  = channel & 0x0f;
-   rpn_msb  = rpn_msb & 0x7f;
-   rpn_lsb  = rpn_msb & 0x7f;
-   data_msb = rpn_msb & 0x7f;
- 
-   int status = 1;
-
-   // check to see if the rpn_msb and rpn_lsb are the same
-   // as the last call to this function, if not, then send
-   // the appropriate MIDI controller values.
-   if (rpn_msb_status[getPort()][channel] != rpn_msb) {
-      status &= cont(channel, 101, rpn_msb);
-      rpn_msb_status[getPort()][channel] = rpn_msb;
-   }
-   if (rpn_lsb_status[getPort()][channel] != rpn_lsb) {
-      status &= cont(channel, 100, rpn_lsb);
-      rpn_lsb_status[getPort()][channel] = rpn_lsb;
-   }
-
-   // now that the RPN state is set, send the RPN data value,
-   // but do not bother sending any data if the Null RPN is in effect.
-   if (rpn_msb != 127 && rpn_lsb != 127) {
-      status &= cont(channel, 6, data_msb);
-   }
-
-   return status;
-}
- 
-
-int MidiOutput::RPN(int channel, int rpn_msb, int rpn_lsb, double data) {
-   channel = channel & 0x0f;
-   rpn_msb = rpn_msb & 0x7f;
-   rpn_lsb = rpn_msb & 0x7f;
-   if (data < -1.0) {
-      data = -1.0;
-   } else if (data > 1.0) {
-      data = 1.0;
-   }
-
-   int status = 1;
-
-   // check to see if the rpn_msb and rpn_lsb are the same
-   // as the last call to this function, if not, then send
-   // the appropriate MIDI controller values.
-   if (rpn_msb_status[getPort()][channel] != rpn_msb) {
-      status &= cont(channel, 101, rpn_msb);
-      rpn_msb_status[getPort()][channel] = rpn_msb;
-   }
-   if (rpn_lsb_status[getPort()][channel] != rpn_lsb) {
-      status &= cont(channel, 100, rpn_lsb);
-      rpn_lsb_status[getPort()][channel] = rpn_lsb;
-   }
-
-   // convert data into 14 bit number
-   int data14 = (int)((data+1.0)/2.0*16383 + 0.5);
-
-   // send the RPN data values, two message of 7 bits each
-   // but do not bother sending any data if the Null RPN is in effect.
-   if (rpn_msb != 127 && rpn_lsb != 127) {
-      status &= cont(channel,  6, data14 >> 7);
-      status &= cont(channel, 38, data14 & 0x7f);
-   }
-
-   return status;
-}
-
-
-//////////
-//
-// Convenience functions for use of RPN function. 
-//
-
-int MidiOutput::RPN_null(void) {
-   int status = 1;
-   for (int i=0; i<16; i++) {
-      status &= RPN_null(i);
-   }
-   return status;
-}
-
-int MidiOutput::RPN_null(int channel) {
-   return RPN(channel, 127, 127, 0);
-}
-
-int MidiOutput::pbRange(int channel, int steps) {
-   // default value for pitch bend sensitivity is 2 semitones.
-   return RPN(channel, 0, 0, steps);
-}
-
-int MidiOutput::tuneFine(int channel, int cents) {
-   // data from -64 to + 63
-   return RPN(channel, 0, 1, cents+64);
-}
-
-int MidiOutput::fineTune(int channel, int cents) {
-   return tuneFine(channel, cents);
-}
-
-int MidiOutput::tuneCoarse(int channel, int steps) {
-   // data from -64 to + 63
-   return RPN(channel, 0, 1, steps+64);
-}
-
-int MidiOutput::coarseTune(int channel, int steps) {
-   return tuneCoarse(channel, steps);
-}
-
-int MidiOutput::tuningProgram(int channel, int program) {
-   return RPN(channel, 0, 3, program);
-}
-
-int MidiOutput::tuningBank(int channel, int bank) {
-   return RPN(channel, 0, 4, bank);
-}
-
-
-///////////////////////////////////////////////////////////////////////////
-//
-// private functions
-//
-
-
-//////////////////////////////
-//
-// MidiOutput::initializeRPN -- set up the RPN status arrays
-//   ignores initiaization request if already initialized.
-//
-
-void MidiOutput::initializeRPN(void) {
-   int i, channel;
-
-   if (rpn_lsb_status == NULL) {
-      rpn_lsb_status = new Array<int>[getNumPorts()];
-      for (i=0; i<getNumPorts(); i++) {
-         rpn_lsb_status[i].setSize(16);      
-         rpn_lsb_status[i].allowGrowth(0);      
-         for (channel=0; channel<16; channel++) {
-            rpn_lsb_status[i][channel] = 127;
-         }
-      }
-   }
-
-   if (rpn_msb_status == NULL) {
-      rpn_msb_status = new Array<int>[getNumPorts()];
-      for (i=0; i<getNumPorts(); i++) {
-         rpn_msb_status[i].setSize(16);      
-         rpn_msb_status[i].allowGrowth(0);      
-         for (channel=0; channel<16; channel++) {
-            rpn_msb_status[i][channel] = 127;
-         }
-      }
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutput::deinitializeRPN -- destroy the RPN status arrays
-//    do nothing if the arrays are not initialized
-//
-
-void MidiOutput::deinitializeRPN(void) {
-   if (rpn_msb_status != NULL) {
-      delete [] rpn_msb_status;
-      rpn_msb_status = NULL;
-   }
-
-   if (rpn_msb_status != NULL) {
-      delete [] rpn_msb_status;
-      rpn_msb_status = NULL;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutput::writeOutputAscii
-//
-
-void MidiOutput::writeOutputAscii(int command, int p1, int p2) {
-   outputRecordFile << std::dec;
-   outputRecordFile.width(6);
-   outputRecordFile << (timer.getTime()-lastFlushTime) <<'\t';
-   outputRecordFile << "0x" << std::hex;
-   outputRecordFile.width(2);
-   outputRecordFile << command << ' ';
-   outputRecordFile << std::dec; 
-   outputRecordFile.width(3);
-   outputRecordFile << p1 << ' ';
-   outputRecordFile << std::dec; 
-   outputRecordFile.width(3);
-   outputRecordFile<< p2;
-   outputRecordFile << std::endl;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutput::writeOutputBinary
-//
-
-void MidiOutput::writeOutputBinary(int command, int p1, int p2) {
-   // don't store 0xf8 command since it will be used to mark the end of the 
-   if (command == 0xf8) return;
-
-   // write the delta time (four bytes)
-   outputRecordFile.writeBigEndian((ulong)(timer.getTime() - lastFlushTime));
-
-   // write midi data 
-   // don't store 0xf8 command since it will be used to mark the end of the 
-   // delta time data.
-   outputRecordFile << (uchar)p1;
-   outputRecordFile << (uchar)p2;
-   outputRecordFile << (uchar)0xf8;
-}
-
-
-
-//////////////////////////////
-//
-// MidiOutput::writeOutputMidifile
-//
-
-void MidiOutput::writeOutputMidifile(int command, int p1, int p2) {
-   // not yet implemented
-}
-
-
-
-// md5sum:	1c518e5130ac9ba0d79c4e9ce7fa41cf  - MidiOutput.cpp =css= 20030102
diff --git a/extensions/gripd/src/midiio/src/MidiPort.cpp b/extensions/gripd/src/midiio/src/MidiPort.cpp
deleted file mode 100644
index 1a03dac7f..000000000
--- a/extensions/gripd/src/midiio/src/MidiPort.cpp
+++ /dev/null
@@ -1,189 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: 21 December 1997
-// Last Modified: Fri Jan 23 10:24:35 GMT-0800 1998
-// Filename:      .../sig/code/control/MidiPort/MidiPort.cpp
-// Web Address:   http://www-ccrma.stanford.edu/~craig/improv/src/MidiPort.cpp
-// Syntax:        C++
-// 
-// Description:   A unified object that handles basic MIDI input and output.
-//                Derived from the MidiInPort and MidiOutPort classes.
-//
-
-#include "MidiPort.h"
-
-
-//////////////////////////////
-//
-// MidiPort::MidiPort
-//
-
-MidiPort::MidiPort(void) : MidiOutPort(), MidiInPort() {
-   // nothing
-}
-
-
-MidiPort::MidiPort(int outputPort, int inputPort) :
-      MidiOutPort(outputPort), MidiInPort(inputPort) {
-   // nothing
-}
-
-
-
-//////////////////////////////
-//
-// MidiPort::~MidiPort
-//
-
-MidiPort::~MidiPort() {
-   // nothing
-}
-
-
-
-//////////////////////////////
-//
-// MidiPort::getChannelInOffset -- return the MIDI channel offset of
-//     the MIDI input.
-//
-
-int MidiPort::getChannelInOffset(void) const {
-   return MidiInPort::getChannelOffset();
-}
-
-
-
-//////////////////////////////
-//
-// MidiPort::getChannelOutOffset -- return the MIDI channel offset of
-//     the MIDI output.
-//
-
-int MidiPort::getChannelOutOffset (void) const {
-   return MidiOutPort::getChannelOffset();
-}
-
-
-
-//////////////////////////////
-//
-// MidiPort::getInputPort
-//
-
-int MidiPort::getInputPort(void) {
-   return MidiInPort::getPort();
-}
-
-
-
-//////////////////////////////
-//
-// MidiPort::getInputTrace
-//
-
-int MidiPort::getInputTrace(void) {
-   return MidiInPort::getTrace();
-}
-
-
-
-//////////////////////////////
-//
-// MidiPort::getOutputPort
-//
- 
-int MidiPort::getOutputPort(void) {
-   return MidiOutPort::getPort();
-}
-
-
-
-//////////////////////////////
-//
-// MidiPort::getOutputTrace
-//
-
-int MidiPort::getOutputTrace(void) {
-   return MidiOutPort::getTrace();
-}
-
-
-
-//////////////////////////////
-//
-// MidiPort::setChannelOffset -- sets the MIDI channel offset
-//
-
-void MidiPort::setChannelOffset(int anOffset) {
-   MidiInPort::setChannelOffset(anOffset);
-   MidiOutPort::setChannelOffset(anOffset);
-}
-
-
-
-//////////////////////////////
-//
-// MidiPort::setInputPort
-//   
- 
-void MidiPort::setInputPort(int aPort) {
-   MidiInPort::setPort(aPort);
-}
-
-
-
-//////////////////////////////
-//
-// MidiPort::setInputTrace
-//
-
-int MidiPort::setInputTrace(int aState) {
-   return MidiInPort::setTrace(aState);
-}
-
-
-
-//////////////////////////////
-//
-// MidiPort::setOutputPort
-//
-
-void MidiPort::setOutputPort(int aPort) {
-   MidiOutPort::setPort(aPort);
-}
-
-
-
-//////////////////////////////
-//
-// MidiPort::setOutputTrace
-//
-
-int MidiPort::setOutputTrace(int aState) {
-   return MidiOutPort::setTrace(aState);
-}
-
-
-
-//////////////////////////////
-//
-// MidiPort::toggleInputTrace
-//
-
-void MidiPort::toggleInputTrace(void) {
-   MidiInPort::toggleTrace();
-}
-
-
-//////////////////////////////
-//
-// MidiPort::toggleOutputTrace
-//
-
-void MidiPort::toggleOutputTrace(void) {
-   MidiOutPort::toggleTrace();
-}
-
-
-
-// md5sum:	c2583f3ed21e238ba6b298915cb728aa  - MidiPort.cpp =css= 20030102
diff --git a/extensions/gripd/src/midiio/src/Options.cpp b/extensions/gripd/src/midiio/src/Options.cpp
deleted file mode 100644
index 0341fe392..000000000
--- a/extensions/gripd/src/midiio/src/Options.cpp
+++ /dev/null
@@ -1,887 +0,0 @@
-//
-// Copyright 1998-2000 by Craig Stuart Sapp, All Rights Reserved.
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Sun Apr  5 13:07:18 PDT 1998
-// Last Modified: Sat Mar 27 18:17:06 PST 1999
-// Last Modified: Thu Apr 13 14:02:52 PDT 2000 (added 2nd define function)   
-// Last Modified: Fri May  5 17:52:01 PDT 2000 (added --options suppression)
-// Last Modified: Tue May  1 01:25:58 PDT 2001 (fixed getArgumentCount())
-// Filename:      ...sig/maint/code/sigBase/Options.cpp
-// Web Address:   http://sig.sapp.org/src/sigBase/Options.cpp
-// Documentation: http://sig.sapp.org/doc/classes/Options
-// Syntax:        C++ 
-//
-// Description:   Handles command-line options in a graceful manner.
-//
-
-int optionListCompare(const void* a, const void* b);
-
-#include "Options.h"
-#include "Options_private.h"
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <iostream>
-
-
-//////////////////////////////
-//
-// Options::Options --
-//
-
-Options::Options(void) {
-   optionFlag = '-';
-   gargc = -1;
-   gargv = NULL;
-   argument.setSize(0);
-   argument.allowGrowth();
-   optionRegister.setSize(0);
-   optionRegister.allowGrowth();
-   optionList.setSize(0);
-   optionList.allowGrowth();
-   processedQ = 0;
-   sortedQ = 0;
-   commandString = NULL;
-   options_error_check = 1;
-   suppressQ = 0;
-   optionsArgument = 0;
-}
-
-
-Options::Options(int argc, char** argv) {
-   optionFlag = '-';
-   gargc = -1;
-   gargv = NULL;
-   argument.setSize(0);
-   argument.allowGrowth();
-   optionRegister.setSize(0);
-   optionRegister.allowGrowth();
-   optionList.setSize(0);
-   optionList.allowGrowth();
-   processedQ = 0;
-   sortedQ = 0;
-   commandString = NULL;
-   options_error_check = 1;
-   suppressQ = 0;
-   optionsArgument = 0;
-
-   setOptions(argc, argv);
-}
-
-
-
-//////////////////////////////
-//
-// Options::~Options --
-//
-
-Options::~Options() {
-   reset();
-}
-
-
-
-//////////////////////////////
-//
-// Options::argc -- returns the argument count as from main().
-//
-
-int Options::argc(void) const {
-   return gargc;
-}
-
-
-
-//////////////////////////////
-//
-// Options::argv -- returns the arguments strings as from main().
-//
-
-char** Options::argv(void) const {
-   return gargv;
-}
-
-
-
-//////////////////////////////
-//
-// Options::define -- define an option entry in the option register
-//
-
-void Options::define(const char* aDefinition) {
-   sortedQ = 0;                        // have to sort option list later
-   option_register* definitionEntry;
-   option_list* optionListEntry;
-
-
-   // error if the definition string doesn't contain an equals sign.
-   if (strchr(aDefinition, '=') == NULL) {
-      std::cout << "Error: no \"=\" in option definition: " << aDefinition << std::endl;
-      exit(1);
-   }
-
-   // get the length of the definition string
-   int len = strlen(aDefinition);
-
-   // put space before and after the equals sign so that strtok works
-   char* definitionString;
-   definitionString = new char[len + 3];
-   int i = 0;
-   while (aDefinition[i] != '=' && i < len) {
-      definitionString[i] = aDefinition[i];
-      i++;
-   }
-   definitionString[i] = ' ';
-   i++;
-   definitionString[i] = '=';
-   i++;
-   definitionString[i] = ' ';
-   for (int k=i; k<len+2; k++) {
-      definitionString[k+1] = aDefinition[k-1];
-   }
-   len += 2;
-
-   // determine the registry index for the definition
-   int definitionIndex = optionRegister.getSize();
-
-
-   // set up space for a definition entry
-   definitionEntry = new option_register(aDefinition, OPTION_UNKNOWN_TYPE,
-      "", NULL);
-
-
-   char *tempstr;  // temporary storage for strtok use on defaultString
-   tempstr = new char[len + 1];
-   strncpy(tempstr, definitionString, len);
-
-   char *optionName;   // option name to add to list
-
-   // get the first option name
-   optionName = strtok(tempstr, " \t\n|");
-   if (optionName[0] == '=') {
-      std::cout << "Error: must specify an option name in definition: " 
-           << aDefinition << std::endl;
-      exit(1);
-   }
-   // store an entry for each option name alias
-   const char* tempsearch;
-   while (optionName != NULL && optionName[0] != '=') {
-      tempsearch = getDefinition(optionName);
-      if (tempsearch != NULL) {
-         std::cerr << "option name \"" << optionName 
-              << "\" from definition: " << aDefinition << std::endl;
-         std::cerr << "is already defined in definition: "
-              << tempsearch << std::endl;
-         exit(1);
-      }
-      optionListEntry = new option_list(optionName, definitionIndex);      
-      optionList.append(optionListEntry);
-      optionName = strtok(NULL, " \t\n|");
-   }
-   if (optionName == NULL) {
-      std::cout << "Error: unknown error in definition: " << aDefinition << std::endl;
-      exit(1);
-   }
-
-   // now process the option type and any default value.
-   i = 0;
-
-   // find the equals sign
-   while (definitionString[i] != '=' && i < len) {
-      i++;
-   }
-   i++;
-   // skip over any white space
-   while (isspace(definitionString[i]) && i < len) {
-      i++;
-   }
-
-   // this character must be the option type
-   char optionType = (char)tolower(definitionString[i]);
-   definitionEntry->setType(optionType);
-   i++;
-      
-
-   // check to make sure that the type is correct.
-   if (optionType != OPTION_STRING_TYPE &&
-         optionType != OPTION_INT_TYPE    &&
-         optionType != OPTION_FLOAT_TYPE  &&
-         optionType != OPTION_DOUBLE_TYPE &&
-         optionType != OPTION_BOOLEAN_TYPE &&
-         optionType != OPTION_CHAR_TYPE ) {
-      std::cout << "Error: unknown option type \'" << optionType
-           << "\' in defintion: " << aDefinition << std::endl;
-      exit(1);
-   }
-
-   // skip any white space after option type.
-   while (isspace(definitionString[i]) && i < len) {
-      i++; 
-   }
-
-
-   // there can only be two characters now: '\0' or ':'
-   if (i >= len || definitionString[i] == '\0') {
-      goto option_finish;
-   } else if (i<len && definitionString[i] == ':') {
-      i++;
-   } else {
-      std::cout << "Unknown error in definition: " << aDefinition << std::endl;
-      exit(1); 
-   }
-
-
-   // now proces the default string.  store it in a temp storage for copying
-
-   // skip any white space after option type.
-   while (i < len && isspace(definitionString[i])) {
-      i++; 
-   }
-   if (i >= len || definitionString[i] == '\0') {
-      goto option_finish;
-   }
-   
-
-   // now at beginnng of default option string which continues
-   // until the end of the definition string.
-   definitionEntry->setDefault(&definitionString[i]);
-
-option_finish:
-
-   optionRegister.append(definitionEntry);
-
-
-   delete [] definitionString;
-   delete [] tempstr;
-
-}
-
-
-void Options::define(const char* aDefinition, const char* description) {
-   define(aDefinition);
-
-   // now find some place to store the description...
-}
-
-
-
-//////////////////////////////
-//
-// Options::getArg -- returns the specified argument.
-//	argurment 0 is the command name.
-//
-
-char* Options::getArg(int index) {
-   if (index < 0 || index >= argument.getSize()) {
-      std::cout << "Error: argument " << index << " does not exist." << std::endl;
-      exit(1);
-   }
-   return argument[index];
-}
-
-
-
-//////////////////////////////
-//
-// Options::getArgument -- same as getArg
-//
-
-char* Options::getArgument(int index) {
-   return getArg(index);
-}
-
-
-
-//////////////////////////////
-//
-// Options::getArgCount --  number of arguments on command line.
-//	does not count the options or the command name.
-//
-
-int Options::getArgCount(void) {
-   return argument.getSize() - 1;
-}
-
-
-
-//////////////////////////////
-//
-// Options::getArgumentCount -- Same as getArgCount().
-//
-
-int Options::getArgumentCount(void) {
-   return getArgCount();
-}
-
-
-
-//////////////////////////////
-//
-// Options::getBoolean --  returns true if the option was
-//	used on the command line.
-//
-
-int Options::getBoolean(const char* optionName) {
-   int index = getRegIndex(optionName);
-   if (index < 0) {
-      return 0;
-   }
-   if (optionRegister[index]->getModifiedQ() == 1) {
-      return 1;
-   } else { 
-      return 0;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// Options::getCommand -- returns argv[0]
-//
-
-const char* Options::getCommand(void) {
-   if (argument.getSize() == 0) {
-      return "";
-   } else {
-      return argument[0];
-   }
-}
-
-
-
-//////////////////////////////
-//
-// Options::getCommandLine -- returns a string which contains the
-//     command-line call to the program.
-//
-
-const char* Options::getCommandLine(void) {
-   if (commandString != NULL) {
-      return commandString;
-   }
-
-   int length = 0;
-   int i;
-   for (i=0; i<gargc; i++) {
-      length += strlen(gargv[i]) + 1;
-   }
-   length--;   // remove the last space
-   commandString = new char[length + 1];
-   strcpy(commandString, gargv[0]);
-   for (i=1; i<gargc; i++) {
-      strcat(commandString, " ");
-      strcat(commandString, gargv[i]);
-   }
-
-   return commandString;
-}
-   
-
-
-
-//////////////////////////////
-//
-// Options::getDefinition -- returns the definition
-//	for the specified option name.  Returns NULL
-//	if there is no entry for the option name.
-//	It is assumed that the option list is unsorted.
-//	spaces count in the input option name.
-//
-
-const char* Options::getDefinition(const char* optionName) {
-   int i;
-   for (i=0; i<optionList.getSize(); i++) {
-      if (strcmp(optionName, optionList[i]->getName()) == 0) {
-         return optionRegister[optionList[i]->getIndex()]->getDefinition();
-      }
-   }
-   return (const char*)NULL;
-}
-
-
-
-//////////////////////////////
-//
-// Options::getDouble -- returns the double float associated
-//	with the given option.  Returns 0 if there is no
-//	number associated with the option.
-//
-
-double Options::getDouble(const char* optionName) {
-   return strtod(getString(optionName), (char**)NULL);
-}
-
-
-
-//////////////////////////////
-//
-// Options::getFlag --
-//
-
-char Options::getFlag(void) {
-   return optionFlag;
-}
-
-
-
-//////////////////////////////
-//
-// Options::getFloat -- returns the floating point number
-//	associated with the given option.
-//
-
-float Options::getFloat(const char* optionName) {
-   return (float)getDouble(optionName);
-}
-
-
-
-//////////////////////////////
-//
-// Options::getInt -- returns the integer argument.  Can handle
-//	hexadecimal, decimal, and octal written in standard 
-//	C syntax.
-//
-
-int Options::getInt(const char* optionName) {
-   return (int)strtol(getString(optionName), (char**)NULL, 0);
-}
-
-int Options::getInteger(const char* optionName) {
-   return getInt(optionName);
-}
-
-
-
-//////////////////////////////
-//
-// Options::getString --
-//
-
-const char* Options::getString(const char* optionName) {
-   int index = getRegIndex(optionName);
-   if (index < 0) {
-      return "UNKNOWN OPTION";
-   } else {
-      return optionRegister[index]->getOption();
-   }
-}
-
-
-
-//////////////////////////////
-//
-// Options::optionsArg -- returns true if the --options is present
-//    on the command line, otherwise returns false.
-//
-
-int Options::optionsArg(void) {
-   return optionsArgument;
-}
-
-
-
-//////////////////////////////
-//
-// Options::print --
-//
-
-void Options::print(void) {
-   for (int i=0; i<optionRegister.getSize(); i++) {
-      std::cout << optionRegister[i]->getDefinition() << std::endl;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// Options::reset --
-//
-
-void Options::reset(void) {
-   int i;
-   for (i=0; i<optionRegister.getSize(); i++) {
-      delete optionRegister[i];
-   }
-   optionRegister.setSize(0);
-   for (i=0; i<optionList.getSize(); i++) {
-      delete optionList[i];
-   }
-   optionList.setSize(0);
-   for (i=0; i<argument.getSize(); i++) {
-      delete [] argument[i];
-   }
-   argument.setSize(0);
-  
-   if (commandString != NULL) {
-      delete [] commandString;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// Options::setFlag -- set the character used to indicate an 
-//	option.  For unix this is usually '-', in MS-DOS,
-//	this is usually '/';  But the syntax of the Options
-//	class is for Unix-style options.
-//
-
-void Options::setFlag(char aFlag) {
-   optionFlag = aFlag;
-}
-
-
-
-
-//////////////////////////////
-//
-// setModified -- 
-//
-
-void Options::setModified(const char* optionName, const char* aString) {
-   int index = getRegIndex(optionName);
-   if (index < 0) {
-      return;
-   }
-   
-   optionRegister[getRegIndex(optionName)]->setModified(aString);
-}
-
-
-
-
-//////////////////////////////
-//
-// setOptions -- 
-//
-
-void Options::setOptions(int argc, char** argv) {
-   processedQ = 0;
-
-   gargc = argc;
-   gargv = argv;
-}
-
-
-
-//////////////////////////////
-//
-// Options:getType -- returns the type of the option
-//
-
-char Options::getType(const char* optionName) {
-   int index = getRegIndex(optionName);
-   if (index < 0) {
-      return -1;
-   } else {
-      return optionRegister[getRegIndex(optionName)]->getType();
-   }
-}
-
-
-
-//////////////////////////////
-//
-// Options::process -- same as verify
-//   	default values: error_check = 1, suppress = 0;
-//
-
-void Options::process(int argc, char** argv, int error_check, int suppress) {
-   setOptions(argc, argv);
-   verify(error_check, suppress);
-}
-
-
-void Options::process(int error_check, int suppress) {
-   verify(error_check, suppress);
-}
-
-
-
-//////////////////////////////
-//
-// Options::verify --
-//	default value: error_check = 1, suppress = 0;
-//
-
-void Options::verify(int error_check, int suppress) {
-   options_error_check = error_check;
-   int gargp = 1;
-   int optionend = 0;
-
-   if (suppress) {
-      suppressQ = 1;
-   } else {
-      suppressQ = 0;
-   }
-
-   // if calling verify again, must remove previous argument list.
-   if (argument.getSize() != 0) {
-      for (int j=0; j<argument.getSize(); j++) {
-         delete argument[j];
-      }
-      argument.setSize(0);
-   }
-
-   char* tempargument;
-   tempargument = new char[strlen(gargv[0])+1];
-   strcpy(tempargument, gargv[0]);
-   argument.append(tempargument);
-
-   int oldgargp;
-   int position = 0;
-   int running = 0;
-   while (gargp < gargc && optionend == 0) {
-      if (optionQ(gargv[gargp], gargp)) {
-         oldgargp = gargp;
-         gargp = storeOption(gargp, position, running);
-         if (gargp != oldgargp) {
-            running = 0;
-            position = 0;
-         }
-      } else {
-         if ( strlen(gargv[gargp]) == 2 && gargv[gargp][0] == getFlag() &&
-            gargv[gargp][2] == getFlag() ) {
-               optionend = 1;
-            gargp++;
-            break;
-         } else {                          // this is an argument
-            tempargument = new char[strlen(gargv[gargp])+1];
-            strcpy(tempargument, gargv[gargp]);
-            argument.append(tempargument);
-            gargp++;
-         }
-      }
-   }
-
-   while (gargp < gargc) {
-      tempargument = new char[strlen(gargv[gargp])+1];
-      strcpy(tempargument, gargv[gargp]);
-      argument.append(tempargument);
-      gargp++;
-   }
-
-}
-
-
-void Options::verify(int argc, char** argv, int error_check, int suppress) {
-   setOptions(argc, argv);
-   verify(error_check, suppress);
-}
-
-
-   
-
-///////////////////////////////////////////////////////////////////////////
-//
-// private functions
-//
-
-
-//////////////////////////////
-//
-// getRegIndex -- returns the index of the option associated
-//	with this name.
-//
-
-int Options::getRegIndex(const char* optionName) {
-   if (suppressQ && strcmp("options", optionName) == 0) {
-         return -1;
-   } 
-
-   if (sortedQ == 0) {
-      sortOptionNames();
-   }
-   option_list key(optionName, -1);
-   option_list* keyp = &key;
-   void* searchresult;
-   searchresult = bsearch(&keyp, optionList.getBase(), 
-      optionList.getSize(), sizeof(option_list*), optionListCompare);
-   if (searchresult != NULL) {
-      return (*((option_list**)searchresult))->getIndex();
-   } else if (strcmp("options", optionName) == 0) {
-      print();
-      exit(1);
-   } 
-
-   if (options_error_check) {
-      std::cout << "Error: unknown option \"" << optionName << "\"." << std::endl;
-      print();
-      exit(1);
-   }
- 
-   return -1;   
-}
-
-
-
-//////////////////////////////
-//
-// optionQ --  returns true if the string is an option
-//	"--" is not an option, also '-' is not an option.
-//	aString is assumed to not be NULL.
-//
-
-int Options::optionQ(const char* aString, int& argp) {
-   if (aString[0] == getFlag()) {
-      if (aString[1] == '\0') {
-         argp++; 
-         return 0;
-      } else if (aString[1] == getFlag()) {
-         if (aString[2] == '\0') {
-            argp++;
-            return 0;
-         } else {
-            return 1;
-         }
-      } else {
-         return 1;
-      }
-   } else {
-      return 0;
-   }
-}
-
-
-
-
-//////////////////////////////
-//
-// sortOptionNames --
-//
-
-void Options::sortOptionNames(void) {
-   qsort(optionList.getBase(), optionList.getSize(), 
-      sizeof(option_list*), optionListCompare);
-   sortedQ = 1;
-}
-
-
-
-//////////////////////////////
-//
-// storeOption -- 
-//
-
-#define OPTION_FORM_SHORT     0
-#define OPTION_FORM_LONG      1
-#define OPTION_FORM_CONTINUE  2
-
-int Options::storeOption(int gargp, int& position, int& running) {
-   int optionForm;
-   char tempname[1024];
-   char optionType = '\0';
-
-   if (running) {
-      optionForm = OPTION_FORM_CONTINUE;
-   } else if (gargv[gargp][1] == getFlag()) {
-      optionForm = OPTION_FORM_LONG;
-   } else {
-      optionForm = OPTION_FORM_SHORT;
-   }
-
-   switch (optionForm) {
-      case OPTION_FORM_CONTINUE:
-         position++;
-         tempname[0] = gargv[gargp][position];
-         tempname[1] = '\0';
-         optionType = getType(tempname);
-         if (optionType != OPTION_BOOLEAN_TYPE) {
-            running = 0;
-            position++;
-         }
-         break;
-      case OPTION_FORM_SHORT:   
-         position = 1;
-         tempname[0] = gargv[gargp][position];
-         tempname[1] = '\0';
-         optionType = getType(tempname);
-         if (optionType != OPTION_BOOLEAN_TYPE) {
-            position++;
-         }
-         break;
-      case OPTION_FORM_LONG:   
-         position = 2;
-         while (gargv[gargp][position] != '=' && 
-               gargv[gargp][position] != '\0') {
-            tempname[position-2] = gargv[gargp][position];
-            position++;    
-         }
-         tempname[position-2] = '\0';
-         optionType = getType(tempname);
-         if (optionType == -1) {         // suppressed --options option
-            optionsArgument = 1;
-            break;   
-         }
-         if (gargv[gargp][position] == '=') {
-            if (optionType == OPTION_BOOLEAN_TYPE) {
-               std::cout << "Error: boolean variable cannot have any options: " 
-                    << tempname << std::endl;
-               exit(1);
-            }
-            position++;
-         }
-         break;
-   }
-
-   if (optionType == -1) {              // suppressed --options option
-      optionsArgument = 1;
-      gargp++;
-      position = 0;
-      return gargp;
-   }
-
-   if (gargv[gargp][position] == '\0' && 
-         optionType != OPTION_BOOLEAN_TYPE) {
-      gargp++;
-      position = 0;
-   } 
-
-   if (optionForm != OPTION_FORM_LONG && optionType == OPTION_BOOLEAN_TYPE &&
-         gargv[gargp][position+1] != '\0') {
-      running = 1;
-   } else if (optionType == OPTION_BOOLEAN_TYPE &&
-         gargv[gargp][position+1] == '\0') {
-      running = 0;
-   }
-
-   if (gargp >= gargc) {
-      std::cout << "Error: last option requires a parameter" << std::endl;
-      exit(1);
-   }
-   setModified(tempname, &gargv[gargp][position]);
-
-   if (!running) {
-      gargp++;
-   }
-   return gargp;
-} 
-
-
-///////////////////////////////////////////////////////////////////////////
-//
-// helping function
-//
-
-//////////////////////////////
-//
-// optionListCompare -- for sorting the option list
-//
-
-int optionListCompare(const void* a, const void* b) {
-//cerr << "       comparing: " << (*((option_list**)a))->getName() 
-//      << " i=" << (*((option_list**)a))->getIndex() 
-//      << " :to: "
-//      << (*((option_list**)b))->getName() 
-//      << " i=" << (*((option_list**)b))->getIndex() << std::endl;
-   return strcmp((*((option_list**)a))->getName(), 
-                 (*((option_list**)b))->getName());
-}
-
-
-
-// md5sum:	63584ffabc92170fdb9ef5caedb5a3f6  - Options.cpp =css= 20030102
diff --git a/extensions/gripd/src/midiio/src/Options_private.cpp b/extensions/gripd/src/midiio/src/Options_private.cpp
deleted file mode 100644
index 5a875a8bf..000000000
--- a/extensions/gripd/src/midiio/src/Options_private.cpp
+++ /dev/null
@@ -1,358 +0,0 @@
-//
-// Copyright 1998-1999 by Craig Stuart Sapp, All Rights Reserved.
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Sun Apr  5 13:07:18 PDT 1998
-// Last Modified: Sun Jan 10 05:43:24 PST 1999
-// Filename:      ...sig/maint/code/sigBase/Options_private.cpp
-// Web Address:   http://sig.sapp.org/src/sigBase/Options_private.cpp
-// Syntax:        C++ 
-//
-// Description:   A private set of functions for use in the Options class.
-//
-
-#include "Options_private.h"
-#include <iostream>
-#include <stdlib.h>
-#include <string.h>
-
-
-//////////////////////////////
-//
-// option_register::option_register --
-//
-
-option_register::option_register(void) {
-   definition = NULL;
-   defaultOption = NULL;
-   modifiedOption = NULL;
-   type = 's';
-}
-
-
-option_register::option_register(const char* aDefinition, char aType,
-      const char* aDefaultOption, const char* aModifiedOption) {
-   definition = NULL;
-   defaultOption = NULL;
-   modifiedOption = NULL;
-
-   setType(aType);
-   setDefinition(aDefinition);
-   setDefault(aDefaultOption);
-   setModified(aModifiedOption);
-}
-
-
-
-//////////////////////////////
-//
-// option_register::~option_register --
-//
-
-option_register::~option_register() {
-   if (definition != NULL) {
-      delete [] definition;
-   } 
-   definition = NULL;
-
-   if (defaultOption != NULL) {
-      delete [] defaultOption;
-   }
-   defaultOption = NULL;
-  
-   if (modifiedOption != NULL) {
-      delete [] modifiedOption;
-   }
-   modifiedOption = NULL;
-}
-
-
-
-//////////////////////////////
-//
-// option_register::clearModified -- sets the modified string to
-//	NULL.
-//
-
-void option_register::clearModified(void) {
-   if (modifiedOption != NULL) {
-      delete [] modifiedOption;
-   } 
-   modifiedOption = NULL;
-}   
-
-
-
-//////////////////////////////
-//
-// option_register::getDefinition -- returns the initial definition
-//	string used to define this entry.
-//
-
-const char* option_register::getDefinition(void) {
-   return definition;
-}
-
-
-
-//////////////////////////////
-//
-// option_register::getDefault --  returns the default string
-//	to be returned.  Will never return a NULL;
-//
-
-const char* option_register::getDefault(void) {
-   return defaultOption;
-}
-
-
-
-//////////////////////////////
-//
-// option_register::getModified -- return the modified
-//	option string
-//
-
-const char* option_register::getModified(void) {
-   return modifiedOption;
-}
-
-
-
-//////////////////////////////
-//
-// option_register::getModifiedQ -- returns true if 
-//	modified string is not null, false otherwise.
-//
-
-int option_register::getModifiedQ(void) {
-   if (modifiedOption == NULL) {
-      return 0;
-   } else { 
-      return 1;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// option_register::getType -- 
-//
-
-char option_register::getType(void) {
-   return type;
-}
-
-
-
-//////////////////////////////
-//
-// option_register::getOption -- return the modified option
-//  	or the default option if no modified option.
-//
-
-const char* option_register::getOption(void) {
-   if (getModifiedQ()) {
-      return getModified();
-   } else {
-      return getDefault();
-   }
-}
-
-
-
-//////////////////////////////
-//
-// option_register::reset -- deallocate space for all
-//	strings in object.  (but default string is set to "")
-//
-
-void option_register::reset(void) {
-   if (definition != NULL) {
-      delete [] definition;
-   } 
-   definition = NULL;
-
-   if (defaultOption != NULL) {
-      delete [] defaultOption;
-   }
-   defaultOption = NULL;
-   defaultOption = new char[1];
-   defaultOption[0] = '\0';
-  
-   if (modifiedOption != NULL) {
-      delete [] modifiedOption;
-   }
-   modifiedOption = NULL;
-}
-
-
-
-//////////////////////////////
-//
-// option_register::setDefault --
-//
-
-void option_register::setDefault(const char* aString) {
-   if (aString == NULL) {
-      std::cout << "Error: default string cannot be null" << std::endl;
-      exit(1);
-   }
-
-   if (defaultOption != NULL) {
-      delete [] defaultOption;
-   }
-   if (aString == NULL) {
-      defaultOption = NULL;
-   } else {
-      defaultOption = new char[strlen(aString) + 1];
-      strcpy(defaultOption, aString);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// option_register::setDefinition --
-//
-
-void option_register::setDefinition(const char* aString) {
-
-   if (definition != NULL) {
-      delete [] definition;
-   }
-   if (aString == NULL) {
-      definition = NULL;
-   } else {
-      definition = new char[strlen(aString) + 1];
-      strcpy(definition, aString);
-   }
-
-}
-
-
-
-//////////////////////////////
-//
-// option_register::setModified --
-//
-
-void option_register::setModified(const char* aString) {
-   if (modifiedOption != NULL) {
-      delete [] modifiedOption;
-   }
-   if (aString == NULL) {
-      modifiedOption = NULL;
-   } else {
-      modifiedOption = new char[strlen(aString) + 1];
-      strcpy(modifiedOption, aString);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// option_register::setType --
-//
-
-void option_register::setType(char aType) {
-   type = aType;
-}
-
-
-
-/////////////////////////////////////////////////////////////////////////////
-/// option_list class definitions ///////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-
-
-//////////////////////////////
-//
-// option_list::option_list --
-//
-
-option_list::option_list(void) {
-   name = NULL;
-   index = -1;
-}
-
-
-
-//////////////////////////////
-//
-// option_list::option_list --
-//
-
-option_list::option_list(const char* optionName, int anIndex) {
-   name = NULL;
-   setIndex(anIndex);
-   setName(optionName);
-}
-
-
-
-//////////////////////////////
-//
-// option_list::~option_list --
-//
-
-option_list::~option_list() {
-   if (name != NULL) {
-      delete [] name;
-   }
-   name = NULL;
-}
-
-
-
-//////////////////////////////
-//
-// option_list::getIndex --
-//
-
-int option_list::getIndex(void) {
-   return index;
-}
-
-
-
-//////////////////////////////
-//
-// option_list::getName --
-//
-
-const char* option_list::getName(void) {
-   return name;
-}
-
-
-
-//////////////////////////////
-//
-// option_list::setName --
-//
-
-void option_list::setName(const char* aString) {
-   if (name != NULL) {
-      delete [] name;
-   }
-   name = new char[strlen(aString) + 1];
-   strcpy(name, aString);
-}
-
-
-
-//////////////////////////////
-//
-// option_list::setIndex --
-//
-
-void option_list::setIndex(int anIndex) {
-   index = anIndex;
-}
-
-
-
-// md5sum:	be3cc8ad0380820a9ea96739dc989657  - Options_private.cpp =css= 20030102
diff --git a/extensions/gripd/src/midiio/src/Sequencer_alsa.cpp b/extensions/gripd/src/midiio/src/Sequencer_alsa.cpp
deleted file mode 100644
index 4c80e22d0..000000000
--- a/extensions/gripd/src/midiio/src/Sequencer_alsa.cpp
+++ /dev/null
@@ -1,643 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Thu May 11 21:10:02 PDT 2000
-// Last Modified: Sat Oct 13 14:51:43 PDT 2001 (updated for ALSA 0.9 interface)
-// Filename:      ...sig/maint/code/control/Sequencer_alsa.cpp
-// Web Address:   http://sig.sapp.org/src/sig/Sequencer_alsa.cpp
-// Syntax:        C++ 
-//
-// Description:   Basic MIDI input/output functionality for the 
-//                Linux ALSA raw midi devices.  This class
-//                is inherited by the classes MidiInPort_alsa and
-//                MidiOutPort_alsa.
-//
-
-#if defined(LINUX) && defined(ALSA)
- 
-#include "Collection.h"
-#include <alsa/asoundlib.h>
-#include <unistd.h>
-#include <sys/ioctl.h>
-#include <fcntl.h>
-#include <string.h>
-#include <iostream>
-#include <stdio.h>
-#include <dirent.h>           /* for reading filename for MIDI info */
-#include "Sequencer_alsa.h"
-
-typedef unsigned char uchar;
-
-// define static variables:
-int    Sequencer_alsa::class_count          =  0;
-int    Sequencer_alsa::initialized          =  0;
-
-// static variables for MIDI I/O information database
-int    Sequencer_alsa::indevcount      = 0;
-int    Sequencer_alsa::outdevcount     = 0;
-
-Collection<snd_rawmidi_t*> Sequencer_alsa::rawmidi_in;
-Collection<snd_rawmidi_t*> Sequencer_alsa::rawmidi_out;
-Collection<int>            Sequencer_alsa::midiincard;
-Collection<int>            Sequencer_alsa::midioutcard;
-Collection<int>            Sequencer_alsa::midiindevice;
-Collection<int>            Sequencer_alsa::midioutdevice;
-Collection<char*>          Sequencer_alsa::midiinname;
-Collection<char*>          Sequencer_alsa::midioutname;
-
-
-
-///////////////////////////////
-//
-// Sequencer_alsa::Sequencer_alsa --
-//	default value: autoOpen = 1;
-//
-
-Sequencer_alsa::Sequencer_alsa(int autoOpen) {
-   if (class_count < 0) {
-      std::cerr << "Unusual class instantiation count: " << class_count << std::endl;
-      exit(1);
-   } else if (class_count == 0) {
-      buildInfoDatabase();
-   }
-
-   // will not autoOpen
-
-   class_count++;
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa::~Sequencer_alsa --
-//
-
-Sequencer_alsa::~Sequencer_alsa() {
-
-   if (class_count == 1) {
-      close();
-      removeInfoDatabase();
-   } else if (class_count <= 0) {
-      std::cerr << "Unusual class instantiation count: " << class_count << std::endl;
-      exit(1);
-   }
-
-   class_count--;
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa::close -- close the sequencer device.  The device
-//   automatically closes once the program ends.
-//
-
-void Sequencer_alsa::close(void) {
-   int i;
-
-   for (i=0; i<getNumInputs(); i++) {
-      if (rawmidi_in[i] != NULL) {
-         snd_rawmidi_close(rawmidi_in[i]);
-         rawmidi_in[i] = NULL;
-      }
-   }
-
-   for (i=0; i<getNumOutputs(); i++) {
-      if (rawmidi_out[i] != NULL) {
-         snd_rawmidi_close(rawmidi_out[i]);
-         rawmidi_out[i] = NULL;
-      }
-   }
-
-}
-
-
-void Sequencer_alsa::closeInput(int index) {
-   if (index < 0 || index >= rawmidi_in.getSize()) {
-      return;
-   }
-
-   if (rawmidi_in[index] != NULL) {
-      snd_rawmidi_close(rawmidi_in[index]); 
-      rawmidi_in[index] = NULL;
-   }
-}
-
-
-void Sequencer_alsa::closeOutput(int index) {
-   if (index < 0 || index >= rawmidi_out.getSize()) {
-      return;
-   }
-
-   if (rawmidi_out[index] != NULL) {
-      snd_rawmidi_close(rawmidi_out[index]); 
-      rawmidi_out[index] = NULL;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa::displayInputs -- display a list of the
-//     available MIDI input devices.
-//	default values: out = std::cout, initial = "\t"
-//
- 
-void Sequencer_alsa::displayInputs(std::ostream& out, char* initial) {
-   for (int i=0; i<getNumInputs(); i++) {
-      out << initial << i << ": " << getInputName(i) << '\n';
-   }
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa::displayOutputs -- display a list of the
-//     available MIDI output devices.
-//	default values: out = std::cout, initial = "\t"
-//
- 
-void Sequencer_alsa::displayOutputs(std::ostream& out, char* initial) {
-   for (int i=0; i<getNumOutputs(); i++) {
-      out << initial << i << ": " << getOutputName(i) << '\n';
-   }
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa::getInputName -- returns a string to the name of
-//    the specified input device.  The string will remain valid as
-//    long as there are any sequencer devices in existence.
-//
-
-const char* Sequencer_alsa::getInputName(int aDevice) {
-   if (initialized == 0) {
-      buildInfoDatabase();
-   }
-   return midiinname[aDevice];
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa::getNumInputs -- returns the total number of
-//     MIDI inputs that can be used.
-//
-
-int Sequencer_alsa::getNumInputs(void) {
-   if (initialized == 0) {
-      buildInfoDatabase();
-   }
-   return indevcount;
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa::getNumOutputs -- returns the total number of
-//     MIDI inputs that can be used.
-//
-
-int Sequencer_alsa::getNumOutputs(void) {
-   if (initialized == 0) {
-      buildInfoDatabase();
-   }
-   return outdevcount;
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa::getOutputName -- returns a string to the name of
-//    the specified output device.  The string will remain valid as
-//    long as there are any sequencer devices in existence.
-//
-
-const char* Sequencer_alsa::getOutputName(int aDevice) {
-   if (initialized == 0) {
-      buildInfoDatabase();
-   }
-   return midioutname[aDevice];
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa::is_open -- returns true if the
-//     sequencer device is open, false otherwise.
-//
-
-int Sequencer_alsa::is_open(int mode, int index) {
-   if (mode == 0) {
-      // midi output
-      if (rawmidi_out[index] != NULL) {
-         return 1;
-      } else {
-         return 0;
-      }
-   } else {
-      if (rawmidi_in[index] != NULL) {
-         return 1;
-      } else {
-         return 0;
-      }
-   }
-}
-
-
-int Sequencer_alsa::is_open_in(int index) {
-   return is_open(1, index);
-}
-
-
-int Sequencer_alsa::is_open_out(int index) {
-   return is_open(0, index);
-}
-
-
-
-/////////////////////////////
-//
-// Sequencer_alsa::open -- returns true if the device
-//	was successfully opended (or already opened)
-//
-
-int Sequencer_alsa::open(int direction, int index) {
-   if (direction == 0) {
-      return openOutput(index);
-   } else {
-      return openInput(index);
-   }
-}
-
-
-int Sequencer_alsa::openInput(int index) {
-   if (rawmidi_in[index] != NULL) {
-      return 1;
-   }
-   int status;
-   char devname[128] = {0};
-   sprintf(devname, "hw:%d,%d", midiincard[index], midiindevice[index]);
-   status = snd_rawmidi_open(&rawmidi_in[index], NULL, devname, 0);
-   if (status == 0) {
-      return 1;
-   } else { 
-      return 0;
-   }
-}
-
-
-int Sequencer_alsa::openOutput(int index) {
-   if (rawmidi_out[index] != NULL) {
-      return 1;
-   }
-   int status;
-   char devname[128] = {0};
-   sprintf(devname, "hw:%d,%d", midioutcard[index], midioutdevice[index]);
-   status = snd_rawmidi_open(NULL, &rawmidi_out[index], devname, 0);
-   if (status == 0) {
-      return 1;
-   } else { 
-      return 0;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa::read -- reads MIDI bytes and also stores the 
-//     device from which the byte was read from.  Timing is not
-//     saved from the device.  If needed, then it would have to 
-//     be saved in this function, or just return the raw packet
-//     data (use rawread function).
-//
- 
-void Sequencer_alsa::read(int dev, uchar* buf, int count) {
-   if (is_open_in(dev)) {
-      snd_rawmidi_read(rawmidi_in[dev], buf, count);
-   } else {
-      std::cout << "Warning: MIDI input " << dev << " is not open for reading" 
-           << std::endl;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa::rebuildInfoDatabase -- rebuild the internal
-//   database that keeps track of the MIDI input and output devices.
-//
-
-void Sequencer_alsa::rebuildInfoDatabase(void) {
-   removeInfoDatabase();
-   buildInfoDatabase();
-}
-
-
-
-///////////////////////////////
-//
-// Sequencer_alsa::write -- Send a byte out the specified MIDI
-//    port which can be either an internal or an external synthesizer.
-//
-
-int Sequencer_alsa::write(int aDevice, int aByte) {
-   uchar byte[1];
-   byte[0] = (uchar)aByte;
-   return write(aDevice, byte, 1);   
-}
-
-
-int Sequencer_alsa::write(int aDevice, uchar* bytes, int count) {
-   if (is_open_out(aDevice)) {
-      int status = snd_rawmidi_write(rawmidi_out[aDevice], bytes, count);
-      return status == count ? 1 : 0;
-   } else {
-      std::cout << "Warning: MIDI output " << aDevice << " is not open for writing" 
-           << std::endl;
-      return 0;
-   }
-
-   return 0;
-}
-
-
-int Sequencer_alsa::write(int aDevice, char* bytes, int count) {
-   return write(aDevice, (uchar*)bytes, count);
-}
-
-
-int Sequencer_alsa::write(int aDevice, int* bytes, int count) {
-   uchar *newBytes;
-   newBytes = new uchar[count];
-   for (int i=0; i<count; i++) {
-      newBytes[i] = (uchar)bytes[i];
-   }
-   int status = write(aDevice, newBytes, count);
-   delete [] newBytes;
-   return status;
-}
-
-
-
-///////////////////////////////////////////////////////////////////////////
-//
-// private functions
-//
-
-//////////////////////////////
-//
-// Sequencer_alsa::buildInfoDatabase -- determines the number
-//     of MIDI input and output devices available from
-//     /dev/snd/midiC%dD%d, and determines their names.
-//
-
-void Sequencer_alsa::buildInfoDatabase(void) {
-   if (initialized) {
-      return;
-   }
-
-   initialized = 1;
-  
-   if (indevcount != 0 || outdevcount != 0) {
-      std::cout << "Error: Sequencer_alsa is already running" << std::endl;
-      std::cout << "Indevcout = " << indevcount << " and " 
-           << " outdevcount = " << outdevcount << std::endl;
-      exit(1);
-   }
-
-   indevcount  = 0;
-   outdevcount = 0;
-
-   midiincard.setSize(0);
-   midiincard.allowGrowth();
-   midioutcard.setSize(0);
-   midioutcard.allowGrowth();
-
-   midiindevice.setSize(0);
-   midiindevice.allowGrowth();
-   midioutdevice.setSize(0);
-   midioutdevice.allowGrowth();
-
-   midiinname.setSize(0);
-   midiinname.allowGrowth();
-   midioutname.setSize(0);
-   midioutname.allowGrowth();
-
-   rawmidi_in.setSize(256);
-   rawmidi_out.setSize(256);
-
-   // read number of MIDI inputs/output available 
-   Collection<int> cards;
-   Collection<int> devices;
-   getPossibleMidiStreams(cards, devices);
-   char devname[128] = {0};
-
-   // check for MIDI input streams
-   int i;
-   for (i=0; i<cards.getSize(); i++) {
-      sprintf(devname, "hw:%d,%d", cards[i], devices[i]);
-      if (snd_rawmidi_open(&rawmidi_in[indevcount], NULL, devname, 0) == 0){
-         midiincard.append(cards[i]);
-         midiindevice.append(devices[i]);
-         snd_rawmidi_close(rawmidi_in[indevcount]);
-         rawmidi_in[indevcount] = NULL;
-         indevcount++;
-      }
-   }
-   for (i=0; i<rawmidi_in.getSize(); i++) {
-      rawmidi_in[i] = NULL;
-   }
-
-   // check for MIDI output streams
-   for (i=0; i<cards.getSize(); i++) {
-      sprintf(devname, "hw:%d,%d", cards[i], devices[i]);
-      if (snd_rawmidi_open(NULL, &rawmidi_out[outdevcount], devname, 0) == 0) {
-         midioutcard.append(cards[i]);
-         midioutdevice.append(devices[i]);
-         snd_rawmidi_close(rawmidi_out[outdevcount]);
-         rawmidi_out[indevcount] = NULL;
-         outdevcount++;
-      }
-   }
-   for (i=0; i<rawmidi_out.getSize(); i++) {
-      rawmidi_out[i] = NULL;
-   }
-
-   char buffer[256] = {0};
-   char* temp;
-   for (i=0; i<indevcount; i++) {
-      sprintf(buffer, "MIDI input %d: card %d, device %d", i,
-            midiincard[i], midiindevice[i]);
-      temp = new char[strlen(buffer) + 1];
-      strcpy(temp, buffer);
-      midiinname.append(temp);      
-   }
-
-   for (i=0; i<outdevcount; i++) {
-      sprintf(buffer, "MIDI output %d: card %d, device %d", i,
-            midioutcard[i], midioutdevice[i]);
-      temp = new char[strlen(buffer) + 1];
-      strcpy(temp, buffer);
-      midioutname.append(temp);      
-   }
-
-   midiincard.allowGrowth(0);
-   midioutcard.allowGrowth(0);
-   midiindevice.allowGrowth(0);
-   midioutdevice.allowGrowth(0);
-   midiinname.allowGrowth(0);
-   midioutname.allowGrowth(0);
-   rawmidi_in.allowGrowth(0);
-   rawmidi_out.allowGrowth(0);
-
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa::getInDeviceValue --
-//
-
-int Sequencer_alsa::getInDeviceValue(int aDevice) const {
-   return midiindevice[aDevice];
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa::getInCardValue --
-//
-
-int Sequencer_alsa::getInCardValue(int aDevice) const {
-   return midiincard[aDevice];
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa::getOutDeviceValue --
-//
-
-int Sequencer_alsa::getOutDeviceValue(int aDevice) const {
-   return midioutdevice[aDevice];
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa::getOutCardValue --
-//
-
-int Sequencer_alsa::getOutCardValue(int aDevice) const {
-   return midioutcard[aDevice];
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa::removeInfoDatabase --
-//
-
-void Sequencer_alsa::removeInfoDatabase(void) {
-   if (rawmidi_in.getSize() != 0) {
-      close();
-   }
-
-   if (rawmidi_out.getSize() != 0) {
-      close();
-   }
-
-   rawmidi_in.setSize(0);
-   rawmidi_out.setSize(0);
-   midiincard.setSize(0);
-   midioutcard.setSize(0);
-   midiindevice.setSize(0);
-   midioutdevice.setSize(0);
-
-   int i;
-   for (i=0; i<midiinname.getSize(); i++) {
-      if (midiinname[i] != NULL) {
-         delete [] midiinname[i];
-      }
-   }
-
-   for (i=0; i<midioutname.getSize(); i++) {
-      if (midioutname[i] != NULL) {
-         delete [] midioutname[i];
-      }
-   }
-
-   indevcount = 0;
-   outdevcount = 0;
-   initialized = 0;
-}
-
-
-
-//////////////////////////////
-//
-// getPossibleMidiStreams --  read the directory /dev/snd for files
-//     that match the pattern midiC%dD%d, and extract the card/device
-//     numbers from these filenames.
-//
-
-void Sequencer_alsa::getPossibleMidiStreams(Collection<int>& cards,
-      Collection<int>& devices) {
-
-   cards.setSize(0);
-   devices.setSize(0);
-   cards.allowGrowth(1);
-   devices.allowGrowth(1);
-
-   DIR* dir = opendir("/dev/snd");
-   if (dir == NULL) {
-//      std::cout << "Error determining ALSA MIDI info: no directory called /dev/snd"
-//           << std::endl;
-//      exit(1);
-   }
-
-   // read each file in the directory and store information if it is a MIDI dev
-   else {
-       int card;
-       int device;
-       struct dirent *dinfo;
-       dinfo = readdir(dir);
-       int count;
-       while (dinfo != NULL) {
-          if (strncmp(dinfo->d_name, "midi", 4) == 0) {
-             count = sscanf(dinfo->d_name, "midiC%dD%d", &card, &device);
-             if (count == 2) {
-                cards.append(card);
-                devices.append(device);
-             }
-          }
-          dinfo = readdir(dir);
-       }
-
-       closedir(dir);
-       cards.allowGrowth(0);
-       devices.allowGrowth(0);
-    }
-}
-
-
-#endif   /* LINUX and ALSA */
-
-// md5sum:	8ccf0e750be06aeea90cdc8a7cc4499c  - Sequencer_alsa.cpp =css= 20030102
diff --git a/extensions/gripd/src/midiio/src/Sequencer_alsa05.cpp b/extensions/gripd/src/midiio/src/Sequencer_alsa05.cpp
deleted file mode 100644
index ad4ef2dd6..000000000
--- a/extensions/gripd/src/midiio/src/Sequencer_alsa05.cpp
+++ /dev/null
@@ -1,518 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Thu May 11 21:10:02 PDT 2000
-// Last Modified: Wed Oct  3 22:18:27 PDT 2001 (frozen to ALSA 0.5)
-// Filename:      ...sig/maint/code/control/Sequencer_alsa05.cpp
-// Web Address:   http://sig.sapp.org/src/sig/Sequencer_alsa05.cpp
-// Syntax:        C++ 
-//
-// Description:   Basic MIDI input/output functionality for the 
-//                Linux ALSA raw midi devices.  This class
-//                is inherited by the classes MidiInPort_alsa05 and
-//                MidiOutPort_alsa05.
-//
-
-#if defined(LINUX) && defined(ALSA05)
- 
-#include "Collection.h"
-#include <sys/asoundlib.h>
-#include <unistd.h>
-#include <sys/ioctl.h>
-#include <fcntl.h>
-#include <string.h>
-#include <iostream.h>
-#include <stdio.h>
-#include "Sequencer_alsa05.h"
-
-typedef unsigned char uchar;
-
-// define static variables:
-int    Sequencer_alsa05::class_count          =  0;
-int    Sequencer_alsa05::initialized          =  0;
-
-// static variables for MIDI I/O information database
-int    Sequencer_alsa05::indevcount      = 0;
-int    Sequencer_alsa05::outdevcount     = 0;
-
-Collection<snd_rawmidi_t*> Sequencer_alsa05::rawmidi_in;
-Collection<snd_rawmidi_t*> Sequencer_alsa05::rawmidi_out;
-Collection<int> Sequencer_alsa05::midiincard;
-Collection<int> Sequencer_alsa05::midioutcard;
-Collection<int> Sequencer_alsa05::midiindevice;
-Collection<int> Sequencer_alsa05::midioutdevice;
-Collection<char*> Sequencer_alsa05::midiinname;
-Collection<char*> Sequencer_alsa05::midioutname;
-
-
-
-///////////////////////////////
-//
-// Sequencer_alsa05::Sequencer_alsa05 --
-//	default value: autoOpen = 1;
-//
-
-Sequencer_alsa05::Sequencer_alsa05(int autoOpen) {
-   if (class_count < 0) {
-      cerr << "Unusual class instatiation count: " << class_count << endl;
-      exit(1);
-   } else if (class_count == 0) {
-      buildInfoDatabase();
-   }
-
-   if (autoOpen) {
-      open();
-   }
-
-   class_count++;
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa05::~Sequencer_alsa05 --
-//
-
-Sequencer_alsa05::~Sequencer_alsa05() {
-
-   if (class_count == 1) {
-      close();
-      removeInfoDatabase();
-   } else if (class_count <= 0) {
-      cerr << "Unusual class instatiation count: " << class_count << endl;
-      exit(1);
-   }
-
-   class_count--;
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa05::close -- close the sequencer device.  The device
-//   automatically closes once the program ends.
-//
-
-void Sequencer_alsa05::close(void) {
-   int i;
-
-   for (i=0; i<getNumInputs(); i++) {
-      if (rawmidi_in[i] != NULL) {
-         snd_rawmidi_close(rawmidi_in[i]);
-         rawmidi_in[i] = NULL;
-      }
-   }
-
-   for (i=0; i<getNumOutputs(); i++) {
-      if (rawmidi_out[i] != NULL) {
-         snd_rawmidi_close(rawmidi_out[i]);
-         rawmidi_out[i] = NULL;
-      }
-   }
-
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa05::displayInputs -- display a list of the
-//     available MIDI input devices.
-//	default values: out = cout, initial = "\t"
-//
- 
-void Sequencer_alsa05::displayInputs(ostream& out, char* initial) {
-   for (int i=0; i<getNumInputs(); i++) {
-      out << initial << i << ": " << getInputName(i) << '\n';
-   }
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa05::displayOutputs -- display a list of the
-//     available MIDI output devices.
-//	default values: out = cout, initial = "\t"
-//
- 
-void Sequencer_alsa05::displayOutputs(ostream& out, char* initial) {
-   for (int i=0; i<getNumOutputs(); i++) {
-      out << initial << i << ": " << getOutputName(i) << '\n';
-   }
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa05::getInputName -- returns a string to the name of
-//    the specified input device.  The string will remain valid as
-//    long as there are any sequencer devices in existence.
-//
-
-const char* Sequencer_alsa05::getInputName(int aDevice) {
-   if (initialized == 0) {
-      buildInfoDatabase();
-   }
-   return midiinname[aDevice];
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa05::getNumInputs -- returns the total number of
-//     MIDI inputs that can be used.
-//
-
-int Sequencer_alsa05::getNumInputs(void) {
-   if (initialized == 0) {
-      buildInfoDatabase();
-   }
-   return indevcount;
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa05::getNumOutputs -- returns the total number of
-//     MIDI inputs that can be used.
-//
-
-int Sequencer_alsa05::getNumOutputs(void) {
-   if (initialized == 0) {
-      buildInfoDatabase();
-   }
-   return outdevcount;
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa05::getOutputName -- returns a string to the name of
-//    the specified output device.  The string will remain valid as
-//    long as there are any sequencer devices in existence.
-//
-
-const char* Sequencer_alsa05::getOutputName(int aDevice) {
-   if (initialized == 0) {
-      buildInfoDatabase();
-   }
-   return midioutname[aDevice];
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa05::is_open -- returns true if the
-//     sequencer device is open, false otherwise.
-//
-
-int Sequencer_alsa05::is_open(int mode, int index) {
-   if (mode == 0) {
-      // midi output
-      if (rawmidi_out[index] != NULL) {
-         return 1;
-      } else {
-         return 0;
-      }
-   } else {
-      if (rawmidi_in[index] != NULL) {
-         return 1;
-      } else {
-         return 0;
-      }
-   }
-}
-
-
-int Sequencer_alsa05::is_open_in(int index) {
-   return is_open(1, index);
-}
-
-
-int Sequencer_alsa05::is_open_out(int index) {
-   return is_open(0, index);
-}
-
-
-
-/////////////////////////////
-//
-// Sequencer_alsa05::open -- returns true if the device
-//	was successfully opended (or already opened)
-//
-
-int Sequencer_alsa05::open(void) {
-   if (rawmidi_out.getSize() != 0 || rawmidi_in.getSize() != 0) {
-      return 1;
-   } else {
-      return 0;
-   }
-}
-   
-
-
-//////////////////////////////
-//
-// Sequencer_alsa05::read -- reads MIDI bytes and also stores the 
-//     device from which the byte was read from.  Timing is not
-//     saved from the device.  If needed, then it would have to 
-//     be saved in this function, or just return the raw packet
-//     data (use rawread function).
-//
- 
-void Sequencer_alsa05::read(int dev, uchar* buf, int count) {
-   snd_rawmidi_read(rawmidi_in[dev], buf, count);
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa05::rebuildInfoDatabase -- rebuild the internal
-//   database that keeps track of the MIDI input and output devices.
-//
-
-void Sequencer_alsa05::rebuildInfoDatabase(void) {
-   removeInfoDatabase();
-   buildInfoDatabase();
-}
-
-
-
-///////////////////////////////
-//
-// Sequencer_alsa05::write -- Send a byte out the specified MIDI
-//    port which can be either an internal or an external synthesizer.
-//
-
-int Sequencer_alsa05::write(int aDevice, int aByte) {
-   uchar byte[1];
-   byte[0] = (uchar)aByte;
-   return write(aDevice, byte, 1);   
-}
-
-
-int Sequencer_alsa05::write(int aDevice, uchar* bytes, int count) {
-   int status = snd_rawmidi_write(rawmidi_out[aDevice], bytes, count);
-   return status == count ? 1 : 0;
-}
-
-
-int Sequencer_alsa05::write(int aDevice, char* bytes, int count) {
-   return write(aDevice, (uchar*)bytes, count);
-}
-
-
-int Sequencer_alsa05::write(int aDevice, int* bytes, int count) {
-   uchar *newBytes;
-   newBytes = new uchar[count];
-   for (int i=0; i<count; i++) {
-      newBytes[i] = (uchar)bytes[i];
-   }
-   int status = write(aDevice, newBytes, count);
-   delete [] newBytes;
-   return status;
-}
-
-
-
-///////////////////////////////////////////////////////////////////////////
-//
-// private functions
-//
-
-//////////////////////////////
-//
-// Sequencer_alsa05::buildInfoDatabase -- determines the number
-//     of MIDI input and output devices available from
-//     /dev/snd/midiXX, and determines their names.
-//
-
-void Sequencer_alsa05::buildInfoDatabase(void) {
-   if (initialized) {
-      return;
-   }
-
-   initialized = 1;
-  
-   if (indevcount != 0 || outdevcount != 0) {
-      cout << "Error: Sequencer_alsa05 is already running" << endl;
-      cout << "Indevcout = " << indevcount << " and " 
-           << " outdevcount = " << outdevcount << endl;
-      exit(1);
-   }
-
-   indevcount = 0;
-   outdevcount = 0;
-
-   midiincard.setSize(0);
-   midiincard.allowGrowth();
-   midioutcard.setSize(0);
-   midioutcard.allowGrowth();
-
-   midiindevice.setSize(0);
-   midiindevice.allowGrowth();
-   midioutdevice.setSize(0);
-   midioutdevice.allowGrowth();
-
-   midiinname.setSize(0);
-   midiinname.allowGrowth();
-   midioutname.setSize(0);
-   midioutname.allowGrowth();
-
-   rawmidi_in.setSize(256);
-   rawmidi_out.setSize(256);
-
-   // read number of MIDI inputs/output available 
-   int card; 
-   int device;
-
-   for (card=0; card<16; card++) {
-      for (device=0; device<16; device++) {
-         if (snd_rawmidi_open(&rawmidi_in[indevcount], card, device, 
-               O_RDONLY | O_APPEND | O_NONBLOCK) == 0){
-            midiincard.append(card);
-            midiindevice.append(device);
-            indevcount++;
-         }
-      }
-   }
-   rawmidi_in.setSize(indevcount);
-
-   for (card=0; card<16; card++) {
-      for (device=0; device<16; device++) {
-         if (snd_rawmidi_open(&rawmidi_out[outdevcount], card,
-               device, O_WRONLY | O_APPEND | O_NONBLOCK) == 0) {
-            midioutcard.append(card);
-            midioutdevice.append(device);
-            outdevcount++;
-         }
-      }
-   }
-   rawmidi_out.setSize(indevcount);
-
-   int i;
-   char buffer[256] = {0};
-   char* temp;
-   for (i=0; i<indevcount; i++) {
-      sprintf(buffer, "MIDI input %d", i);
-      temp = new char[strlen(buffer) + 1];
-      strcpy(temp, buffer);
-      midiinname.append(temp);      
-   }
-
-   for (i=0; i<outdevcount; i++) {
-      sprintf(buffer, "MIDI output %d", i);
-      temp = new char[strlen(buffer) + 1];
-      strcpy(temp, buffer);
-      midioutname.append(temp);      
-   }
-
-   midiincard.allowGrowth(0);
-   midioutcard.allowGrowth(0);
-   midiindevice.allowGrowth(0);
-   midioutdevice.allowGrowth(0);
-   midiinname.allowGrowth(0);
-   midioutname.allowGrowth(0);
-   rawmidi_in.allowGrowth(0);
-   rawmidi_out.allowGrowth(0);
-
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa05::getInDeviceValue --
-//
-
-int Sequencer_alsa05::getInDeviceValue(int aDevice) const {
-   return midiindevice[aDevice];
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa05::getInCardValue --
-//
-
-int Sequencer_alsa05::getInCardValue(int aDevice) const {
-   return midiincard[aDevice];
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa05::getOutDeviceValue --
-//
-
-int Sequencer_alsa05::getOutDeviceValue(int aDevice) const {
-   return midioutdevice[aDevice];
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa05::getOutCardValue --
-//
-
-int Sequencer_alsa05::getOutCardValue(int aDevice) const {
-   return midioutcard[aDevice];
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_alsa05::removeInfoDatabase --
-//
-
-void Sequencer_alsa05::removeInfoDatabase(void) {
-   if (rawmidi_in.getSize() != 0) {
-      close();
-   }
-
-   if (rawmidi_out.getSize() != 0) {
-      close();
-   }
-
-   rawmidi_in.setSize(0);
-   rawmidi_out.setSize(0);
-   midiincard.setSize(0);
-   midioutcard.setSize(0);
-   midiindevice.setSize(0);
-   midioutdevice.setSize(0);
-
-   int i;
-   for (i=0; i<midiinname.getSize(); i++) {
-      if (midiinname[i] != NULL) {
-         delete [] midiinname[i];
-      }
-   }
-
-   for (i=0; i<midioutname.getSize(); i++) {
-      if (midioutname[i] != NULL) {
-         delete [] midioutname[i];
-      }
-   }
-
-   indevcount = 0;
-   outdevcount = 0;
-   initialized = 0;
-}
-
-
-#endif   /* LINUX and ALSA05 */
-
-
-// md5sum:	b47021f0b71b2bc1555755584777c9a8  - Sequencer_alsa05.cpp =css= 20030102
diff --git a/extensions/gripd/src/midiio/src/Sequencer_oss.cpp b/extensions/gripd/src/midiio/src/Sequencer_oss.cpp
deleted file mode 100644
index db9258ee5..000000000
--- a/extensions/gripd/src/midiio/src/Sequencer_oss.cpp
+++ /dev/null
@@ -1,809 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Sun Jan  3 21:02:02 PST 1999
-// Last Modified: Fri Jan  8 04:50:05 PST 1999
-// Last Modified: Wed May 10 17:00:11 PDT 2000 (name change from _linux to _oss)
-// Filename:      ...sig/maint/code/control/MidiOutPort/Sequencer_oss.cpp
-// Web Address:   http://sig.sapp.org/src/sig/Sequencer_oss.cpp
-// Syntax:        C++ 
-//
-// Description:   Basic MIDI input/output functionality for the 
-//                Linux OSS midi device /dev/sequencer.  This class
-//                is inherited by the classes MidiInPort_oss and
-//                MidiOutPort_oss.
-//
-
-#ifdef LINUX
-
-#include <stdlib.h>
-
-
-#include <linux/soundcard.h>
-#include <unistd.h>
-#include <sys/ioctl.h>
-#include <fcntl.h>
-#include <string.h>
-#include <iostream>
-#include "Sequencer_oss.h"
-
-
-// define static variables:
-const char* Sequencer_oss::sequencer       = "/dev/sequencer";
-int    Sequencer_oss::sequencer_fd         = -1;
-int    Sequencer_oss::class_count          =  0;
-int    Sequencer_oss::initialized          =  0;
-uchar  Sequencer_oss::midi_write_packet[4] = {SEQ_MIDIPUTC, 0, 0, 0};
-uchar  Sequencer_oss::midi_read_packet[4];
-
-
-// static variables for MIDI I/O information database
-int    Sequencer_oss::indevcount      = 0;
-int    Sequencer_oss::outdevcount     = 0;
-
-int*   Sequencer_oss::indevnum        = NULL;
-int*   Sequencer_oss::outdevnum       = NULL;
-
-int*   Sequencer_oss::indevtype       = NULL;
-int*   Sequencer_oss::outdevtype      = NULL;
-
-char** Sequencer_oss::indevnames      = NULL;
-char** Sequencer_oss::outdevnames     = NULL;
-
-
-
-///////////////////////////////
-//
-// Sequencer_oss::Sequencer_oss --
-//	default value: autoOpen = 1;
-//
-
-Sequencer_oss::Sequencer_oss(int autoOpen) {
-   if (autoOpen) {
-      open();
-   }
-
-   if (class_count < 0) {
-      std::cerr << "Unusual class instatiation count: " << class_count << std::endl;
-      exit(1);
-   } else if (class_count == 0) {
-      buildInfoDatabase();
-   }
-
-   class_count++;
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_oss::~Sequencer_oss --
-//
-
-Sequencer_oss::~Sequencer_oss() {
-   class_count--;
-
-   if (class_count == 0) {
-      close();
-      removeInfoDatabase();
-   } else if (class_count < 0) {
-      std::cerr << "Unusual class instatiation count: " << class_count << std::endl;
-      exit(1);
-   }
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_oss::close -- close the sequencer device.  The device
-//   automatically closes once the program ends, but you can close it
-//   so that other programs can use it.
-//
-
-void Sequencer_oss::close(void) {
-   ::close(getFd());
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_oss::displayInputs -- display a list of the
-//     available MIDI input devices.
-//	default values: out = cout, initial = "\t"
-//
- 
-void Sequencer_oss::displayInputs(std::ostream& out, char* initial) {
-   for (int i=0; i<getNumInputs(); i++) {
-      out << initial << i << ": " << getInputName(i) << '\n';
-   }
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_oss::displayOutputs -- display a list of the
-//     available MIDI output devices.
-//	default values: out = cout, initial = "\t"
-//
- 
-void Sequencer_oss::displayOutputs(std::ostream& out, char* initial) {
-   for (int i=0; i<getNumOutputs(); i++) {
-      out << initial << i << ": " << getOutputName(i) << '\n';
-   }
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_oss::getInputName -- returns a string to the name of
-//    the specified input device.  The string will remain valid as
-//    long as there are any sequencer devices in existence.
-//
-
-const char* Sequencer_oss::getInputName(int aDevice) {
-   if (initialized == 0) {
-      buildInfoDatabase();
-   }
-   if (aDevice >= getNumInputs()) {
-      std::cerr << "Error: " << aDevice << " is greater than max in (" 
-           << getNumInputs() << ")" << std::endl;
-      exit(1);
-   }
-
-   return indevnames[aDevice];
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_oss::getNumInputs -- returns the total number of
-//     MIDI inputs that can be used.
-//
-
-int Sequencer_oss::getNumInputs(void) {
-   if (initialized == 0) {
-      buildInfoDatabase();
-   }
-   return indevcount;
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_oss::getNumOutputs -- returns the total number of
-//     MIDI inputs that can be used.
-//
-
-int Sequencer_oss::getNumOutputs(void) {
-   if (initialized == 0) {
-      buildInfoDatabase();
-   }
-   return outdevcount;
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_oss::getOutputName -- returns a string to the name of
-//    the specified output device.  The string will remain valid as
-//    long as there are any sequencer devices in existence.
-//
-
-const char* Sequencer_oss::getOutputName(int aDevice) {
-   if (initialized == 0) {
-      buildInfoDatabase();
-   }
-   if (aDevice >= getNumOutputs()) {
-      std::cerr << "Error: " << aDevice << " is greater than max out (" 
-           << getNumOutputs() << ")" << std::endl;
-      exit(1);
-   }
-
-   return outdevnames[aDevice];
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_oss::is_open -- returns true if the
-//     sequencer device is open, false otherwise.
-//
-
-int Sequencer_oss::is_open(void) {
-   if (getFd() > 0) {
-      return 1;
-   } else {
-      return 0;
-   }
-}
-
-
-
-/////////////////////////////
-//
-// Sequencer_oss::open -- returns true if the device
-//	was successfully opended (or already opened)
-//
-
-int Sequencer_oss::open(void) {
-   if (getFd() <= 0) {
-      setFd(::open(sequencer, O_RDWR, 0));
-   }
-   
-   return is_open();
-}
-   
-
-
-//////////////////////////////
-//
-// Sequencer_oss::read -- reads MIDI bytes and also stores the 
-//     device from which the byte was read from.  Timing is not
-//     saved from the device.  If needed, then it would have to 
-//     be saved in this function, or just return the raw packet
-//     data (use rawread function).
-//
- 
-void Sequencer_oss::read(uchar* buf, uchar* dev, int count) {
-   int i = 0;
-   while (i < count) {
-      ::read(getFd(), midi_read_packet, sizeof(midi_read_packet));
-      if (midi_read_packet[1] == SEQ_MIDIPUTC) {
-         buf[i] = midi_read_packet[1];
-         dev[i] = midi_read_packet[2];
-         i++;
-      }
-   }
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_oss::rawread -- read Input MIDI packets.
-//    each packet contains 4 bytes.
-//
-
-void Sequencer_oss::rawread(uchar* buf, int packetCount) {
-   ::read(getFd(), buf, packetCount * 4);
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_oss::rebuildInfoDatabase -- rebuild the internal
-//   database that keeps track of the MIDI input and output devices.
-//
-
-void Sequencer_oss::rebuildInfoDatabase(void) {
-   removeInfoDatabase();
-   buildInfoDatabase();
-}
-
-
-
-///////////////////////////////
-//
-// Sequencer_oss::write -- Send a byte out the specified MIDI
-//    port which can be either an internal or an external synthesizer.
-//
-
-int Sequencer_oss::write(int device, int aByte) {
-   int status = 0;
-
-   switch (getOutputType(device)) {
-      case MIDI_EXTERNAL:
-         midi_write_packet[1] = (uchar) (0xff & aByte);
-         midi_write_packet[2] = getOutDeviceValue(device);
-         status = ::write(getFd(), midi_write_packet,sizeof(midi_write_packet));
-         break;
-      case MIDI_INTERNAL:
-         status = writeInternal(getOutDeviceValue(device), aByte);
-         break;
-   }
-
-   if (status > 0) {
-      return 1;
-   } else {
-      return 0;
-   }
-
-}
-
-
-int Sequencer_oss::write(int device, uchar* bytes, int count) {
-   int status = 1;
-   for (int i=0; i<count; i++) {
-      status &= write(device, bytes[i]);
-   }
-   return status;
-}
-
-
-int Sequencer_oss::write(int device, char* bytes, int count) {
-   return write(device, (uchar*)bytes, count);
-}
-
-
-int Sequencer_oss::write(int device, int* bytes, int count) {
-   int status = 1;
-   for (int i=0; i<count; i++) {
-      status &= write(device, bytes[i]);
-   }
-   return status;
-}
-
-
-
-///////////////////////////////////////////////////////////////////////////
-//
-// private functions
-//
-
-//////////////////////////////
-//
-// Sequencer_oss::buildInfoDatabase -- determines the number
-//     of MIDI input and output devices available from
-//     /dev/sequencer, and determines their names.
-//
-
-void Sequencer_oss::buildInfoDatabase(void) {
-   int status;
-   initialized = 1;
-  
-   int startup = sequencer_fd == -1 ? 0 : 1;
-   if (startup == 0) {
-      // setup the file descriptor for /dev/sequencer
-      sequencer_fd = ::open(sequencer, O_RDWR);
-      if (sequencer_fd < 0) {
-//         std::cout << "Error: cannot open " << sequencer << std::endl;
-//         exit(1);
-      }
-      else {
-         // read number of inputs available (external MIDI devices only)
-         status = ioctl(getFd(), SNDCTL_SEQ_NRMIDIS, &indevcount);
-         if (status!= 0) {
-            std::cerr << "Error determining the number of MIDI inputs" << std::endl;
-            exit(1);
-         }
-
-         // read number of output available
-         int extmidi = indevcount;
-         int intmidi;
-         status = ioctl(getFd(), SNDCTL_SEQ_NRSYNTHS, &intmidi);
-         if (status!= 0) {
-            std::cerr << "Error determining the number of MIDI inputs" << std::endl;
-            exit(1);
-         }
-         outdevcount = extmidi + intmidi;
-   
-         // allocate space for names and device number arrays
-         if (indevnum != NULL || outdevnum != NULL || indevnames != NULL ||
-               outdevnames != NULL || indevtype != NULL || outdevtype != NULL) {
-            std::cerr << "Error: buildInfoDatabase called twice." << std::endl;
-            exit(1);
-         } 
-
-         indevnum = new int[indevcount];
-         outdevnum = new int[outdevcount];
-
-         indevtype = new int[indevcount];
-         outdevtype = new int[outdevcount];
-   
-         indevnames = new char*[indevcount];
-         outdevnames = new char*[outdevcount];
-
-
-         // fill in the device translation table and fill in the device names
-         int i;
-         struct midi_info midiinfo;
-         for (i=0; i<indevcount; i++) {
-            midiinfo.device = i;
-            status = ioctl(getFd(), SNDCTL_MIDI_INFO, &midiinfo);
-            if (status != 0) {
-               std::cerr << "Error while reading MIDI device " << i << std::endl;
-               exit(1);
-            }
-
-            indevnum[i]    = midiinfo.device;
-            outdevnum[i]   = midiinfo.device;
-            indevtype[i]   = MIDI_EXTERNAL;
-            outdevtype[i]  = MIDI_EXTERNAL;
-            indevnames[i]  = new char[strlen(midiinfo.name) + 1 + 10];
-            outdevnames[i] = new char[strlen(midiinfo.name) + 1 + 11];
-            strcpy(indevnames[i], midiinfo.name);
-            strcpy(outdevnames[i], midiinfo.name);
-            strcat(indevnames[i], " (MIDI In)");
-            strcat(outdevnames[i], " (MIDI Out)");
-         }
-
-         char tempstring[1024] = {0};
-         struct synth_info synthinfo;
-         for (i=0; i<intmidi; i++) {
-            synthinfo.device = i;
-            status = ioctl(getFd(), SNDCTL_SYNTH_INFO, &synthinfo);
-            if (status != 0) {
-               std::cerr << "Error while reading MIDI device " << i << std::endl;
-               exit(1);
-            }
-            outdevnum[extmidi+i] = i;
-            outdevtype[extmidi + i] = MIDI_INTERNAL;
-   
-            strcpy(tempstring, synthinfo.name);
-            switch (synthinfo.synth_type) {
-               case SYNTH_TYPE_FM:           // 0
-                  strcat(tempstring, " (FM");
-                  switch (synthinfo.synth_subtype) {
-                     case FM_TYPE_ADLIB:     // 0
-                        strcat(tempstring, " Adlib");
-                        break;
-                     case FM_TYPE_OPL3:      // 1
-                        strcat(tempstring, " OPL3");
-                        break;
-                  }
-                  strcat(tempstring, ")");
-                  break;
-               case SYNTH_TYPE_SAMPLE:       // 1
-                  strcat(tempstring, " (Wavetable)");
-                  break;
-               case SYNTH_TYPE_MIDI:         // 2
-                  strcat(tempstring, " (MIDI Interface");
-                  switch (synthinfo.synth_subtype) {
-                     case SYNTH_TYPE_MIDI:   // 0x401
-                        strcat(tempstring, " MPU401");
-                        break;
-                  }
-                  strcat(tempstring, ")");
-                  break;
-            }         
-            outdevnames[i+extmidi] = new char[strlen(tempstring) + 1];
-            strcpy(outdevnames[i+extmidi], tempstring);
-         }
-
-
-         if (startup == 0) {
-            ::close(sequencer_fd);
-         }
-      }
-   }
-}
-
-
-//////////////////////////////
-//
-// Sequencer_oss::getFd -- returns the file descriptor of the
-//     sequencer device.
-//
-
-int Sequencer_oss::getFd(void) {
-   return sequencer_fd;
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_oss::getInDeviceValue --
-//
-
-int Sequencer_oss::getInDeviceValue(int aDevice) const {
-   if (aDevice >= getNumInputs()) {
-      std::cerr << "Error: " << aDevice << " is greater than max in (" 
-           << getNumInputs() << ")" << std::endl;
-      exit(1);
-   }
-
-   return indevnum[aDevice];
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_oss::getInputType -- returns 1 = external MIDI,
-//     2 = internal MIDI
-//
-
-int Sequencer_oss::getInputType(int aDevice) const {
-   if (aDevice >= getNumInputs()) {
-      std::cerr << "Error: " << aDevice << " is greater than max in (" 
-           << getNumInputs() << ")" << std::endl;
-      exit(1);
-   }
-
-   return indevtype[aDevice];
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_oss::getOutDeviceValue --
-//
-
-int Sequencer_oss::getOutDeviceValue(int aDevice) const {
-   if (aDevice >= getNumOutputs()) {
-      std::cerr << "Error: " << aDevice << " is greater than max out (" 
-           << getNumOutputs() << ")" << std::endl;
-      exit(1);
-   }
-
-   return outdevnum[aDevice];
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_oss::getOutputType -- returns 1 = external MIDI,
-//     2 = internal MIDI
-//
-
-int Sequencer_oss::getOutputType(int aDevice) const {
-   if (aDevice >= getNumOutputs()) {
-      std::cerr << "Error: " << aDevice << " is greater than max out (" 
-           << getNumOutputs() << ")" << std::endl;
-      exit(1);
-   }
-
-   return outdevtype[aDevice];
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_oss::removeInfoDatabase --
-//
-
-void Sequencer_oss::removeInfoDatabase(void) {
-   initialized = 0;
-
-   if (indevnum   != NULL)   delete [] indevnum;
-   if (outdevnum  != NULL)   delete [] outdevnum;
-   if (indevtype  != NULL)   delete [] indevtype;
-   if (outdevtype != NULL)   delete [] outdevtype;
-  
-   int i;
-   if (indevnames != NULL) {
-      for (i=0; i<indevcount; i++) {
-         if (indevnames[i] != NULL)    delete [] indevnames[i];
-      }
-      delete [] indevnames;
-   }
-
-   if (outdevnames != NULL) {
-      for (i=0; i<outdevcount; i++) {
-         if (outdevnames[i] != NULL)   delete [] outdevnames[i];
-      }
-      delete [] outdevnames;
-   }
- 
-   indevnum    = NULL;
-   outdevnum   = NULL;
-   indevtype   = NULL;
-   outdevtype  = NULL;
-   indevnames  = NULL;
-   outdevnames = NULL;
-
-   indevcount = 0;
-   outdevcount = 0;
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_oss::setFd --
-//
-
-void Sequencer_oss::setFd(int anFd) {
-   sequencer_fd = anFd;
-}
-
-
-
-
-///////////////////////////////////////////////////////////////////////////
-//
-// private functions dealing with the stupid internal sythesizer messages
-//   which have to be processed as complete messages as opposed to 
-//   external MIDI devices which are processed on the driver level as
-//   discrete bytes.
-// 
-
-// static variables related to the processing of message for internal MIDI:
-uchar  Sequencer_oss::synth_write_message[8];
-uchar  Sequencer_oss::synth_message_buffer[1024]   = {0};
-int    Sequencer_oss::synth_message_buffer_count   =  0;
-int    Sequencer_oss::synth_message_bytes_expected =  0;
-int    Sequencer_oss::synth_message_curr_device    =  -1;
-
-
-//////////////////////////////
-//
-// Sequencer_oss::writeInternal -- the device number is the 
-//     driver's device number *NOT* this class's device numbering
-//     system.  MIDI bytes are stored in a buffer until a complete
-//     message is received, then a synth message is generated.
-//     While a complete message is being received, the device number
-//     cannot change.  The first byte of a message must be a MIDI
-//     command (i.e., no running status). 
-//
-
-int Sequencer_oss::writeInternal(int aDevice, int aByte) {
-   int status = 0;
-
-   if (synth_message_bytes_expected == 0) {
-      // a new message is coming in.
-      synth_message_curr_device = aDevice;
-      if (aByte < 128) {
-         std::cerr << "Error: MIDI output byte: " << aByte 
-              << " is not a command byte." << std::endl;
-         exit(1);
-      } else {
-         synth_message_buffer[0] = aByte;
-         synth_message_buffer_count = 1;
-      }
-
-      switch (aByte & 0xf0) {
-         case 0x80:   synth_message_bytes_expected = 3;   break;
-         case 0x90:   synth_message_bytes_expected = 3;   break;
-         case 0xA0:   synth_message_bytes_expected = 3;   break;
-         case 0xB0:   synth_message_bytes_expected = 3;   break;
-         case 0xC0:   synth_message_bytes_expected = 2;   break;
-         case 0xD0:   synth_message_bytes_expected = 2;   break;
-         case 0xE0:   synth_message_bytes_expected = 3;   break;
-         case 0xF0:   std::cerr << "Can't handle 0xE0 yet" << std::endl;   exit(1);
-         default:     std::cerr << "Unknown error" << std::endl;   exit(1);
-      }
-   }
-
-   // otherwise expecting at least one more byte for the MIDI message
-   else {
-      if (synth_message_curr_device != aDevice) {
-         std::cerr << "Error: device number changed during message" << std::endl;
-         exit(1);
-      }
-      if (aByte > 127) {
-         std::cerr << "Error: expecting MIDI data but got MIDI command: "
-              << aByte << std::endl;
-         exit(1);
-      }
-
-      synth_message_buffer[synth_message_buffer_count++] = aByte;
-   }
-
-   // check to see if the message is complete:
-   if (synth_message_bytes_expected == synth_message_buffer_count) {
-      status = transmitMessageToInternalSynth();
-      synth_message_bytes_expected = 0;
-      synth_message_buffer_count = 0;
-   }
-
-   return status;
-}
-
-     
-
-//////////////////////////////
-//
-// Sequencer_oss::transmitMessageToInternalSynth -- send the stored
-//    MIDI message to the internal synthesizer.
-//
-
-int Sequencer_oss::transmitMessageToInternalSynth(void) {
-   int status;
-   switch (synth_message_buffer[0] & 0xf0) {
-      case 0x80:                      // Note-off
-      case 0x90:                      // Note-on
-      case 0xA0:                      // Aftertouch
-         status = transmitVoiceMessage();
-         break;
-      case 0xB0:                      // Control change
-      case 0xC0:                      // Patch change
-      case 0xD0:                      // Channel pressure
-      case 0xE0:                      // Pitch wheel
-         status = transmitCommonMessage();
-         break;
-      case 0xF0:
-         std::cerr << "Cannot handle 0xf0 commands yet" << std::endl;
-         exit(1);
-         break;
-      default:
-         std::cerr << "Error: unknown MIDI command" << std::endl;
-         exit(1);
-   }
-
-   return status;
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_oss::transmitVoiceMessage -- send a voice-type MIDI
-//     message to an internal synthesizer.
-//
-
-int Sequencer_oss::transmitVoiceMessage(void) {
-   synth_write_message[0] = EV_CHN_VOICE;
-   synth_write_message[1] = synth_message_curr_device;
-   synth_write_message[2] = synth_message_buffer[0] & 0xf0;
-   synth_write_message[3] = synth_message_buffer[0] & 0x0f;
-   synth_write_message[4] = synth_message_buffer[1];
-   synth_write_message[5] = synth_message_buffer[2];
-   synth_write_message[6] = 0;
-   synth_write_message[7] = 0;
-
-   int status;
-   status = ::write(getFd(), synth_write_message, sizeof(synth_write_message));
- 
-   if (status > 0) {
-      return 1;
-   } else {
-      return 0;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// Sequencer_oss::transmitCommonMessage -- send a common-type MIDI
-//     message to an internal synthesizer.
-//
-
-int Sequencer_oss::transmitCommonMessage(void) {
-   synth_write_message[0] = EV_CHN_COMMON;
-   synth_write_message[1] = synth_message_curr_device;
-   synth_write_message[2] = synth_message_buffer[0] & 0xf0;
-   synth_write_message[3] = synth_message_buffer[0] & 0x0f;
-
-   switch (synth_write_message[2]) {
-      case 0xB0:                           // Control change
-         synth_write_message[4] = synth_message_buffer[1];
-         synth_write_message[5] = 0;
-         synth_write_message[6] = synth_message_buffer[2];
-         synth_write_message[7] = 0;
-         break;
-      case 0xC0:                           // Patch change
-      case 0xD0:                           // Channel pressure
-         synth_write_message[4] = synth_message_buffer[1];
-         synth_write_message[5] = 0;
-         synth_write_message[6] = 0;
-         synth_write_message[7] = 0;
-         break;
-      case 0xE0:                           // Pitch wheel
-         synth_write_message[4] = 0;
-         synth_write_message[5] = 0;
-         synth_write_message[6] = synth_message_buffer[1];
-         synth_write_message[7] = synth_message_buffer[2];
-         break;
-      default:
-         std::cerr << "Unknown Common MIDI message" << std::endl;
-         exit(1);
-   }
-
-   int status;
-   status = ::write(getFd(), synth_write_message, sizeof(synth_write_message));
-
-   if (status > 0) {
-      return 1;
-   } else {
-      return 0;
-   }
-}
-
-
-
-#endif  // LINUX
-// md5sum:	bc7b96041137b22f3d3c35376b5912c6  - Sequencer_oss.cpp =css= 20030102
diff --git a/extensions/gripd/src/midiio/src/SigTimer.cpp b/extensions/gripd/src/midiio/src/SigTimer.cpp
deleted file mode 100644
index 5786098b4..000000000
--- a/extensions/gripd/src/midiio/src/SigTimer.cpp
+++ /dev/null
@@ -1,498 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Thanks to:     Erik Neuenschwander <erikn@leland.stanford.edu>
-//                   for Windows 95 assembly code for Pentium clock cycles.
-//                Ozgur Izmirli <ozgur@ccrma.stanford.edu> 
-//                   for concept of periodic timer.
-// Creation Date: Mon Oct 13 11:34:57 GMT-0800 1997
-// Last Modified: Tue Feb 10 21:05:19 GMT-0800 1998
-// Last Modified: Sat Sep 19 15:56:48 PDT 1998
-// Last Modified: Mon Feb 22 04:44:25 PST 1999
-// Last Modified: Sun Nov 28 12:39:39 PST 1999   (added adjustPeriod())
-// Filename:      .../sig/code/control/SigTimer/SigTimer.cpp
-// Web Address:   http://www-ccrma.stanford.edu/~craig/improv/src/SigTimer.cpp
-// Syntax:        C++ 
-//
-// Description:   This class can only be used on Motorola Pentinum 75 Mhz
-//                chips or better because the timing information is
-//                extracted from the clock cycle count from a register
-//                on the CPU itself.  This class will estimate the 
-//                speed of the computer, but it would be better if there
-//                was a way of finding out the speed from some function.
-//                This class is used primarily for timing of MIDI input 
-//                and output at a millisecond resolution.
-//
-
-
-#include "SigTimer.h"
-#include <iostream>
-#include <stdlib.h>
-
-
-// get Sleep or usleep function definition for measureCpu function:
-#ifdef VISUAL
-   #define WIN32_LEAN_AND_MEAN
-   #include <windows.h>             
-   #undef WIN32_LEAN_AND_MEAN
-#else
-   #include <unistd.h>
-#endif
-
-
-// declare static variables
-int64bits SigTimer::globalOffset = 0;
-int       SigTimer::cpuSpeed     = 0;      // in cycles per second
-
-
-
-//////////////////////////////
-//
-// SigTimer::SigTimer
-//
-
-SigTimer::SigTimer(void) {
-   if (globalOffset == 0) {             // coordinate offset between timers
-      globalOffset = clockCycles();
-   }
-   if (cpuSpeed <= 0) {                 // initialize CPU speed value
-      cpuSpeed = measureCpuSpeed(1);
-      if (cpuSpeed <= 0) {
-         cpuSpeed = 100000000;
-      }
-   }
-      
-   offset = globalOffset;               // initialize the start time of timer
-   ticksPerSecond = 1000;               // default of 1000 ticks per second
-   period = 1000.0;                     // default period of once per second
-}
-
-
-SigTimer::SigTimer(int aSpeed) {
-   if (globalOffset == 0) {
-      globalOffset = clockCycles();
-   }
-   cpuSpeed = aSpeed;
-
-   offset = globalOffset;
-   ticksPerSecond = 1000;
-   period = 1000.0;                     // default period of once per second
-}
-
-
-SigTimer::SigTimer(SigTimer& aTimer) {
-   offset = aTimer.offset;
-   ticksPerSecond = aTimer.ticksPerSecond;
-   period = aTimer.period;
-}
-
-
-
-//////////////////////////////
-//
-// SigTimer::~SigTimer
-//
-
-SigTimer::~SigTimer() {
-   // do nothing
-}
-
-
-
-//////////////////////////////
-//
-// SigTimer::adjustPeriod -- adjust the period of the timer.
-//
-
-void SigTimer::adjustPeriod(double periodDelta) {
-   offset -= (int64bits)(getCpuSpeed() * getPeriod() * periodDelta / 
-         getTicksPerSecond());
-}
-
-
-
-//////////////////////////////
-//
-// SigTimer::clockCycles -- returns the number of clock cycles since last reboot
-//	   HARDWARE DEPENDENT -- currently for Pentiums only.
-//     static function.
-//
-
-
-int64bits SigTimer::clockCycles() {
-#ifndef VISUAL
-   int64bits output;
-
-   // For Pentiums, you can get the number of clock cycles elapsed 
-   // since the last reboot with the following assembler code:
-   __asm__ volatile (".byte 0x0f, 0x31" : "=A" (output));
-
-#else
-   int64bits output;
-   unsigned long high_end, low_end;
-   __asm {
-      __asm _emit 0x0f __asm _emit 0x31
-      mov high_end, edx
-      mov low_end, eax
-   }
-   output = high_end;
-   output = output << 32;
-   output += low_end;
-#endif
-
-   return output;
-}
-
-
-
-//////////////////////////////
-//
-// SigTimer::expired -- returns the integral number of periods
-//    That have passed since the last update or reset.
-//    See getPeriodCount which returns a floating point
-//    count of the period position.
-//
-
-
-int SigTimer::expired(void) const {
-   return (int)(getTime()/period);
-}
-
-
-
-//////////////////////////////
-//
-// SigTimer::getCpuSpeed -- returns the CPU speed of the computer.
-//   (static function)
-//
-
-int SigTimer::getCpuSpeed(void) {
-   return cpuSpeed;
-}
-
-
-
-//////////////////////////////
-//
-// SigTimer::getPeriod -- returns the timing period of the timer,
-//    if the timer is being used as a periodic timer.
-//
-
-double SigTimer::getPeriod(void) const {
-   return period;
-}
-
-
-
-//////////////////////////////
-//
-// SigTimer::getPeriodCount -- returns the current period count
-//    of the timer as a double.  Similar in behavior to expired
-//    function but lists the current fraction of a period.
-//
-
-double SigTimer::getPeriodCount(void) const {
-   return (double)getTime()/period;
-}
-
-
-
-//////////////////////////////
-//
-// SigTimer::getTempo -- returns the current tempo in terms
-//     of beats (ticks) per minute.
-//
-
-double SigTimer::getTempo(void) const {
-   return getTicksPerSecond() * 60.0 / getPeriod();
-}
-
-
-
-//////////////////////////////
-//
-// SigTimer::getTicksPerSecond -- return the number of ticks per
-//     second.
-//
-
-int SigTimer::getTicksPerSecond(void) const {
-   return ticksPerSecond;
-}
-
-
-
-//////////////////////////////
-//
-// SigTimer::getTime -- returns time in milliseconds by default.  
-// 	time can be altered to be in some other unit of time
-//	by using the setTicksPerSecond function.
-//	(Default is 1000 ticks per second.)
-//
-
-int SigTimer::getTime(void) const {
-   return (int)((clockCycles()-offset)/getFactor());
-}
-   
-
-
-//////////////////////////////
-//
-// SigTimer::getTimeInSeconds 
-//
-
-double SigTimer::getTimeInSeconds(void) const {
-   return ((clockCycles()-offset)/(double)cpuSpeed);
-}
-   
-
-
-//////////////////////////////
-//
-// SigTimer::getTimeInTicks 
-//
-
-int SigTimer::getTimeInTicks(void) const {
-   return (int)((clockCycles()-offset)/getFactor());
-}
-   
-
-
-//////////////////////////////
-//
-// SigTimer::measureCpuSpeed -- returns the number of clock cycles in 
-//	one second.  Accuracy to about +/- 5%.
-//     default value: quantize = 0.
-//
-
-int SigTimer::measureCpuSpeed(int quantize) {
-   int64bits a, b;
-   a = clockCycles();
-   #ifdef VISUAL
-      Sleep(1000/4);
-   #else
-      usleep(1000000/4);
-   #endif
-   b = clockCycles();
-   
-   int output = (int)(4*(b-a-140100-450000));
-
-   if (quantize) {
-      // quantize to a known computer CPU speed
-      if (output < 78000000) {
-         output = 75000000;
-      } else if (output < 95000000) {
-         output = 90000000;
-      } else if (output < 110000000) {
-         output = 100000000;
-      } else if (output < 140000000) {
-         output = 133000000;
-      } else if (output < 155000000) {
-         output = 150000000;
-      } else if (output < 180000000) {
-         output = 166000000;
-      } else if (output < 215000000) {
-         output = 200000000;
-      } else if (output < 250000000) {
-         output = 233000000;
-      } else if (output < 280000000) {
-         output = 266000000;
-      } else if (output < 325000000) {
-         output = 300000000;
-      } else if (output < 375000000) {
-         output = 350000000;
-      } else if (output < 425000000) {
-         output = 400000000;
-      } else {
-         output = output;
-      }
-   } // end if quantize
-
-   return output;
-}
-
-
-
-//////////////////////////////
-//
-// SigTimer::reset -- set the timer to 0.
-//
-
-void SigTimer::reset(void) {
-   offset = clockCycles();
-}
-
-
-
-//////////////////////////////
-//
-// SigTimer::setCpuSpeed -- You can also vary the CPU speed here to cause the 
-//	getTime function to output different units of time, but the 
-//	setTicksPerSecond is a more appropriate place to do such a thing. 
-//
-
-void SigTimer::setCpuSpeed(int aSpeed) {
-   if (aSpeed <= 0) {
-      std::cerr << "Error: Cannot set the cpu speed to be negative: " 
-           << aSpeed << std::endl;
-      exit(1);
-   }
-   cpuSpeed = aSpeed;
-}
-
-
-
-//////////////////////////////
-//
-// SigTimer::setPeriod -- sets the period length of the timer.
-//    input value cannot be less than 1.0.
-//
-
-void SigTimer::setPeriod(double aPeriod) {
-   if (aPeriod < 1.0) {
-      std::cerr << "Error: period too small: " << aPeriod << std::endl;
-      exit(1);
-   }
-   period = aPeriod;
-}
-
-
-
-//////////////////////////////
-//
-// SigTimer::setPeriodCount -- adjusts the offset time according
-//     to the current period to match the specified period count.
-//
-
-void SigTimer::setPeriodCount(double aCount) {
-   offset = (int64bits)(clockCycles() - aCount * getPeriod() *
-         getCpuSpeed() / getTicksPerSecond());
-}
-
-
-
-//////////////////////////////
-//
-// SigTimer::setTempo -- sets the period length in terms of 
-//	beats per minute.
-//
-
-void SigTimer::setTempo(double beatsPerMinute) {
-   if (beatsPerMinute < 1.0) {
-      std::cerr << "Error: tempo is too slow: " << beatsPerMinute << std::endl;
-      exit(1);
-   }
-   double count = getPeriodCount();
-   period = getTicksPerSecond() * 60.0 / beatsPerMinute;
-   setPeriodCount(count);
-}
-
-
-
-//////////////////////////////
-//
-// SigTimer::setTicksPerSecond 
-//
-
-void SigTimer::setTicksPerSecond(int aTickRate) {
-   if (aTickRate <= 0) {
-      std::cerr << "Error: Cannot set the tick rate to be negative: " 
-           << aTickRate << std::endl;
-      exit(1);
-   }
-   ticksPerSecond = aTickRate;
-}
-
-
-
-//////////////////////////////
-//
-// SigTimer::start 
-//
-
-void SigTimer::start(void) {
-   reset();
-}
-
-
-
-//////////////////////////////
-//
-// SigTimer::sync 
-//
-
-void SigTimer::sync(SigTimer& aTimer) {
-   offset = aTimer.offset;
-}
-
-
-
-//////////////////////////////
-//
-// SigTimer::update -- set the timer start to the next period.
-//
-
-void SigTimer::update(void) {
-   if (getTime() >= getPeriod()) {
-      offset += (int64bits)(getPeriod() * getFactor());
-   }
-}
-
-
-// update(int) will do nothing if the periodCount is greater than
-// than the expired period count
-
-void SigTimer::update(int periodCount) {
-   if (periodCount > expired()) {
-      return;
-   } else {
-      offset += (int64bits)(getPeriod() * getFactor() * periodCount);
-   }
-}
-
-
-
-///////////////////////////////////////////////////////////////////////////
-//
-// protected functions:
-//
-
-
-//////////////////////////////
-//
-// SigTimer::getFactor -- 
-//
-
-double SigTimer::getFactor(void) const {
-   return (double)((double)getCpuSpeed()/(double)getTicksPerSecond());
-}
-
-
-
-///////////////////////////////////////////////////////////////////////////
-//
-// Miscellaneous timing functions are located here untill a better
-// place can be found:
-//
-
-void millisleep(int milliseconds) {
-   #ifdef VISUAL
-      Sleep(milliseconds);
-   #else
-      usleep( milliseconds * 1000);
-   #endif
-}
-      
-
-void millisleep(float milliseconds) {
-   #ifdef VISUAL
-      // cannot convert to microseconds in Visual C++ yet.
-      // Tell me how and I'll fix the following line
-      Sleep((unsigned long)milliseconds);
-   #else
-      usleep((int)(milliseconds * 1000.0));
-   #endif
-}
-      
-  
-  
-
-// md5sum:	b35e9e6a8d6fd16636d7fca5d565f284  - SigTimer.cpp =css= 20030102
diff --git a/extensions/gripd/src/midiio/src/Voice.cpp b/extensions/gripd/src/midiio/src/Voice.cpp
deleted file mode 100644
index ed05bceca..000000000
--- a/extensions/gripd/src/midiio/src/Voice.cpp
+++ /dev/null
@@ -1,334 +0,0 @@
-//
-// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
-// Creation Date: Sun Oct 11 18:39:14 PDT 1998
-// Last Modified: Sun Oct 11 18:39:18 PDT 1998
-// Filename:      ...sig/maint/code/control/Voice/Voice.cpp
-// Web Address:   http://www-ccrma.stanford.edu/~craig/improv/src/Voice.cpp
-// Syntax:        C++
-//
-// Description:   The Voice class is a MIDI output class which keeps
-//                track of the last note played in to it.  If the last
-//                note was not turned off when a new note is played,
-//                then the old note will be turned off before the 
-//                new note is played.
-//
-
-#include "Voice.h"
-
-
-// declare static variables:
-SigTimer Voice::timer;
-
-//////////////////////////////
-//
-// Voice::Voice
-//
-
-Voice::Voice(int aChannel) {
-   chan = oldChan = aChannel;
-   vel = oldVel = key = oldKey = 0;
-}
-
-
-Voice::Voice(const Voice& aVoice) {
-   chan = aVoice.chan;
-   vel = aVoice.vel;
-   key = aVoice.key;
-   oldChan = 0;
-   oldVel = 0;
-   oldKey = 0;
-}
-
-
-Voice::Voice(void) {
-   chan = oldChan = key = oldKey = vel = oldVel = 0;
-}
-
-
-//////////////////////////////
-//
-// Voice::~Voice
-//
-
-Voice::~Voice() {
-   off();
-}
-
-
-
-//////////////////////////////
-//
-// Voice::cont -- use default channel if none specified for
-//   the continuous controller message.
-//
-
-void Voice::cont(int controller, int data) {
-   MidiOutput::cont(getChannel(), controller, data);
-}
-
-
-
-//////////////////////////////
-//
-// Voice::getChan -- returns the channel of the voice.  
-//     Synonym for getChannel.
-//
-
-int Voice::getChan(void) const {
-   return chan;
-}
-
-
-
-//////////////////////////////
-//
-// Voice::getChannel -- returs the channel of the voice.
-//
-
-int Voice::getChannel(void) const {
-   return chan;
-}
-
-
-
-//////////////////////////////
-//
-// Voice::getKey -- returns the current MIDI key number of the voice.
-//     Synonym for getKeynum.
-//
-
-int Voice::getKey(void) const {
-   return key;
-}
-
-
-
-//////////////////////////////
-//
-// Voice::getKeynum -- returns the current MIDI key number of the voice.
-//
-
-int Voice::getKeynum(void) const {
-   return key;
-}
-
-
-//////////////////////////////
-//
-// Voice::getOffTime -- returns the last note off message sent
-//     out of the voice object
-//
-
-int Voice::getOffTime(void) const {
-   return offTime;
-}
-
-
-
-//////////////////////////////
-//
-// Voice::getOnTime -- returns the last note on message sent
-//     out of the voice object.
-//
-
-int Voice::getOnTime(void) const {
-   return onTime;
-}
-
-
-
-//////////////////////////////
-//
-// Voice::getVel -- returns the current velocity of the MIDI key.
-//     Synonym for getVelocity.
-//
-
-int Voice::getVel(void) const {
-   return vel;
-}
-
-
-
-//////////////////////////////
-//
-// Voice::getVelocity -- returns the current velocity of the MIDI key.
-//
-
-int Voice::getVelocity(void) const {
-   return vel;
-}
-
-
-
-//////////////////////////////
-//
-// Voice::off
-//
-
-void Voice::off(void) {
-   if (status() != 0) {
-      offTime = timer.getTime();
-      MidiOutput::play(oldChan, oldKey, 0);
-      oldVel = 0;
-   }
-}
-
-
-
-//////////////////////////////
-//
-// Voice::pc -- use default channel if none is specified
-//
-
-void Voice::pc(int aTimbre) {
-   MidiOutput::pc(getChannel(), aTimbre);
-}
-
-
-
-//////////////////////////////
-//
-// Voice::play
-//
-
-void Voice::play(int aChannel, int aKeyno, int aVelocity) {
-   off();
-   MidiOutput::play(aChannel, aKeyno, aVelocity);
-   oldChan = aChannel;
-   oldKey = aKeyno;
-   oldVel = aVelocity;
-   setChannel(aChannel);
-   setKeynum(aKeyno);
-   setVelocity(aVelocity);
-
-   if (aVelocity != 0) {
-      onTime = timer.getTime();
-   } else {
-      offTime = timer.getTime();
-   }
-}
-
-
-void Voice::play(int aKeyno, int aVelocity) {
-   off();
-   MidiOutput::play(getChannel(), aKeyno, aVelocity);
-   oldChan = getChannel();
-   oldKey = aKeyno;
-   oldVel = aVelocity;
-   setKeynum(aKeyno);
-   setVelocity(aVelocity);
-
-   if (aVelocity != 0) {
-      onTime = timer.getTime();
-   } else {
-      offTime = timer.getTime();
-   }
-}
-
-
-void Voice::play(void) {
-   off();
-   MidiOutput::play(getChannel(), getKey(), getVel());
-   oldChan = getChannel();
-   oldKey = getKey();
-   oldVel = getVel();
-
-   if (getVel() != 0) {
-      onTime = timer.getTime();
-   } else {
-      offTime = timer.getTime();
-   }
-}
-
-
-
-//////////////////////////////
-//
-// Voice::setChan -- set the MIDI channel.  Synonym for setChannel.
-//
-
-void Voice::setChan(int aChannel) {
-   chan = aChannel;
-}
-
-
-
-//////////////////////////////
-//
-// Voice::setChannel -- set the MIDI channel of the voice.
-//
-
-void Voice::setChannel(int aChannel) {
-   chan = aChannel;
-}
-
-
-
-//////////////////////////////
-//
-// Voice::setKey -- set the keynumber of the voice
-//     Synonym for setKeyno.
-//
-
-void Voice::setKey(int aKeynum) {
-   key = aKeynum;
-}
-
-
-
-//////////////////////////////
-//
-// Voice::setKeynum -- set the keynumber of the voice
-//
-
-void Voice::setKeynum(int aKeynum) {
-   key = aKeynum;
-}
-
-
-
-//////////////////////////////
-//
-// Voice::setVel -- set the MIDI velocity of the voice.
-//     Synonym for setVelocity.
-//
-
-void Voice::setVel(int aVelocity) {
-   vel = aVelocity;
-}
-
-
-
-//////////////////////////////
-//
-// Voice::setVelocity
-//
-
-void Voice::setVelocity(int aVelocity) {
-   vel = aVelocity;
-}
-
-
-
-//////////////////////////////
-//
-// Voice::status -- returns zero if off or positive if on.
-//
-
-int Voice::status(void) const {
-   return oldVel;
-}
-
-
-
-//////////////////////////////
-//
-//  Voice::sustain -- uses default channel if none specified.
-//
-
-void Voice::sustain(int aStatus) {
-   MidiOutput::sustain(getChannel(), aStatus);
-}
-
-
-// md5sum:	d02ca41ae3b4e07efe7fedc720e52573  - Voice.cpp =css= 20030102
diff --git a/extensions/gui/ix/README b/extensions/gui/ix/README
deleted file mode 100644
index 1e979cd72..000000000
--- a/extensions/gui/ix/README
+++ /dev/null
@@ -1,13 +0,0 @@
-pd_base.tk:    a pure TCL/Tk PD gui
-pd_objects.tk: objects for above GUI
-
-*.wid: original widget prototypes, considered 'stable', all are working on:
-    - linux
-     \- pd 0.0.39
-      \- toxy 0.1.19
-       \- tk 8.5
-        \- handful of tk extensions: grep require *.wid
-
-
-screenshots:
-http://whats-your.name/pd/gui/
diff --git a/extensions/gui/ix/index.psp b/extensions/gui/ix/index.psp
deleted file mode 100644
index 72c9f175c..000000000
--- a/extensions/gui/ix/index.psp
+++ /dev/null
@@ -1,88 +0,0 @@
-<html><head><title>::ix::{gui}</title></head>
-<%
-import random, re, string
-sys.stdout=req
-def rc(): return  "#%06x" % random.randint(0,16777216)
-things = {'control' : {
-    'kbd' : {'desc' : 'resizable, velocity sensitive keyboard. right click adds a note to the chord, middle click resets..'}, 
-    'grid' : {'desc' : 'x-y control surface'},
-    'ngrid' : {'desc' : 'multi-parameter x-y control surface'},
-    'filter' : {'desc' : """since im no mathemetician, biquad was very useless. straight RBJ rip here, middle click on the squares to change filter type, right click drag to adjust Q.."""},
-    'nob' : {'desc' : """ this was the first knob but it requires Tkzinc"""},
-    'knob' : {'desc' : """knob..multiple levels of precision: left button 1.0, middle 10.0, right 0.1"""}
-    }, 'edit' : {
-    'mat' : {'desc' : 'general purpose editing surface'},
-    'lg' : {'desc' : 'multi-set vector editor'},
-    'tile' : {'desc' : 'drum/grid/list editor'}
-    }, 'analyze' : {
-    'sp' : {'desc' : 'rgb-pixmap'},
-    'spectrum' : {'desc' : 'dual-band spectrum graph'},
-    'img' : {'desc' : """
-create an empty img and you will get the broken-image icon, which sets up dnd - just drop some images in<br><br>
-they output a symbol which is filename sans extension when clicked..
-"""}
-    }, 'container' : {
-    'dd' : {'desc' : 'drag\'n\'drop'},
-    'tree' : {'desc': 'heirarchical data management'},
-    'q' : {'desc' : 'queue'},
-    'dm' : {'desc' : 'dropdownmenu'}
-    }, '?' : {
-    'README' :{'desc' : """
-   these are my pd gui objects, designed to be patchable on the fly for modular, rearrangable interfaces for composition, analysis, whatever you need.. suggested input is a 3 button mouse or a touch-screen (although i haven't tested on one, so if you have an extra, let me know..) -  to use them in a patch, if the widget is 'thingy', create an object [widget thingy thingy1]. the id doesnt have to be unique, but its not a bad idea.. all the attributes are settable via normal messages... some might like an inspector, this wouldnt be too hard to add..also id love if X windows and the toolkits above supported multiple cursors with independent focii for larger or multipoint-touch applications, but such is not the case currently...so enjoy the 2d single-cursor goodness
-    """}, 'INSTALL' : {'desc' : """
-<b>cd /usr/local/lib/pd && cvs -d :pserver:anonymous@cvs.sf.net:/cvsroot/pure-data co extensions/gui/ix</b><br><b>echo -path /usr/local/lib/pd/extensions/gui/ix >> ~/.pdrc</b><br>
-install any missing DEPS
-"""}, 'DEPS' : {'desc' : """
-tcl >=8.5:<br>
-<b>cvs -d :pserver:anonymous@cvs.sf.net:/cvsroot/tcl co tcl <font size=-1>&& cd tcl/unix&& ./configure && make install & cd ../..</font></b><br>
-<b>cvs -d :pserver:anonymous@cvs.sf.net:/cvsroot/tktoolkit co tk <font size=-1>&& cd tk/unix&& ./configure --enable-xft && make install & cd ../..</font></b><br><br>
-widgets are currently hosted by the [widget] external<br><b>cvs -d :pserver:anonymous@cvs.sf.net:/cvsroot/pure-data co externals/miXed <font size=-1>&& cd externals/miXed && make && cp bin/* /usr/local/lib/pd/extra</font></b><br><i>-or-</i> checkout all of externals and in <font size=-1><b>cd externals/build && scons install</b></font><br><br>a cornucopia of Tk libraries are utilised<br>
-<b>for ext in blt snack tkdnd tkimg tkpath tktable tktreectrl ; do cvs -d :pserver:anonymous@cvs.sf.net:/cvsroot/$ext co $ext; cd $ext && ./configure && make install && cd ..; done</b><br>
-last i checked tkpath was actually a module in tclbitprint<br>and thats all..
-"""}
-    }}
-
-script = []
-for cat in things.iterkeys():
-    script.append("""document.getElementById('%s_items').style.display='none'""" % cat)
-    script.append("""document.getElementById('cat_%s').style.backgroundColor='gray'""" % cat)
-print "<script>\nfunction hideCats() {\n" + str.join(";\n",script) + "\n}\n</script>"
-
-script = []
-for cat in things.iterkeys():
-    for item in things[cat].iterkeys():
-        script.append("""document.getElementById('item_info_%s').style.display='none'""" % item)
-        script.append("""document.getElementById('item_%s').style.backgroundColor='gray'""" % item)
-print "<script>\nfunction hideItems() {\n" + str.join(";\n",script) + "\n}\n</script>"
-
-def getprops(item):
-    props = ""
-    for line in re.findall(r"#\.[^@]*\n",open("/usr/local/lib/pd/extensions/gui/ix/" + item + ".wid").read()):
-        props += re.sub("#\.","",line)
-    return props
-
-%>
-<style>span {font: bitstream vera sans, tahoma, helvetica, sans-serif}</style>
-<body bgcolor=<%print rc()%>  topmargin=0 leftmargin=0 marginwidth=0 marginheight=0>
-<div style="text-align: right; background-color:<%print rc()%>" width=100%>
-<%
-for cat in things.iterkeys():
-    print """<span id="cat_%(cat)s" style="background-color: gray; padding: 6px"><span style="font-size: 14px; padding: 4px; color: %(fg)s; background-color: %(bg)s" onmouseover="hideCats();document.getElementById('%(cat)s_items').style.display='';document.getElementById('cat_%(cat)s').style.backgroundColor='white'">
-    %(cat)s
-    </span></span>&nbsp;""" % {'fg' : rc(), 'bg' : rc(), 'cat' : cat}
-
-print """</div><div style="padding: 10px; text-align: right; background-color %(bg)s">""" % {'bg' : rc()}
-
-for cat in things.iterkeys():
-    print """<span id=%(cat)s_items style="display: none">""" % {'cat' : cat}
-    for item in things[cat].iterkeys():
-        print """<span id=item_%(item)s style="padding: 3px; backgound-color: black" onmouseover="hideItems();document.getElementById('item_info_%(item)s').style.display='';document.getElementById('item_%(item)s').style.backgroundColor='white'">%(item)s</span>""" % {'item' : item}
-    print "</span>"
-
-print "<br>"
-
-for cat in things.iterkeys():
-     for item in things[cat].iterkeys():
-         print """<div id=item_info_%(item)s style="display: none"><div style="float: left"><img src=c.png onmouseover="document.getElementById('img_%(item)s').src='%(item)s.PNG'"><img src=a.png onmouseover="document.getElementById('img_%(item)s').src='%(item)s.gif'"><img id=img_%(item)s src=%(item)s.PNG style="float: left; border-width: 12px; border-style: solid; border-color: gray"></div><div style="padding-top: 4px"><span style="background-color: #cccccc; color: black">%(content)s</span><br><br><span style="color: #cccccc; background-color: black">%(props)s</span></div></div>"""  % {'item' : item, 'props' : getprops(item), 'content' : things[cat][item]['desc']}
-
-%>
diff --git a/extensions/gui/ix/osc.tcl b/extensions/gui/ix/osc.tcl
deleted file mode 100644
index e5830ec42..000000000
--- a/extensions/gui/ix/osc.tcl
+++ /dev/null
@@ -1,43 +0,0 @@
-#OSC tcl 2005 ix
-package require udp
-namespace eval osc {
-    proc encode {type data} {
-	switch $type {
-	    i {set format I }
-	    f {set format R }
-	    s {set len [string length $data]
-		set format a[expr $len + 4 - $len % 4]}
-	}
-	return [binary format $format $data]
-    }
-    proc message {args} {
-	set path [encode s [lindex $args 0]]
-	set typetags ","
-	set body ""
-	foreach arg [lrange $args 1 end] {
-	    if [string is integer $arg] {
-		set type i
-	    } elseif [string is double $arg] {
-		set type f
-	    } else {
-		set type s
-	    }
-	    append typetags $type
-	    append body [encode $type $arg]
-	}
-	set typetags [encode s $typetags]
-	return $path$typetags$body
-    }
-    proc connect {host port} {
-	set s [udp_open]
-	fconfigure $s -remote [list $host $port] -buffering none -translation binary
-	return $s
-    }
-    proc disconnect {socket} {
-	close $socket
-    }
-    proc send {socket msg} {
-	puts -nonewline $socket $msg
-    }
-
-}
diff --git a/extensions/gui/ix/pd_base.tk b/extensions/gui/ix/pd_base.tk
deleted file mode 100755
index 84e07402c..000000000
--- a/extensions/gui/ix/pd_base.tk
+++ /dev/null
@@ -1,398 +0,0 @@
-# http://whats-your.name/pd
-
-foreach pkg {Img snack tkdnd tkpath} {
-    if {[catch {package require $pkg}]} {set has_$pkg 0} {set has_$pkg 1}}
-
-source pre8.5.tcl
-
-namespace eval ::pd {
-    source pd_objects.tk
-
-    foreach type [dict keys $obj] {
-	if {[dict exists $obj $type methods]} {
-	    eval [dict get $obj $type methods]}}
-
-    proc rc {} {return [format "\#%06x" [expr "int(floor(rand() * 16777216.))"]]}
-    proc rgb {} {return [list [expr "int(floor(rand() * 256))"]  [expr "int(floor(rand() * 256))"]  [expr "int(floor(rand() * 256))"]]}
-    proc lighten {rgb r} {set l {}; foreach c $rgb {lappend l [expr {(256 - $c) * $r + $c}]}; return $l}
-    proc darken {rgb r} {set l {}; foreach c $rgb {lappend l [expr {$c - ($c * $r)}]}; return $l}
-    proc color {rgb} {return [format "\#%02x%02x%02x" [expr int([lindex $rgb 0])] [expr int([lindex $rgb 1])] [expr int([lindex $rgb 2])]]}
-    proc hsvToRgb {hue sat value} {
-        set v [format %.0f [expr {255.0*$value}]]
-        if {$sat == 0} {return "$v $v $v"} else {
-            set hue [expr {$hue*6.0}]
-            if {$hue >= 6.0} {set hue 0.0}
-            scan $hue. %d i
-            set f [expr {$hue-$i}]
-            set p [format %.0f [expr {255.0*$value*(1 - $sat)}]]
-            set q [format %.0f [expr {255.0*$value*(1 - ($sat*$f))}]]
-            set t [format %.0f [expr {255.0*$value*(1 - ($sat*(1 - $f)))}]]
-            switch $i {
-                0 {return "$v $t $p"}
-                1 {return "$q $v $p"}
-                2 {return "$p $v $t"}
-                3 {return "$p $q $v"}
-                4 {return "$t $p $v"}
-                5 {return "$v $p $q"}
-                default {error "i value $i is out of range"}}}}
-    proc random_txt {n} {
-        set i 0
-        set text ""
-        while {$i < $n} {
-            set int [expr "int(floor(rand()*62))"]
-            if {$int < 10} {incr int 48} elseif {$int < 36} {incr int 55} else {incr int 61}
-            set text "$text[format %c $int]"
-            incr i}
-	return $text}
-    option add *borderWidth 0
-    option add *font {{bitstream vera sans} 10}
-
-    proc item_new {_ a} {
-	variable ""
-	variable obj
-	foreach local [dict keys $a] {set $local [dict get $a $local]}
-	if {[dict exists $obj $type attributes]} {set da [dict get $obj $type attributes]} {set da {}}
-    	if {$id eq "-"} {
-	    if {[dict keys $($_)] eq ""} {set id 0} else {set id -1
-		while true {if {[lsearch [dict keys $($_)] [incr id]] == -1} {break}}}}
-
-	if {![info exists x]} {set x 13; set y 31}
-	if {[dict exists $da x]} {set sx [dict get $da x]} {set sx 0}
-	if {[dict exists $da y]} {set sy [dict get $da y]} {set sy 0}
-
-    	update $_ $id abs [dict merge [dict merge [dict merge {class item ins 0 outs 0 color {128 128 128}} $da] [dict remove $a id]] [dict create x $x xx [expr $x + $sx] y $y yy [expr $y + $sy]]] 0
-	item_draw $_ $id
-	return $id}
-
-    proc item_draw {_ is} {
-	variable ""
-	variable obj
-	if {$is eq "all"} {set is [dict keys $($_)]}
-	foreach id $is {
-	    set type [dict get $($_) $id type]
-	    if {[dict exists $obj $type init]} {
-		foreach local [dict keys [dict get $($_) $id]] {
-		    set $local [dict get $($_) $id $local]}
-		set tags [list $class i$id $id]
-		set rgb $color; set color [color $rgb]
-		eval [dict get $obj $type init]
-		if {$class eq "item" && ($ins > 0 || $outs > 0)} {
-		    eval [dict get $obj io init]
-		}
-	    }
-	    redraw $_ $id
-	}
-    }
-
-    proc redraw {_ items} {
-	variable ""
-	variable obj
-	switch $items {
-	    all {set items [dict keys $($_)]}
-	    default {}}
-	foreach id $items {
-	    foreach local [dict keys [dict get $($_) $id]] {
-		set $local [dict get $($_) $id $local]}
-	    set x [tr $_ x t $x];set y [tr $_ y t $y];set xx [tr $_ x t $xx];set yy [tr $_ y t $yy]
-	    if {[expr $x > $xx]} {lassign "$x $xx" xx x}
-	    if {[expr $y > $yy]} {lassign "$y $yy" yy y}
-	    set sx [expr $xx - $x]; set sy [expr $yy - $y]
-	    if {[lsearch [getsel $_] $id] >= 0} {set rgb {233 233 233};set color [set [l $_ canvas sc]];set selected 1} else {
-		set rgb [dict get $($_) $id color];set color [color $rgb];set selected 0}
-	    set atags [concat $class i$id $id]
-	    set tags [concat $class && i$id && $id]
-	    set item [$_ find withtag $tags]
-	    if {[dict exists $obj $type tags]} {
-		foreach tag [dict get $obj $type tags] {
-		    set $tag [$_ find withtag "$tags && $tag"]}}
-	    if {[dict exists $obj $type redraw]} {
-		eval [dict get $obj $type redraw]}
-	     if {$class eq "item" && ($ins > 0 || $outs > 0)} {
- 		eval [dict get $obj io redraw]
- 		foreach i [dict keys $($_)] {
- 		    if {[dict get $($_) $i class] eq "cable"} {
- 			if {[lindex [dict get $($_) $i from] 0] eq $id || [lindex [dict get $($_) $i to] 0] eq $id} {
- 			    redraw $_ $i
- 			}
- 		    }
- 		}
- 	    }
-	}
-    }
-
-    proc item_delete {_ {items ""}} {
-	variable ""
-	variable obj
-	if {$items eq ""} {set items [getsel $_]}
-	foreach id $items {
-	    foreach i [$_ find withtag i$id] {
-		$_ delete $i
-	    }
-	    set type [dict get $($_) $id type]
-	    if {[dict exists $obj $type destroy]} {
-		eval [dict get $obj $type destroy]}
-	    dict unset ($_) $id
-	    set sel [lremove [dict get $($_) canvas sel] $id]; up $_ canvas sel
-	    send "delete $_:$id"
-	}
-    }
-    
-    proc update {_ item r u redraw} {
-	variable ""
-	foreach a [dict keys $u] {
-	    switch $r {
-		abs {dict set ($_) $item $a [dict get $u $a]}
-		rel {dict set ($_) $item $a [expr {[dict get $($_) $item $a] + [dict get $u $a]}]}
-	    }
-#	    send [concat update $_:$item $a [dict get $($_) $item $a]]
-	}
-	send [concat update $_:$item $u]
-	if {$redraw == 1} {redraw $_ $item}
-    }
-
-    proc up {_ id args} {
-	variable ""
-	foreach arg $args {
-	    upvar $arg var
-	    dict set ($_) $id $arg $var
-	    send [concat update $_:$id $arg $var]
-	}
-    }
-
-    proc item_mua {_ r u redraw {items -}} {
-	variable ""
-	if {$items eq "-"} {set items [getsel $_]}
-	foreach item $items {update $_ $item $r $u $redraw}
-    }
-
-    proc l {_ id args} {
-	variable ""
-	foreach arg $args {
-	    upvar $arg var
-	    set var [dict get $($_) $id $arg]
-	}
-	return $args
-    }
-
-    proc msg {} {
-	if {![winfo exists .msg]} {
-	    toplevel .msg
-	    grid [entry .msg.text]
-	    bind .msg.text <KeyPress-Return> {::pd::send [.msg.text get]}}}
-
-    proc inspector {_} {
-	variable ""
-	set p .ic
-	if {![winfo exists $p]} {
-	    toplevel $p
-	    if {[info exists ($_:inspect)]} {unset ($_:inspect)}}}
-
-    proc inspect {_ id} {
-	set p .ic
-	if {![winfo exists $p]} {return}
-	variable ""
-	if {![dict exists $($_) $id]} {return}
-	set keys [dict keys [dict get $($_) $id]]
-	if {![info exists ($_:inspect)] || ($($_:inspect:type) ne [dict get $($_) $id type])} {
-	    foreach c [winfo children $p] {destroy $c}
-	    set n 0
-	    foreach k [concat id $keys] {
-	        entry $p.$k -width 8 -bd 0 -font {{Bitstream Vera Sans} 11}
-		$p.$k insert 0 $k
-		$p.$k configure -state disabled
-		entry $p.${k}v -width 16 -bd 0 -bg gray94 -font  {{Bitstream Vera Sans} 10}
-		if {$n == 0} {set cmd "::pd::inspect $_ \[$p.${k}v get\]";set cmdT $cmd} {
-		    set cmd "::pd::item_mua $_ abs \[dict create $k \[$p.${k}v get\] \] 1 \[$p.idv get\]"
-		    set cmdT "::pd::item_mua $_ abs \[dict create $k \[$p.${k}v get\] \] 1"}
-		bind $p.${k}v <Any-KeyRelease> $cmd
-		bind $p.${k}v <Tab> $cmdT
- 		grid $p.$k $p.${k}v -sticky nsew
- 		grid columnconfigure $p 1 -weight 3
- 		grid columnconfigure $p 0 -weight 1
- 		grid rowconfigure $p $n -weight 1
-		incr n
-	    }
-	    set ($_:inspect:type) [dict get $($_) $id type]
-	}
-	set ($_:inspect) $id
-	$p.idv delete 0 end
-	$p.idv insert 0 $id
-	foreach k $keys {
-	    $p.${k}v delete 0 end
-	    $p.${k}v insert 0 [dict get $($_) $id $k]}}
-
-
-    
-    proc rmenu {_ x y X Y} {
-	variable ""
-	variable obj
-        destroy $_.rmenu
-	if {[winfo exists $_.rmenu] != 1} {
-	    set m [menu $_.rmenu -tearoff yes]
-
-
-	    $m add cascade -label "edit" -menu [set me [menu $m.edit -tearoff no]]
-	    foreach a {copy cut paste selecta} {
-		$me add command -label $a -command "::pd::clip $_ $a"}
-
-	    $m add cascade -label "object" -menu [set mo [menu $m.object -tearoff no]]
-	    foreach type [dict keys $obj] {
-		$mo add command -label $type -command "::pd::item_new $_ \{id - type $type x [tr $_ x i $x] y [tr $_ y i $y]\}"}
-
-	    $m add cascade -label "view" -menu [set mv [menu $m.view -tearoff no]]
-	    $mv add command -label "zoom to fit" -command "::pd::viewpoint $_ {action fit}"
-	    $mv add command -label "flip x" -command "::pd::viewpoint $_ {action mirror_x}"
-	    $mv add command -label "flip y" -command "::pd::viewpoint $_ {action mirror_y}"
-	    $mv add command -label "reset" -command "::pd::viewpoint $_ {action reset}"
-
-	    $m add command -label reload -command {source pd_base.tk}
-	    $m add command -label "console" -command {source /usr/local/bin/tkcon.tcl; tkcon show}
-	    $m add command -label "inspector" -command "::pd::inspector $_"
-	    $m add command -label "msg" -command "::pd::msg"
-	} else {
-	    #	    $_.rmenu entryconfigure 0 -label $x
-	}
-
-	tk_popup $_.rmenu $X $Y
-    }
-
-    proc tr {_ d inv v} {
-	variable ""
-	array set dm {x width y height}
-	l $_ canvas xa xb ya yb
-	switch $inv {
-	    t {return [expr ($v - $${d}a) / ($${d}b - $${d}a + 0.0) * [winfo $dm($d) $_]]}
-	    i {return [expr ($${d}b - $${d}a) * $v /([winfo $dm($d) $_] + 0.0) + $${d}a]}
-	    d {return [expr ($${d}b - $${d}a) * $v /([winfo $dm($d) $_] + 0.0)]}
-	    id {return [expr $v / ($${d}b - $${d}a + 0.0) * [winfo $dm($d) $_]]}}}
-
-    proc viewpoint {_ opts} {
-	variable ""
-	l $_ canvas xa xb ya yb xao yao xbo ybo
-	switch [dict get $opts action] {
-	    fit {
-		lassign [$_ bbox item] xa ya xb yb
-		foreach z {xa xb ya yb} {set $z [tr $_ [string range $z 0 0] i [set $z]]}
-	    }
-	    mirror_x {
-		lassign "$xb $xa" xa xb
-	    }
-	    mirror_y {
-		lassign "$yb $ya" ya yb
-	    }
-	    reset {
-		lassign "$xao $xbo $yao $ybo" xa xb ya yb
-	    }
-	    square {
-		
-	    }
-	    move {
-		foreach xy {x y} {
-		    set mvt [tr $_ $xy d [expr {[dict get $opts $xy] - $($_:c$xy)}]]
-		    foreach ab {a b} {set ${xy}$ab [expr $${xy}$ab - $mvt]}}
-	    }
-	    zoom {
-		array set dir {in 0.5 out 1.5}
-		foreach xy [dict get $opts axe] {
-		    set radius  [expr ($${xy}b - $${xy}a) / 2. * $dir([dict get $opts dir])]
-		    set center [tr $_ $xy i [dict get $opts $xy]]
-		    set ${xy}a [expr {$center - $radius}]
-		    set ${xy}b [expr {$center + $radius}]
-		}
-	    }
-	    resize {
-		foreach xy {x y} {
-		    set mvt [tr $_ $xy d [expr {[dict get $opts $xy] - $($_:c$xy)}]]
-		    set ${xy}a [expr $${xy}a - $mvt]
-		    set ${xy}b [expr $${xy}b + $mvt]}
-	    }
-	    scroll {
-		set xy [dict get $opts axis]
-		set mv [expr ($${xy}b - $${xy}a) / 4.0]
-		foreach ab {a b} {set ${xy}$ab [expr [dict get $opts units] > 0 ? $${xy}$ab + $mv : $${xy}$ab - $mv ]}
-	    }
-	}
-	up $_ canvas xa xb ya yb
-	redraw $_ all
-    }
-
-    proc clip {_ action} {
-	variable ""
-	switch $action {
-	    selecta {
-		set items {}
-		foreach i [dict keys $($_)] {if {[dict get $($_) $i class] eq "item"} {lappend items $i}}
-		updatesel $_ $items
- 	    }
-	    cut {
-		set ($_:c) [dict create]
-		set i 0
-		foreach item [getsel $_] {
-		    dict set ($_:c) $i [dict get $($_) $item]
-		    incr i
-		}
-		item_delete $_
-	    }
-	    copy {
-		set ($_:c) [dict create]
-		set i 0
-		foreach item [getsel $_] {
-		    dict set ($_:c) $i [dict get $($_) $item]
-		    incr i
-		}
-	    }
-	    paste {
-		set pasted {}
-		foreach item [dict keys $($_:c)] {
-		    item_new $_ [dict merge [dict get $($_:c) $item] {id -}]
-		}
-	    }
-	}
-    }
-    
-    proc new {_} {
-	variable ""
- 	variable obj
-	if {[info exists ($_)] != 1} {set ($_) {}}
-	if {[winfo exists $_] != 1} {
-	    item_new $_ [dict create type canvas id canvas]
-	    item_new $_ [dict create type gridlines id grid]
-	}
-    }
-
-    variable pd_send
-    set pd_send -1
-    proc connect {} {
-	if {[catch {set pd_send [socket localhost 13665]}]} {set pd_send -1} {puts "connected $pd_send"}
-	catch {set pd_receive [socket -server ::pd::receive_conn 13666]}
-	exec pd -guiport 13666 &
-    }
-    proc receive_conn {s addr port} {
-	fileevent $s readable [list ::pd::receive $s]
-	fconfigure $s -buffering line -blocking 0
-	puts "connection from $addr"
-    }
-    proc receive {s} {
-	set l [gets $s]
-	if {[eof $s]} {
-	    close $s
-	} else {
-	    if {[catch {eval $l}]} {puts "error in: $l"}
-	}
-    }
-    proc send {msg} {
-#	puts [concat s: $msg]
- 	variable pd_send
- 	if {$pd_send ne -1} {
- 	    puts $pd_send [concat $msg \;]
- 	    flush $pd_send
- 	}
-    }
-
-    if {![winfo exists .c]} {
-	toplevel .c -width 512 -height 512
-	new .c.c
-#	connect
-    }
-
-}
diff --git a/extensions/gui/ix/pd_objects.tk b/extensions/gui/ix/pd_objects.tk
deleted file mode 100755
index a6574050b..000000000
--- a/extensions/gui/ix/pd_objects.tk
+++ /dev/null
@@ -1,730 +0,0 @@
-variable obj
-set obj {
-
-    rect {
-	tags {
-	    box img
-	}
-	attributes {
-	    x 1 y 1
-	    color {123 232 4}
-	    zero_x 0
-	    zero_y 1
-	    zs_x 0.5
-	    zs_y 0.5
-	    img ""
-	}
-	hints {
-	    color rgb
-	    zero_x bool
-	    zero_y bool
-	    zs_x float 0.1 10
-	    zs_y float 0.1 10
-	}
-	init {
-	    $_ create rect $x $y $xx $yy -tags [concat $tags box]
-	    if {$img ne ""} {
-		package require Img
-		image create photo photo$id
-		$_ create image 0 0 -tags [concat $tags img]
-	    }
-	}
-	redraw {
-	    if {[expr $zero_x == 1]} {set zs_x [tr $_ x id $zs_x]; set xx [expr $x + $zs_x]; set x [expr $x - $zs_x]}
-	    if {[expr $zero_y == 1]} {set zs_y [tr $_ y id $zs_y]; set yy [expr $y + $zs_y]; set y [expr $y - $zs_y]}
-	    $_ coords $box $x $y $xx $yy
-	    $_ coords $img $x $y
-	    if {$img ne ""} {
-		photo$id configure -file $img
-		set photo photo$id
-	    } {set photo ""}
-	    $_ itemconfigure $img -image $photo
-	    $_ itemconfigure $box -fill $color -outline [color [lighten $rgb 0.3]] -width [expr $selected + 1]
-	}
-    }
-
-    colors {
-	attributes {ins 1 out 1 x 1 y 3}
-	tags {box subwin}
-	init {
-	    $_ create rect 0 0 0 0 -tags [concat $tags box]
-	    set p [frame $_.$id]
-	    $_ create window 0 0 -tags [concat $tags subwin] -window $_.$id -anchor nw
-	    set picker {iVBORw0KGgoAAAANSUhEUgAAADIAAAEACAIAAAB+mLL0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1QkNDBMQBB81AgAAELhJREFUeNqtnVty47wOhMGL/5nZ29n/ZkYiz0MsBQTQTciZFMulyE7SISEQpPAJ5X+//vwq5Xcpv0R+lfKrlF9S3mfWk+8z7w/I9VPfJ0VE/vyWP3+u9vz49/u4i5S1VXcm30TkJfIS6SJdHbTrtYnU67Vef666XyJdna0JifzMLesWZDR5ZV5TQbLIAX9XyzLKjLiKO+zdW0W9Hb5uP3C/ish/So1pXlMFNvPuLfPb/UHyPO8tPYJkEEWk9PW3k+PMW8a2Xq63qustYwN2EMNG3qpUVqcmH16PgcmT1nKy2g8GMXYQhepoT94Ke4ubfCEmX9xfMgfJ86KsKuMgYu9wm3w4Iua14bfCQbxNPuNOa3IQ2+4gPCngMkSTjxlK8X7LKPMiMmfCySe0emRbonurAF/QHrakrL2j7wkRPX0yM4hZ26q0n3p0jE7KqsmYfM9pKsjkvQ0ZQf5Vywp7y49gI+a17a0GBIXfEtvKmJdok/futOGu0jr8MZKVMfZqTB4NorGwUIpp4gzLdGfo5X80iHd75WT13Wwd9hk0+XAQSXs5WX1n8j4GrGiJUaPJ2BtWKOgVyQobCdfYILbdZWg0mVfBV8a2w77DB2TyFbuuUJmXhXxbo0HzxuRD22pg+JAsNBm0TDhv1ol5w3+5BbSXxceu5YNmHiCgK/Gr/Sci+JdUoK/wdaKPzb2aBgR9abp7KxNL7oPmgoNmYmGvSJyAYB8tCB4ENuYXdXAZGkFeVnLVVEjQXBIzD3GkxraeNhg0Z+bp5nzEKxrEcC1edot1FjTnewuNoyS2T0o0fPUnYWDGtsgO1PZbG0EUGjSjQQz91qPNxAp2OtlUXXcm781LPtputfZONpK2EQSyrfCPER3xxzoQVHeB/Mt5h5faNzPbaCXxlt12qzvXRaL4l7Mt0b89cRCfRybfProYzVeR4Cs8KaFtlSn1amXaM+82pM21DdXme0GW+iq7D/Qh4tsJ2kGXfObvlUgEP3kf97nTdNDlcItkFWw74et0x32IzFUT6rCDbspWcF0hN3AfzEhfH06Tl3LkIibJ+VNBe23X8fSDeO70kX0goXfYyJ236i6IHtr7cILOS5PfAUKyzMEAb8n11mLyX1Lmzuq3AZSRpT92C5rXmam2juo1cIvJT6Xp3LVjtx2L7goNpWZeUr7Oy3VSQpM/RVqitw4a7ZLQeF5NW5I+L+o49lvNaTq2W1JKVovm/7k2/9WIl781NafpiO5tGt9Yry7XsduXjrYK0m7Wy+2hvdfr9T64lRXsG0WZUVstqV3K/OQ4lLLb9vt0gpo61sN3YPeoB2JcIsaqZjq3WZSjD3prRL1VVzPfCpLLA93N2FPYVQWIgxFEzdzpBrK4dRv/Hn5y8VvDmdRWUAGyxvqXtKWf6vcMJU7Uj3TfScbquY2LMVXnh7QHv3/8XCeAobpNSLxVsIvyY2cUTPevhxHOwJpm6LfK1VXh3OI1hbKQVXk7rtFPwal6v8QE4+UFFZASM9wlwky+pN2BFjfcwAlY/HtBA/WWFoQ6LOwnP2QT+EwT89yXl+/yxeS9oJNq0uJG5MT9CNb1SkeD+Db5omSdShBa0HnrHgm3adoAvvd7EKuSVZQyiWw8FDQu20KddKxBzlgdr++w9yCaUTuj4UBjp2URezqUVTU3GdgIYqy/5cTWjex9AFnewHWA2cA4SiiLu4PpPNxwsgq2qq2gJWjW48id01TBnffAAtQ0tzjw/5J1pwNvNOkrtikpOsrTc0goSy96T7el4D3qYvISeYS5atJx8FCB6L0CEHqjJuytCTxqHyByMuN9a7rD86FWE1X9b+H2sNd00pixDzW3ozl4Kk23oKo0VWVbfG8YmZcR1/VEG9p4BT66RhtJ4R71mVYjprfI5WZcFNmMkOiu34HFTXcZTm9bU+1SeGXD9ZPPkNW99VfJ6ter2ahitmWuRKOmKE1jlz0sUT8dlyZyJY4wgrin6nvpXZUs/YFKd7Ak2jQ/co7URhDaxc91I2q6ZdOgt5REmflxtXM9DjtsIi9f1g3We+1W3JqObEDe6QZ/V2WkwyYwLzhVT7wDW/CiyNy10h12RvY+1ihymiXG41tY0Vs68efY9dbJg+ZZpBSRIpP+8ftjIu/j90/J+3gWEZHRZXQZ7d3mV6uugShqXjJ6FgmRNCFiUprN7Vu+WV3uW1F1Z8n58z/Phr2soacYkOQHCE/TXIfR9OG+h0EywAhHMXgmXhSn9zhN4bOT8lGaddRnfUN/lCcnicm3hLh4EPOECDpPsmE7SE5iJv9PIBFi8v1pfuc9iOT2Q/4DxOSRawB3aTrMzvjgQCg/tmVX1O5Fh1I+eBVKRG3RI2byGUIEnResqdN85poxeZT9uH0rafIp20KC8oRIjQiR1y53uLEpv++zynpCGcnib4mL0Vl9j3dYkKZOjzMmT2xL0CBmcsDJt5x56LkrcTH5ks7+Jine4nLznnJRgnqrJjQhTkQwbZe/Eq07Jd4BZZU1gGK8KJvYaIaHmOj0gxRPT4ggp/UMFCa9lUmFJbI+JttYBEHoIyNIdw8nRHJRPI4gUCIlgUS0rAb6KROjLibPvQOBaUyILJQ0ewJO4ql6S/q8HJMhO39L8JBqIogtP9YoEeWz+Dlfydn4QtxphhN5YbiAgyHbuJn5rS1ME/aZ5MDizWMEiJev2EG8EihGEsneLzFKYkIk9m5QjJZbrcCHZxB3+ggh03BBfplZiG09HcSOORF58uQGuiHVf8SPebig0odtkL0MGzR/4B0IQvbBA0r2QfMjiixEyJL7dYU+p+bB5EMA0wwhkt+htavqtiOrM5hPJq06ceajwIYgZNvkdNmdD0w+GQYShIyn72dS/OWHQTMiRArlLnLf/myJwcGVH3x1nApyJrCMv26X8t90V89RK8cO+/WyksY1w297RBaEwIMRh/Z0P7sUbYf1aAQ19mA0HTRA+cxNTSdxdnWrEeEhISHS8Kz2gZu3iXKot3yHHTiA8rL85DfopLgx+RPY/uESjDiNgUKI6f6HuoIrscmPh5CIj3lReDXUXfm5QlQeboF+6xGy4mWF4akhRPSxTrz4NnkvyEMip+NEakJWiIfMtcP8W4Hfag5fqY4WKXDJElwW0+kzudcGFRHttyaARDQbwgWJWihqduVOSpMo4dl02PszHQAPLQeJ+HltrJxIXdPlGpBllDGTz0Ai3h8aPKRiSKSEgr6Oe5oQqeyWd8yuDImBWDQNLL0VChoYEiFJ/foXhsnqsuZLQ3yl0xE8MYZImAyUBC+OxvCcyGLy012AJ3n8wC6HfuTy+ofKWnvQW+cuK0oiRoUQR6FhxahIaFuDavLmEqaphvpqLr8z9ltPU8In7jDTSTUCVwYaRLTE2CqbILccsXV1p2kaLx8iK2dCkODrrrjY0PBpKAE8kKVREaHDJw7IEMdnbQmRuMP6mu967iARATnFc40FCsAyECcyw94qjhNBkAhCMYysEMg4VtygkRRPbfKEE0G9NYCsEISqK/HLUjw7SHPNwFlGXMMg1IEhkTjF08jij7gI+0kzGbKjVkzriEbrDlwJXfnEnIjmH4U+ozSZbx2YPPICJqyrjl0JaQy9BD8Uu0ISm5cIIuOcDMCtCZGBaYyQExkOMYARRIYZqyvBMlYYvroFmQZDjlXcoCnNb5PnF11z6ztEi0iCWhlJ2wrBFY6vkFTKGgEZjWIPPqB921YFmE8F1ApJPK0AXCGQyEDrRP0oiy0kwtN0CbhCEAMbROhBLM4FGEgkREXMNpXupyMCV0JBw0cQw61uawSJhISITwE3O+YIMTgjisxugMs6BU13YAgRkjCvBd2oyOmAjE1E3ymRMp/jBZ4QCbtqZEy+5EiQDCrSFVLTV9KHcIDOQZTr6MJAimJAiojcPMgFg3yxIUXs8df1fFQ5qpxfrbzbcC1eihWZX2/1f8WGFPosfvJM6zCrudef3S41VNRrV0Ykl9/pZNXcswcrltUfYg/hDmwnBN3T86T8BBEXhuqd5AB8kDDwisbxYXKn6q08DFIozfmUPiruUVnfJv/osaScfeXP4q+7sjmLyf+wrkn9tLcKqvPwNYjlObXSsKyflFIQ01tl92DezElk8o+efl+8baFHFydPZp7Fn6pcoK9E8mzy7clGTX57JQZUKEkaqTs8xJyUKzOJMA9oQqy+t0qursn2LXlIAIaP+Ns4iGTdEC+rP8G1UKjSM8/QTTIjyfITGeyhl11CEqpr4g+4yfdE+YnF5MuOXem5V3lYGY0kLfb6UBM5+AwU3kQQ28xTwoa0CMV4YXvfooA9TEp/VLKjORRjW4isAlB477c+qCQS1hBpOVbYDmLy4dHk0fehrJ4u1lFJBPEx8EBktVxpk2cmTy7GF3gVcIW2J1N1EDQ3nHnacwngbVfXhCR/7afqmqhu8sLMA5mgUsXR0FT98YPJk0xqNmj+gGnbgit19y0LmjPlJ3hhDF9xZRvW1syCLFmsoyUqFzwtcZgKmh+VNkFVMTLo/763toVgSK68r1xQf9AkNPnMPN12lQsyJVFLIslw8VvtCSGC4IKnGz6V7EGU5zxNiJAlSwCT2KEQv5Whj3hvPX2+/Mbkk+W+Xrgqxs/3iONVdYYcQwjZB7ULhOw0J9dk2wjis0oPEgbNTwvvvXAE8c/qYjwqU5isuPIPqoh83d0o42pTijlztXpKWVtVrZz/sOTKJSuVl54EVz4rULP+bJdtqYfD3XpGEd1PyvnIUuqhp4AHLe7Ihb2Pih/JWuPkPYgjVw7miEI7U6H9aamoiR4lgEiakMYgGy7108JakdUDkx+RoBDFqA4uIPeuJqiGIvY59F1Gmh/LRJa8SttcnzEprsAJNPmRRla2snwaznSoSFXZHwoS6cEItmgQPSRScoRIdbnUNcopXm9ed+i0akSI8BCOl0+c+Kn47nyXR9VNeGkTUePV1KOAW1TdxJcRUTljXUgtGFPdpGBOxMjykIgnRLQ7NQVOlt4ylXM8HhIWXTFf56pJlzZpGDEoNt+tx8U6wnYkElQRAkVKm0RPre02XwlJJGoMTzPp42h9dnlx1YYE+S3CiRWc7SwkNxKblMbxBJn8lhMpuHqAPBTky4hMNFVXWt2ElzPwRVcEVzcpjg1RiYk9xtoI80CSi4XWgkLVTaIOBn4raeBCmQdS3aTy9C0SQZA178RlRDgIVVWhmUqS3UKTLyuQgazbZ6oLrbhSHAw7IezTvy8Hg2JkKhp4WZkyIqFVDR9BmAInvrpJwfWE7l/ad7BfxZCIK47Sv7P4x8qrnLiTJCptMunYabqnrVMwHESfWHrm4CxfRiTUpKMjQ4hMZPIjwatwNaSMiIFEzohdiR3EjJCaJDM2qayKIZG2oci6xUOIE/eZ6qaSiFADPylZYIPmuSZbI0IkrHEyVs5LsCZCiESlHjosbeI9gsdDmgNXw13rAxMig0w+BdfrEIyHNFeWQvD+3bmK47WPvoNmZNeC8ZDhjmW3obi1LTuIxC9k7tecFFzpbgTPZGATdlXBpU0KKJOr99ANHnImAKTFnRo8RKIyRxVDIkjW37WYSE+CWuhKJIQIv6skUSGYYzeIk5i8L23imYyxu58kyiMcuAhForpJ5OU9ITLWYJfcRjL3ro6IEDn39dH6stw2f2ZGKDu/h6TvE/kaIueucs4SNIvdjNvfzhIqy/M0B74GB4+3kne0yAfE3YHJ1IKJXPf/ARXN6/ssS+vjAAAAAElFTkSuQmCC}
-	    image create photo colorpicker$id
-	    colorpicker$id configure -data $picker
-	    label $p.colors -bd 0
-	    entry $p.rgb -bd 0 -width 10 -font {{bitstream vera sans mono} 8}
-	    bind $p.colors <B1-Motion> "::pd::colors:pick $_ $id %x %y"
-	    bind $p.colors <1> "::pd::colors:pick $_ $id %x %y"
-	    grid $p.colors -sticky nsew
-	    grid $p.rgb -stick nsew
-	    $p.colors configure -image colorpicker$id
-	}
-	
-	redraw {
-	    $_ coords $box [expr $x - 10] $y $xx $yy
-	    $_ itemconfigure $box -fill $color
-	    $_ coords $subwin $x $y
-	    set w [expr $xx - $x]
-	    set h [expr $yy - $y]
-	    if {[expr abs($w - [$_.$id cget -width]) >= 1 || abs($h - [$_.$id cget -height]) >= 1]} {
-		$_.$id configure -width $w -height $h
-	    }
-	}
-
-	destroy {
-	    destroy $_.$id
-	}
-	methods {
-	    proc colors:pick {_ id x y} {
-		if {![expr $y <= 255 && $y >= 0 && $x >= 0 && $x <= 50]} {return}
-		set p $_.$id
-		set rgb [hsvToRgb [expr (255 - $y) / 255.] [expr $x <= 25 ? 1. : ($x - 50) / -25.] [expr $x <= 25 ? $x / 25. : 1.]]
-		$p.rgb delete 0 end
-		$p.rgb insert 0 $rgb
-		$p.rgb configure -bg [color $rgb]
-	    }
-
-	}
-    }
-
-    canvas {
-	attributes {
-	    color {222 222 222}
-	    sc orange
-	    mode edit
-	    sel {}
-	    xa 0 xb 100 ya 0 yb 100 xao 0 xbo 100 yao 0 ybo 100
-	}
-	init {
-	    canvas $_
-	    place $_ -relwidth 1 -relheight 1
-	    #	    bind $_ <Configure> "::pd::redraw $_ all"
-	    bind $_ <Enter> "focus $_"
-	    bind $_ <Key> "::pd::key $_ %k 1"
-	    bind $_ <KeyRelease> "::pd::key $_ %k 0"
-	    bind $_ <Motion> "::pd::hover $_ %x %y"
-	    bind $_ <4> "::pd::viewpoint $_ {action scroll units 1 axis x}"
-	    bind $_ <5> "::pd::viewpoint $_ {action scroll units -1 axis x}"
-	    bind $_ <Control-4> "::pd::viewpoint $_ {action zoom dir in axe x x %x y %y}"
-	    bind $_ <Control-5> "::pd::viewpoint $_ {action zoom dir out axe x x %x y %y}"
-	    bind $_ <Alt-4> "::pd::viewpoint $_ {action zoom dir in axe {x y} x %x y %y}"
-	    bind $_ <Alt-5> "::pd::viewpoint $_ {action zoom dir out axe {x  y} x %x y %y}"
-	    bind $_ <Control-Shift-4> "::pd::viewpoint $_ {action zoom dir in axe y x %x y %y}"
-	    bind $_ <Control-Shift-5> "::pd::viewpoint $_ {action zoom dir out axe y x %x y %y}"
-	    bind $_ <Shift-4> "::pd::viewpoint $_ {action scroll units -1 axis y}"
-	    bind $_ <Shift-5> "::pd::viewpoint $_ {action scroll units 1 axis y}"
-	    foreach m {"Control-" "" "Shift-" "Double-"} {
-		foreach bn {1 2 3} {
-		    set b [list [concat $bn first] [concat B${bn}-Motion motion] [concat ButtonRelease-$bn release]]
-		    foreach ba {0 1 2} {
-			bind $_ <$m[lindex [lindex $b $ba] 0]> "::pd::click [list [string tolower [string trimright $m -1]]] $bn [lindex [lindex $b $ba] 1] $_ %x %y %X %Y"}}}
-	    if {$::has_tkdnd == 1} {dnd bindtarget $_ text/plain <Drop> "::pd::drop $_ %D %x %y"}
-	}
-	redraw {
-	    set bd [expr {[$_ cget -bd] * 2}]
-	    $_ configure -bg $color -width [expr {[winfo width $_] + $bd}] -height [expr {[winfo height $_] + $bd}]
-	}
-	methods {
-	    proc item_pos {_ item r x y xx yy} {
-		update $_ $item $r [dict create x $x y $y xx $xx yy $yy] 1}
-
-	    proc pencil {_ a x y} {
-		variable ""
-		switch $a {
-		    motion {
-			item_pos $_ $($_:ci) abs [tr $_ x i $x] [tr $_ y i $y] [tr $_ x i $($_:fx)] [tr $_ y i $y]
-		    }
-		    first {set ($_:ci) [item_new $_ [dict create type rect id -]]}}}
-
-	    proc resize_canvas {_ a x y} {viewpoint $_ [dict create action resize x $x y $y]}
-
-	    proc item_v {_ a x y} {
-		variable ""
-		variable obj
-		foreach id [getsel $_] {
-		    set type [dict get $($_) $id type]
-		    if {[dict exists $obj $type defaults]} {
-			foreach local [dict keys [dict get $obj $type defaults]] {
-			    set $local [dict get $obj $type defaults $local]}}
-		    if {[dict exists $obj $type control Button-1]} {eval [dict get $obj $type control Button-1]}
-		}
-	    }
-
-	    proc move_canvas {_ a x y} {viewpoint $_ [dict create action move x $x y $y]}
-
-	    proc move_object {_ a x y} {
-		variable ""
-		set mx [tr $_ x d [expr {$x - $($_:cx)}]]
-		set my [tr $_ y d [expr {$y - $($_:cy)}]]
-		foreach item [getsel $_] {item_pos $_ $item rel $mx $my $mx $my}
-	    }
-
-	    proc resize_left {_ a x y} {item_resize $_ x $x $y}
-	    proc resize_right {_ a x y} {item_resize $_ xx $x $y}    
-	    proc resize_top {_ a x y} {item_resize $_ y $x $y}
-	    proc resize_bottom {_ a x y} {item_resize $_ yy $x $y}  
-	    proc resize_tl {_ a x y} {item_resize $_ x $x $y; item_resize $_ y $x $y}
-	    proc resize_tr {_ a x y} {item_resize $_ x $x $y; item_resize $_ yy $x $y}
-	    proc resize_bl {_ a x y} {item_resize $_ xx $x $y; item_resize $_ y $x $y}
-	    proc resize_br {_ a x y} {item_resize $_ xx $x $y; item_resize $_ yy $x $y}
-
-	    proc item_resize {_ e x y} {
-		variable ""
-		array set ax {x x xx x y y yy y}
-		set m [tr $_ $ax($e) d [expr $$ax($e) - $($_:c$ax($e))]]
-		item_mua $_ rel [dict create $e $m] 1
-	    }
-
-
-	    proc item_scale {_ a x y} {
-
-
-	    }
-
-	    proc click {m button action _ x y X Y} {
-		variable ""
-		set clicked [cleansel $_ [$_ find overlapping $x $y $x $y]]
-		set a $($_:submode)
-		switch $action {
-		    first {
-			foreach xy {x y}  {set ($_:f$xy) [set $xy]}
-			switch $button {
-			    1 {if {$m eq "control"} {
-				mode $_ pencil; pencil $_ $action $x $y
-			    } elseif {$m eq "double" || $m eq "shift"} {
-				if {[llength $clicked] > 0} {
-				    togglesel $_ $clicked 
-				} else {
-				    item_new $_ [dict create type sel id sel xa $x ya $y xb $x yb $y]
-				}
-			    } elseif {[$_ find withtag sel] ne ""} {
-				item_delete $_ sel
-			    } elseif {[llength [getsel $_]] > 1 && [llength $clicked] > 0 && [lsearch [getsel $_] $clicked] == -1} {
-				updatesel $_ $clicked} elseif {$a eq "cabledraw"} {eval $a $_ $action $x $y}}
-			    2 {if {$clicked ne ""} {mode $_ item_scale} {mode $_ resize_canvas}}
-			    3 {if {$clicked ne ""} {mode $_ item_v} {rmenu $_ $x $y $X $Y}}}}
-		    motion {
-#			puts "$a $_ $action $x $y"
-			eval $a $_ $action $x $y
-#			catch {eval $a $_ $action $x $y}
-		    }
-		    release {
-			switch $button {
-			    1 {if {$a eq "draw" || $a eq "cabledraw"} {eval $a $_ $action $x $y}}
-			    2 {mode $_ move_canvas}
-			    3 {mode $_ move_canvas}
-			}
-		    }
-		}
-		if {$clicked ne ""} {inspect $_ [lindex $clicked end]}
-		foreach xy {x y}  {set ($_:c$xy) [set $xy]}
-	    }
-
-	    proc hover {_ x y} {
-		variable ""
-		if {[$_ find withtag sel] ne ""} {
-		    update $_ sel abs [dict create xa $x ya $y] 1
-		} else {
-		    set clicked [$_ find overlapping [expr $x - 2]  [expr $y - 2] [expr $x + 2] [expr $y + 2]]
-		    set out 0
-		    foreach id $clicked {
-			if {[lindex [$_ itemcget $id -tags] 3] eq "out"} {
-			    set out 1
-			    set ($_:cable) [$_ itemcget $id -tags]
-			    break
-			}
-		    }
-		    if {$out == 1} {mode $_ cabledraw} else {
-			set clicked [cleansel $_ $clicked]
-			if {$clicked ne ""} {
-			    set c [lindex $clicked end]
-			    resize_modes $_ $x $y $c
-			    if {[llength [getsel $_]] <= 1} {updatesel $_ $c}
-			    inspect $_ $c
-			} else {
-			    mode $_ move_canvas
-			}
-		    }
-		}
-	    }
-	    
-	    proc resize_modes {_ x y id} {
-		variable ""
-		set d 3
-		set bbox [$_ bbox [$_ find withtag "i$id && box"]]
-		if {$bbox eq ""} {set bbox {0 0 0 0}}
-		lassign $bbox bx by bxx byy
-		set dx [expr {abs($bx - $x)}]
-		set dxx [expr {abs($bxx - $x)}]
-		set dy [expr {abs($by - $y)}]
-		set dyy [expr {abs($byy - $y)}]
-		if {$dx < $d && $dy < $d} {
-		    mode $_ resize_tl
-		} elseif {$dxx < $d && $dy < $d} {
-		    mode $_ resize_tr
-		} elseif {$dx < $d && $dyy < $d} {
-		    mode $_ resize_bl
-		} elseif {$dxx < $d && $dyy < $d} {
-		    mode $_ resize_br
-		} elseif {$dx < 5} {
-		    mode $_ resize_left
-		} elseif {$dxx < 5} {
-		    mode $_ resize_right
-		} elseif {$dy < 1} {
-		    mode $_ resize_top
-		} elseif {$dyy < 1} {
-		    mode $_ resize_bottom
-		} else {
-		    mode $_ move_object
-		}
-	    }
-
-	    proc mode {_ m} {
-		variable ""
-		array set cursor {pencil pencil move_canvas fleur move_object dotbox item_v box_spiral resize_canvas bogosity sel cross_reverse item_scale sizing resize_left left_side cabledraw circle resize_right right_side resize_top top_side resize_bottom bottom_side resize_tl top_left_corner resize_tr top_right_corner resize_bl bottom_left_corner resize_br bottom_right_corner}
-		set ($_:submode) $m
-		$_ configure -cursor $cursor($m)
-	    }
-	    proc mode_flip {_} {
-		variable ""
-		l $_ canvas mode
-		if {$mode eq "edit"} {set mode forward} {set mode edit}
-		up $_ canvas mode
-		redraw $_ {canvas grid}
-	    }
-
-	    proc drop {_ dropped x y} {
-		foreach d [split $dropped "\n"] {
-		    set x [tr $_ x i $x] 
-		    set y [tr $_ y i $y] 
-		    item_new $_ [dict create type sound id - g 1 v 1 x $x y $y xx $x yy $y filename [regsub -- {^file:[/]+} $d "/"]]
-		}
-	    }
-
-
-	    proc key {_ k b} {
-		#	puts $k
-		switch $b {
-		    1 {
-			switch $k {
-			    9 {mode_flip $_}
-			    22 {item_delete $_}
-			    38 {clip $_ selecta}
-			    53 {clip $_ cut}
-			    54 {clip $_ copy}
-			    55 {clip $_ paste}
-			    97 {viewpoint $_ {action reset}}
-			    98 {viewpoint $_ {action scroll units -1 axis y}}
-			    100 {viewpoint $_ {action scroll units -1 axis x}}
-			    102 {viewpoint $_ {action scroll units 1 axis x}}
-			    104 {viewpoint $_ {action scroll units 1 axis y}}
-			    107 {item_delete $_}
-			}
-		    }
-		}
-	    }
-	}
-    }
-
-    sel {
-	attributes {
-	    class selrect
-	    outline {255 255 0}
-	    fill {255 128 0}
-	    width 0
-	    stipple gray12
-	}
-	init {
-	    $_ create rect $xa $xb $ya $yb -tags $tags
-	    mode $_ sel
-	}
-	redraw {
-	    updatesel $_ [cleansel $_ [$_ find overlapping $xa $ya $xb $yb]]
-	    $_ coords $item $xa $ya $xb $yb
-	    $_ itemconfigure $item -fill [color $fill] -stipple $stipple -outline [color $outline] -width $width
-	}
-	methods {
-	    proc sel {_ a x y} {
-		update $_ sel abs [dict create xb $x yb $y] 1
-	    }
-
-	    proc getsel {_} {
-		return [set [l $_ canvas sel]]
-	    }
-
-	    proc cleansel {_ sel} {
-		set clean {}
-		foreach item $sel {
-		    set class [lindex [$_ itemcget $item -tags] 0]
-		    if {$class eq "item" || $class eq "cable"} {lappend clean [lindex [$_ itemcget $item -tags] 2]}}
-		set clean [lsort -unique $clean]
-		return $clean
-	    }
-
-	    proc togglesel {_ d} {
-		variable ""
-		if {[lsearch [getsel $_] $d] < 0} {
-		    set sel [concat [getsel $_] $d]
-		} else {
-		    set sel [lsearch -inline -not -all [getsel $_] $d]
-		}
-		up $_ canvas sel
-		redraw $_ $d
-	    }
-
-	    proc updatesel {_ sel} {
-		variable ""
-		set os [getsel $_]
-		up $_ canvas sel
-		redraw $_  [lsort -unique [concat $os $sel]]
-	    }
-
-	}
-    }
-
-    gridlines {
-	attributes {
-	    class gridlines
-	    stipple gray50
-	    xq 10 yq 10 xm 15 ym 15
-	}
-	redraw {
-	    foreach items $item {$_ delete $items}
-	    array set ta {x n y w}
-	    array set tj {x center y left}
-	    array set igx {y width x height}
-	    l $_ canvas xa xb ya yb
-	    foreach xy {x y} {
-		set range [expr abs($${xy}b - $${xy}a)]
-		set nSlices [expr $range / $${xy}q]
-		if {$nSlices > [set ${xy}m]} {set factor [expr int($nSlices / ($${xy}m + 0.0) + 1)]} else {
-		    set factor [expr 1. / (int(1./($nSlices / ($${xy}m + 0.0) + 0.0)) + 0.0)]
-		}
-		set increment [expr $${xy}q * $factor]
-		for {set x [expr int($${xy}a / ($increment + 0.0) + 1)*($increment + 0.0)]} {[expr $${xy}a > $${xy}b ? $x >=  $${xy}b : $x <=  $${xy}b]} {set x [expr $${xy}a > $${xy}b ? $x - $increment : $x + $increment]} {
-		    set og [tr $_ $xy t $x]
-		    set invgeo [winfo $igx($xy) $_]
-		    switch $xy {
-			y {set coords [concat 0 $og $invgeo $og]}
-			x {set coords [concat $og 0 $og $invgeo]}}
-		    $_ lower [$_ create text [lrange $coords 0 1] -font {{Bitstream Vera Sans} 8} -fill [rc] -anchor $ta($xy) -text [string range $x 0 7] -justify $tj($xy) -tags $atags]
-		    $_ lower [$_ create line $coords -fill $color -stipple $stipple -tags $atags]
-		}
-	    }
-	}
-    }
-    subwin {
-	tags {
-	    box subwin
-	}
-	attributes {
-	    x 32 y 24
-	    ins 1
-	    outs 1
-	}
-	init {
-	    $_ create rect 0 0 0 0 -tags [concat $tags box]
-	    new $_.$id
-	    $_ create window 0 0 -tags [concat $tags subwin] -window $_.$id -anchor nw
-	}
-	redraw {
-	    $_ coords $box [expr $x - 10] $y $xx $yy
-	    $_ coords $subwin $x $y
-	    set w [expr $xx - $x]
-	    set h [expr $yy - $y]
-	    if {[expr abs($w - [$_.$id cget -width]) >= 1 || abs($h - [$_.$id cget -height]) >= 1]} {
-		$_.$id configure -width $w -height $h
-	    }
-	    $_ itemconfigure $box -fill $color
-	}
-    }
-    kbd {
-	attributes {
-	    ins 1 outs 1
-	    x 60
-	    y 12
-	    octaves 5
-	    color {0 0 0}
-	    color_bg {255 255 255}
-	    lp -1
-	}
-	tags {box subwin}
-	init {
-	    $_ create rect 0 0 0 0 -tags [concat $tags box]
-	    set path [frame $_.$id]
-	    $_ create window 0 0 -tags [concat $tags subwin] -window $_.$id -anchor nw
-	    set bw {0 1 0 1 0 0 1 0 1 0 1 0} ; set npl {0 1 1 2 2 3 4 4 5 5 6 6}
-	    set keys [dict create 1 [dict create fg $color_bg bg $rgb rw 0.1 rh 0.6 an "-anchor n"] 0 [dict create fg $rgb bg $color_bg rw [expr 1 / 7.] rh 1. an "; lower \$wk"]]
-	    for {set o 0} {$o < $octaves} {incr o} {
-		set w $path.f$o ; frame $w -bd 0 -height 66 -width 66
-		for {set on 0} {$on < 12} {incr on} {
-		    set wk $w.[expr $o * 12 + $on] ; set n [lindex $bw $on]
-		    eval "label $wk -bg [color [dict get $keys $n bg]] -fg [color [dict get $keys $n bg]] -bd 1 -relief raised;place $wk -relx [expr [lindex $npl $on] / 7.] -y 0 -relwidth [dict get $keys $n rw] -relheight [dict get $keys $n rh] [dict get $keys $n an]"
-		    bind $wk <1> "::pd::kbd_play $_ $id 0 1 %X %Y"; bind $wk <B1-Motion> [bind $wk <1>];bind $wk <ButtonRelease-1> "::pd::kbd_play $_ $id 0 0 %X %Y"; bind $wk <Enter> "::pd::kbd_play $_ $id 1 0 %X %Y"; bind $wk <3> "::pd::kbd_play $_ $id 1 1 %X %Y"; bind $wk <B3-Motion> [bind $wk <3>]; bind $wk <2> "::pd::kbd_off $_ $id $octaves"
-		}
-		place $w -y 0 -relheight 1.0 -relx [expr $o / $octaves.0] -relwidth [expr 1 / $octaves.0]	  
-	    }
-	}
-	redraw {
-	    $_ coords $box [expr $x - 10] $y $xx $yy
-	    $_ itemconfigure $box -fill $color
-	    $_ coords $subwin $x $y
-	    set w [expr $xx - $x]
-	    set h [expr $yy - $y]
-	    if {[expr abs($w - [$_.$id cget -width]) >= 1 || abs($h - [$_.$id cget -height]) >= 1]} {
-		$_.$id configure -width $w -height $h
-	    }
-	}
-	methods {
-	    proc kbd_play {_ id m b x y} {
-		l $_ $id lp
-		foreach a {{rs {0 sunken 1 raised}} {v {0 0 1 {($y - [winfo rooty $w]) / ([winfo height $w] + 0.0)}}}} {array set [lindex $a 0] [lindex $a 1]}
-		set w [winfo containing $x $y]
-		if {$m != 1 && $lp != -1 && $lp ne $w} {kbd_action $_ $id $lp 0}
-		if {[$w cget -relief] eq $rs($b)} {kbd_action $_ $id $w [eval expr $v($b)]}
-		set lp $w
-		up $_ $id lp
-	    }
-
-	    proc kbd_action {_ id w v} {
-		if {$v == 0} {set relief raised} {set relief sunken}
-		$w config -relief $relief
-#		pd [concat $t.rp _cb [winfo name $w] $v \;]
-	    }
-
-	    proc kbd_off {_ id octaves} {
-		for {set o 0} {$o < $octaves} {incr o} {	
-		    for {set on 0} {$on < 12} {incr on} {
-			set w $_.$id.f$o.[expr $o * 12 + $on]
-			if {[$w cget -relief] eq "sunken"} {kbd_action $_ $id $w 0}}}}
-	}
-    }
-    
-    xy {
-	tags {
-	    box loc
-	}
-	attributes {
-	    x 10 y 10
-	    ins 1
-	    outs 1
-	}
-	init {
-	    $_ create rect 0 0 0 0 -tags [concat $tags box] -fill gray90
-	    $_ create rect 0 0 0 0 -tags [concat $tags loc] -fill red
-	}
-	redraw {
-	    $_ coords $box $x $y $xx $yy
-	    $_ coords $loc $x $y [expr $x + ($xx - $x) / 12.] [expr $y + ($yy - $y)/12.]
-	    $_ itemconfigure $box -outline $color
-	}
-    }
-
-    cable {
-	attributes {
-	    class cable
-	    x 0 y 0
-	    from ""
-	    to ""
-	    arrow last
-	    width 1
-	}
-	init {
-	    $_ create line 0 0 0 0 -tags $tags -fill green -arrow $arrow -width $width
-	}
-	redraw {
-	    if {[llength $from] == 2 } {
-		lassign [ioloc $_ [lindex $from 0] [lindex $from 1] outs] x y
-	    }
-	    if {[llength $to] == 2 } {
-		lassign [ioloc $_ [lindex $to 0] [lindex $to 1] ins] xx yy
-	    }
-	    $_ coords $item $x $y $xx $yy
-	}
-	control {
-	    
-	}
-	methods {
-	    proc cabledraw {_ a x y} {
-		variable ""
-		lassign $($_:cable) class iid id io ioid ionum cur
-		switch $a {
-		    first {
-			set ($_:cable:id) [item_new $_ [dict create type cable id - from [list $id $ionum]]]
-		    }
-		    motion {
-			update $_ $($_:cable:id) abs [dict create xx [tr $_ x i $x] yy [tr $_ y i $y]] 1
-		    }
-		    release {}
-		}
-	    }
-	}
-    }
-
-    io {
-	attributes {
-	    class io
-	    width 1
-	    height 0.3
-	    incolor {255 0 0}
-	    outcolor {0 0 255}
-	}
-	init {
-	    l $_ $id ins outs
-	    foreach io {in out} {
-		for {set i 0} {$i < [set ${io}s]} {incr i} {
-		    set port [$_ create rect $x $y $x $y -tags [concat $tags $io $io$i $i] -width 0 -fill [color [dict get $obj io attributes ${io}color]]]
-#		    $_ bind $port <1> "puts lolport"
-		}
-	    }
-	}
-	redraw {
-	    set w [tr $_ x id [dict get $obj io attributes width]]
-	    set h [tr $_ x id [dict get $obj io attributes height]]
-	    foreach io {in out} {
-		for {set i 0} {$i < [set ${io}s]} {incr i} {
-		    lassign [ioloc $_ $id $i ${io}s] x y
-		    $_ coords [$_ find withtag "$tags && $io$i"]  [expr $x - $w] [expr $y - $h] [expr $x + $w] [expr $y + $h]
-		}
-	    }
-	}
-	methods {
-	    proc ioloc {_ id n io} {
-		variable ""
-		foreach c {x xx y yy} {
-		    set $c [tr $_ [string range $c 0 0] t [dict get $($_) $id $c]]}
-		if {$io eq "ins"} {set py $y} {set py $yy}
-		set px [expr ($n / ([dict get $($_) $id $io] + 0.0)) * ($xx - $x + 0.0) + $x]
-		return [list $px $py]
-	    }
-	}
-    }
-
-    button {
-	tags {box button}
-	attributes {x 3 y 3 ins 1 outs 1}
-	init {
-	    $_ create rect 0 0 0 0 -tags [concat $tags box] -width 0
-	    $_ create oval 0 0 0 0 -tags [concat $tags button]
-	}
-	redraw {
-	    $_ itemconfigure $box -fill $color -width $selected -outline [color $rgb]
-	    $_ coords $box $x $y $xx $yy
-	    $_ coords $button $x $y $xx $yy
-	}
-	methods {
-	    proc button:flash {} {
-		
-	    }
-	}
-    }
-
-     msg {
-	tags {
-	    box txt
-	}
-	attributes {
-	    x 2 y 2
-	    ins 1
-	    outs 1
-	    msg msg
-	}
-	init {
-	    $_ create polygon 0 0 0 0 -tags [concat $tags box]
-	    $_ create text 0 0 -tags [concat $tags txt] -fill white -anchor nw -justify left
-	}
-	redraw {
-	    $_ coords $txt $x $y
-	    $_ itemconfigure $box -fill $color	  
-	    $_ itemconfigure $txt -font [list {bitstream vera sans} [expr int($sy)]] -text $msg
-	    lassign [$_ bbox $txt] x y xx yy
-	    set flare [expr $xx + ($xx - $x) / 12.]
-	    $_ coords $box $x $y $flare $y $xx [expr $y + ($yy - $y)/2.] $flare $yy $x $yy 
-#	    foreach z {x xx y yy} {set $z [tr $_ [string range $z 0 0] i [set $z]]}
-#	    up $_ $id x y xx yy
-	}
-	 methods {
-	     proc msg_updatetext {_} {
-		 
-	     }
-	 }
-    }
-
-    slider {
-	tags {
-	    pos box
-	}
-	attributes {
-	    x 2 y 10
-	    min 1
-	    v 48
-	    max 69
-	    ins 1
-	    outs 1
-	}
-	init {
-	    $_ create rect 0 0 0 0 -tags [concat $tags box] -fill $color
-	    $_ create rect 0 0 0 0 -tags [concat $tags pos] -fill green -width 0
-	}
-	redraw {
-	    $_ coords $box $x $y $xx $yy
-	    if {[expr ($xx - $x) > ($yy - $y)]} {set orient h} {set orient v}
-	    set v [expr ($v - $min + 0.) / ($max - $min + 0.)]
-	    switch $orient {
-		v {
-		    set loc [expr $y + ($yy - $y) * $v]
-		    set coords [concat $x $loc $xx $loc]
-		}
-		h {
-		    set loc [expr $x + ($xx - $x) * $v]
-		    set coords [concat $loc $y $loc $yy]
-		}
-	    }
-	    $_ coords $pos $coords
-	}
-	control {
-	    Button-1 {
-	        update $_ $id rel [dict create v [expr {($x - $($_:cx)) / 100.0 * ($max - $min + 0.)}]] 1
-	    }
-	}
-    }
-
-    sound {
-	tags {
-	    tl tlr tf tfr r w
-	}
-	attributes {
-	    ins 0
-	    outs 0
-	}
-	init {
-	    snack::sound s$id
-	    set filename [dict get $($_) $id filename]
-	    s$id read $filename
-	    $_ create path [::tkpath::coords rect 0 0 0 0 -rx 3 -ry 3] -tags [concat $tags r] -strokewidth 0 -fill $color -fillopacity 0.08
-	    $_ create waveform 0 0 -tags [concat $tags w] -sound s$id -fill white
-	    set length [expr [s$id length] / ($($_:samplerate) + 0.0) * 1000]
-	    update $_ $id abs [dict create xx [expr [dict get $($_) $id x] + $length]] 0
-	    $_ create text 0 0 -tags [concat $tags tl] -font {{bitstream vera sans} 8} -fill HotPink -anchor nw -justify left -text "[string range $length 0 10] s"
-	    $_ create rectangle 0 0 0 0 -tags [concat $tags tlr] -fill LightGreen -width 0
-	    $_ raise $tl
-	    $_ create text 0 0 -tags [concat $tags tf] -font {{bitstream vera sans} 8} -fill NavyBlue -anchor ne -justify right -text $filename
-	    $_ create rectangle 0 0 0 0 -tags [concat $tags tfr] -fill gray90 -width 0
-	    $_ raise $tf
-	}
-	redraw {
-	    set ro 6
-	    $_ coords $r [::tkpath::coords rect $x $y $sx $sy -rx $ro -ry $ro]
-	    $_ itemconfigure $r -fillopacity [dict get $($_) $id v] -fill $color
-	    $_ coords $w $x $y
-	    $_ itemconfigure $w -width $sx -height [expr int($sy)]
-	    $_ coords $tl [expr $x + 4] [expr $y + 4]
-	    $_ coords $tlr [$_ bbox $tl]
-	    $_ coords $tf [expr $x + $sx] [expr $y + 4]
-	    $_ coords $tfr [$_ bbox $tf]
-	}
-    }
-
-}
diff --git a/extensions/gui/ix/toxy/dd-demo.pd b/extensions/gui/ix/toxy/dd-demo.pd
deleted file mode 100644
index fb59154fd..000000000
--- a/extensions/gui/ix/toxy/dd-demo.pd
+++ /dev/null
@@ -1,33 +0,0 @@
-#N canvas 170 459 559 300 12;
-#X obj 11 9 widget dd dt -bg black -width 38 -fg orange;
-#X obj 9 99 dac~;
-#X obj 10 77 *~ 0.3;
-#X obj 52 77 *~ 0.3;
-#X msg 11 33 open \$1 \, 1;
-#X obj 11 55 readsf~ 2;
-#X obj 290 33 widget dd df -bg purple -fg white -width 11;
-#X obj 99 65 widget dd dl2 -bg green -fg purple -width 22;
-#X symbolatom 93 96 30 0 0 0 - - -;
-#X obj 114 110 print;
-#X text 98 50 drop some files here..;
-#X obj 3 184 widget dd d12;
-#X msg 4 162 list la la la la;
-#X floatatom 326 82 5 0 0 0 - - -;
-#X msg 372 88 -width \$1;
-#X obj 344 114 tow . dd df;
-#X text 329 10 < drag amongst widgets;
-#X msg 273 96 clear;
-#X obj 169 137 widget q q -width 64 -height 12 -bg gray90 -fg blue
-;
-#X connect 0 0 4 0;
-#X connect 2 0 1 0;
-#X connect 3 0 1 1;
-#X connect 4 0 5 0;
-#X connect 5 0 2 0;
-#X connect 5 1 3 0;
-#X connect 7 0 8 0;
-#X connect 7 0 9 0;
-#X connect 7 0 18 0;
-#X connect 12 0 11 0;
-#X connect 13 0 14 0;
-#X connect 14 0 15 0;
diff --git a/extensions/gui/ix/toxy/dd.wid b/extensions/gui/ix/toxy/dd.wid
deleted file mode 100755
index b82252ac2..000000000
--- a/extensions/gui/ix/toxy/dd.wid
+++ /dev/null
@@ -1,32 +0,0 @@
-namespace eval ::ix {
-proc dd {path target symbol args} {
-    set sym [join [lrange $args 0 end] " "]
-    $path delete 0 end
-    $path insert 0 $sym
-    ddp $target $symbol $sym
-}
-proc ddp {target symbol stuff} {
-    if {$symbol == 1} {
-      pd "$target.rp _cb symbol [pdtk_enquote $stuff];"
-    } else {
-	pd "$target.rp _cb $stuff;"
-    }
-}
-}
-#> dd entry
-#. -selectforeground black -selectbackground green
-#. -bg blue -font .(helvetica 10.) -width 24 -borderwidth 0
-#. #symbol 1
-#. @bang ::ix::ddp .| .#symbol [.- get]
-#. @list ::ix::dd .- .| 0 .#args
-#. @symbol ::ix::dd .- .| 1 .#1
-#. @clear .- delete 0 end
-package require tkdnd
-puts "dd .- .|"
-bind .- <ButtonPress-1> {focus .-}
-dnd bindtarget .- text/uri-list <Drop> {foreach i %D {::ix::dd .- .| .#symbol [regsub -- "^file://" $i ""]}}
-dnd bindtarget .- text/plain <Drop> {::ix::dd .- .| .#symbol %D}
-dnd bindsource .- text/plain {return [.- get]}
-dnd bindsource .- text/uri-list {return "\{[.- get]\}"}
-bind .- <Button1-Leave> {dnd drag %W}
-bind .- <Return> {::ix::ddp .| .#symbol [.- get]}
diff --git a/extensions/gui/ix/toxy/dm-demo.pd b/extensions/gui/ix/toxy/dm-demo.pd
deleted file mode 100644
index b128e211d..000000000
--- a/extensions/gui/ix/toxy/dm-demo.pd
+++ /dev/null
@@ -1,32 +0,0 @@
-#N canvas 45 442 370 233 10;
-#X msg 190 127 clear;
-#X symbolatom 187 203 10 0 0 0 - - -;
-#X obj 187 155 widget dm dm1 #items .( zero one two three four five
-six seven eight nine ten eleven twelve thirteen i14 i15 i16 i17 i18
-i19 i20 i21 i22 i23 i24 i25 i26 i27 i28 i29 i30.) #arrows 0;
-#X obj 140 17 widget dm dm1 #items .(0 1 2 3 4 5 6 7 8 9 10 11 12.)
--bg gray;
-#X obj 187 185 l2s;
-#X obj 56 119 l2s;
-#X msg 56 76 zero one two three four five six seven eight nine ten
-eleven twelve thirteen i14 i15 i16 i17 i18 i19 i20 i21 i22 i23 i24
-i25 i26 i27 i28 i29 i30;
-#X msg 4 60 list ichi ni san chi;
-#X msg 56 136 #items .( \$1.);
-#X msg 92 25 5;
-#X msg 89 8 12;
-#X msg 259 138 #arrows \$1;
-#X obj 258 122 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X connect 0 0 2 0;
-#X connect 2 0 4 0;
-#X connect 3 0 2 0;
-#X connect 4 0 1 0;
-#X connect 5 0 8 0;
-#X connect 6 0 5 0;
-#X connect 7 0 2 0;
-#X connect 8 0 2 0;
-#X connect 9 0 3 0;
-#X connect 10 0 3 0;
-#X connect 11 0 2 0;
-#X connect 12 0 11 0;
diff --git a/extensions/gui/ix/toxy/dm.wid b/extensions/gui/ix/toxy/dm.wid
deleted file mode 100755
index 389e31bb5..000000000
--- a/extensions/gui/ix/toxy/dm.wid
+++ /dev/null
@@ -1,84 +0,0 @@
-#console show
-namespace eval ::ix {
-    variable _
-    proc spin_resize {w} {
-#	update
-	$w config -height [winfo height $w] -width [winfo width $w]
-    }
-    proc spin {c w t bg fg font items arrows} {
-	if {[winfo exists $w.m] != 1} {
-	    variable _
-	    set _($t:p) 0
-	    array set arrow "up \u25b2 dn \u25bc"; array set anchor "up n dn s"
-	    menubutton $w.m -menu $w.m.m -textvariable _($t:t) -relief raised \
-		-bg $bg -fg $fg -font $font -padx 0 -pady 0
-	    menu $w.m.m -bd 0 -bg $bg -fg $fg; pack $w.m -side left -fill y
-	    if {$arrows == 1} {
-		foreach i {up dn} {
-		    button $w.$i -padx 0 -pady 0 -text $arrow($i) \
-			-command "::ix::spinclick $w $t $i" \
-			-bd 0 -bg $bg -fg $fg -font {Times 6}
-		    pack $w.$i -anchor $anchor($i)
-		}
-	    }
-	    spin_resize $w
-	    foreach item $items {spinitem $w $t $item}
-	    $w.m.m activate 0; $w.m.m invoke 0
-	}
-    }
-    proc spinitem {w t item} {
-	variable _
-	set len [$w.m.m index end];
-	if {$len ne "none"} {set n [expr $len + 1]} else {set n 0}
-	$w.m.m add radiobutton -selectcolor green -font {Tahoma 8} -label $item -variable _($t:t) -command "::ix::spinout $w $t $n"
-	set wider [string length $item]; set wide [$w.m cget -width]
-	if {$wide < $wider && $wider <= 31 } {
-	    $w.m configure -width $wider
-	    spin_resize $w
-	}
-	$w.m.m activate $n
-    }
-    proc spinout {w t i} {
-	set sym [$w.m.m entrycget $i -label]
-	pd [concat $t.rp _cb $sym \;]
-	$w.m.m activate $i
-    }
-    proc spinclick {w t d} {
-	variable _
-	array set shift "up -1 dn 1"
-	set len [$w.m.m index end];
-	set pos $_($t:p)
-	if {$pos != "none"} {
-	    incr pos $shift($d)
-	    if {$pos > $len} {set pos 0}
-	    if {$pos < 0} {set pos $len}
-	    $w.m.m activate $pos
-	    $w.m.m invoke $pos
-	}
-	set _($t:p) $pos
-    }
-    proc spinclear {w} {
-	$w.m.m delete 0 end
-	$w.m configure -width 0
-    }
-}
-#> dm frame
-#. -bg green -padx 4 -pady 4 -height 40 -width 86 #arrows 1
-#. #bg black #fg "#8888ff" #items {} #font {Tahoma 10}
-#. @list foreach x [list .#args] {::ix::spinitem .- .| $x}
-#. @symbol ::ix::spinitem .- .| {.#1}
-#. @float .-.m.m invoke .#1 .: set ::ix::_(.|:p) .#1
-#. @clear ::ix::spinclear .-
-puts "dm .- .|"
-::ix::spin .^ .- .| .#bg .#fg .#font .#items .#arrows
-bind .- <Enter> {focus .-}
-bind .- <Leave> {focus .^.c}
-bind .- <<spin-dn>> {::ix::spinclick .- .| dn}
-bind .- <<spin-up>> {::ix::spinclick .- .| up}
-event add <<spin-dn>> <Key-space> <Key-Down> <Key-Right>
-event add <<spin-up>> <Key-Up> <Key-Left>
-foreach el {.- .-.m} {
-    bind $el <MouseWheel> {if {%D > 0} {::ix::spinclick .- .| up} else {::ix::spinclick .- .| dn}}
-    bind $el <Button-4> {::ix::spinclick .- .| up}
-    bind $el <Button-5> {::ix::spinclick .- .| dn}
-}
diff --git a/extensions/gui/ix/toxy/filter-demo.pd b/extensions/gui/ix/toxy/filter-demo.pd
deleted file mode 100644
index c98ec4073..000000000
--- a/extensions/gui/ix/toxy/filter-demo.pd
+++ /dev/null
@@ -1,72 +0,0 @@
-#N canvas 218 245 450 232 10;
-#X obj 51 67 widget filter f1 #div 8 #log 6.53061 #rate 44100 #n 5
-;
-#X msg 11 42 redefine;
-#X obj 185 259 biquad~;
-#X obj 223 259 biquad~;
-#X obj 261 259 biquad~;
-#X obj 298 259 biquad~;
-#X obj 336 259 biquad~;
-#X obj 52 276 multiplex~ 0 99 23 44 88 22;
-#X msg 35 18 #log \$1;
-#X obj 23 7 hsl 50 10 5 10 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X msg 41 -10 10;
-#X msg 20 -10 0;
-#X floatatom 80 29 3 1 5 0 - - -;
-#X obj 189 278 biquad~;
-#X obj 225 278 biquad~;
-#X obj 263 278 biquad~;
-#X obj 300 278 biquad~;
-#X obj 337 278 biquad~;
-#X obj 52 293 multiplex~ 0 99 23 44 88 22;
-#X obj 51 225 route n params;
-#X msg 80 43 #n \$1;
-#X obj 206 242 route 1 2 3 4 5;
-#X obj 184 242 adc~;
-#X obj 52 310 dac~;
-#X connect 0 0 19 0;
-#X connect 1 0 0 0;
-#X connect 2 0 3 0;
-#X connect 2 0 7 1;
-#X connect 3 0 4 0;
-#X connect 3 0 7 2;
-#X connect 4 0 5 0;
-#X connect 4 0 7 3;
-#X connect 5 0 6 0;
-#X connect 5 0 7 4;
-#X connect 6 0 7 5;
-#X connect 7 0 23 0;
-#X connect 8 0 0 0;
-#X connect 9 0 8 0;
-#X connect 10 0 9 0;
-#X connect 11 0 8 0;
-#X connect 12 0 20 0;
-#X connect 13 0 14 0;
-#X connect 13 0 18 1;
-#X connect 14 0 15 0;
-#X connect 14 0 18 2;
-#X connect 15 0 16 0;
-#X connect 15 0 18 3;
-#X connect 16 0 17 0;
-#X connect 16 0 18 4;
-#X connect 17 0 18 5;
-#X connect 18 0 23 1;
-#X connect 19 0 7 0;
-#X connect 19 0 18 0;
-#X connect 19 1 21 0;
-#X connect 20 0 0 0;
-#X connect 21 0 2 0;
-#X connect 21 0 13 0;
-#X connect 21 1 3 0;
-#X connect 21 1 14 0;
-#X connect 21 2 4 0;
-#X connect 21 2 15 0;
-#X connect 21 3 5 0;
-#X connect 21 3 16 0;
-#X connect 21 4 6 0;
-#X connect 21 4 17 0;
-#X connect 22 0 7 0;
-#X connect 22 0 2 0;
-#X connect 22 1 18 0;
-#X connect 22 1 13 0;
diff --git a/extensions/gui/ix/toxy/filter.wid b/extensions/gui/ix/toxy/filter.wid
deleted file mode 100755
index b05c938a9..000000000
--- a/extensions/gui/ix/toxy/filter.wid
+++ /dev/null
@@ -1,286 +0,0 @@
-namespace eval ::ix {
-    proc random_int {} {
-	return [expr "int(floor(rand()*16))"]
-    }
-    proc random_clr {} {
-        return [format "\#%1X%1X%1X%1X%1X%1X" [random_int] [random_int] [random_int] [random_int] [random_int] [random_int]]
-    }
-    variable _
-    proc filter_update {path target n} {
-	set type [$path.filter itemcget type_$n -text]
-	set q [$path.filter itemcget q_$n -text]
-	set loc [$path.filter coords sqr_$n]
-	set x [expr 5 + [lindex $loc 0]]
-	set y [expr 5 + [lindex $loc 1]]
-	set inv [filter_invtr $path $target $x $y]
-	set freq [lindex $inv 0]
-	set mag [lindex $inv 1]
-	filter_bqp $path $target $n $type $freq $mag $q
-    }
-    proc filter_bqp {path target n type f0 dBgain Q} {
-	variable _
-	set A [expr pow(10,($dBgain/40.0))]
-	set Fs $_($target:rate)
-	set pi [expr {atan(1) * 4}]
-	set w0 [expr 2 * $pi * $f0 / $Fs]
-	set alpha [expr sin($w0) / (2 * $Q)]
-	switch $type {
-	    notch {
-		set b0 1
-		set b1 [expr -2 * cos($w0)]
-		set b2 1
-		set a0 [expr 1 + $alpha]
-		set a1 $b1
-		set a2 [expr 1 - $alpha]
-	    }
-	    lowpass {
-		set b0 [expr (1 - cos($w0))/2]
-		set b1 [expr 1 - cos($w0)]
-		set b2 $b0
-		set a0 [expr 1 + $alpha]
-		set a1 [expr -2 * cos($w0)]
-		set a2 [expr 1 - $alpha]
-	    }
-	    highpass {
-		set b0 [expr (1 + cos($w0))/2]
-		set b1 [expr -(1 + cos($w0))]
-		set b2 $b0
-		set a0 [expr 1 + $alpha]
-		set a1 [expr -2 * cos($w0)]
-		set a2 [expr 1 - $alpha]
-	    }
-	    qbandpass {
-		set b0 [expr sin($w0)/2]
-		set b1 0
-		set b2 [expr -$b0]
-		set a0 [expr 1 + $alpha]
-		set a1 [expr -2 * cos($w0)]
-		set a2 [expr 1 - $alpha]
-	    }
-	    bandpass {
-		set b0 $alpha
-		set b1 0
-		set b2 [expr -$alpha]
-		set a0 [expr 1 + $alpha]
-		set a1 [expr -2 * cos($w0)]
-		set a2 [expr 1 - $alpha]
-	    }
-	    allpass {
-		set b0 [expr 1 - $alpha]
-		set b1 [expr -2 * cos($w0)]
-		set b2 [expr 1 + $alpha]
-		set a0 $b2
-		set a1 $b1
-		set a2 $b0
-	    }
-	    peakingEQ {
-		set b0 [expr 1 + $alpha * $A]
-		set b1 [expr -2 * cos($w0)]
-		set b2 [expr 1 - $alpha * $A]
-		set a0 [expr 1 + $alpha / $A]
-		set a1 $b1
-		set a2 [expr 1 - $alpha / $A]
-	    }
-	    lowShelf {
-		set b0 [expr   $A*(($A+1)-($A-1)*cos($w0)+2*sqrt($A)*$alpha)]
-		set b1 [expr 2*$A*(($A-1)-($A+1)*cos($w0))]
-		set b2 [expr   $A*(($A+1)-($A-1)*cos($w0)-2*sqrt($A)*$alpha)]
-		set a0 [expr       ($A+1)+($A-1)*cos($w0)+2*sqrt($A)*$alpha]
-		set a1 [expr   -2*(($A-1)+($A+1)*cos($w0))]
-		set a2 [expr       ($A+1)+($A-1)*cos($w0) - 2*sqrt($A)*$alpha ]
-	    }
-	    highShelf {
-		set b0 [expr    $A*(($A+1)+($A-1)*cos($w0)+2*sqrt($A)*$alpha)]
-		set b1 [expr -2*$A*(($A-1)+($A+1)*cos($w0))]
-		set b2 [expr    $A*(($A+1)+($A-1)*cos($w0)-2*sqrt($A)*$alpha)]
-		set a0 [expr        ($A+1)-($A-1)*cos($w0)+2*sqrt($A)*$alpha]
-		set a1 [expr     2*(($A-1)-($A+1)*cos($w0))]
-		set a2 [expr        ($A+1)-($A-1)*cos($w0) - 2*sqrt($A)*$alpha ]
-	    }
-	}
-	set f 0
-	set fr {}
-	set _($target:fmag_$n) {1}
-	set h [winfo height $path.filter]
-	set h2 [expr $h / 2]
-	while {$f < [winfo width $path.filter]} {
-	    incr f
-	    set w [expr $pi * [filter_invtr_x $path $target $f] / $_($target:nyquist)]
-	    set mag [expr sqrt(pow(($b0+$b1*cos($w)+$b2*cos(2*$w)),2)+pow(($b1*sin($w)+$b2*sin(2*$w)),2))/sqrt(pow(($a0+$a1*cos($w)+$a2*cos(2*$w)),2)+pow(($a1*sin($w)+$a2*sin(2*$w)),2))]
-	    lappend fr $f [expr $h - $h2 * $mag]
-	    lappend _($target:fmag_$n) $mag
-	}
-	$path.filter coords resp_$n $fr
-	pd [concat $target.rp _cb params $n [expr -1 * $a1 / $a0] [expr -1 * $a2 / $a0] [expr $b0 / $a0] [expr $b1 / $a0] [expr $b2 / $a0] \;]
-	filter_resp $path $target
-    }
-    proc filter_resp {path target} {
-	variable _
-	if {$_($target:init) == 1} {
-	    set f 0
-	    set fr {}
-	    set h [winfo height $path.filter]
-	    set h2 [expr $h / 2]
-	    while {$f < [winfo width $path.filter]} {
-		incr f
-		set cx 0
-		set ci 1
-		while {$cx < $_($target:n)} {
-		    incr cx
-		    set ci [expr $ci * [lindex $_($target:fmag_$cx) $f]]
-		}
-		lappend fr $f [expr $h - $h2 * $ci]
-	    }
-	    $path.filter coords resp $fr
-	}
-    }
-    proc filter_motion {path target x y} {
-	set v [filter_invtr $path $target $x $y]
-	$path itemconfigure freq -text "[expr int([lindex $v 0])] hz"
-# 	$path itemconfigure dB -text "[expr int([lindex $v 1])] dB"
-    }
-    proc filter_invtr {path target x y} {
-	return [list [filter_invtr_x $path $target $x] [filter_invtr_y $path $target $y]]
-    }
-    proc filter_invtr_x {path target x} {
-	variable _
-	set gw [winfo width $path]
-	if {$_($target:log) > 0} {
-	    return [expr $_($target:scale) * exp($_($target:log) * $x / $gw.0)]
-	} else {
-	    return freq [expr $_($target:nyquist) * $x / $gw.0]
-	}
-    }
-    proc filter_invtr_y {path target y} {
-	set gh [winfo height $path]
-	return [expr (12 * ($y / $gh.0 - 0.5) * - 1.0)]
-    }
-    proc filter_new {path target w h bg div log rate n} {
-	variable _
-	set _($target:init) 0
-	set _($target:n) $n
-	set _($target:log) $log
-	set _($target:rate) $rate
-	set _($target:nyquist) [expr $rate / 2]
-	set _($target:scale) [expr $_($target:nyquist) / exp($_($target:log))]
-	if {[winfo exists $path.filter] != 1} {
-	    canvas $path.filter -bg $bg -width $w -height $h
-	    pack $path.filter -side left
-	    bind $path.filter <Motion> "::ix::filter_motion %W $target %x %y"
-#	    bind $path.filter <ButtonRelease> "::ix::filter_resp $path $target"
-	    bind $path.filter <Leave> {
-		%W itemconfigure freq -text ""
-		%W itemconfigure dB -text ""
-	    }
-	    bind $path.filter <1> "::ix::filter_click $path $target %x %y"
-	    bind $path.filter <B1-Motion> [bind $path.filter <1>]
-	    filter_gridlines $path $target $div
-	    filter_filters $path $target $n
-	    $path.filter create text 2 1 -tags freq -text "" -anchor nw -justify left -font {{Bitstream Vera Sans} 9}
-#	    $path.filter create text 96 1 -tags dB -text "" -anchor ne -justify right -font {{Bitstream Vera Sans} 9}
-	    $path.filter create line 0 0 0 0 -tags resp -fill grey44 -width 1.6
-	    set fn 0 
-	    while {$fn < $n} {
-		incr fn	 
-		foreach a [list sqr_$fn type_$fn q_$fn] {$path.filter raise $a}
-	    }
-	    set bd [expr {[$path cget -bd] * 2}]
-	    $path configure -bg $bg -width [expr [winfo width $path.filter] + $bd] -height [expr [winfo height $path.filter] + $bd]
-	}
-	pd "$target.rp _cb n $n;"
-	set _($target:init) 1
-    }
-    proc filter_filters {path target n} {
-	set gh [winfo height $path.filter]
-	set gw [winfo width $path.filter]
-	set fn 0 
-	while {$fn < $n} {
-	    incr fn
-	    set px [expr $gw.0 * $fn.0 / $n.0]
-	    set py [expr $gh.0 / 2.0]
-	    set fill [random_clr]
-	    $path.filter create rectangle 0 0 0 0 -tags sqr_$fn -fill $fill
-	    $path.filter create line 0 0 0 0 -tags resp_$fn -fill $fill
-	    $path.filter create text 0 0 -tags type_$fn -fill grey33 -font {{Bitstream Vera Sans} 8} -text "peakingEQ" -anchor e -justify right
-	    $path.filter create text 0 0 -tags q_$fn -fill white -font {{Bitstream Vera Sans} 8} -text "1.0" -anchor w -justify left
-	    set b1 "::ix::filter_move $path $target $fn %x %y"
-	    set b2 "::ix::filter_menu $path $target $fn %X %Y"
-	    set b3 "::ix::filter_move_q $path $target $fn %x %y"
-	    set b4 "::ix::filter_locus $path $target $fn %x %y"
-	    foreach a [list sqr_$fn type_$fn q_$fn] {
-		$path.filter bind $a <1> $b1
-		$path.filter bind $a <2> $b2
-		$path.filter bind $a <3> $b4
-		$path.filter bind $a <B3-Motion> $b3
-		$path.filter bind $a <B1-Motion> $b1
-	    }
-	    filter_move $path $target $fn $px $py
-	}	
-    }
-    proc filter_menu {path target n x y} {
-	if {[winfo exists $path.ft] == 1} { destroy $path.ft}
-	set m [menu $path.ft -tearoff no]
-	foreach ft {lowpass highpass qbandpass bandpass notch allpass peakingEQ lowShelf highShelf} {
-	    $m add command -label $ft -command "::ix::filter_type $path $target $n $ft"
-	}
-	tk_popup $path.ft $x $y
-    }
-    proc filter_type {path target n type} {
-	$path.filter itemconfigure type_$n -text "$type"
-	filter_update $path $target $n
-    }
-    proc filter_click {path target x y} {
-	variable _
-	filter_move $path $target $_($target:recent) $x $y
-    }
-    proc filter_move {path target n px py} {
-	variable _
-	$path.filter coords sqr_$n [expr $px - 5] [expr $py - 5] [expr $px + 5] [expr $py + 5]	
-	$path.filter coords type_$n [expr $px - 9] [expr $py]
-	$path.filter coords q_$n [expr $px + 9] [expr $py]
-	filter_motion $path.filter $target $px $py
-	set _($target:recent) $n
-	filter_update $path $target $n
-    }
-    proc filter_locus {path target n px py} {
-	variable _
-	set _($target:lx) $px
-    }
-    proc filter_move_q {path target n px py} {
-	variable _
-	set delta [expr ($px.0 - $_($target:lx).0) / 25]
-	set move [expr [$path.filter itemcget q_$n -text] + $delta]
-	if {$move > 0} {
-	    $path.filter itemconfigure q_$n -text $move
-	}
-	filter_update $path $target $n
-	set _($target:lx) $px
-    }
-    proc filter_gridlines {path target lines} {
-	variable _
-	puts "gridlines"
-	set color white
-	set w $path.filter
-	$w delete gridlines
-	set gh [winfo height $w]
-	set gw [winfo width $w]
-	for {set x 1} {$x <= $lines} {incr x} {
-	    if {$lines < 16 && $lines > 0} {
-		set oh [expr $gh.0 * $x.0 / $lines.0]
-		set ow [expr $gw.0 * $x.0 / $lines.0]
-	      	$w create line $ow 0 $ow $gh -fill $color -tags gridlines
-	      	$w create line 0 $oh $gw $oh -fill $color -tags gridlines
-		set fontsize [expr int(80.0/$lines.0)]
-		$w create text $ow [expr $gh - $fontsize] -font [list {Bitstream Vera Sans} $fontsize] -tags gridlines -text [expr int([filter_invtr_x $path $target $ow])]
-	    }
-	}
-	$w raise ${target}sqr
-    }
-}
-#> filter frame
-#. -bd 3 #w 384 #h 144 #bg gray90 #div 6 #n 3
-#. #log 1 #rate 44100
-#. @div  ::ix::filter_gridlines .- .| .#1
-#. @params ::ix::filter_lp .- .| .#args
-puts "filter .- .|"
-::ix::filter_new .- .| .#w .#h .#bg .#div .#log .#rate .#n
diff --git a/extensions/gui/ix/toxy/grid-demo.pd b/extensions/gui/ix/toxy/grid-demo.pd
deleted file mode 100644
index 24a2dc66f..000000000
--- a/extensions/gui/ix/toxy/grid-demo.pd
+++ /dev/null
@@ -1,69 +0,0 @@
-#N canvas 361 266 709 441 12;
-#X obj 88 210 pack 0 0;
-#X floatatom 151 352 7 0 0 0 - - -;
-#X floatatom 200 351 7 0 0 0 - - -;
-#X obj 151 331 unpack;
-#X obj 151 228 widget grid g5a #bg white #fg purple #div 5 #shape rectangle
-#w 95 #h 95 #ln pink #x 0.889764 #size 56 -width 55 -height 55;
-#X obj 270 184 widget grid g3;
-#X obj 402 154 widget grid g4 #fg orange #bg black #w 264 #h 159 #div
-0;
-#X obj 269 53 widget grid gg #shape oval #bg orange #fg pink #ln white
-#div 2 #size 67;
-#X obj 136 53 widget grid bllldie #bg red #fg white #ln gray #shape
-arc #size 44 #div 22;
-#X floatatom 131 12 5 0 0 0 - - -;
-#X msg 131 30 #div \$1;
-#X msg 269 31 #size \$1;
-#X floatatom 269 13 5 0 0 0 - - -;
-#X floatatom 403 110 5 0 0 0 - - -;
-#X msg 403 129 #w \$1;
-#X floatatom 442 110 5 0 0 0 - - -;
-#X msg 442 129 #h \$1;
-#X obj 66 174 random 100;
-#X obj 43 133 t b b;
-#X obj 29 157 random 100;
-#X obj 44 198 * 0.01;
-#X obj 43 97 bng 33 250 50 0 empty empty empty 0 -6 0 8 -225271 -1
--1;
-#X obj 135 186 / 100;
-#X text 426 25 #w #h #bg #fg #ln #div #shape #size;
-#X obj 530 81 tot .;
-#X msg 529 57 tot console show;
-#X obj 199 370 * 200;
-#X obj 339 315 widget grid g3902 #bg green #fg gray #ln yellow #div
-3 #w 97 #h 97;
-#X obj 456 376 widget grid #bg #fg gray #w 32 #h 32;
-#X obj 149 395 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 0.66 256;
-#X obj 35 71 metro 333;
-#X obj 40 46 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X connect 0 0 4 0;
-#X connect 2 0 26 0;
-#X connect 3 0 1 0;
-#X connect 3 0 29 0;
-#X connect 3 1 2 0;
-#X connect 4 0 3 0;
-#X connect 5 0 8 0;
-#X connect 6 0 5 0;
-#X connect 7 0 5 0;
-#X connect 9 0 10 0;
-#X connect 10 0 8 0;
-#X connect 11 0 7 0;
-#X connect 12 0 11 0;
-#X connect 13 0 14 0;
-#X connect 14 0 6 0;
-#X connect 15 0 16 0;
-#X connect 16 0 6 0;
-#X connect 17 0 22 0;
-#X connect 18 0 19 0;
-#X connect 18 1 17 0;
-#X connect 19 0 20 0;
-#X connect 20 0 0 0;
-#X connect 21 0 18 0;
-#X connect 22 0 0 1;
-#X connect 25 0 24 0;
-#X connect 30 0 21 0;
-#X connect 31 0 30 0;
-#X coords 0 0 1 1 200 140 1;
diff --git a/extensions/gui/ix/toxy/grid.wid b/extensions/gui/ix/toxy/grid.wid
deleted file mode 100755
index 1d177ad88..000000000
--- a/extensions/gui/ix/toxy/grid.wid
+++ /dev/null
@@ -1,46 +0,0 @@
-namespace eval ::ix {
-    proc grid_click {w target r hy hx hh ww size} {
-	switch $r {
-	    0 { set y [expr $hy / $hh.0]
-		set x [expr $hx / $ww.0]}
-	    1 { set x $hx
-		set y $hy
-		set hx [expr $ww * $hx]
-		set hy [expr $hh * $hy]}}
-	set rs [expr $size / 2]
-	$w coords ${target}sqr [expr $hx - $rs] [expr $hy - $rs] [expr $hx + $rs] [expr $hy + $rs]
-	pd "$target.rp _cb $x $y;"
-    }
-    proc grid_new {path target w h bg fg ln div shape size} {
-	if {[winfo exists $path.grid] != 1} {
-	    canvas $path.grid -bg $bg
-	    $path configure -width $w -height $h
-	    place $path.grid -anchor nw -relwidth 1 -relheight 1
-	    $path.grid create $shape 0 0 0 0 -fill $fg -tags ${target}sqr
-	    grid_click $path.grid $target 1 0.5 0.5 $h $w $size
-	    grid_lines $path.grid $target $div $w $h $ln
-	    bind $path.grid <1> "::ix::grid_click %W $target 0 %y %x $h $w $size"
-	    bind $path.grid <B1-Motion> "::ix::grid_click %W $target 0 %y %x $h $w $size"
-	}
-    }
-    proc grid_lines {w target lines ww hw color} {
-	$w delete gridlines
-	for {set x 1} {$x <= $lines} {incr x} {
-	    if {$lines < 64} {
-		set oh [expr $hw.0 * $x.0 / $lines.0]
-		set ow [expr $ww.0 * $x.0 / $lines.0]
-	      	$w create line $ow 0 $ow $hw -fill $color -tags gridlines
-	      	$w create line 0 $oh $ww $oh -fill $color -tags gridlines
-	    }
-	}
-	$w raise ${target}sqr
-    }
-}
-#> grid frame
-#. -bd 3
-#. #w 128 #h 128 #x 0.5 #y 0.5
-#. #fg red #bg blue #ln yellow
-#. #shape rectangle #size 12 #div 5
-#. @list ::ix::grid_click .-.grid .| 1 .#2 .#1 .#h .#w .#size
-
-::ix::grid_new .- .| .#w .#h .#bg .#fg .#ln .#div .#shape .#size
diff --git a/extensions/gui/ix/toxy/img-demo.pd b/extensions/gui/ix/toxy/img-demo.pd
deleted file mode 100644
index 195d86a80..000000000
--- a/extensions/gui/ix/toxy/img-demo.pd
+++ /dev/null
@@ -1,60 +0,0 @@
-#N canvas 0 0 818 675 12;
-#X obj 134 121 widget img i1;
-#X obj 328 135 widget img img__guns #src /var/www/_/_i/p/_guns.gif
-;
-#X obj 328 167 widget img img__lunch #src /var/www/_/_i/p/_lunch.gif
-;
-#X obj 308 205 widget img img__roast #src /var/www/_/_i/p/_roast.gif
-;
-#X obj 328 231 widget img img__door #src /var/www/_/_i/p/_door.gif
-;
-#X obj 328 263 widget img img__fruit #src /var/www/_/_i/p/_fruit.gif
-;
-#X obj 328 295 widget img img__crop #src /var/www/_/_i/p/_crop.gif
-;
-#X obj 328 327 widget img img__twogirls #src /var/www/_/_i/p/_twogirls.gif
-#mouseover 1;
-#X obj 328 359 widget img img__345 #src /var/www/_/_i/p/_345.gif;
-#X obj 328 391 widget img img__machinery #src /var/www/_/_i/p/_machinery.gif
-;
-#X obj 175 252 route _roast _guns;
-#X obj 175 280 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 224 275 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 170 222 a2l;
-#X obj 172 174 print wtf;
-#X obj 189 131 a2l;
-#X obj 381 -297 widget img img_guns #src /var/www/_/_i/p/guns.jpg;
-#X obj 96 132 widget img img__pissers #src /var/www/_/_i/p/_pissers.gif
-;
-#X obj 96 164 widget img img__w3 #src /var/www/_/_i/p/_w3.gif;
-#X obj 96 196 widget img img__w1 #src /var/www/_/_i/p/_w1.gif;
-#X obj 96 228 widget img img__db #src /var/www/_/_i/p/_db.gif;
-#X obj 96 260 widget img img__w4 #src /var/www/_/_i/p/_w4.gif;
-#X obj 96 292 widget img img__scream #src /var/www/_/_i/p/_scream.gif
-;
-#X obj 96 324 widget img img__chair #src /var/www/_/_i/p/_chair.gif
-;
-#X obj 96 356 widget img img__dog #src /var/www/_/_i/p/_dog.gif;
-#X obj 96 388 widget img img__w2 #src /var/www/_/_i/p/_w2.gif;
-#X obj 96 420 widget img img__h #src /var/www/_/_i/p/_h.gif;
-#X obj 96 452 widget img img__shitters #src /var/www/_/_i/p/_shitters.gif
-;
-#X obj 96 484 widget img img__violation #src /var/www/_/_i/p/_violation.gif
-;
-#X obj 96 516 widget img img__melt #src /var/www/_/_i/p/_melt.gif;
-#X msg 206 326 #mouseover \$1;
-#X obj 209 303 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
-1;
-#X connect 1 0 13 0;
-#X connect 3 0 13 0;
-#X connect 3 0 15 0;
-#X connect 7 0 14 0;
-#X connect 10 0 11 0;
-#X connect 10 1 12 0;
-#X connect 13 0 10 0;
-#X connect 15 0 14 0;
-#X connect 16 0 14 0;
-#X connect 30 0 7 0;
-#X connect 31 0 30 0;
diff --git a/extensions/gui/ix/toxy/img.wid b/extensions/gui/ix/toxy/img.wid
deleted file mode 100755
index 34c82dfe2..000000000
--- a/extensions/gui/ix/toxy/img.wid
+++ /dev/null
@@ -1,41 +0,0 @@
-#console show
-package require Img
-package require tkdnd
-namespace eval ::ix {
-    variable _
-    proc drop_pics {name files x y} {
-	set c 0
-	for {set n 0} {$n < [llength $files]} {incr n} {
-	    if {[regexp {.*/(.+)\.[a-zA-Z0-9]+$} [lindex $files $n] file obj] == 1} {
-		pd [concat $name obj $x [expr $y + ($c * 32)] widget img [pdtk_enquote [string tolower "img_${obj}"]] #src [pdtk_enquote [regsub -- "^file:" [lindex $files $n] ""]] \;]
-		incr c
-	    }
-	} 
-    }
-    proc pic {c p t src mouseover} {
-	variable _
-	image create photo $t
-	$p configure -image $t
-	if {$src ne "none" && [file exists $src]} {
-	    $t configure -file $src
-	    set cb "pd \"$t _cb [lindex [regexp -inline {.*/(.+)\.[a-zA-Z0-9]+$} $src] 1] \;\""
-	    bind $p <Enter> "$t configure -gamma 2"
-	    if {$mouseover != 0} {
-		bind $p <Enter> +$cb
-	    }
-	    bind $p <Leave> "$t configure -gamma 1"
-	    bind $p <ButtonPress-1> "+$t configure -gamma 0.5; $cb"
-	    bind $p <ButtonRelease-> "+$t configure -gamma 1"
-	} else {
-	    $t configure -format gif -data {R0lGODdhDgAQAKIAAICAgP///8DAwAAAAP8AAP///////////ywAAAAADgAQAAADWQi63Bi6HIIDGLocggMYuhyCAxi6HIIDEUFIEUSBIQMRGEFEhKEyoBoQUUQEykBEYBARBUbIQGAEUQQSRcggYOhyCA5g6HIIDmDocggOYOhyCA6g6LLi6HInADs=}
-	    dnd bindtarget $c.c text/uri-list <Drop> "::ix::drop_pics $c %D %x %y"
-	}
-	set _($t:loc) 0
-    }
-}
-#> img label
-#. -borderwidth 0
-#. #src none #mouseover 1
-#. @bang puts "bang"
-::ix::pic .^ .- .| {.#src} .#mouseover
-puts "pic .- .|"
diff --git a/extensions/gui/ix/toxy/kbd-demo.pd b/extensions/gui/ix/toxy/kbd-demo.pd
deleted file mode 100644
index a9baf3953..000000000
--- a/extensions/gui/ix/toxy/kbd-demo.pd
+++ /dev/null
@@ -1,61 +0,0 @@
-#N canvas 360 12 574 324 12;
-#X obj 56 57 widget kbd k1 #octaves 7 -width 444.094 -height 63.4421
-;
-#X obj 56 134 unpack;
-#X floatatom 56 155 5 0 0 0 - - -;
-#X floatatom 90 155 5 0 0 0 - - -;
-#X floatatom 98 135 5 0 0 0 - - -;
-#X obj 56 29 pack 0 1;
-#X floatatom 56 13 5 0 0 0 - - -;
-#X obj 99 14 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
-;
-#X floatatom 21 32 5 0 0 0 - - -;
-#X obj 56 217 osc~ 440;
-#X obj 56 196 mtof;
-#X obj 110 217 line~;
-#X msg 110 195 \$1 100;
-#X obj 80 265 dac~ 1 2;
-#X obj 81 242 *~;
-#X obj 92 173 * 0.4;
-#X floatatom 149 21 5 0 12 0 - - -;
-#X msg 148 38 #octaves \$1;
-#X obj 143 134 widget kbd k2 #octaves 3 #bg hotpink #fg orange -height
-32;
-#X obj 56 174 + 36;
-#X obj 345 134 widget kbd k2 #octaves 3 #bg blue #fg cyan -height 32
-;
-#X obj 207 232 * 127;
-#X obj 171 230 + 36;
-#X obj 171 265 noteout;
-#X obj 170 203 unpack 0 0 0;
-#X obj 160 172 Append 1;
-#X obj 232 173 Append 2;
-#X connect 0 0 1 0;
-#X connect 0 0 4 0;
-#X connect 1 0 2 0;
-#X connect 1 1 3 0;
-#X connect 2 0 19 0;
-#X connect 3 0 15 0;
-#X connect 5 0 0 0;
-#X connect 6 0 5 0;
-#X connect 7 0 5 1;
-#X connect 8 0 0 0;
-#X connect 9 0 14 0;
-#X connect 10 0 9 0;
-#X connect 11 0 14 1;
-#X connect 12 0 11 0;
-#X connect 14 0 13 0;
-#X connect 14 0 13 1;
-#X connect 15 0 12 0;
-#X connect 16 0 17 0;
-#X connect 17 0 0 0;
-#X connect 18 0 25 0;
-#X connect 19 0 10 0;
-#X connect 20 0 26 0;
-#X connect 21 0 23 1;
-#X connect 22 0 23 0;
-#X connect 24 0 22 0;
-#X connect 24 1 21 0;
-#X connect 24 2 23 2;
-#X connect 25 0 24 0;
-#X connect 26 0 24 0;
diff --git a/extensions/gui/ix/toxy/kbd.wid b/extensions/gui/ix/toxy/kbd.wid
deleted file mode 100755
index 06c1d7e79..000000000
--- a/extensions/gui/ix/toxy/kbd.wid
+++ /dev/null
@@ -1,48 +0,0 @@
-namespace eval ::ix {
-    proc kbd_list {p t args} {
-	variable _
-	set w $p.f[expr [lindex $args 0] / 12].[lindex $args 0]
-	if {[llength $args] == 1} {set v 1;if {$_($t:lp) != -1 && $_($t:lp) ne $w} {kbd_action $_($t:lp) $t 0}} {set v [lindex $args 1]}	
-	kbd_action $w $t $v
-	set _($t:lp) $w}
-
-    proc kbd_play {t m b x y} {
-	variable _
-	foreach a {{rs {0 sunken 1 raised}} {v {0 0 1 {($y - [winfo rooty $w]) / ([winfo height $w] + 0.0)}}}} {array set [lindex $a 0] [lindex $a 1]}
-	set w [winfo containing $x $y]
-	if {$m != 1 && $_($t:lp) != -1 && $_($t:lp) ne $w} {kbd_action $_($t:lp) $t 0}
-	if {[$w cget -relief] eq $rs($b)} {kbd_action $w $t  [eval expr $v($b)]}
-	set _($t:lp) $w}
-
-    proc kbd_action {w t v} {
-	if {$v == 0} {set relief raised} {set relief sunken}
-	$w config -relief $relief
-	pd [concat $t.rp _cb [winfo name $w] $v \;]}
-
-    proc kbd_off {p t octaves} {
-	for {set o 0} {$o < $octaves} {incr o} {	
-	    for {set on 0} {$on < 12} {incr on} {
-		set w $p.f$o.[expr $o * 12 + $on]
-	        if {[$w cget -relief] eq "sunken"} {kbd_action $w $t 0}}}}
-
-    proc kbd {path t octaves b f} {
-	$path config -width [expr $octaves * 66]
-	if {![winfo exists $path.f0]} {
-	    variable _
-	    set _($t:lp) -1
-	    set bw {0 1 0 1 0 0 1 0 1 0 1 0} ; set npl {0 1 1 2 2 3 4 4 5 5 6 6}
-	    foreach a {{bg "0 $b 1 $f"} {fg "1 $b 0 $f"} {an {0 ";lower $wk" 1 "-anchor n"}} {rw {0 {[expr 1 / 7.]} 1 {[expr 1 / 10.]}}} {rh {0 {[expr 1.]} 1 {[expr 6 / 10.]}}}} {array set [lindex $a 0] [lindex $a 1]}
-	    for {set o 0} {$o < $octaves} {incr o} {
-		set w $path.f$o ; frame $w -bd 0 -height 66 -width 66
-		for {set on 0} {$on < 12} {incr on} {
-		    set wk $w.[expr $o * 12 + $on] ; set n [lindex $bw $on]
-		    eval "label $wk -bg $bg($n) -fg $fg($n) -bd 1 -relief raised;place $wk -relx [expr [lindex $npl $on] / 7.] -y 0 -relwidth $rw($n) -relheight $rh($n) $an($n)"
-		    bind $wk <1> "::ix::kbd_play $t 0 1 %X %Y"; bind $wk <B1-Motion> [bind $wk <1>];bind $wk <ButtonRelease-1> "::ix::kbd_play $t 0 0 %X %Y"; bind $wk <Enter> "::ix::kbd_play $t 1 0 %X %Y"; bind $wk <3> "::ix::kbd_play $t 1 1 %X %Y"; bind $wk <B3-Motion> [bind $wk <3>]; bind $wk <2> "::ix::kbd_off $path $t $octaves"}
-		place $w -y 0 -relheight 1.0 -relx [expr $o / $octaves.0] -relwidth [expr 1 / $octaves.0]}}}}
-
-#> kbd frame
-#. -height 100 -width 60
-#. #octaves 6 #bg black #fg white
-#. @list ::ix::kbd_list .- .| .#args
-#. @float ::ix::kbd_list .- .| .#args
-::ix::kbd .- .| .#octaves .#bg .#fg
diff --git a/extensions/gui/ix/toxy/knob-demo.pd b/extensions/gui/ix/toxy/knob-demo.pd
deleted file mode 100644
index 3d1035afa..000000000
--- a/extensions/gui/ix/toxy/knob-demo.pd
+++ /dev/null
@@ -1,43 +0,0 @@
-#N canvas 403 277 313 218 12;
-#X floatatom 157 24 5 16 1024 0 - - -;
-#X msg 157 42 #w \$1 \, #h \$1;
-#X floatatom 194 7 5 3 22 0 - - -;
-#X obj 13 148 nbx 8 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 -0.0116279 256;
-#X obj 13 39 widget knob n1 #w 88 #h 88 #th 3 #cc purple #cb black
-#ca red #trans 81 #bg green #range 1 #cn navy #ny 79 #nx 43 #max 0
-#min 0 #an white -bd 1;
-#X msg 135 109 #range \$1;
-#X msg 157 144 1;
-#X msg 184 144 10000;
-#X floatatom 203 94 5 0 0 0 - - -;
-#X msg 203 109 #ny \$1;
-#X floatatom 203 61 5 0 0 0 - - -;
-#X msg 203 76 #nx \$1;
-#X msg 157 170 #max 1;
-#X msg 202 170 #max 32 \, #min 16;
-#X msg 157 190 #min 0 \, #max 0;
-#X msg 103 107 1;
-#X msg 103 85 100;
-#X msg 104 63 1000;
-#X msg 104 41 0.1;
-#X msg 194 23 #th \$1;
-#X connect 0 0 1 0;
-#X connect 1 0 4 0;
-#X connect 2 0 19 0;
-#X connect 4 0 3 0;
-#X connect 5 0 4 0;
-#X connect 6 0 4 0;
-#X connect 7 0 4 0;
-#X connect 8 0 9 0;
-#X connect 9 0 4 0;
-#X connect 10 0 11 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;
-#X connect 15 0 5 0;
-#X connect 16 0 5 0;
-#X connect 17 0 5 0;
-#X connect 18 0 5 0;
-#X connect 19 0 4 0;
diff --git a/extensions/gui/ix/toxy/knob.wid b/extensions/gui/ix/toxy/knob.wid
deleted file mode 100755
index 450f1baf9..000000000
--- a/extensions/gui/ix/toxy/knob.wid
+++ /dev/null
@@ -1,102 +0,0 @@
-namespace eval ::ix {
-    variable _
-    proc nobfloat {path t num} {
-	variable _
-	$path itemconfigure $t:num -text $num
-	pd [concat $t.rp _cb $num \;]
-	set _($t:num) $num
-    }
-    proc nob_mover {w t f x y} {
-	variable _
-	if {$::ix::_($t:clickd) > 0} {
-	    set move [expr (($x - $::ix::_($t:lx)) + (-1 * ($y - $::ix::_($t:ly)))) / ([winfo width $w].0 + [winfo height $w].0) * $f]
-	    nob_move $w $t $move
-	}
-	set ::ix::_($t:clickd) 1
-	set ::ix::_($t:lx) $x
-	set ::ix::_($t:ly) $y	
-    }
-    proc nob_move {w t move} {
-	variable _
-	set on [$w itemcget $t:num -text]
-	set no [expr $on + $_($t:range) * $move * 2]
-	if {$_($t:min) != $_($t:max)} {
-	    if {$no > $_($t:max)} {set no $_($t:max);set move 0}
-	    if {$no < $_($t:min)} {set no $_($t:min);set move 0}
-	}
-	nobfloat $w $t $no
-	foreach e {1 10 100} {
-	    set a [expr [$w itemcget $t:nob$e -start] + int($move * $e * 90)]
-	    $w itemconfigure $t:nob$e -start $a
-	    set _($t:a$e) $a
-	}	
-    }
-
-    proc nob {path t w h range bg c1 c2 c3 cn th nx ny max min} {
-	variable _
-	set _($t:lx) 32
-	set _($t:clickd) -1
-	set _($t:max) $max
-	set _($t:min) $min
-	if {$_($t:min) != $_($t:max)} {
-	    set _($t:range) [expr abs($min - $max)]
-	} else {
-	    set _($t:range) $range
-	}
-	if {[winfo exists $path.nob] != 1} {
-	    canvas $path.nob -width $w -height $h -borderwidth 1 -bg $bg
-	    $path configure -width $w -height $h
-	    place $path.nob -anchor nw -relwidth 1 -relheight 1
-	    $path.nob delete *
-	    set i 0
-	    set colors [list $c1 $c2 $c3]
-	    set ratios {1 10 0.1}
-	    set edge 10
-	    $path.nob create rectangle {1 1 8 4} -fill "#555555"
-	    $path.nob create rectangle "1 $h 8 [expr $h - 5]" -fill "#555555"
-	    foreach e {1 10 100} {
-		$path.nob create arc \
-		    "[expr $w / $edge / ($i + 1) + ($edge / 2)] [expr $h / $edge / ($i + 1) + ($edge / 2)] [expr $w - $w / $edge / ($i + 1) - ($edge / 2)] [expr $h - $h / $edge / ($i + 1) - ($edge / 2)]" \
-		    -extent [expr int(300 / $e)] -start 90 \
-		    -outline "[lindex $colors $i]" \
-		    -style arc \
-		    -width [expr int($h / $th)] \
-		    -tags $t:nob$e
-		bind $path.nob <B[expr $i + 1]-Motion> \
-		    "::ix::nob_mover $path.nob $t [lindex $ratios $i] %x %y"
-		incr i
-		bind $path.nob <ButtonRelease-$i> "set ::ix::_($t:clickd) -1"
-	    }
-	    bind $path <MouseWheel> {::ix::nob_move %W.nob [winfo name %W] [expr %D / 2400.]}
-	    bind $path <Shift-MouseWheel> {::ix::nob_move %W.nob [winfo name %W] [expr %D / 24000.]}
-	    bind $path <Control-MouseWheel> {::ix::nob_move %W.nob [winfo name %W] [expr %D / 240.]}
-	    bind $path.nob <Shift-B1-Motion> "::ix::nob_mover $path.nob $t 10 %x %y"
-	    bind $path.nob <Control-B1-Motion> "::ix::nob_mover $path.nob $t 0.1 %x %y"
-	    if {$nx == 0} {
-		set nx [expr $w / 2]
-		set ny [expr $h - 20]
-	    }
-	    $path.nob create text $nx $ny -text "0.0" -tags $t:num -fill "$cn" -font {{Bitstream Vera Sans} 8}
-	}
-	if {[info exists _($t:num)]} {
-	    $path.nob itemconfigure $t:num -text $_($t:num)
-	    foreach e {1 10 100} {
-		$path.nob itemconfigure $t:nob$e -start $_($t:a$e)
-	    }
-	} else {
-	    foreach e {1 10 100} {set _($t:a$e) 90}
-	    set _($t:num) 0.0}
-
-    }
-}
-#> knob frame
-#. -bd 1 -bg "#cccccc"
-#. -highlightbackground red
-#. #max 0 #min 0
-#. #w 128 #h 128 #th 5 #range 100 #nx 0 #ny 0
-#. #bg purple #ca blue #cb yellow #cc green #cn orange
-#. @float ::ix::nobfloat .-.nob .| .#1
-#. @cmd eval ".-.nob .#args"
-bind .- <Enter> {focus .-}
-bind .- <Leave> {focus .^.c}
-::ix::nob .- .| .#w .#h .#range .#bg .#ca .#cb .#cc .#cn .#th .#nx .#ny .#max .#min
diff --git a/extensions/gui/ix/toxy/lg-demo.pd b/extensions/gui/ix/toxy/lg-demo.pd
deleted file mode 100644
index a7c95bf40..000000000
--- a/extensions/gui/ix/toxy/lg-demo.pd
+++ /dev/null
@@ -1,68 +0,0 @@
-#N canvas 138 75 1019 727 12;
-#X obj 5 87 widget lg lga -width 940 -height 440 -bg green;
-#X obj 92 -48 bng 28 250 50 0 empty empty view 0 -6 0 8 -62784 -1 -1
-;
-#X msg 58 34 clear;
-#X obj 142 34 getall lga;
-#X obj 366 62 srec lga;
-#X msg -2 52 cmd axis configure y -logscale \$1;
-#X obj -3 38 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X msg 421 -36 190 lolp 0 \, 140 lolp 4;
-#X msg 398 -18 1 kgoga 2 3 6 \, 190 kgoga 0 4 3;
-#X obj 70 216;
-#X msg 75 211;
-#X msg 335 -28 delete lolp;
-#X msg 322 -46 delete kgoga;
-#X msg 25 34 dump;
-#X msg 395 1 1 juba 2 3 4 5 \, 200 juba 5 6 7 8;
-#X obj 9 607 pool lga;
-#X obj 74 546 + 1;
-#X obj 47 546 i;
-#X obj 9 563 prepend;
-#X obj 5 528 t a b;
-#X obj 8 585 prepend set;
-#X msg 106 11 reset;
-#X obj 83 -12 t b b;
-#X msg 118 -9 0;
-#X obj 123 -49 bng 32 250 50 0 empty empty write-+ 0 -6 0 8 -24198
--1 -1;
-#X obj 144 6 t b b;
-#X obj 426 27 tow . lg lga;
-#X msg 217 20 redefine;
-#X msg 227 61 -width \$1;
-#X msg 286 61 -height \$1;
-#X floatatom 227 43 5 0 0 0 - - -;
-#X floatatom 286 43 5 0 0 0 - - -;
-#X connect 0 0 19 0;
-#X connect 1 0 25 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 5 0 0 0;
-#X connect 6 0 5 0;
-#X connect 7 0 26 0;
-#X connect 8 0 26 0;
-#X connect 11 0 26 0;
-#X connect 12 0 26 0;
-#X connect 13 0 0 0;
-#X connect 14 0 26 0;
-#X connect 16 0 17 1;
-#X connect 17 0 16 0;
-#X connect 17 0 18 1;
-#X connect 18 0 20 0;
-#X connect 19 0 18 0;
-#X connect 19 1 17 0;
-#X connect 20 0 15 0;
-#X connect 21 0 15 0;
-#X connect 22 0 13 0;
-#X connect 22 1 21 0;
-#X connect 22 1 23 0;
-#X connect 23 0 17 1;
-#X connect 24 0 22 0;
-#X connect 25 0 3 0;
-#X connect 25 1 2 0;
-#X connect 27 0 0 0;
-#X connect 28 0 0 0;
-#X connect 29 0 0 0;
-#X connect 30 0 28 0;
-#X connect 31 0 29 0;
diff --git a/extensions/gui/ix/toxy/lg.wid b/extensions/gui/ix/toxy/lg.wid
deleted file mode 100755
index c43b8012f..000000000
--- a/extensions/gui/ix/toxy/lg.wid
+++ /dev/null
@@ -1,237 +0,0 @@
-package require BLT
-namespace import blt::
-namespace eval ::ix {
-    variable _
-    proc random_int {} {
-	return [expr "int(floor(rand()*16))"]
-    }
-    proc random_clr {} {
-        return [format "\#%1X%1X%1X%1X%1X%1X" [random_int] [random_int] [random_int] [random_int] [random_int] [random_int]]
-    }
-    proc lg_add {path tg args} {
-	variable _
-	set e [lindex $args 1]
-	set l [llength $args]
-	for {set n 2} {$n < $l} {incr n} {
-	    if {$l > 3} {set nm $e:[expr $n - 1]} else {set nm $e}
-	    set _($path:$nm:e) [expr $n - 1]
-	    set _($path:$nm:p) $e
-	    set _($path:$e:n) [expr $l - 2]
-	    lg_list $path $tg $nm [lindex $args 0] [lindex $args $n]
-	}
-    }
-    proc lg_dumper {path tg args} {
-	variable _
-	foreach e [$path element names] {	    
-	    if {$_($path:$e:e) == 1} {
-		lg_dump $path $tg $e
-	    }
-	}
-    }
-    proc lg_dump {path tg e} {
-	variable _
-	set p $_($path:$e:p)
-	set el $_($path:$e:e)
-	set n $_($path:$p:n)
-	for {set i 0} {$i < [$tg:x$e length]} {incr i} {
-	    set out {}
-	    lappend out [$tg:x$e index $i]
-	    lappend out $p
-	    if {$n > 1} {
-	    for {set x 1} {$x <= $n} {incr x} {
-		lappend out [$tg:y$p:$x index $i]
-		}
-	    } else {
-		lappend out [$tg:y$e index $i]
-	    }
-	    set out [join $out " "]
-#	    puts $out
-	    pd "$tg.rp _cb $out;"
-	}
-    }
-    proc lg_list {path tg e i1 i2} {
-	if {[$path element exists $e] != 1} {lg_nv $path $tg $e}
-	$tg:y$e append $i2
-	$tg:x$e append $i1
-    }
-    proc lg_zoom {path tg d x y} {
-	puts "$path $tg $d"
-	if {$d eq "in"} {set dn 4} {set dn 1}
-	set lx [$path axis limits x]
-	set dx [expr ([lindex $lx 1] - [lindex $lx 0]) / $dn]
-	set cx [$path axis invtransform x $x]
-	set cy [$path axis invtransform y $y]
-	set ly [$path axis limits y] 
-	set dy [expr ([lindex $ly 1] - [lindex $ly 0]) / $dn]
-	$path axis configure x -min [expr $cx - $dx] -max [expr $cx + $dx]
-	$path axis configure y -min [expr $cy - $dy] -max [expr $cy + $dy]
-    } 
-    proc lg_dr {path tg e x y} {
-	variable _
-	if {[$path element closest $x $y cl -halo 666 -interpolate 1 -along x $e] == 1} {
-	    set new [$path axis invtransform y $y]
-	    set n $tg:y$cl(name)
-	    set io $_($path:clickd)
-	    set ic $cl(index)
-	    $n index $ic $new
-	    if {$io != -1 && [expr abs($io - $ic)] > 1} {lg_smooth $io $ic $n}
-	    set _($path:clickd) $ic
-	}
-    }
-    proc lg_smooth {io ic n} {
-#	puts "smoothing $n from $io to $ic"
-	set vo [$n index $io]
-	set vc [$n index $ic]
-	if {$ic > $io} {set is $io; set vs $vo} else {set is $ic; set vs $vc}
-	set ne [expr [$n length] - 1]
-	if {$ic != $ne && $io != $ne} {
-	    for {set i 1} {$i < [expr abs($io - $ic)]} {incr i} {    
-		set nv [expr $vs + (($vc - $vo) * $i / ($ic - $io))]
-		set ni [expr $is + $i]
-		$n index $ni $nv
-	    }
-	}
-    }
-    proc lg_sl {path tg e x y} {
-	variable _
-	set t [$path invtransform $x $y]
-	if {$_($path:clickd) != -1} {
-	    set dx [expr [lindex $t 0] - [lindex $_($path:clcord) 0]]
-	    set dy [expr [lindex $t 1] - [lindex $_($path:clcord) 1]]
-
-	    set p $_($path:$e:p)
-	    set el $_($path:$e:e)
-	    set n $_($path:$p:n)
-	    
-	    if {$n > 1} {
-		for {set i 1} {$i <= $n} {incr i} {
-		    set tx $tg:x$p:$i
-		    set ty $tg:y$p:$i 
-		    $tx expr "$tx + $dx"
-		    if {$el == $i} {$ty expr "$ty + $dy"}
-		}
-	    } else {
-		$tg:x$e expr "$tg:x$e + $dx"
-		$tg:y$e expr "$tg:y$e + $dy"
-	    }
-	}
-	set _($path:clcord) $t
-	set _($path:clickd) 1
-    }
-    proc lg_draw {path tg e x y} {
-	variable _
-	if {[$path element closest $x $y cl -halo 666 -interpolate 1 -along x $e] == 1} {
-	    set t [$path invtransform $x $y]
-	    set p $_($path:$e:p)
-	    set el $_($path:$e:e)
-	    set n $_($path:$p:n)
-	    set io $_($path:clickd)
-	    set ic $cl(index)
-	    if {$n > 1} {
-		for {set i 1} {$i <= $n} {incr i} {
-		    set tx $tg:x$p:$i
-		    set ty $tg:y$p:$i 
-		    if {$el == $i} {set ny [lindex $t 1]} else {
-			if {[$ty length] == $ic} {set tc [expr $ic - 1]} else {set tc $ic}
-			set ny [$ty index $tc]
-		    }
-		    set nx [lindex $t 0]
-		    $ty append $ny
-		    $tx append $nx
-		    $tx sort $ty
-		    if {$i == 1} {
-			if {$ic < $io} {incr io}
-			incr ic
-		    }
-		    if {$io != -1 && [expr abs($io - $ic)] > 1} {lg_smooth $io $ic $ty}
-		}
-	    } else {
-		$tg:y$e append [lindex $t 1]
-		$tg:x$e append [lindex $t 0]
-		$tg:x$e sort $tg:y$e
-		if {$ic < $io} {incr io}
-		incr ic
-		if {$io != -1 && [expr abs($io - $ic)] > 1} {lg_smooth $io $ic $tg:y$e}
-	    }
-	    set _($path:clickd) $ic
-	}
-    }
-
-    proc lg_trim {path tg e x y} {
-	variable _
-	if {[$path element closest $x $y cl -halo 666 -interpolate 1 -along x $e] == 1} {
-#	    foreach name [array names cl] {puts "$name $cl($name)"}
-	    if {[expr abs([$path axis transform x [$tg:x$e index $cl(index)]] - $x.0)] < 32} {
-		set p $_($path:$cl(name):p)
-		set n $_($path:$p:n)
-		if {$n > 1} {
-		    for {set i 1} {$i <= $n} {incr i} {
-			$tg:y$p:$i delete $cl(index)
-			$tg:x$p:$i delete $cl(index)
-		    }
-		} else {
-		    $tg:y$cl(name) delete $cl(index)
-		    $tg:x$cl(name) delete $cl(index)
-		}
-	    }
-	}
-    }
-    proc lg_cl {path tg} {
-	foreach e [$path element names] {lg_dv $path $tg $e}
-#	pd "$tg.rp _cb symbol clear;"
-    }
-    proc lg_de {path tg e} {
-	variable _
-	set n $_($path:$e:n)
-	if {$n > 1} {
-	    for {set i 1} {$i <= $n} {incr i} {
-		lg_dv $path $tg $e:$i
-	    }
-	} else {
-	    lg_dv $path $tg $e
-	}
-    }
-    proc lg_dv {path tg e} {
-	blt::vector destroy $tg:x$e
-	blt::vector destroy $tg:y$e
-	$path element delete $e
-#	pd "$tg.rp _cb delete $e;"
-    }
-    proc lg_nv {path tg e} {
-	variable _
-	blt::vector create $tg:x$e -variable ""
-	blt::vector create $tg:y$e -variable ""
-	set _($path:clickd) -1
-	$path element create $e -x $tg:x$e -y $tg:y$e -symbol "circle" -pixels 2 -linewidth 2 -color [random_clr] -hide 0
-#	puts "creating: $path $e -x $tg:x$e -y $tg:y$e -color [random_clr] -hide 0"
-        $path element bind $e <B1-Motion> "::ix::lg_dr $path $tg $e %x %y"
-        $path element bind $e <Shift-B1-Motion> "::ix::lg_sl $path $tg $e %x %y"
-        $path element bind $e <Control-B1-Motion> "::ix::lg_draw $path $tg $e %x %y"
-        $path element bind $e <Alt-B1-Motion> "::ix::lg_trim $path $tg $e %x %y"
-#	$path element bind $e <1> "::ix::lg_dr $path $tg $e %x %y"
-	$path element bind $e <ButtonRelease-1> "set ::ix::_($path:clickd) -1"
-#	$path element bind $e <Shift-ButtonRelease-1> "set ::ix::_($path:clickd) -1"
-    }
-    proc lg_new {path tg} {
-	bind $path <ButtonPress-3> {}
-	bind $path <Button-4> "::ix::lg_zoom $path $tg in %x %y"
-	bind $path <Button-5> "::ix::lg_zoom $path $tg out %x %y"
-	bind $path <Control-Button-4> "$path axis configure x -min {} -max {}; $path axis configure y -min {} -max {}"
-	bind $path <Control-Button-5> [bind $path <Control-Button-4>]
-	Blt_ZoomStack $path "2" "Control-2"
-	$path axis configure x -background [$path cget -bg]
-	$path axis configure y -background [$path cget -bg]
-    }
-}
-#> lg blt::graph
-#. -bg yellow -halo 16
-#. @clear ::ix::lg_cl .- .|
-#. @delete ::ix::lg_de .- .| .#1
-#. @list ::ix::lg_add .- .| .#args
-#. @add ::ix::lg_add .- .| .#args
-#. @dump ::ix::lg_dumper .- .| .#args
-#. @cmd eval ".- .#args"
-
-::ix::lg_new .- .|
-
-puts "lg .- .|"
\ No newline at end of file
diff --git a/extensions/gui/ix/toxy/mat-demo.pd b/extensions/gui/ix/toxy/mat-demo.pd
deleted file mode 100644
index eda61bc51..000000000
--- a/extensions/gui/ix/toxy/mat-demo.pd
+++ /dev/null
@@ -1,53 +0,0 @@
-#N canvas 80 85 910 775 12;
-#X obj 15 29 widget mat n1 #w 881 #bg gray83 #divX 8 #divY 5 #h 494
-#Yb 1 #Ya 88 #qYv 2 #qYa 8 #ln white;
-#X msg 1080 -13 -height 26 -width 26 -bg gray95;
-#X msg 184 648 redefine;
-#X obj 131 646 * 127;
-#X obj 95 644 + 36;
-#X obj 587 565 rr ss;
-#X obj 587 546 rg;
-#X obj 20 603 unpack f f f;
-#X obj 47 638 * 127;
-#X obj 26 668 pack f f f;
-#X obj 49 692 makenote 99 250;
-#X obj 102 728 noteout;
-#X obj 77 559 rp ss kbd;
-#X obj 158 583 rp ss kb2;
-#X obj 138 537 widget kbd k1 #bg blue #fg green #ln gray50 -height
-32;
-#X obj 138 570 widget kbd k2 #bg orange #fg red #ln gray50 -height
-32;
-#X obj 108 622 unpack 0 0 0;
-#X obj 108 603 Append 1;
-#X obj 158 602 Append 2;
-#X msg 74 575 1;
-#X obj 3 533 widget dd dd1 -bg green -fg red;
-#X obj 3 493 a2l;
-#X obj 3 549 widget dd s2 #symbol 0;
-#X connect 0 0 21 0;
-#X connect 2 0 0 0;
-#X connect 3 0 11 1;
-#X connect 4 0 11 0;
-#X connect 6 0 5 0;
-#X connect 7 0 9 0;
-#X connect 7 1 8 0;
-#X connect 7 2 9 2;
-#X connect 8 0 9 1;
-#X connect 9 0 10 0;
-#X connect 10 0 11 0;
-#X connect 10 1 11 1;
-#X connect 12 0 17 0;
-#X connect 13 0 18 0;
-#X connect 14 0 17 0;
-#X connect 14 0 12 0;
-#X connect 15 0 18 0;
-#X connect 15 0 13 0;
-#X connect 16 0 4 0;
-#X connect 16 1 3 0;
-#X connect 16 2 11 2;
-#X connect 17 0 16 0;
-#X connect 18 0 16 0;
-#X connect 19 0 9 2;
-#X connect 21 0 20 0;
-#X connect 22 0 20 0;
diff --git a/extensions/gui/ix/toxy/mat.wid b/extensions/gui/ix/toxy/mat.wid
deleted file mode 100755
index 237bf772d..000000000
--- a/extensions/gui/ix/toxy/mat.wid
+++ /dev/null
@@ -1,688 +0,0 @@
-foreach package {snack tkdnd tkpath} {package require $package}
-namespace eval ::ix {
-    proc rc {} {return [format "\#%06x" [expr "int(floor(rand() * 16777216))"]]}
-    proc rgb {} {return [list [expr "int(floor(rand() * 256))"]  [expr "int(floor(rand() * 256))"]  [expr "int(floor(rand() * 256))"]]}
-    proc lighten {rgb r} {set l {}; foreach c $rgb {lappend l [expr {(256 - $c) * $r + $c}]}; return $l}
-    proc darken {rgb r} {set l {}; foreach c $rgb {lappend l [expr {$c - ($c * $r)}]}; return $l}
-    proc color {rgb} {return [format "\#%02x%02x%02x" [expr int([lindex $rgb 0])] [expr int([lindex $rgb 1])] [expr int([lindex $rgb 2])]]}
-    proc random_txt {n} {
-        set i 0
-        set text ""
-        while {$i < $n} {
-            set int [expr "int(floor(rand()*62))"]
-            if {$int < 10} {incr int 48} elseif {$int < 36} {incr int 55} else {incr int 61}
-            set text "$text[format %c $int]"
-            incr i
-        }
-        return $text
-    }
-
-    proc mat_sel {p t a x y} {
-	variable _
-	set _($t:sc) [rc]
-	switch $a {
-	    first {
-		foreach xy {x y}  {set _($t:c$xy) [set $xy];set _($t:f$xy) [set $xy]}
-		$p.m create path [::tkpath::coords rect $_($t:cx) $_($t:cy) 0 0 -rx 12 -ry 12] \
-		    -tags sel -stroke $_($t:sc) -strokewidth 12 -strokeopacity 0.3}
-	    release {$p.m delete sel}
-	    motion {
-		mat_updatesel $p $t [mat_cleansel $p $t [$p.m find overlapping $_($t:fx) $_($t:fy) $x $y]]
-		if {$x >= $_($t:cx)} {set xa $_($t:fx);set xb $x} else {set xa $x;set xb $_($t:fx)}
-		if {$y >= $_($t:cy)} {set ya $_($t:fy);set yb $y} else {set ya $y;set yb $_($t:fy)}
-		set w [expr {abs($xb - $xa)}]
-		set h [expr {abs($yb - $ya)}]
-		$p.m coords sel [::tkpath::coords rect $xa $ya $w $h -rx 12 -ry 12]
-		$p.m itemconfigure sel -stroke $_($t:sc)}}}
-
-    proc mat_item_new {p t id d} {
-	variable _
-	if {$id eq "-"} {
-	    if {[dict keys $_($t)] eq ""} {set id 0} else {
-		set id -1
-		while true {if {[lsearch -integer [dict keys $_($t)] [incr id]] == -1} {break}}
-	    }
-	}
-	set _($t:ci) $id
-	mat_item_ua $p $t $id abs {x 0 xx 0 y 0 yy 0 g 0 v 1} 0
-	mat_item_ua $p $t $id abs $d 0
-	mat_item_draw $p $t $id
-    }
-
-    proc mat_item_draw {p t is} {
-	variable _
-	if {$is eq "all"} {set is [dict keys $_($t)]}
-	foreach id $is {
-	    set tags [list item i$id $id]
-	    set color [dict get $_($t:g) $_($t:cg) color]
-	    switch [dict get $_($t) $id type] {
-		note {
-		    $p.m create path [::tkpath::coords rect 0 0 0 0 -rx 3 -ry 3] -tags [concat $tags r] -stroke [color [lighten $color 0.4]] -strokeopacity 1.0 -fill [color $color] -fillopacity 0.08
-		    $p.m create path [::tkpath::coords rect 0 0 0 0 -rx 3 -ry 3] -tags [concat $tags q] -fill [color $color] -strokewidth 0 -fillopacity 0.8
-		}
-		sound {
-		    snack:::sound s$id
-		    set filename [dict get $_($t) $id filename]
-		    s$id read $filename
-		    $p.m create path [::tkpath::coords rect 0 0 0 0 -rx 3 -ry 3] -tags [concat $tags r] -strokewidth 0 -fill [color $color] -fillopacity 0.08
-		    $p.m create waveform 0 0 -tags [concat $tags w] -sound s$id -fill white
-		    set length [expr [s$id length] / ($_($t:samplerate) + 0.0) * 1000]
-		    mat_item_ua $p $t $id abs [dict create xx [expr [dict get $_($t) $id x] + $length]] 0
-		    $p.m create text 0 0 -tags [concat $tags tl] -font {{bitstream vera sans} 8} -fill HotPink -anchor nw -justify left -text "[string range $length 0 10] s"
-		    $p.m create rectangle 0 0 0 0 -tags [concat $tags tlr] -fill LightGreen -width 0
-		    $p.m raise [$p.m find withtag "i$id && tl"]
-		    $p.m create text 0 0 -tags [concat $tags tf] -font {{bitstream vera sans} 8} -fill NavyBlue -anchor ne -justify right -text $filename
-		    $p.m create rectangle 0 0 0 0 -tags [concat $tags tfr] -fill gray90 -width 0
-		    $p.m raise [$p.m find withtag "i$id && tf"]
-		}
-	    }
-	    mat_redraw $p $t $id
-	}
-    }
-
-    proc mat_item_delete {p t} {
-	variable _
-	foreach item $_($t:sel) {
-	    foreach i [$p.m find withtag i$item] {
-		$p.m delete $i
-	    }
-	    dict unset _($t) $item
-	    set _($t:sel) {}
-	    mat_item_info $p $t ""
-	    pd [concat $t.rp _cb delete $item \;]
-	}
-    }
-
-    proc mat_quant {p t y v} {
-	variable _
-	if {$y eq "xx"} {set y x}; if {$y eq "yy"} {set y y}
-	if {$y eq "x" || $y eq "y"} {
-	    set v [expr {int( ($v + $_($t:q$y) / 2.0 ) / ($_($t:q$y) + 0.0))*$_($t:q$y)}]
-	}
-	return $v
-    }
-    
-    proc mat_item_pos {p t item r x y xx yy} {
-	mat_item_ua $p $t $item $r [dict create x $x y $y xx $xx yy $yy] 1}
-
-    proc mat_item_ua {p t item r u redraw} {
-	variable _
-	foreach a [dict keys $u] {
-	    switch $r {abs {dict set _($t) $item $a [dict get $u $a]}
-		rel {dict set _($t) $item $a [expr {[dict get $_($t) $item $a] + [dict get $u $a]}]}}
-	    pd [concat $t.rp _cb update $item $a [pdtk_enquote [dict get $_($t) $item $a]] \;]
-	}
-	if {$redraw == 1} {mat_redraw $p $t $item}
-    }
-
-    proc mat_draw {p t a x y} {
-	variable _
-	switch $a {
-	    motion {
-		if {$_($t:af) == 1} {
-		    mat_item_pos $p $t $_($t:ci) abs [mat_tr $p $t y i $y] [mat_tr $p $t x i $x] [mat_tr $p $t y i $_($t:fy)] [mat_tr $p $t x i $x]
-		} else {
-		mat_item_pos $p $t $_($t:ci) abs [mat_tr $p $t x i $x] [mat_tr $p $t y i $y] [mat_tr $p $t x i $_($t:fx)] [mat_tr $p $t y i $y]
-		}
-	    }
-	    first {mat_item_new $p $t - [dict create type note g $_($t:cg) x 0 y 0 xx 0 yy 0 v 1]}}}
-
-    proc mat_resize_canvas {p t a x y} {mat_viewpoint $p $t [dict create action resize x $x y $y]}
-
-    proc mat_redraw {p t items} {
-	variable _
-	if {$_($t:af) == 1} {
-	    array set a {x y y x xx yy yy xx}
-	} else {
-	    array set a {x x y y xx xx yy yy}
-	}
-	switch $items {
-	    all {set items [dict keys $_($t)]}
-	    default {}}
-	foreach id $items {
-	    set x [mat_tr $p $t x t [dict get $_($t) $id $a(x)]]
-	    set y [mat_tr $p $t y t [dict get $_($t) $id $a(y)]]
-	    set qx [mat_tr $p $t x t [mat_quant $p $t x [dict get $_($t) $id $a(x)]]]
-	    set qy [mat_tr $p $t y t [mat_quant $p $t y [dict get $_($t) $id $a(y)]]]
-	    set wx [expr {[dict get $_($t) $id $a(xx)] - [dict get $_($t) $id $a(x)]}]
-	    if {$wx == 0} {set wx 1}
-	    set sx [expr abs([mat_tr $p $t x id $wx])]
-	    set qsx [expr int(abs([mat_tr $p $t x id [expr {[mat_quant $p $t x [dict get $_($t) $id $a(xx)]] - [mat_quant $p $t x [dict get $_($t) $id $a(x)]]}]]))]
-	    set wy [expr {[dict get $_($t) $id $a(yy)] - [dict get $_($t) $id $a(y)]}]
-	    if {$wy == 0} {set wy 1}
-	    set sy [expr abs([mat_tr $p $t y id $wy])]
-	    set qsy [expr int(abs([mat_tr $p $t y id [expr {[mat_quant $p $t y [dict get $_($t) $id $a(yy)]] - [mat_quant $p $t y [dict get $_($t) $id $a(y)]]}]]))]
-	    set ro [expr {int( [set s$a(y)] / 2.0 )}]
-	    if {[lsearch -integer $_($t:sel) $id] >= 0} {
-		set color $_($t:sc)
-	    } else {
-		set color [color [dict get $_($t:g) [dict get $_($t) $id g] color]]
-	    }
-	    switch [dict get $_($t) $id type] {
-		note {
-		    set r [$p.m find withtag "i$id && r"]
-		    set q [$p.m find withtag "i$id && q"]
-		    $p.m coords $r [::tkpath::coords rect $x $y $sx $sy -rx $ro -ry $ro]
-		    $p.m coords $q [::tkpath::coords rect $qx $qy $qsx $qsy  -rx $ro -ry $ro]
-		    $p.m itemconfigure $q -fillopacity [dict get $_($t) $id v] -fill $color
-		}
-		sound {
-		    set waveform [$p.m find withtag "i$id && w"]
-		    set r [$p.m find withtag "i$id && r"]
-#		    set ro [expr int($ro / 2.)]
-		    set ro 6
-		    $p.m coords $r [::tkpath::coords rect $x $y $sx $sy -rx $ro -ry $ro]
-		    $p.m itemconfigure $r -fillopacity [dict get $_($t) $id v] -fill $color
-		    $p.m coords $waveform $x $y
-		    $p.m itemconfigure $waveform -width $sx -height [expr int($sy)]
-#		    $p.m itemconfigure $waveform -width $sx
-		    $p.m coords [$p.m find withtag "i$id && tl"] [expr $x + 4] [expr $y + 4]
-		    $p.m coords [$p.m find withtag "i$id && tlr"] [$p.m bbox [$p.m find withtag "i$id && tl"] ]
-		    $p.m coords [$p.m find withtag "i$id && tf"] [expr $x + $sx] [expr $y + 4]
-		    $p.m coords [$p.m find withtag "i$id && tfr"] [$p.m bbox [$p.m find withtag "i$id && tf"] ]
-		}
-	    }    
-	}
-    }
-
-    proc mat_item_v {p t a x y} {
-	variable _
-	foreach item $_($t:sel) {
-	    mat_item_ua $p $t $item rel [dict create v [expr {($x - $_($t:cx)) / 100.0}]] 1
-	}
-	mat_item_info $p $t $_($t:sel)
-    }
-
-    proc mat_move_canvas {p t a x y} {mat_viewpoint $p $t [dict create action move x $x y $y]}
-
-    proc mat_move_object {p t a x y} {
-	variable _
-	set mx [mat_tr $p $t x d [expr {$x - $_($t:cx)}]]
-	set my [mat_tr $p $t y d [expr {$y - $_($t:cy)}]]
-	if {$_($t:af) == 1} {
-	    foreach item $_($t:sel) {mat_item_pos $p $t $item rel $my $mx $my $mx}
-	} else {
-	    foreach item $_($t:sel) {mat_item_pos $p $t $item rel $mx $my $mx $my}
-	}
-	mat_item_info $p $t $_($t:sel)
-    }
-
-    proc mat_resize_left {p t a x y} {mat_resize_object $p $t x $x $y}
-    proc mat_resize_right {p t a x y} {mat_resize_object $p $t xx $x $y}    
-    proc mat_resize_top {p t a x y} {mat_resize_object $p $t y $x $y}
-    proc mat_resize_bottom {p t a x y} {mat_resize_object $p $t yy $x $y}  
-    proc mat_resize_tl {p t a x y} {mat_resize_object $p $t x $x $y; mat_resize_object $p $t y $x $y}
-    proc mat_resize_tr {p t a x y} {mat_resize_object $p $t x $x $y; mat_resize_object $p $t yy $x $y}
-    proc mat_resize_bl {p t a x y} {mat_resize_object $p $t xx $x $y; mat_resize_object $p $t y $x $y}
-    proc mat_resize_br {p t a x y} {mat_resize_object $p $t xx $x $y; mat_resize_object $p $t yy $x $y}
-
-    proc mat_resize_object {p t e x y} {
-	variable _
-	if {$_($t:af) == 1} {
-	    array set ax {x y xx y y x yy x}
-	} else {
-	    array set ax {x x xx x y y yy y}
-	}
-	set m [mat_tr $p $t $ax($e) d [expr $$ax($e) - $_($t:c$ax($e))]]
-	foreach item $_($t:sel) {mat_item_ua $p $t $item rel [dict create $e $m] 1}
-	mat_item_info $p $t $_($t:sel)
-    }
-
-    proc mat_cleansel {p t sel} {
-	set clean {}
-	foreach item $sel {if {[lindex [$p.m itemcget $item -tags] 0] eq "item"} {lappend clean [lindex [$p.m itemcget $item -tags] 2]}}
-	set clean [lsort -integer -unique $clean]
-	return $clean
-    }
-
-    proc mat_loc {p t si x y} {
-	variable _
-	if {$si == 1} {
-	    set sy $y
-	    set sx $x
-	    set x [mat_tr $p $t x i $x] 
-	    set y [mat_tr $p $t y i $y]
-	} else {
-	    set sy [mat_tr $p $t y t $y]
-	    set sx [mat_tr $p $t x t $x]
-	}
-	$p.m coords lY [concat M 0 $sy L [winfo width $p.m] $sy]
-	$p.m coords lX [concat M $sx 0 L $sx [winfo height $p.m]]
-	$p.m itemconfigure loc -text [list $x $y]
-    }
-
-    proc mat_hover {p t x y} {
-	variable _
-#	mat_loc $p $t 1 $x $y
-	if {[$p.m find withtag sel] ne ""} {
-	    mat_sel $p $t motion $x $y
-	} else {
-	    set clicked [mat_cleansel $p $t [$p.m find overlapping [expr $x - 2]  [expr $y - 2] [expr $x + 2] [expr $y + 2]]]
-	    if {$clicked ne ""} {
-		mat_resize_modes $p $t $x $y [lindex $clicked end]
-		if {[llength $_($t:sel)] <= 1} {mat_updatesel $p $t [lindex $clicked end]}
-	    } else {
-		mat_mode $p $t move_canvas
-	    }
-	}
-    }
-    
-    proc mat_resize_modes {p t x y id} {
-	variable _
-	set d 3
-	set dx [expr {abs([mat_tr $p $t x t [dict get $_($t) $id x]] - $x)}]
-	set dxx [expr {abs([mat_tr $p $t x t [dict get $_($t) $id xx]] - $x)}]
-	set dy [expr {abs([mat_tr $p $t y t [dict get $_($t) $id y]] - $y)}]
-	set dyy [expr {abs([mat_tr $p $t y t [dict get $_($t) $id yy]] - $y)}]
-	if {$dx < $d && $dy < $d} {
-	    mat_mode $p $t resize_tl
-	} elseif {$dxx < $d && $dy < $d} {
-	    mat_mode $p $t resize_tr
-	} elseif {$dx < $d && $dyy < $d} {
-	    mat_mode $p $t resize_bl
-	} elseif {$dxx < $d && $dyy < $d} {
-	    mat_mode $p $t resize_br
-	} elseif {$dx < 5} {
-	    mat_mode $p $t resize_left
-	} elseif {$dxx < 5} {
-	    mat_mode $p $t resize_right
-	} elseif {$dy < 1} {
-	    mat_mode $p $t resize_top
-	} elseif {$dyy < 1} {
-	    mat_mode $p $t resize_bottom
-	} else {
-	    mat_mode $p $t move_object
-	}
-    }
-
-    proc mat_item_info {p t clicked} {
-	variable _
-	set n 0;$p.m delete hover
-	foreach item $clicked {
-	    set info ""
-	    set data  [dict get $_($t) $item] 
-	    foreach d $data {lappend info [string range $d 0 7]}
-	    $p.m create text [list [expr [winfo width $p.m] - 8.0] [expr [winfo height $p.m] - 8.0 - 11 * $n.0]] -fill $_($t:sc) -justify right -anchor se -font {{bitstream vera sans mono} 10} -tags hover -text $info
-	    incr n		
-	}}
-
-    proc mat_togglesel {p t d} {
-	variable _
-	if {[lsearch -integer $_($t:sel) $d] < 0} {
-	    set _($t:sel) [concat $_($t:sel) $d]
-	} else {
-	    set _($t:sel) [lsearch -inline -not -all -integer $_($t:sel) $d]
-	}
-	mat_redraw $p $t $d
-    }
-
-    proc mat_updatesel {p t ns} {
-	variable _
-	set os $_($t:sel)
-	set _($t:sel) $ns
-	mat_redraw $p $t  [lsort -unique -integer [concat $os $ns]]
-	mat_item_info $p $t $ns
-    }
-
-    proc mat_click {m button action p t x y X Y} {
-	variable _
-	set clicked [mat_cleansel $p $t [$p.m find overlapping $x $y $x $y]]
-	set a [$p.m itemcget mode -text]
-	switch $action {
-	    first {
-		foreach xy {x y}  {set _($t:f$xy) [set $xy]}
-		switch $button {
-		    1 {if {$m eq "control"} {
-			mat_mode $p $t draw; mat_draw $p $t $action $x $y
-		    } elseif {$m eq "double" || $m eq "shift"} {
-			if {[llength $clicked] > 0} {
-			    mat_togglesel $p $t $clicked 
-			} else {
-			    mat_sel $p $t first $x $y
-			    mat_mode $p $t sel
-			}
-		    } elseif {[$p.m find withtag sel] ne ""} {
-			mat_sel $p $t release $x $y
-		    } elseif {[llength $_($t:sel)] > 1 && [llength $clicked] > 0 && [lsearch $_($t:sel) $clicked] == -1} {
-			mat_updatesel $p $t $clicked}}
-		    2 {mat_mode $p $t resize_canvas}
-		    3 {if {$clicked ne ""} {
-			mat_mode $p $t item_v } else {mat_rmenu $p $t $X $Y}}}}
-	    motion {eval mat_$a $p $t $action $x $y}
-	    release {
-		switch $button {
-		    1 {if {$a eq "draw" || ($a eq "sel" && [expr {abs($_($t:fx) - $x)}] >13)} {eval mat_$a $p $t $action $x $y}}
-		    2 {mat_mode $p $t move_canvas}
-		    3 {mat_mode $p $t move_canvas}
-		}
-	    }
-	}
-	foreach xy {x y}  {set _($t:c$xy) [set $xy]}
-    }
-    
-    proc mat_rmenu {p t x y} {
-	variable _
-	if {[winfo exists $p.rmenu] != 1} {
-	    set m [menu $p.rmenu -tearoff no]
-	    $m add command -label "zoom to fit" -command "::ix::mat_viewpoint $p $t {action fit}"
-	    $m add command -label "reset zoom" -command "::ix::mat_viewpoint $p $t {action reset}"
-	    $m add command -label "add group" -command "::ix::mat_group_new $p $t -"
-	    $m add cascade -label "sel to group" -menu [menu $p.rmenu.seltogroup -tearoff no]
-	    $m add command -label "flip axes" -command "::ix::mat_flipaxe $p $t"
-	} else {
-	    #	    $p.rmenu entryconfigure 0 -label $x
-	}
-	$p.rmenu.seltogroup delete 0 end
-	foreach group [dict keys $_($t:g)] {
-	    $p.rmenu.seltogroup add command -label [dict get $_($t:g) $group name] -command "::ix::mat_group_assign $p $t $group"
-	}
-	tk_popup $p.rmenu $x $y
-    }
-
-    proc mat_tr {p t d inv v} {
-	variable _
-	array set dm {x width y height}
-	switch $inv {
-	    t {return [expr {($v - $_($t:${d}a)) / ($_($t:${d}b) - $_($t:${d}a) + 0.0) * [winfo $dm($d) $p.m]}]}
-	    i {return [expr {($_($t:${d}b) - $_($t:${d}a)) * $v /([winfo $dm($d) $p.m] + 0.0) + $_($t:${d}a)}]}
-	    d {return [expr {($_($t:${d}b) - $_($t:${d}a)) * $v /([winfo $dm($d) $p.m] + 0.0)}]}
-	    id {return [expr {$v / ($_($t:${d}b) - $_($t:${d}a) + 0.0) * [winfo $dm($d) $p.m]}]}}}
-
-    proc mat_viewpoint {p t opts} {
-	variable _
-	switch [dict get $opts action] {
-	    fit {
-		set i 0
-		dict for {s xy} $_($t) {
-		    dict with xy {
-		        if {$i == 0} {
-			    set xa $x
-			    set xb $x
-			    set ya $y
-			    set yb $y
-			}
-			if {$x > $xb} {set xb $x}
-			if {$x < $xa} {set xa $x}
-			if {$y > $yb} {set yb $y}
-			if {$y < $ya} {set ya $y}
-			if {$xx > $xb} {set xb $xx}
-			if {$xx < $xa} {set xa $xx}
-			if {$yy > $yb} {set yb $yy}
-			if {$yy < $ya} {set ya $yy}
-			incr i
-		    }
-		}
-		set _($t:xa) $xa
-		set _($t:xb) $xb
-		set _($t:ya) $ya
-		set _($t:yb) $yb
-	    }
-	    reset {
-		set _($t:ya) $_($t:yao);set _($t:yb) $_($t:ybo);set _($t:xa) $_($t:xao);set _($t:xb) $_($t:xbo)
-	    }
-	    move {
-		foreach xy {x y} {
-		    set mvt [mat_tr $p $t $xy d [expr {[dict get $opts $xy] - $_($t:c$xy)}]]
-		    foreach ab {a b} {set _($t:${xy}$ab) [expr {$_($t:${xy}$ab) - $mvt}]}}
-	    }
-	    zoom {
-		array set dir {in 0.5 out 1.5}
-		foreach xy [dict get $opts axe] {
-		    set radius  [expr {($_($t:${xy}b) - $_($t:${xy}a)) / 2. * $dir([dict get $opts dir])}]
-		    set center [mat_tr $p $t $xy i [dict get $opts $xy]]
-		    set _($t:${xy}a) [expr {$center - $radius}]
-		    set _($t:${xy}b) [expr {$center + $radius}]
-		}
-	    }
-	    resize {
-		foreach xy {x y} {
-		    set mvt [mat_tr $p $t $xy d [expr {[dict get $opts $xy] - $_($t:c$xy)}]]
-		    set _($t:${xy}a) [expr {$_($t:${xy}a) - $mvt}]
-		    set _($t:${xy}b) [expr {$_($t:${xy}b) + $mvt}]}
-	    }
-	    scroll {
-		set xy [dict get $opts axis]
-		set mv [expr {($_($t:${xy}b) - $_($t:${xy}a)) / 4.0}]
-		foreach ab {a b} {set _($t:${xy}$ab) [expr {[dict get $opts units] > 0 ? $_($t:${xy}$ab) + $mv : $_($t:${xy}$ab) - $mv }]}
-	    }
-	}
-	mat_redraw $p $t all
-	mat_gridlines $p $t
-    }
-    proc mat_flipaxe {p t} {
-	variable _
-	set _($t:af) [expr $_($t:af) == 1 ? 0 : 1]
-	
-	set ya $_($t:ya)
-	set xa $_($t:xa)
-	set xb $_($t:xb)
-	set yb $_($t:yb)
-	set qx $_($t:qx)
-	set qy $_($t:qy)
-	set mx $_($t:mx)
-	set my $_($t:my)
-
-	set _($t:ya) $xa
-	set _($t:xa) $ya
-	set _($t:yb) $xb
-	set _($t:xb) $yb
-	set _($t:qx) $qy
-	set _($t:qy) $qx
-	set _($t:mx) $my
-	set _($t:my) $mx
-
-	mat_gridlines $p $t
-	mat_redraw $p $t all
-    }
-    proc mat_clip {p t action} {
-	variable _
-	switch $action {
-	    selecta {
-		mat_updatesel $p $t [dict keys $_($t)]
-	    }
-	    cut {
-		set _($t:c) [dict create]
-		set i 0
-		foreach item $_($t:sel) {
-		    dict set _($t:c) $i [dict get $_($t) $item]
-		    incr i
-		}
-		mat_item_delete $p $t
-	    }
-	    copy {
-		set _($t:c) [dict create]
-		set i 0
-		foreach item $_($t:sel) {
-		    dict set _($t:c) $i [dict get $_($t) $item]
-		    incr i
-		}
-	    }
-	    paste {
-		set pasted {}
-		foreach item [dict keys $_($t:c)] {
-		    mat_item_new $p $t - [dict get $_($t:c) $item]
-		}
-	    }
-	}
-    }
-    
-    proc mat_mode {p t m} {
-	array set cursor {draw pencil move_canvas fleur move_object dotbox item_v box_spiral resize_canvas bogosity sel cross_reverse resize_left left_side resize_right right_side resize_top top_side resize_bottom bottom_side resize_tl top_left_corner resize_tr top_right_corner resize_bl bottom_left_corner resize_br bottom_right_corner}
-	$p.m itemconfigure mode -text $m
-	$p.m configure -cursor $cursor($m)
-     }
-
-    proc mat_group_assign {p t group} {
-	variable _
-	foreach item $_($t:sel) {
-	    mat_item_ua $p $t $item abs [dict create g $group] 0
-	}	
-    }
-
-    proc mat_group_new {p t grp} {
-	variable _
-	set exists 0
-	dict for {key val} $_($t:g) {if {[dict get $val name] eq $grp} {set exists 1}}
-	if {$exists == 0} {
-	    if {$grp eq "-"} {set grp [random_txt [expr "int(floor(rand() * 10 + 2))"]]}
-	    set n -1
-	    while true { if {[lsearch -integer [dict keys $_($t:g)] [incr n]] == -1} {break}}
-	    dict set _($t:g) $n name $grp
-	    dict set _($t:g) $n color [rgb]
-	    set _($t:cg) $n
-	    mat_groups_view $p $t
-	    mat_group_active $p $t $n
-	}
-    }
-
-    proc mat_groups_view {p t} {
-	variable _
-	$p.m delete [$p.m find withtag group]
-	foreach i [dict keys $_($t:g)] {
-	    set id [$p.m create text [concat 68.0 [expr {38.0 + 11 * $i}]] -fill [color [dict get $_($t:g) $i color]] -justify right -anchor e -font {{bitstream vera sans mono} 10} -tags [concat group $i lb] -text [dict get $_($t:g) $i name]]
-	    $p.m bind $id <Enter> "::ix::mat_group_active $p $t $i"
-	    $p.m bind $id <1> "::ix::mat_group_assign $p $t $i"
-	    set bx [$p.m bbox $id]
-	    $p.m lower [$p.m create path [::tkpath::coords rect [lindex $bx 0] [lindex $bx 1] [expr [lindex $bx 2] - [lindex $bx 0]] [expr [lindex $bx 3] - [lindex $bx 1]] -rx 6 -ry 6] -tags [concat group $i bg] -strokewidth 1 -stroke white -fill white -fillopacity 0.5]
-	}
-    }
-
-    proc mat_group_active {p t g} {
-	variable _
-	set _($t:cg) $g
-	foreach n [dict keys $_($t:g)] {
-	    if {$g == $n} {set cb black; set cl white; set tl 1} {set cb white; set cl [color [dict get $_($t:g) $n color]]; set tl 0.5}
-	    set idb [$p.m find withtag "group && $n  && bg"]
-	    $p.m itemconfigure $idb -fill $cb -fillopacity $tl -stroke $cl
-	    set idl [$p.m find withtag "group && $n  && lb"]
-	    $p.m itemconfigure $idl -fill $cl; 
-	    if {$g == $n} {$p.m raise $idb;$p.m raise $idl;}
-	}
-    }
-
-    proc mat_key {p t k b} {
-	puts $k
-	switch $b {
-	    1 {
-		switch $k {
-		    22 {mat_item_delete $p $t}
-		    38 {mat_clip $p $t selecta}
-		    53 {mat_clip $p $t cut}
-		    54 {mat_clip $p $t copy}
-		    55 {mat_clip $p $t paste}
-		    97 {mat_viewpoint $p $t {action reset}}
-		    98 {mat_viewpoint $p $t {action scroll units -1 axis y}}
-		    100 {mat_viewpoint $p $t {action scroll units -1 axis x}}
-		    102 {mat_viewpoint $p $t {action scroll units 1 axis x}}
-		    104 {mat_viewpoint $p $t {action scroll units 1 axis y}}
-		    107 {mat_item_delete $p $t}
-		}
-	    }
-# 	    0 {
-# 		switch $k {
-# 		}
-# 	    }
-	}
-    }
-    
-    proc mat_drop {p t dropped x y} {
-#	foreach d $dropped {
-	    foreach d [split $dropped "\n"] {
-	    set x [mat_tr $p $t x i $x] 
-	    set y [mat_tr $p $t y i $y] 
-	    mat_item_new $p $t - [dict create type sound g 1 v 1 x $x y $y xx $x yy $y filename [regsub -- {^file:[/]+} $d "/"]]
-	}
-    }
-
-    proc mat_new {p t w h bg ln xa xb ya yb qx qy mx my samplerate} {
-	variable _
-	set sc orange
-	foreach xy {x y} {foreach ab {a b} {set ${xy}${ab}o [set ${xy}${ab}]}}
-	foreach a {sc ln xa xb ya yb xao xbo yao ybo qx qy mx my samplerate} {set _($t:$a) [set $a]}
-	if {[winfo exists $p.m] != 1} {
-	    canvas $p.m -bg $bg -width $w -height $h
-	    pack $p.m -side left
-	    bind $p.m <Key> "::ix::mat_key $p $t %k 1"
-	    bind $p.m <KeyRelease> "::ix::mat_key $p $t %k 0"
-#	    dnd bindtarget $p.m text/uri-list <Drop> "::ix::mat_drop $p $t %D %x %y"
-	    dnd bindtarget $p.m text/plain <Drop> "::ix::mat_drop $p $t %D %x %y"
-	    bind $p.m <Motion> "::ix::mat_hover $p $t %x %y"
-	    bind $p.m <4> "::ix::mat_viewpoint $p $t {action scroll units 1 axis x}"
-	    bind $p.m <5> "::ix::mat_viewpoint $p $t {action scroll units -1 axis x}"
-	    bind $p.m <Control-4> "::ix::mat_viewpoint $p $t {action zoom dir in axe x x %x y %y}"
-	    bind $p.m <Control-5> "::ix::mat_viewpoint $p $t {action zoom dir out axe x x %x y %y}"
-	    bind $p.m <Alt-4> "::ix::mat_viewpoint $p $t {action zoom dir in axe {x y} x %x y %y}"
-	    bind $p.m <Alt-5> "::ix::mat_viewpoint $p $t {action zoom dir out axe {x  y} x %x y %y}"
-	    bind $p.m <Control-Shift-4> "::ix::mat_viewpoint $p $t {action zoom dir in axe y x %x y %y}"
-	    bind $p.m <Control-Shift-5> "::ix::mat_viewpoint $p $t {action zoom dir out axe y x %x y %y}"
-	    bind $p.m <Shift-4> "::ix::mat_viewpoint $p $t {action scroll units -1 axis y}"
-	    bind $p.m <Shift-5> "::ix::mat_viewpoint $p $t {action scroll units 1 axis y}"
-	    foreach m {"Control-" "" "Shift-" "Double-"} {
-		foreach bn {1 2 3} {
-		    set b [list [concat $bn first] [concat B${bn}-Motion motion] [concat ButtonRelease-$bn release]]
-		    foreach ba {0 1 2} {
-			bind $p.m <$m[lindex [lindex $b $ba] 0]> "::ix::mat_click [list [string tolower [string trimright $m -1]]] $bn [lindex [lindex $b $ba] 1] $p $t %x %y %X %Y"}}}
-	    set bd [expr {[$p cget -bd] * 2}]
-#	    update
-            $p configure -bg gray -width [expr {[winfo width $p.m] + $bd}] -height [expr {[winfo height $p.m] + $bd}]
-	    $p.m create text {20 20} -fill blue -justify left -anchor w -font {{bitstream vera sans} 18} -tags mode -text move_canvas
-	    $p.m create text [list [expr {$w / 2.}] 5] -fill red -justify center -anchor n -font {{bitstream vera sans} 14} -tags q -text q
-	    $p.m create path "M 0 0" -tags lX -stroke black -strokeopacity 0.5
-	    $p.m create path "M 0 0" -tags lY -stroke black -strokeopacity 0.5
-	    $p.m create text "10 $h" -fill red -justify left -anchor sw -font {{bitstream vera sans} 12 bold} -fill purple -tags loc -text ""
-	    if {[info exists _($t)] != 1} {
-		set _($t) {}
-		set _($t:g) {}
-		set af 0; set i -1; set sel {}
-		foreach a {af i sel} {set _($t:$a) [set $a]}
-		mat_group_new $p $t default
-		mat_group_new $p $t wavs
-	    } 
-	}
-	mat_gridlines $p $t
-	mat_item_draw $p $t all
-	mat_groups_view $p $t
-    }
-    
-    proc mat_gridlines {p t} {
-	variable _
-	set w $p.m
-	$w delete gridlines
-	set gh [winfo height $w]
-	set gw [winfo width $w]
-	foreach item [$w find withtag gridline] {$w delete $item}
-	foreach xy {x y} {
-	    array set ta {x n y w}
-	    array set tj {x center y left}
-	    array set igx {y width x height}
-	    set range [expr {abs($_($t:${xy}b) - $_($t:${xy}a))}]
-	    set numshits [expr {$range / $_($t:q$xy)}]
-	    if {$numshits > $_($t:m${xy})} {set factor [expr {int($numshits / ($_($t:m${xy}) + 0.0) + 1)}]} else {
-		set factor [expr {1. / (int(1./($numshits / ($_($t:m${xy}) + 0.0) + 0.0)) + 0.0)}]
-	    }
-	    set increment [expr {$_($t:q${xy}) * $factor}]
-	    for {set x [expr {int($_($t:${xy}a) / ($increment + 0.0) + 1)*($increment + 0.0)}]} {[expr {$_($t:${xy}a) > $_($t:${xy}b) ? $x >=  $_($t:${xy}b) : $x <=  $_($t:${xy}b)}]} {set x [expr {$_($t:${xy}a) > $_($t:${xy}b) ? $x - $increment : $x + $increment}]} {
-		set og [mat_tr $p $t $xy t $x]
-		set invgeo [winfo $igx($xy) $w]
-		switch $xy {
-		    y {set coords [concat M [expr {int(rand()*23)}] $og L $invgeo $og]}
-		    x {set coords [concat M $og  [expr {int(rand()*16)}] L $og $invgeo]}}
-#		    y {set coords [concat M 0 $og L $invgeo $og]}
-#		    x {set coords [concat M $og 0 L $og $invgeo]}}
-		$w lower [$w create text [lrange $coords 1 2] -font {{Bitstream Vera Sans} 8} -fill [rc] -anchor $ta($xy) -text [string range $x 0 7] -justify $tj($xy) -tags gridline]
-		$w lower [$w create path $coords -stroke $_($t:ln) -strokedasharray [expr {int(rand()*42 + 1)}] -tags gridline -strokewidth 1]
-	    }}}}
-
-#> mat frame
-#. -bd 3 #w 384 #h 144 #bg gray86 #ln white
-#. #samplerate 44100
-#. #Xa 123 #Xb 2000 #Ya 127 #Yb 0 #qx 50 #qy 1 #mx 12 #my 64
-#. @add ::ix::mat_item_new .- .| .#1 {type .#2}
-#. @update  ::ix::mat_item_ua .- .| .#1 abs {.#2 .#3} 1
-#. @updaterel  ::ix::mat_item_ua .- .| .#1 rel {.#2 .#3} 1
-#. @up  ::ix::mat_item_ua .- .| .#1 abs {.#2 .#3} 0
-#. @uprel  ::ix::mat_item_ua .- .| .#1 rel {.#2 .#3} 0
-puts "mat .- .|"
-::ix::mat_new .- .| .#w .#h .#bg .#ln .#Xa .#Xb .#Ya .#Yb .#qx .#qy .#mx .#my .#samplerate
-#bind .-.m <Enter> {focus .-.m}
-bind .-.m <Leave> {focus .^.c}
diff --git a/extensions/gui/ix/toxy/ngrid-demo.pd b/extensions/gui/ix/toxy/ngrid-demo.pd
deleted file mode 100644
index 29dacac14..000000000
--- a/extensions/gui/ix/toxy/ngrid-demo.pd
+++ /dev/null
@@ -1,310 +0,0 @@
-#N canvas 1333 136 79 124 12;
-#X msg 785 -536 -height 26 -width 26 -bg gray95;
-#N canvas 0 0 595 500 intro 1;
-#X obj 9 418 osc~;
-#X obj 9 456 dac~;
-#X obj 9 399 line;
-#X obj 9 -29 widget ngrid n1 #w 382 #h 382 #move 0 #radius 8;
-#X floatatom 360 365 3 2 233 0 - - -;
-#X floatatom 381 382 2 4 32 0 - - -;
-#X msg 394 381 radius \$1;
-#X msg 382 362 spread \$1;
-#X obj 403 337 bng 23 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
--1;
-#X obj 61 418 osc~;
-#X obj 35 418 osc~;
-#X obj 87 418 osc~;
-#X obj 113 418 osc~;
-#X obj 139 418 osc~;
-#X obj 35 399 line;
-#X obj 61 399 line;
-#X obj 87 399 line;
-#X obj 113 399 line;
-#X obj 139 399 line;
-#X obj 165 418 osc~;
-#X obj 191 418 osc~;
-#X obj 9 380 route 0x 0y 1x 1y 2x 2y 3x 3y 4x 4y;
-#X obj 296 405 until;
-#X obj 328 422 + 1;
-#X obj 296 424 i;
-#X msg 330 405 0;
-#X obj 217 418 osc~;
-#X obj 243 418 osc~;
-#X obj 165 399 line;
-#X obj 191 399 line;
-#X obj 217 399 line;
-#X obj 243 399 line;
-#X obj 355 446 tow . ngrid n1;
-#X obj 9 360 Append 100;
-#X msg 258 363 move swarm;
-#X msg 312 385 5;
-#X msg 326 363 move;
-#X obj 86 437 prepend set;
-#X obj 86 454 prepend set;
-#X obj 160 442 hsl 128 15 0 2000 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 2100 1;
-#X obj 160 458 hsl 128 15 0 2000 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X obj 423 50 widget ngrid m #w 64 #h 64;
-#X msg 407 451 add x 1 0 10 \, add y 2 0 10;
-#X obj 425 127 route x y;
-#X obj 468 146 prepend set;
-#X obj 400 147 prepend set;
-#X obj 435 166 hsl 128 15 0 10 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 12700 1;
-#X obj 435 181 hsl 128 15 0 10 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 385 1;
-#X obj 496 50 widget ngrid m #w 64 #h 64;
-#X obj 510 212 widget ngrid m #w 64 #h 64;
-#X obj 514 286 widget ngrid m #w 64 #h 64;
-#X obj 501 367 widget ngrid m #w 64 #h 64;
-#X obj 512 264 prepend pos;
-#X obj 503 371 prepend pos;
-#X obj 425 57 prepend setpos;
-#X obj 476 59 prepend setpos;
-#X msg 353 406 add \$1x 1000 0 2000;
-#X msg 353 425 add \$1y 1000 0 2000;
-#X msg 301 465 pos 4y \$1;
-#X obj 9 437 *~ 0.033;
-#X obj 513 215 prepend pos;
-#X obj 417 198 prepend x;
-#X obj 472 197 prepend y;
-#X msg 409 414 add x 1 10 0 \, add y 2 10 0;
-#X msg 407 434 add x 1 0 10 \, add y 2 10 0;
-#X msg 407 470 add x 1 10 0 \, add y 2 0 10;
-#X msg 303 446 pos 4x \$1;
-#X msg 240 472 pos 3x \$1;
-#X msg 168 472 pos 3y \$1;
-#X msg 195 363 move error;
-#X obj 406 219 sin;
-#X obj 410 240 hsl 99 15 0 6.28 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 0 1;
-#X msg 404 297 pos 0x \$1;
-#X obj 458 220 cos;
-#X msg 456 295 pos 0y \$1;
-#X obj 413 259 * 500;
-#X obj 466 258 * 500;
-#X obj 412 279 + 1000;
-#X obj 468 278 + 1000;
-#X obj 414 311 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X msg 451 315 6.28 1000;
-#X obj 446 334 line;
-#X obj 449 370 select 6.28 0;
-#X obj 448 352 spigot;
-#X msg 472 333 0 2000;
-#X obj 49 480 switch~;
-#X obj 430 324 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
-1;
-#X obj 63 363 hsl 128 15 0 2000 0 0 empty empty empty -2 -6 0 8 -262144
--1 -1 12700 1;
-#X obj 78 368 prepend set;
-#X connect 0 0 59 0;
-#X connect 2 0 0 0;
-#X connect 3 0 33 0;
-#X connect 4 0 7 0;
-#X connect 5 0 6 0;
-#X connect 6 0 32 0;
-#X connect 7 0 32 0;
-#X connect 8 0 35 0;
-#X connect 8 0 42 0;
-#X connect 8 0 63 0;
-#X connect 8 0 65 0;
-#X connect 8 0 64 0;
-#X connect 8 0 86 0;
-#X connect 9 0 59 0;
-#X connect 10 0 59 0;
-#X connect 11 0 59 0;
-#X connect 12 0 59 0;
-#X connect 13 0 59 0;
-#X connect 14 0 10 0;
-#X connect 15 0 9 0;
-#X connect 16 0 11 0;
-#X connect 17 0 12 0;
-#X connect 18 0 13 0;
-#X connect 19 0 59 0;
-#X connect 20 0 59 0;
-#X connect 21 0 2 0;
-#X connect 21 1 14 0;
-#X connect 21 2 15 0;
-#X connect 21 3 16 0;
-#X connect 21 4 17 0;
-#X connect 21 5 18 0;
-#X connect 21 6 28 0;
-#X connect 21 7 29 0;
-#X connect 21 8 30 0;
-#X connect 21 8 37 0;
-#X connect 21 9 31 0;
-#X connect 21 9 38 0;
-#X connect 22 0 24 0;
-#X connect 23 0 24 1;
-#X connect 24 0 23 0;
-#X connect 24 0 56 0;
-#X connect 24 0 57 0;
-#X connect 25 0 24 1;
-#X connect 26 0 59 0;
-#X connect 27 0 59 0;
-#X connect 28 0 19 0;
-#X connect 29 0 20 0;
-#X connect 30 0 26 0;
-#X connect 31 0 27 0;
-#X connect 33 0 21 0;
-#X connect 34 0 32 0;
-#X connect 35 0 25 0;
-#X connect 35 0 22 0;
-#X connect 36 0 32 0;
-#X connect 37 0 39 0;
-#X connect 38 0 40 0;
-#X connect 39 0 66 0;
-#X connect 39 0 68 0;
-#X connect 40 0 58 0;
-#X connect 40 0 67 0;
-#X connect 41 0 43 0;
-#X connect 41 0 55 0;
-#X connect 41 0 60 0;
-#X connect 42 0 41 0;
-#X connect 42 0 51 0;
-#X connect 43 0 45 0;
-#X connect 43 1 44 0;
-#X connect 44 0 47 0;
-#X connect 45 0 46 0;
-#X connect 46 0 61 0;
-#X connect 47 0 62 0;
-#X connect 48 0 43 0;
-#X connect 48 0 54 0;
-#X connect 48 0 60 0;
-#X connect 49 0 52 0;
-#X connect 50 0 53 0;
-#X connect 52 0 50 0;
-#X connect 53 0 51 0;
-#X connect 54 0 41 0;
-#X connect 55 0 48 0;
-#X connect 56 0 32 0;
-#X connect 57 0 32 0;
-#X connect 58 0 32 0;
-#X connect 59 0 1 0;
-#X connect 59 0 1 1;
-#X connect 60 0 49 0;
-#X connect 61 0 60 0;
-#X connect 61 0 55 0;
-#X connect 61 0 54 0;
-#X connect 62 0 60 0;
-#X connect 62 0 54 0;
-#X connect 62 0 55 0;
-#X connect 63 0 48 0;
-#X connect 64 0 50 0;
-#X connect 65 0 49 0;
-#X connect 66 0 32 0;
-#X connect 67 0 32 0;
-#X connect 68 0 32 0;
-#X connect 69 0 32 0;
-#X connect 70 0 75 0;
-#X connect 71 0 70 0;
-#X connect 71 0 73 0;
-#X connect 72 0 32 0;
-#X connect 73 0 76 0;
-#X connect 74 0 32 0;
-#X connect 75 0 77 0;
-#X connect 76 0 78 0;
-#X connect 77 0 72 0;
-#X connect 78 0 74 0;
-#X connect 79 0 83 1;
-#X connect 79 0 80 0;
-#X connect 80 0 81 0;
-#X connect 81 0 83 0;
-#X connect 82 0 84 0;
-#X connect 82 1 80 0;
-#X connect 83 0 82 0;
-#X connect 83 0 71 0;
-#X connect 84 0 81 0;
-#X connect 86 0 85 0;
-#X connect 87 0 88 0;
-#X connect 88 0 33 0;
-#X restore 18 35 pd intro;
-#N canvas 0 0 442 580 om 0;
-#X obj 306 502 sendOSC;
-#X msg 307 426 connect localhost 16180;
-#X obj 306 483 prepend send;
-#X obj 23 382 dumpOSC 3339;
-#X obj 22 -8 widget ngrid n2 #w 382 #h 382 #move 0 #radius 8;
-#X obj 23 403 OSCroute /om;
-#X obj 23 422 OSCroute /new_port;
-#X obj 23 441 niagara 4;
-#X obj 23 460 niagara 1;
-#X obj 23 498 glue;
-#X obj 23 555 prepend add;
-#X obj 23 479 a2l;
-#X obj 406 407 t b b b;
-#X msg 306 464 /om/request/all_objects 5;
-#X obj 207 388 widget dm dmngr #items .(error normal swarm trails.)
-;
-#X msg 154 394 move \$1;
-#X msg 351 503 disconnect;
-#X obj 99 459 prepend /om/synth/set_port_value 1;
-#X msg 305 445 /om/engine/register_client 0 localhost 3339;
-#X obj 72 479 niagara 1;
-#X obj 23 517 spigot;
-#X msg 72 517 1;
-#X msg 92 517 0;
-#X obj 72 498 route CONTROL;
-#X obj 146 421 OSCroute /control_change;
-#X obj 146 438 prepend setpos;
-#X obj 102 401 spigot;
-#X obj 133 387 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X obj 165 478 OSCroute /node_removal;
-#X obj 112 517 niagara 1;
-#X obj 23 536 spigot;
-#X msg 72 536 1;
-#X msg 92 536 0;
-#X obj 112 536 route INPUT;
-#X obj 166 497 prepend delete;
-#X obj 354 406 loadbang;
-#X text 266 546 www.nongnu.org/om-synth/;
-#X obj 199 532 print NOSHIT;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 5 0;
-#X connect 3 0 37 0;
-#X connect 4 0 17 0;
-#X connect 5 0 6 0;
-#X connect 5 0 26 0;
-#X connect 5 0 28 0;
-#X connect 6 0 7 0;
-#X connect 7 0 8 0;
-#X connect 7 1 9 1;
-#X connect 8 0 11 0;
-#X connect 8 1 19 0;
-#X connect 9 0 20 0;
-#X connect 10 0 4 0;
-#X connect 11 0 9 0;
-#X connect 12 0 13 0;
-#X connect 12 1 18 0;
-#X connect 12 2 1 0;
-#X connect 13 0 2 0;
-#X connect 14 0 15 0;
-#X connect 15 0 4 0;
-#X connect 16 0 0 0;
-#X connect 17 0 2 0;
-#X connect 18 0 2 0;
-#X connect 19 0 23 0;
-#X connect 19 1 29 0;
-#X connect 20 0 30 0;
-#X connect 21 0 20 1;
-#X connect 22 0 20 1;
-#X connect 23 0 21 0;
-#X connect 23 1 22 0;
-#X connect 24 0 25 0;
-#X connect 25 0 4 0;
-#X connect 26 0 24 0;
-#X connect 27 0 26 1;
-#X connect 28 0 34 0;
-#X connect 29 0 33 0;
-#X connect 30 0 10 0;
-#X connect 31 0 30 1;
-#X connect 32 0 30 1;
-#X connect 33 0 31 0;
-#X connect 33 1 32 0;
-#X connect 34 0 4 0;
-#X connect 35 0 12 0;
-#X restore 18 59 pd om;
diff --git a/extensions/gui/ix/toxy/ngrid.wid b/extensions/gui/ix/toxy/ngrid.wid
deleted file mode 100755
index 6d8f16d2d..000000000
--- a/extensions/gui/ix/toxy/ngrid.wid
+++ /dev/null
@@ -1,150 +0,0 @@
-namespace eval ::ix {
-    proc random_int {} {return [expr "int(floor(rand()*16))"]}
-    proc random_clr {} {
-        return [format "\#%1X%1X%1X%1X%1X%1X" [random_int] [random_int] [random_int] [random_int] [random_int] [random_int]]
-    }
-    variable _
-
-    proc ngrid_new {path target w h bg ln div move spread radius max} {
-	variable _
-	if {[winfo exists $path.ngrid] != 1} {
-	    canvas $path.ngrid -bg $bg -width $w -height $h
-	    pack $path.ngrid -side left
-	    bind $path.ngrid <1> "::ix::ngrid_click $path $target %x %y"
-	    bind $path.ngrid <B1-Motion> [bind $path.ngrid <1>]
-	    ngrid_gridlines $path $target $ln $div
-	    set bd [expr {[$path cget -bd] * 2}]
-	    $path configure -bg $bg -width [expr [winfo width $path.ngrid] + $bd] -height [expr [winfo height $path.ngrid] + $bd]
-	}
-	set _($target:recent) 0
-	set _($target:n) 0
-	set _($target:move) $move
-	set _($target:spread) $spread
-	set _($target:radius) $radius
-	set _($target:max) $max}
-
-    proc ngrid_find {which path target what udata} {
-	variable _
-	array set dm {x width y height}
-	for {set n 0 } {$n <= $_($target:n)} {incr n} {
-	    foreach xy {x y} {
-		if {[$path.ngrid find withtag name_${xy}_$n] ne "" && [string match "$what*" [lindex $_($target:box$n:$xy) 0]]} {
-		    set x [expr [lindex [$path.ngrid coords sqr_$n] 0] + $_($target:radius)]
-		    set y [expr [lindex [$path.ngrid coords sqr_$n] 1] + $_($target:radius)]
-		    set $xy  [expr ($udata - [lindex $_($target:box$n:$xy) 1 ] + 0.0) / ([lindex $_($target:box$n:$xy) 2] - [lindex $_($target:box$n:$xy) 1 ] + 0.0) * [winfo $dm($xy) $path.ngrid]]
-		    switch $which {
-			setpos {$path.ngrid coords sqr_$n [expr $x - $_($target:radius)] [expr $y - $_($target:radius)] [expr $x + $_($target:radius)] [expr $y + $_($target:radius)]}
-			pos { 
-			    set _($target:recent) $n
-			    ngrid_click $path $target $x $y 
-			}
-			remove {
-			    $path.ngrid delete name_${xy}_$n
-			    if {[$path.ngrid find withtag name_x_$n] eq "" && [$path.ngrid find withtag name_x_$n] eq ""} {
-				$path.ngrid delete sqr_$n; $path.ngrid delete hist_$n}}}}}}}
-
-    proc ngrid_vset {path target what where} {variable _; set _($target:$what) $where}
-
-    proc ngrid_add {path target name cur min max} {
-	variable _
-	if {$max == $min} {set max 1.0; set min 0.0}
-	array set justify {x left y right}
-	array set anchor {y e x w}
-       	for {set n 0 } {$n <= $_($target:n)} {incr n} {foreach xy {x y} {
-	    if {[$path.ngrid itemcget name_${xy}_$n -text] eq $name} {return}}}
-
-	for {set n 0 } {$n <= $_($target:n)} {incr n} {foreach xy {x y} {
-	    if {[$path.ngrid find withtag name_x_$n] eq "" && [$path.ngrid find withtag name_y_$n] eq ""} {
-		set fill [set _($target:box$n:fill) [random_clr]]
-		$path.ngrid create oval 0 0 0 0 -tags sqr_$n -fill $fill -outline white -width 2
-		set rx [expr rand() * [winfo width $path.ngrid]]; set ry [expr rand() * [winfo height $path.ngrid]]
-		$path.ngrid create line $rx $ry $rx $ry -tags hist_$n -fill $fill
-		$path.ngrid bind sqr_$n <1> "set ::ix::_($target:recent) $n; ::ix::ngrid_click $path $target %x %y"
-		$path.ngrid bind sqr_$n <B1-Motion> [$path.ngrid bind sqr_$n <1>]
-		$path.ngrid bind sqr_$n <Enter> "::ix::ngrid_highlight $path $target $n grey96"
-		$path.ngrid bind sqr_$n <Leave> "::ix::ngrid_highlight $path $target $n -"
-		ngrid_move $path $target $n $rx $ry
-		incr _($target:n)
-	    }
-	    if {[$path.ngrid find withtag name_${xy}_$n] eq ""} {
-		set _($target:box$n:$xy) [list $name $min $max]
-		puts "adding $xy $n  $name $min $max"
-		switch $xy {
-		    x {
-			set tl [concat 0 [expr 5 + $n * 8.0]]
-			set qx [expr ($cur - $min) / ($max - $min + 0.0) * [winfo width $path.ngrid]]
-			set qy [expr [lindex [$path.ngrid coords sqr_$n] 1] + $_($target:radius)]}
-		    y {
-			set tl [concat [winfo width $path.ngrid] [expr 5 + $n * 8.0]]
-			set qx [expr [lindex [$path.ngrid coords sqr_$n] 0] + $_($target:radius)]
-			set qy [expr ($cur - $min) / ($max - $min + 0.0) * [winfo height $path.ngrid]]}}
-		$path.ngrid create text $tl -tags name_${xy}_$n -fill $_($target:box$n:fill) -font {{Bitstream Vera Sans} 8} -text $name -anchor $anchor($xy) -justify $justify($xy)
-		$path.ngrid lower name_${xy}_$n
-		$path.ngrid bind name_${xy}_$n <Enter> "::ix::ngrid_highlight $path $target $n grey96"
-		$path.ngrid bind name_${xy}_$n <Leave> "::ix::ngrid_highlight $path $target $n -"
-		ngrid_move $path $target $n $qx $qy
-		return}}}}
-
-    proc ngrid_highlight {path target n color} {
-	variable _
-	foreach el [list name_y_$n name_x_$n sqr_$n] {
-	    if {$color eq "-"} {set color $_($target:box$n:fill)}
-	    $path.ngrid itemconfigure $el -fill $color
-	    set _($target:recent) $n}}
-
-    proc ngrid_click {path target x y} {
-	variable _
-	switch  $_($target:move) {
-	    swarm {
-		for {set n 0} {$n <= $_($target:n)} {incr n} {
-		    ngrid_move $path $target $n [expr rand() * $_($target:spread) - [expr $_($target:spread) / 2.0] + $x] [expr rand() * $_($target:spread) - [expr $_($target:spread) / 2.0] + $y]}}
-	    trails {
-		for {set n 0} {$n <= $_($target:n)} {incr n} {
-		    if {[expr rand() > 0.96] == 1} {
-			ngrid_move $path $target $n [expr rand() * $_($target:spread) - [expr $_($target:spread) / 2.0] + $x] [expr rand() * $_($target:spread) - [expr $_($target:spread) / 2.0] + $y]}}}
-	    error {ngrid_move $path $target $_($target:recent) [expr rand() * $_($target:spread) - [expr $_($target:spread) / 2.0] + $x] [expr rand() * $_($target:spread) - [expr $_($target:spread) / 2.0] + $y]}
-	    default {ngrid_move $path $target $_($target:recent) $x $y}}}
-
-    proc ngrid_move {path target n px py} {
-	variable _
-	$path.ngrid coords sqr_$n [expr $px - $_($target:radius)] [expr $py - $_($target:radius)] [expr $px + $_($target:radius)] [expr $py + $_($target:radius)]	
-	set h [winfo height $path.ngrid]
-	set w [winfo width $path.ngrid]
-	foreach xy {x y} {
-	    if {[$path.ngrid find withtag name_${xy}_$n] ne ""} {
-		set l $_($target:box$n:$xy)
-		set name [lindex $l 0]
-		set min [lindex $l 1]
-		set max [lindex $l 2]
-		if {[expr $min == 0] && [expr $max == 0]} {set max  $_($target:max)}
-		pd "$target.rp _cb [pdtk_enquote $name] [expr ($max - $min) * [set p$xy] / $w.0 + $min] \;"}}}
-
-    proc ngrid_gridlines {path target ln lines} {
-	variable _
-	puts "gridlines $ln $lines"
-	set w $path.ngrid
-	$w delete gridlines
-	set gh [winfo height $w]
-	set gw [winfo width $w]
-	for {set x 1} {$x <= $lines} {incr x} {
-	    if {$lines < 16 && $lines > 0} {
-		set oh [expr $gh.0 * $x.0 / $lines.0]
-		set ow [expr $gw.0 * $x.0 / $lines.0]
-	      	$w create line $ow 0 $ow $gh -fill $ln -tags gridlines
-	      	$w create line 0 $oh $gw $oh -fill $ln -tags gridlines}}}}
-
-#> ngrid frame
-#. -bd 3 #w 384 #h 144 #bg gray10 #ln gray35 #div 6 #n 3
-#. #move normal #spread 96 #radius 9 #max 1
-#. @list  ::ix::ngrid_add .- .| {.#1} .#2 .#3 .#4
-#. @add  ::ix::ngrid_add .- .| {.#1} .#2 .#3 .#4
-#. @pos ::ix::ngrid_find pos .- .| {.#1} .#2
-#. @setpos ::ix::ngrid_find setpos .- .| {.#1} .#2
-#. @delete ::ix::ngrid_find remove .- .| {.#1} 0
-#. @clear ::ix::ngrid_clear .- .| all
-#. @radius ::ix::ngrid_vset .- .| radius .#1
-#. @spread ::ix::ngrid_vset .- .| spread .#1
-#. @move ::ix::ngrid_vset .- .| move .#1
-#. @max ::ix::ngrid_vset .- .| max .#1
-puts "ngrid .- .|"
-::ix::ngrid_new .- .| .#w .#h .#bg .#ln .#div .#move .#spread .#radius .#max
diff --git a/extensions/gui/ix/toxy/nob-demo.pd b/extensions/gui/ix/toxy/nob-demo.pd
deleted file mode 100644
index 901001a87..000000000
--- a/extensions/gui/ix/toxy/nob-demo.pd
+++ /dev/null
@@ -1,74 +0,0 @@
-#N canvas 151 325 465 268 12;
-#X floatatom 234 44 5 16 1024 0 - - -;
-#X msg 234 62 #w \$1 \, #h \$1;
-#X msg 14 209 #trans \$1;
-#X floatatom 14 191 5 22 100 0 - - -;
-#X obj 356 150 widget nob n2 #w 34 #h 35 #ca "#ff4a9c" #cb "#83f735"
-#cc "#fff74a" #trans 100 #th 8 #bg "#446dfd" #cn "#83f735" #nx -30
-#ny -30 -bd 1;
-#X obj 103 198 nbx 8 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10
--262144 -1 -1 31.6832 256;
-#X obj 103 89 widget nob n1 #w 100 #h 100 #th 7 #cc purple #cb black
-#ca red #trans 81 #bg orange #range 1 #cn yellow #ny 82 #nx 50 #max
-0 #min 0 -bd 1;
-#X msg 225 159 #range \$1;
-#X msg 247 194 1;
-#X msg 274 194 10000;
-#X floatatom 234 6 5 1 50 0 - - -;
-#X msg 234 21 #th \$1;
-#X obj 338 18 tot .;
-#X msg 338 0 query tk_chooseColor;
-#X obj 333 36 makefilename "%s";
-#X obj 183 29 widget nob n3 #size #1 #w 30 #h 30 #ny 87 #nx 33 #th
-8 #bg orange #cc green #trans 134;
-#X floatatom 280 114 5 0 0 0 - - -;
-#X msg 280 129 #ny \$1;
-#X floatatom 183 11 5 0 0 0 - - -;
-#X floatatom 183 62 5 0 0 0 - - -;
-#X floatatom 280 81 5 0 0 0 - - -;
-#X msg 280 96 #nx \$1;
-#X msg 247 220 #max 1;
-#X obj 8 -2 widget dm color #arrows 0 #items .(bg ca cb cc cn.);
-#X obj 108 2 loadbang;
-#X obj 37 -2 widget dm bg #arrows 0 #items .(green red purple blue
-orange yellow black white pink.);
-#X obj 41 53 prepend;
-#X msg 108 21 bg;
-#X obj 285 152 widget dm range #arrow 0 #items .(1 100 1000 0.1.) #arrows
-0;
-#X msg 292 220 #max 32 \, #min 16;
-#X msg 247 240 #min 0 \, #max 0;
-#X obj 7 29 makefilename #%s;
-#X text 347 87 right = 1/10th;
-#X text 347 76 middle = 10;
-#X text 357 99 left = 1;
-#X connect 0 0 1 0;
-#X connect 1 0 6 0;
-#X connect 2 0 6 0;
-#X connect 3 0 2 0;
-#X connect 6 0 5 0;
-#X connect 7 0 6 0;
-#X connect 8 0 6 0;
-#X connect 9 0 6 0;
-#X connect 10 0 11 0;
-#X connect 11 0 6 0;
-#X connect 12 0 14 0;
-#X connect 13 0 12 0;
-#X connect 14 0 26 0;
-#X connect 15 0 19 0;
-#X connect 16 0 17 0;
-#X connect 17 0 6 0;
-#X connect 18 0 15 0;
-#X connect 19 0 6 0;
-#X connect 20 0 21 0;
-#X connect 21 0 6 0;
-#X connect 22 0 6 0;
-#X connect 23 0 31 0;
-#X connect 24 0 27 0;
-#X connect 25 0 26 0;
-#X connect 26 0 6 0;
-#X connect 27 0 31 0;
-#X connect 28 0 7 0;
-#X connect 29 0 6 0;
-#X connect 30 0 6 0;
-#X connect 31 0 26 1;
diff --git a/extensions/gui/ix/toxy/nob.wid b/extensions/gui/ix/toxy/nob.wid
deleted file mode 100755
index 9d2565376..000000000
--- a/extensions/gui/ix/toxy/nob.wid
+++ /dev/null
@@ -1,105 +0,0 @@
-#console show
-package require Tkzinc 3.3
-package require zincGraphics
-namespace eval ::ix {
-    variable _
-    proc nobfloat {path t num} {
-	variable _
-	$path itemconfigure $t:num -text $num
-	pd [concat $t.rp _cb $num \;]
-	set _($t:num) $num
-    }
-    proc nob_mover {w t f x y} {
-	variable _
-	if {$::ix::_($t:clickd) > 0} {
-	    set move [expr (($x - $::ix::_($t:lx)) + (-1 * ($y - $::ix::_($t:ly)))) / ([winfo width $w].0 + [winfo height $w].0) * $f]
-	    nob_move $w $t $move
-	}
-	set ::ix::_($t:clickd) 1
-	set ::ix::_($t:lx) $x
-	set ::ix::_($t:ly) $y	
-    }
-    proc nob_move {w t move} {
-	variable _
-	set on [$w itemcget $t:num -text]
-	set no [expr $on + $_($t:range) * $move * 2]
-	if {$_($t:min) != $_($t:max)} {
-	    if {$no > $_($t:max)} {set no $_($t:max);set move 0}
-	    if {$no < $_($t:min)} {set no $_($t:min);set move 0}
-	}
-	nobfloat $w $t $no
-	foreach e {1 10 100} {
-	    set a [expr [$w itemcget $t:nob$e -startangle] + int($move * $e * 90)]
-	    $w itemconfigure $t:nob$e -startangle $a
-	    set _($t:a$e) $a
-	}	
-    }
-
-    proc nob {path t w h range bg c1 c2 c3 cn trans th nx ny max min} {
-	variable _
-	set _($t:lx) 32
-	set _($t:clickd) -1
-	set _($t:max) $max
-	set _($t:min) $min
-	if {$_($t:min) != $_($t:max)} {
-	    set _($t:range) [expr abs($min - $max)]
-	} else {
-	    set _($t:range) $range
-	}
-	if {[winfo exists $path.nob] != 1} {
-	    zinc $path.nob -render 1 -width $w -height $h -borderwidth 1 -lightangle 140 -backcolor $bg
-	    $path configure -width $w -height $h
-	    place $path.nob -anchor nw -relwidth 1 -relheight 1
-	    $path.nob remove *
-	    set i 0
-	    set colors [list $c1 $c2 $c3]
-	    set ratios {1 10 0.1}
-	    set edge 10
-	    $path.nob add rectangle 1 {1 1 8 4} -filled 1 -fillcolor "#555555"
-	    $path.nob add rectangle 1 "1 $h 8 [expr $h - 5]" -filled 1 -fillcolor "#555555"
-	    foreach e {1 10 100} {
-		$path.nob add arc 1 \
-		    "[expr $w / $edge / ($i + 1) + ($edge / 2)] [expr $h / $edge / ($i + 1) + ($edge / 2)] [expr $w - $w / $edge / ($i + 1) - ($edge / 2)] [expr $h - $h / $edge / ($i + 1) - ($edge / 2)]" \
-		    -closed 0 -filled 0 -extent [expr int(300 / $e)] -startangle 90 \
-		    -linecolor "[lindex $colors $i];$trans" \
-		    -linewidth [expr int($h / $th)] \
-		    -tags $t:nob$e
-		bind $path.nob <B[expr $i + 1]-Motion> \
-		    "::ix::nob_mover $path.nob $t [lindex $ratios $i] %x %y"
-		incr i
-		bind $path.nob <ButtonRelease-$i> "set ::ix::_($t:clickd) -1"
-	    }
-	    bind $path <MouseWheel> {::ix::nob_move %W.nob [winfo name %W] [expr %D / 2400.]}
-	    bind $path <Shift-MouseWheel> {::ix::nob_move %W.nob [winfo name %W] [expr %D / 24000.]}
-	    bind $path <Control-MouseWheel> {::ix::nob_move %W.nob [winfo name %W] [expr %D / 240.]}
-	    bind $path.nob <Shift-B1-Motion> "::ix::nob_mover $path.nob $t 10 %x %y"
-	    bind $path.nob <Control-B1-Motion> "::ix::nob_mover $path.nob $t 0.1 %x %y"
-	    if {$nx == 0} {
-		set nx [expr $w / 2]
-		set ny [expr $h - 20]
-	    }
-	    $path.nob add text 1 -text "0.0" \
-		-position "$nx $ny" -tags $t:num -color "$cn;$trans"
-	}
-	if {[info exists _($t:num)]} {
-	    $path.nob itemconfigure $t:num -text $_($t:num)
-	    foreach e {1 10 100} {
-		$path.nob itemconfigure $t:nob$e -startangle $_($t:a$e)
-	    }
-	} else {
-	    foreach e {1 10 100} {set _($t:a$e) 90}
-	    set _($t:num) 0.0}
-
-    }
-}
-#> nob frame
-#. -height 128 -width 128 -bd 1 -bg "#cccccc"
-#. -highlightbackground red
-#. #max 0 #min 0
-#. #w 128 #h 128 #trans 70 #th 5 #range 100 #nx 0 #ny 0
-#. #bg purple #ca blue #cb yellow #cc green #cn orange
-#. @float ::ix::nobfloat .-.nob .| .#1
-#. @cmd eval ".-.nob .#args"
-bind .- <Enter> {focus .-}
-bind .- <Leave> {focus .^.c}
-::ix::nob .- .| .#w .#h .#range .#bg .#ca .#cb .#cc .#cn .#trans .#th .#nx .#ny .#max .#min
diff --git a/extensions/gui/ix/toxy/q-demo.pd b/extensions/gui/ix/toxy/q-demo.pd
deleted file mode 100644
index 492c538e1..000000000
--- a/extensions/gui/ix/toxy/q-demo.pd
+++ /dev/null
@@ -1,90 +0,0 @@
-#N canvas 46 0 792 949 12;
-#X obj 20 352 widget q q1 -width 37 -height 56 -font .(Tahoma 8.) -bg
-white -fg cyan;
-#X obj 58 332 popen;
-#X msg 58 313 grep \$1 wavs.d;
-#X obj 56 276 widget dd d1 -width 30;
-#X msg 16 313 clear;
-#X obj 18 278 t s b;
-#X obj 312 363 player w;
-#X obj 353 242 loadbang;
-#X msg 387 313 \; pd dsp 1;
-#X floatatom 258 335 5 0 0 0 - - -;
-#X obj 210 584 widget q lb2 -width 24 -height 26;
-#X obj 17 56 widget q x0;
-#X obj 148 56 widget q x1;
-#X obj 278 57 widget q x2;
-#X obj 408 57 widget q x3;
-#X obj 537 57 widget q x5;
-#X obj 19 32 pool w;
-#X msg 19 11 chdir \, getsub;
-#X obj 280 238 l2s;
-#X msg 306 260 symbol /;
-#X obj 19 210 ndx;
-#X obj 670 57 widget q q5;
-#X msg 384 352 load wavs.dat;
-#X obj 280 211 ndx;
-#X obj 150 210 ndx;
-#X obj 411 211 ndx;
-#X obj 539 211 ndx;
-#X obj 672 211 ndx;
-#X text 54 263 search;
-#X text 220 564 <-right click starts drag;
-#X obj 310 409 widget q -bg -fg white -width 41 -bg black;
-#X obj 212 409 widget q -width -bg "#2f3351" -fg "#ff8617" -width 16
-;
-#X msg 151 296 clear;
-#X msg 102 259 bang;
-#X obj 348 382 outlet~;
-#X obj 394 382 outlet~;
-#X msg 222 352 next;
-#X msg 222 334 prev;
-#X msg 263 362 stop;
-#X connect 0 0 6 1;
-#X connect 1 0 0 0;
-#X connect 2 0 1 0;
-#X connect 3 0 5 0;
-#X connect 4 0 0 0;
-#X connect 5 0 2 0;
-#X connect 5 1 4 0;
-#X connect 6 2 30 0;
-#X connect 6 3 31 0;
-#X connect 6 4 36 0;
-#X connect 6 5 34 0;
-#X connect 6 6 35 0;
-#X connect 7 0 8 0;
-#X connect 7 0 19 0;
-#X connect 7 0 22 0;
-#X connect 9 0 0 0;
-#X connect 11 0 20 1;
-#X connect 12 0 24 1;
-#X connect 13 0 23 1;
-#X connect 14 0 25 1;
-#X connect 15 0 26 1;
-#X connect 16 1 11 0;
-#X connect 17 0 16 0;
-#X connect 18 0 6 1;
-#X connect 19 0 18 1;
-#X connect 20 0 18 0;
-#X connect 20 0 24 0;
-#X connect 20 1 12 0;
-#X connect 21 0 27 1;
-#X connect 22 0 6 2;
-#X connect 23 0 18 0;
-#X connect 23 0 25 0;
-#X connect 23 1 14 0;
-#X connect 24 0 18 0;
-#X connect 24 0 23 0;
-#X connect 24 1 13 0;
-#X connect 25 0 18 0;
-#X connect 25 0 26 0;
-#X connect 25 1 15 0;
-#X connect 26 0 18 0;
-#X connect 26 0 27 0;
-#X connect 26 1 21 0;
-#X connect 27 0 18 0;
-#X connect 32 0 3 0;
-#X connect 33 0 3 0;
-#X connect 36 0 0 0;
-#X connect 37 0 0 0;
-#X connect 38 0 6 0;
diff --git a/extensions/gui/ix/toxy/q.wid b/extensions/gui/ix/toxy/q.wid
deleted file mode 100755
index 8a971c6e7..000000000
--- a/extensions/gui/ix/toxy/q.wid
+++ /dev/null
@@ -1,84 +0,0 @@
-#console show
-package require tkdnd
-namespace eval ::ix {
-    proc qo {p t e} {
-	set s [$p get $e]
-	if {$s ne ""} {
-	    pd [concat $t.rp _cb symbol [pdtk_enquote $s] \;]
-	} else {pd [concat $t.rp _cb bang \;]}
-    }
-    proc qi {p t i} {
-	$p selection clear 0 end
-	$p selection set $i
-	qo $p $t $i
-    }
-    proc q_go {p t d} {
-	array set direction "next 1 prev -1"
-	array set edge "next end prev 0"
-	set cs [$p curselection]
-	if {$cs eq "" && [$p index end] != 0} {
-	    set go 0 } else {
-		set go [expr $direction($d) + [lindex $cs $edge($d)]]}
-	if {$go >= [$p index end]} {set go 0}
-	if {$go < 0} {set go [expr [$p index end] - 1]}
-	qi $p $t $go
-    }
-}
-#> q listbox
-#. -selectmode extended -font {{Bitstream Vera Sans} 8} -exportselection 0
-#. -relief flat -borderwidth 0 -selectborderwidth 0 -bg "#ccffcc" -fg black
-#. @list foreach x [list .#args] {.- insert end $x}
-#. @add .- insert end [join [lrange [list .#args] 0 end] " "]
-#. @scroll .- yview scroll .#1 units
-#. @symbol .- insert end {.#1}
-#. @float ::ix::qi .- .| .#1
-#. @clear .- delete 0 end
-#. @next ::ix::q_go .- .| next
-#. @prev ::ix::q_go .- .| prev
-#. @cmd eval ".- .#args"
-bind .- <Enter> {focus .-}
-bind .- <Leave> {focus .^.c}
-bind .- <4> { pd [concat .|.rp _cb scroll -5 \;]}
-bind .- <5> { pd [concat .|.rp _cb scroll 5 \;]}
-bind .- <Shift-MouseWheel> {.- xview scroll [expr {- (%D / 120) * 4}] units}
-bind .- <ButtonPress-3> {}
-bind .- <Button3-Leave> {dnd drag %W}
-dnd bindtarget .- text/plain <Drop> {
-    foreach l [split %D "\n"] {.- insert end [regsub -- {^file:[/]+} $l "/"]}
-}
-dnd bindtarget .- text/uri-list <Drop> {foreach d %D {.- insert end [regsub -- {^file:[/]+} $d "/"]}}
-dnd bindsource .- text/uri-list {
-    set sel [.- curselection]
-    if {$sel ne ""} {
-	set dd {}
-	foreach el $sel {
-	    lappend dd [.- get $el]
-	}
-	return $dd
-    }
-}
-bind .- <<ListboxSelect>> {
-    set sel [.- curselection]
-    if {$sel ne ""} {
-	::ix::qo .- .| [lindex $sel end]
-#	foreach el $sel {
-#	    ::ix::qo .- .| $el
-#	}
-    }
-}
-bind .- <<delete>> {
-    set sel [.- curselection]
-    if {$sel ne ""} {
-	for {set i [expr [llength $sel] - 1]} {0 <= $i} {incr i -1} {
-	    .- delete [lindex $sel $i]
-	}
-    }
-}
-bind .- <<selectAll>> {
-    .- selection set 0 end
-}
-event add <<selectAll>> <KeyPress-a>
-event add <<delete>> <Delete>
-event add <<delete>> <BackSpace>
-event add <<delete>> <KeyPress-d>
-puts "q .- .|"
diff --git a/extensions/gui/ix/toxy/sp-demo.pd b/extensions/gui/ix/toxy/sp-demo.pd
deleted file mode 100644
index 28bd54643..000000000
--- a/extensions/gui/ix/toxy/sp-demo.pd
+++ /dev/null
@@ -1,325 +0,0 @@
-#N canvas 387 298 580 364 10;
-#X obj 40 102 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
-;
-#X obj -196 21 loadbang;
-#X obj -196 111 until;
-#X obj -299 225 textfile;
-#X obj -299 207 prepend add2;
-#X msg -307 171 clear;
-#X msg -307 171 bang;
-#X obj -299 243 prepend draw;
-#X obj -307 153 t b b b;
-#X obj -196 129 f 512;
-#X obj -196 147 mod 512;
-#X obj -196 147 - 1;
-#X obj -176 75 samplerate~;
-#X obj -251 71 * 1000;
-#X obj -196 75 /;
-#X obj -273 89 metro 46;
-#X msg -77 218 img configure -height \$1 \, -height \$1;
-#X obj -196 93 i 512;
-#X obj 63 33 hsl 128 15 0 1000 0 1 empty empty hue -2 -6 0 8 -1 -262144
--1 6200 1;
-#X obj -149 200 exp;
-#X obj 42 32 tgl 15 1 empty empty empty 0 -6 0 8 -99865 -195568 -1
-1 1;
-#X obj -174 165 demux;
-#X obj -129 182 log;
-#X obj -149 182 *;
-#X obj -129 164 t f f;
-#X obj -129 200 /;
-#X msg -248 129 -1;
-#X msg -225 129 1;
-#X obj 197 33 hsl 128 15 30 300 0 1 empty empty gain -2 -6 0 8 -262144
--1 -1 4200 1;
-#X obj -129 254 +;
-#X obj 59 49 widget sp sp1 -height 303;
-#X obj -162 236 sqrt;
-#X obj -157 272 mod 1000;
-#X obj -157 290 demux;
-#X obj 42 50 tgl 15 1 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
-;
-#X obj -129 326 abs;
-#X obj -129 308 - 1000;
-#X obj -129 236 * 110;
-#X msg -196 39 512;
-#X obj -147 129 i;
-#X obj -196 57 t f b;
-#X obj 3 75 nbx 5 14 -1e+37 1e+37 0 1 empty empty empty 0 -6 0 10 -262144
--1 -1 303 256;
-#X obj -322 17 mp3amp~;
-#X msg -271 -1 disconnect;
-#X msg -209 -1 connecturl live365.com:80/play/wfmu1;
-#X obj 61 -5 widget dd d1 #width 25 -width 73;
-#X obj -271 37 readsf~ 2;
-#X msg -271 17 open \$1 \, 1;
-#X obj -329 55 dac~;
-#X text 6 30 log/lin;
-#X text 11 100 start;
-#X text 2 52 palette;
-#X text 3 44 inverse;
-#N canvas 845 38 435 259 1000sp 0;
-#X obj 96 113 inlet;
-#X obj 12 -13 inlet~;
-#X obj 11 68 rfft~;
-#X obj 5 103 *~;
-#X obj 12 135 sqrt~;
-#X obj 32 103 *~;
-#X obj 94 27 loadbang;
-#X obj 94 48 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
-;
-#X obj 105 65 prepend set;
-#X obj 122 47 pack 1 1 1;
-#X obj 166 21 inlet;
-#X obj 95 83 switch~ 512 1 1;
-#X obj 247 1 table \$0sp 512;
-#X obj 11 166 tabwrite~ \$0sp;
-#X obj 36 9 tabreceive~ \$0w;
-#X obj 338 1 table \$0w;
-#X msg 310 112 0;
-#X obj 267 130 osc~;
-#X obj 267 83 samplerate~;
-#X obj 267 107 / 256;
-#X obj 267 152 *~ -0.5;
-#X obj 267 174 +~ 0.5;
-#X obj 253 41 loadbang;
-#X obj 23 31 *~;
-#X obj 252 203 tabwrite~ \$0w;
-#X obj 338 25 pack f \$0;
-#X msg 338 43 \; \$2w resize \$1;
-#X obj 193 45 t b f;
-#X msg 253 63 bang;
-#X obj 338 101 pack f \$0;
-#X msg 338 119 \; \$2sp resize \$1;
-#X obj 338 83 / 2;
-#X connect 0 0 13 0;
-#X connect 1 0 23 0;
-#X connect 2 0 3 1;
-#X connect 2 0 3 0;
-#X connect 2 1 5 1;
-#X connect 2 1 5 0;
-#X connect 3 0 4 0;
-#X connect 4 0 13 0;
-#X connect 5 0 4 0;
-#X connect 6 0 7 0;
-#X connect 7 0 11 0;
-#X connect 8 0 11 0;
-#X connect 9 0 8 0;
-#X connect 10 0 9 0;
-#X connect 10 0 27 0;
-#X connect 14 0 23 1;
-#X connect 16 0 17 1;
-#X connect 17 0 20 0;
-#X connect 18 0 19 0;
-#X connect 19 0 17 0;
-#X connect 20 0 21 0;
-#X connect 21 0 24 0;
-#X connect 22 0 28 0;
-#X connect 23 0 2 0;
-#X connect 25 0 26 0;
-#X connect 27 0 28 0;
-#X connect 27 1 19 1;
-#X connect 27 1 25 0;
-#X connect 27 1 31 0;
-#X connect 28 0 16 0;
-#X connect 28 0 18 0;
-#X connect 28 0 24 0;
-#X connect 29 0 30 0;
-#X connect 31 0 29 0;
-#X restore -285 112 pd \$0sp;
-#X obj -162 218 tabread4 \$0sp;
-#X msg -170 39 1024;
-#X obj -157 343 * 0.255;
-#N canvas 0 0 356 499 hsv2rgb 0;
-#X obj 152 455 sprintf symbol #%02x%02x%02x;
-#X obj 41 14 inlet;
-#X obj 153 471 outlet;
-#X obj 53 75 / 42.5;
-#X obj 18 55 t f f;
-#X obj 31 33 unpack f f f;
-#X obj 16 85 / 42.5;
-#X obj 23 115 -;
-#X obj 56 97 i;
-#X obj 115 78 / 255;
-#X obj 96 112 *;
-#X obj 70 143 *;
-#X text 14 39 h;
-#X text 58 46 s;
-#X text 88 42 v;
-#X text 75 102 i;
-#X text 16 120 f;
-#X text 145 83 vf;
-#X text 115 117 vs;
-#X text 90 148 vsf;
-#X text 147 185 p;
-#X text 73 225 q;
-#X text 132 212 t;
-#X obj 122 139 t b f;
-#X obj 124 162 f;
-#X obj 126 183 -;
-#X obj 52 192 f;
-#X obj 52 169 t b f;
-#X obj 54 220 -;
-#X obj 112 207 +;
-#X obj 131 272 f;
-#X obj 162 271 f;
-#X obj 197 272 f;
-#X obj 231 271 f;
-#X text 250 277 v;
-#X text 218 275 p;
-#X text 146 279 t;
-#X text 182 278 q;
-#X obj 92 278 i;
-#X obj 214 293 prepend add2;
-#X msg 193 321 96.8999 0 255;
-#X obj 77 325 t b b b;
-#X obj 79 252 t b b f b;
-#X msg 191 295 set;
-#X obj 90 345 t b b b;
-#X obj 116 367 t b b b;
-#X obj 138 387 t b b b;
-#X obj 153 414 t b b b;
-#X obj 167 435 t b b b;
-#X obj 79 300 route 1 2 3 4 5;
-#X connect 0 0 2 0;
-#X connect 1 0 5 0;
-#X connect 3 0 8 0;
-#X connect 4 0 6 0;
-#X connect 4 1 3 0;
-#X connect 5 0 4 0;
-#X connect 5 1 10 0;
-#X connect 5 2 9 0;
-#X connect 5 2 24 1;
-#X connect 5 2 26 1;
-#X connect 5 2 33 1;
-#X connect 6 0 7 0;
-#X connect 7 0 11 0;
-#X connect 8 0 7 1;
-#X connect 8 0 38 1;
-#X connect 9 0 10 1;
-#X connect 10 0 11 1;
-#X connect 10 0 23 0;
-#X connect 11 0 27 0;
-#X connect 23 0 24 0;
-#X connect 23 1 25 1;
-#X connect 24 0 25 0;
-#X connect 25 0 29 1;
-#X connect 25 0 32 1;
-#X connect 26 0 28 0;
-#X connect 27 0 26 0;
-#X connect 27 1 28 1;
-#X connect 27 1 29 0;
-#X connect 28 0 42 0;
-#X connect 29 0 30 1;
-#X connect 30 0 39 0;
-#X connect 31 0 39 0;
-#X connect 32 0 39 0;
-#X connect 33 0 39 0;
-#X connect 38 0 49 0;
-#X connect 39 0 40 0;
-#X connect 40 0 0 0;
-#X connect 41 0 32 0;
-#X connect 41 1 33 0;
-#X connect 41 2 31 0;
-#X connect 42 0 40 0;
-#X connect 42 1 38 0;
-#X connect 42 2 31 1;
-#X connect 42 3 43 0;
-#X connect 43 0 40 0;
-#X connect 44 0 30 0;
-#X connect 44 1 33 0;
-#X connect 44 2 32 0;
-#X connect 45 0 33 0;
-#X connect 45 1 31 0;
-#X connect 45 2 32 0;
-#X connect 46 0 33 0;
-#X connect 46 1 32 0;
-#X connect 46 2 30 0;
-#X connect 47 0 31 0;
-#X connect 47 1 32 0;
-#X connect 47 2 33 0;
-#X connect 48 0 32 0;
-#X connect 48 1 30 0;
-#X connect 48 2 33 0;
-#X connect 49 0 41 0;
-#X connect 49 1 44 0;
-#X connect 49 2 45 0;
-#X connect 49 3 46 0;
-#X connect 49 4 47 0;
-#X connect 49 5 48 0;
-#X restore -268 186 pd hsv2rgb;
-#X obj -313 74 adc~;
-#X obj -268 167 pack 0 255 255;
-#X connect 0 0 15 0;
-#X connect 1 0 38 0;
-#X connect 2 0 9 0;
-#X connect 3 0 7 0;
-#X connect 4 0 3 0;
-#X connect 5 0 3 0;
-#X connect 6 0 3 0;
-#X connect 7 0 30 0;
-#X connect 8 0 6 0;
-#X connect 8 1 17 0;
-#X connect 8 2 5 0;
-#X connect 9 0 11 0;
-#X connect 10 0 9 1;
-#X connect 10 0 21 0;
-#X connect 11 0 10 0;
-#X connect 12 0 14 1;
-#X connect 13 0 15 1;
-#X connect 14 0 13 0;
-#X connect 15 0 53 1;
-#X connect 15 0 8 0;
-#X connect 16 0 30 0;
-#X connect 17 0 2 0;
-#X connect 18 0 29 1;
-#X connect 19 0 54 0;
-#X connect 20 0 21 1;
-#X connect 21 0 54 0;
-#X connect 21 1 23 0;
-#X connect 22 0 25 0;
-#X connect 23 0 19 0;
-#X connect 24 0 22 0;
-#X connect 24 1 25 1;
-#X connect 25 0 23 1;
-#X connect 26 0 11 1;
-#X connect 27 0 11 1;
-#X connect 28 0 37 1;
-#X connect 29 0 32 0;
-#X connect 31 0 37 0;
-#X connect 32 0 33 0;
-#X connect 33 0 56 0;
-#X connect 33 1 36 0;
-#X connect 34 0 33 1;
-#X connect 35 0 56 0;
-#X connect 36 0 35 0;
-#X connect 37 0 29 0;
-#X connect 38 0 40 0;
-#X connect 39 0 10 1;
-#X connect 39 0 9 1;
-#X connect 39 0 16 0;
-#X connect 39 0 17 1;
-#X connect 39 0 24 0;
-#X connect 40 0 14 0;
-#X connect 40 0 53 2;
-#X connect 40 1 12 0;
-#X connect 41 0 39 0;
-#X connect 42 0 48 0;
-#X connect 42 0 53 0;
-#X connect 42 1 48 1;
-#X connect 42 1 53 0;
-#X connect 43 0 42 0;
-#X connect 44 0 42 0;
-#X connect 45 0 47 0;
-#X connect 46 0 48 0;
-#X connect 46 0 53 0;
-#X connect 46 1 48 1;
-#X connect 46 1 53 0;
-#X connect 47 0 46 0;
-#X connect 54 0 31 0;
-#X connect 55 0 40 0;
-#X connect 56 0 59 0;
-#X connect 57 0 4 0;
-#X connect 58 0 53 0;
-#X connect 59 0 57 0;
-#X coords 0 0 2.71716e-06 4.15856e-06 535 500 0;
diff --git a/extensions/gui/ix/toxy/sp.wid b/extensions/gui/ix/toxy/sp.wid
deleted file mode 100755
index 2b41902f1..000000000
--- a/extensions/gui/ix/toxy/sp.wid
+++ /dev/null
@@ -1,36 +0,0 @@
-#console show
-namespace eval ::ix {
-    variable _
-    proc sp {p t} {
-	variable _
-	image create photo $t
-	$p configure -image $t
-	set _($t:loc) 0
-    }
-    proc spl {t args} {
-	variable _
-	incr _($t:loc)
-	if {$_($t:loc) > 511} {set _($t:loc) 0}
-	set draw {}
-	foreach pixel $args {
-	    set pixel [expr int($pixel)]
-	    lappend draw [format #%02x%02x%02x $pixel $pixel $pixel]
-	}
-	$t put $draw -to $_($t:loc) 0
-    }
-    proc spd {t args} {
-	variable _
-	incr _($t:loc)
-	if {$_($t:loc) > 511} {set _($t:loc) 0}
-	$t put $args -to $_($t:loc) 0
-    }
-}
-#> sp label
-#. @list ::ix::spl .| .#args
-#. @draw ::ix::spd .| .#args
-#. @clear .- delete 0 end
-#. @img eval ".| .#args"
-#. @cmd eval ".- .#args"
-bind .- <B1-Motion> {.| put #eeeeee -to %x %y}
-::ix::sp .- .|
-puts "setup"
\ No newline at end of file
diff --git a/extensions/gui/ix/toxy/spectrum-demo.pd b/extensions/gui/ix/toxy/spectrum-demo.pd
deleted file mode 100644
index 98c5a385a..000000000
--- a/extensions/gui/ix/toxy/spectrum-demo.pd
+++ /dev/null
@@ -1,171 +0,0 @@
-#N canvas 62 98 623 209 10;
-#X obj -28 29 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
-;
-#X obj -115 21 loadbang;
-#X obj -95 69 samplerate~;
-#X obj -115 85 * 1000;
-#X obj -115 69 /;
-#X obj -115 101 metro 46;
-#X obj 86 29 tgl 15 1 \$0loglin empty empty 0 -6 0 8 -99865 -195568
--1 0 1;
-#X obj 112 30 hsl 128 15 1 100 0 1 \$0gain empty empty -2 -6 0 8 -262144
--1 -1 3500 1;
-#X obj -28 46 widget spectrum sp1 #ca "#ffff4c" #cb "#0ebcd8" #tb 57
-#w 480 #h 160 -height 269;
-#X obj -115 53 t f b;
-#X text 57 30 log/lin;
-#N canvas 755 38 493 259 1000sp 0;
-#X obj 96 113 inlet;
-#X obj 12 -13 inlet~;
-#X obj 11 68 rfft~;
-#X obj 5 103 *~;
-#X obj 12 135 sqrt~;
-#X obj 32 103 *~;
-#X obj 94 27 loadbang;
-#X obj 94 48 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
-;
-#X obj 105 65 prepend set;
-#X obj 122 47 pack 1 1 1;
-#X obj 166 21 inlet;
-#X obj 95 83 switch~ 512 1 1;
-#X obj 36 9 tabreceive~ \$0w;
-#X obj 338 1 table \$0w;
-#X msg 310 112 0;
-#X obj 267 130 osc~;
-#X obj 267 83 samplerate~;
-#X obj 267 107 / 256;
-#X obj 267 152 *~ -0.5;
-#X obj 267 174 +~ 0.5;
-#X obj 253 41 loadbang;
-#X obj 16 32 *~;
-#X obj 252 203 tabwrite~ \$0w;
-#X obj 338 25 pack f \$0;
-#X msg 338 43 \; \$2w resize \$1;
-#X obj 193 45 t b f;
-#X msg 253 63 bang;
-#X obj 338 101 pack f \$0;
-#X obj 338 83 / 2;
-#X obj 51 -14 inlet~;
-#X obj 53 68 rfft~;
-#X obj 47 103 *~;
-#X obj 54 135 sqrt~;
-#X obj 74 103 *~;
-#X obj 58 32 *~;
-#X obj 94 166 tabwrite~ \$0sp1;
-#X obj 11 166 tabwrite~ \$0sp0;
-#X msg 338 119 \; \$2sp0 resize \$1 \; \$2sp1 resize \$1;
-#X obj 247 1 table \$0sp0 512;
-#X obj 247 17 table \$0sp1 512;
-#X connect 0 0 36 0;
-#X connect 0 0 35 0;
-#X connect 1 0 21 0;
-#X connect 2 0 3 1;
-#X connect 2 0 3 0;
-#X connect 2 1 5 1;
-#X connect 2 1 5 0;
-#X connect 3 0 4 0;
-#X connect 4 0 36 0;
-#X connect 5 0 4 0;
-#X connect 6 0 7 0;
-#X connect 7 0 11 0;
-#X connect 8 0 11 0;
-#X connect 9 0 8 0;
-#X connect 10 0 9 0;
-#X connect 10 0 25 0;
-#X connect 12 0 21 1;
-#X connect 12 0 34 1;
-#X connect 14 0 15 1;
-#X connect 15 0 18 0;
-#X connect 16 0 17 0;
-#X connect 17 0 15 0;
-#X connect 18 0 19 0;
-#X connect 19 0 22 0;
-#X connect 20 0 26 0;
-#X connect 21 0 2 0;
-#X connect 23 0 24 0;
-#X connect 25 0 26 0;
-#X connect 25 1 17 1;
-#X connect 25 1 23 0;
-#X connect 25 1 28 0;
-#X connect 26 0 14 0;
-#X connect 26 0 16 0;
-#X connect 26 0 22 0;
-#X connect 27 0 37 0;
-#X connect 28 0 27 0;
-#X connect 29 0 34 0;
-#X connect 30 0 31 1;
-#X connect 30 0 31 0;
-#X connect 30 1 33 1;
-#X connect 30 1 33 0;
-#X connect 31 0 32 0;
-#X connect 32 0 35 0;
-#X connect 33 0 32 0;
-#X connect 34 0 30 0;
-#X restore -144 155 pd \$0sp;
-#X msg -115 37 2048;
-#X text -10 31 power;
-#X obj -145 76 adc~;
-#X msg 289 30 #ca \$1;
-#X obj 358 30 tot .;
-#X msg 353 15 query tk_chooseColor;
-#X obj 387 31 makefilename "%s";
-#X obj 289 14 demux;
-#X obj 338 15 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
-;
-#X msg 323 30 #cb \$1;
-#X floatatom 258 17 5 33 100 0 - - -;
-#X msg 249 30 #tb \$1;
-#X floatatom 7 1 5 30 500 0 - - -;
-#X floatatom -20 1 5 64 640 0 - - -;
-#X msg 94 15 #w \$1;
-#X obj 22 14 spr \$0 \$0sp1 2;
-#X msg 125 15 #h \$1;
-#X obj -50 14 spr \$0 \$0sp0 1;
-#X msg -115 5 480;
-#X msg -92 5 160;
-#X obj -132 132 biquad~;
-#X obj -103 135 notch 4000 42;
-#X obj -139 118 hsl 106 15 0 10000 0 0 empty empty empty -2 -6 0 8
--262144 -1 -1 8600 1;
-#X connect 0 0 5 0;
-#X connect 1 0 12 0;
-#X connect 1 0 30 0;
-#X connect 1 0 31 0;
-#X connect 2 0 4 1;
-#X connect 3 0 5 1;
-#X connect 4 0 3 0;
-#X connect 5 0 11 2;
-#X connect 5 0 27 0;
-#X connect 5 0 29 0;
-#X connect 9 0 4 0;
-#X connect 9 0 11 3;
-#X connect 9 1 2 0;
-#X connect 12 0 9 0;
-#X connect 14 0 11 0;
-#X connect 14 1 32 0;
-#X connect 15 0 8 0;
-#X connect 16 0 18 0;
-#X connect 17 0 16 0;
-#X connect 18 0 19 0;
-#X connect 19 0 15 0;
-#X connect 19 1 21 0;
-#X connect 20 0 19 1;
-#X connect 21 0 8 0;
-#X connect 22 0 23 0;
-#X connect 23 0 8 0;
-#X connect 24 0 28 0;
-#X connect 24 0 29 2;
-#X connect 24 0 27 2;
-#X connect 25 0 26 0;
-#X connect 25 0 27 1;
-#X connect 25 0 29 1;
-#X connect 26 0 8 0;
-#X connect 27 0 8 0;
-#X connect 28 0 8 0;
-#X connect 29 0 8 0;
-#X connect 30 0 25 0;
-#X connect 31 0 24 0;
-#X connect 32 0 11 1;
-#X connect 33 0 32 0;
-#X connect 34 0 33 0;
-#X coords 0 0 2.71716e-06 4.15856e-06 535 500 0;
diff --git a/extensions/gui/ix/toxy/spectrum.wid b/extensions/gui/ix/toxy/spectrum.wid
deleted file mode 100755
index e42af0269..000000000
--- a/extensions/gui/ix/toxy/spectrum.wid
+++ /dev/null
@@ -1,42 +0,0 @@
-#console show
-package require Tkzinc 3.3
-package require zincGraphics
-namespace eval ::ix {
-    variable _
-    proc spectrum_sub {t sub} {
-	variable _
-	set _($t:use) $sub
-    }
-    proc spectrum_floats {path t w h args} {
-	variable _
-	set coords "0 $h"
-	set i 0
-	foreach num $args {
-	    incr i
-	    lappend coords $i $num
-	}
-	lappend coords $w $h
-	$path coords $t:sub$_($t:use) $coords
-
-    }
-    proc spectrum {path t w h bg c1 c2 t1 t2} {
-	if {[winfo exists $path.nob] != 1} {
-	    zinc $path.nob -render 1 -width $w -height $h -borderwidth 1 -lightangle 140 -backcolor $bg
-	    $path configure -width $w -height $h
-	    place $path.nob -anchor nw -relwidth 1 -relheight 1
-	    $path.nob remove *
-	    $path.nob add curve 1 {1 1 8 4} -filled 1 -linewidth 0 -fillcolor "$c1;$t1" -closed 1 -tags $t:sub1
-	    $path.nob add curve 1 {1 1 8 4} -filled 1 -linewidth 0 -fillcolor "$c2;$t2" -closed 1 -tags $t:sub2
-	}
-    }
-}
-#> spectrum frame
-#. -height 160 -width 480 -bd 1 -bg "#cccccc"
-#. #h 160 #w 480 #bg gray20 #ca yellow #cb red #ta 100 #tb 50
-#. @list ::ix::spectrum_floats .-.nob .| .#w .#h .#args
-#. @use ::ix::spectrum_sub .| .#1
-#. @cmd eval ".-.nob .#args"
-bind .- <Enter> {focus .-}
-bind .- <Leave> {focus .^.c}
-::ix::spectrum .- .| .#w .#h .#bg .#ca .#cb .#ta .#tb
-puts "spectrum .- .|"
diff --git a/extensions/gui/ix/toxy/tile-demo.pd b/extensions/gui/ix/toxy/tile-demo.pd
deleted file mode 100644
index 4e7c845bc..000000000
--- a/extensions/gui/ix/toxy/tile-demo.pd
+++ /dev/null
@@ -1,74 +0,0 @@
-#N canvas 265 374 607 366 12;
-#X obj 135 73 widget tile t1 #e non -colwidth -13 -rows 12 -cols 16
--width 16 -height 12 -rowheight -13 -bd 1 -bg red;
-#X msg 80 87 redefine;
-#X msg 198 53 clr;
-#X msg 100 54 #e \$1;
-#X obj 137 46 widget dm #items #items .(rows columns non.) #arrows
-0 -bg pink;
-#X floatatom 428 3 2 0 64 0 - - -;
-#X floatatom 271 14 5 0 0 0 - - -;
-#X floatatom 271 -2 5 0 0 0 - - -;
-#X obj 459 9 * -1;
-#X msg 419 27 -colwidth \$1 \, -rowheight \$1;
-#X msg 271 30 -cols \$1 \, -width \$1 \, clr;
-#X msg 270 49 -rows \$1 \, -height \$1 \, clr;
-#X obj 199 -10 bng 55 250 50 0 empty empty empty 0 -6 0 8 -241291 -1
--1;
-#X obj 441 277 osc~ 440;
-#X obj 462 165 mtof;
-#X obj 499 297 line~;
-#X obj 465 325 dac~ 1 2;
-#X obj 466 302 *~;
-#X obj 462 106 - 12;
-#X obj 462 125 abs;
-#X obj 422 78 unpack f f f;
-#X obj 436 188 pack 0 0 0;
-#X obj 440 254 pipe 0 0 1000;
-#X obj 422 100 * 100;
-#X msg 438 210 \$2 \$3 \$1;
-#X obj 438 231 unpack f f f;
-#X obj 462 144 + 48;
-#X obj 495 154 * 0.25;
-#X msg 538 277 0 2;
-#X obj 540 258 del 98;
-#X msg 503 276 \$1 2;
-#X obj 540 236 t b;
-#X connect 0 0 20 0;
-#X connect 1 0 0 0;
-#X connect 2 0 0 0;
-#X connect 3 0 0 0;
-#X connect 4 0 3 0;
-#X connect 5 0 8 0;
-#X connect 6 0 10 0;
-#X connect 7 0 11 0;
-#X connect 8 0 9 0;
-#X connect 9 0 0 0;
-#X connect 10 0 0 0;
-#X connect 11 0 0 0;
-#X connect 12 0 0 0;
-#X connect 13 0 17 0;
-#X connect 14 0 21 1;
-#X connect 15 0 17 1;
-#X connect 17 0 16 0;
-#X connect 17 0 16 1;
-#X connect 18 0 19 0;
-#X connect 19 0 26 0;
-#X connect 20 0 23 0;
-#X connect 20 1 18 0;
-#X connect 20 2 27 0;
-#X connect 21 0 24 0;
-#X connect 22 0 13 0;
-#X connect 22 1 31 0;
-#X connect 22 1 30 0;
-#X connect 23 0 21 0;
-#X connect 24 0 25 0;
-#X connect 25 0 22 0;
-#X connect 25 1 22 1;
-#X connect 25 2 22 2;
-#X connect 26 0 14 0;
-#X connect 27 0 21 2;
-#X connect 28 0 15 0;
-#X connect 29 0 28 0;
-#X connect 30 0 15 0;
-#X connect 31 0 29 0;
diff --git a/extensions/gui/ix/toxy/tile.wid b/extensions/gui/ix/toxy/tile.wid
deleted file mode 100755
index 5bf3cecdb..000000000
--- a/extensions/gui/ix/toxy/tile.wid
+++ /dev/null
@@ -1,87 +0,0 @@
-#console show
-package require Tktable
-namespace eval ::ix {
-    variable _
-    proc tile {t tg bg fg ac sb sf e} {
-	variable _
-	$t tag configure active -bg $ac
-	$t tag configure OFF -bg $bg -relief ridge
-	$t tag configure ON  -bg $fg -relief sunken
-	$t tag configure sel -bg $sb -fg $sf -relief flat
-	if {$e eq "columns"} {
-	    bind $t <Motion> {
-		%W selection clear all
-		set sel [%W index @%x,%y row]
-		%W selection set $sel,0 $sel,[%W cget -cols]
-	    }
-	} elseif {$e eq "rows"} {
-	    bind $t <Motion> {
-		%W selection clear all
-		set sel [%W index @%x,%y col]
-		%W selection set 0,$sel [%W cget -rows],$sel
-	    }
-	} else {
-	    bind $t <Motion> {
-		%W selection clear all
-		%W selection set @%x,%y		
-	    }
-	}
-	set _($t:e) $e
-        bind $t <Leave> {%W selection clear all}
-	bind $t <2> {%W configure -state [if {[%W cget -state] eq "normal"} {list disabled} {list normal}]}
-	bind $t <3> {::ix::tile_clk %W %x %y OFF}
-	bind $t <1> {::ix::tile_clk %W %x %y ON}
-	bind $t <B3-Motion> [bind $t <3>]
-	bind $t <B1-Motion> [bind $t <1>]
-
-	tile_clr $t
-    }
-    proc tile_dump {t id} {
-	puts "$t $id"
-	for {set c 0} {$c < [$t cget -cols]} {incr c} {
-	    for {set r 0} {$r < [$t cget -rows]} {incr r} {
-		if {[$t tag includes ON $r,$c] == 1} {
-		    pd [concat $id.rp _cb $c $r 1\;]
-		}
-	    }
-	}
-    }
-    proc tile_clk {t x y v} {
-	variable _
-	if {[$t cget -state] eq "disabled"} {
-	    switch $_($t:e) {
-		rows {
-		    for {set row 0} {$row < [$t cget -rows]} {incr row} {
-			$t tag celltag OFF $row,[$t index @$x,$y col]
-		    }
-		}
-		columns {
-		    for {set col 0} {$col < [$t cget -cols]} {incr col} {
-			$t tag celltag OFF [$t index @$x,$y row],$col
-		    }
-		}
-	    }
-	    $t tag celltag $v [$t index @$x,$y]
-	}
-    }
-    proc tile_clr {t} {
-	for {set i 0} {$i < [$t cget -rows]} {incr i} {
-	    for {set j 0} {$j < [$t cget -cols]} {incr j} {
-		$t tag celltag OFF $i,$j
-	    }
-	}	
-    }
-
-}
-#> tile table
-#. -rows 8 -cols 16 -resizeborders none -fg blue
-#. -borderwidth 2 -titlerows 0 -titlecols 0 -roworigin 0 -colorigin 0 -colwidth 4
-#. -width 16 -height 8 -variable tab -flashmode off -font {Tahoma 8}
-#. #bg "#a4e75a" #fg "#fefdff" #cb yellow #ac yellow #sb "#aaff88" #sf green
-#. #e none
-#. @bang ::ix::tile_dump .- .|
-#. @clear ::ix::tile_clr .-
-#. @clr ::ix::tile_clr .-
-
-::ix::tile .- .| .#bg .#fg .#ac .#sb .#sf .#e
-puts "tile .- .|"
diff --git a/extensions/gui/ix/toxy/tree-demo.pd b/extensions/gui/ix/toxy/tree-demo.pd
deleted file mode 100644
index cdfa6fecd..000000000
--- a/extensions/gui/ix/toxy/tree-demo.pd
+++ /dev/null
@@ -1,184 +0,0 @@
-#N canvas 402 155 495 621 10;
-#X obj 36 131 widget tree t1 -height 300 -selectmode single -width
-205 -bd 2 -border 1 -font .(verdana 8.) -bg yellow -fg blue;
-#X obj 215 16 tow . tree t1;
-#X msg 13 8 0 juice;
-#X msg 21 24 1 coffee;
-#X msg 32 41 2 apples;
-#X msg 43 58 3 plantains;
-#X msg 27 74 2 arugula;
-#X msg 22 90 1 byte;
-#X obj 251 117 bng 15 250 50 0 empty empty empty 0 -6 0 8 -260818 -1
--1;
-#X msg 107 101 clear;
-#X msg 178 113 path \$1;
-#X msg 178 93 auto \$1;
-#X obj 224 78 tgl 15 0 empty empty empty 0 -6 0 8 -225271 -1 -1 0 1
-;
-#X obj 225 98 tgl 15 0 empty empty empty 0 -6 0 8 -225280 -1 -1 0 1
-;
-#X obj 266 168 widget dd dt -bg gray -fg pink;
-#X obj 11 113 prepend add;
-#X msg 171 0 cmd collapse -recurse all \, cmd expand 0;
-#X msg 255 -16 cmd expand all;
-#X obj 17 -10 t b b b b b;
-#X msg 80 -23 16;
-#X obj 81 -8 until;
-#X obj 78 9 random 6;
-#X obj 73 24 route 0 1 2 3 4 5;
-#X obj 24 -47 bng 31 250 50 0 empty empty empty 0 -6 0 8 -193787 -1
--1;
-#X obj 56 -48 bng 27 250 50 0 empty empty empty 0 -6 0 8 -258699 -1
--1;
-#X obj 146 453 s2l /;
-#X msg 240 453 resynth \; supatrigga \;;
-#X msg 215 473 set;
-#X msg 201 453 add \$1;
-#X obj 176 453 drip;
-#X symbolatom 40 492 39 0 0 0 - - -;
-#X obj 96 453 l2s;
-#X obj 116 453 t s b;
-#N canvas 17 433 316 238 pooledit 1;
-#X obj 18 50 prepend mkchdir;
-#X obj 18 9 inlet;
-#X obj 28 66 prepend rmdir;
-#X obj 168 173 outlet;
-#X obj 89 103 l2s;
-#X obj 48 82 niagara 1;
-#X obj 61 139 glue;
-#X obj 89 123 s2l /;
-#X obj 48 101 a2l;
-#X obj 61 158 route list;
-#X obj 61 174 pool tt;
-#X obj 197 66 prepend chdir;
-#X obj 18 26 route new delete cut copy paste;
-#X msg 169 66 paste;
-#X msg 132 66 copyall;
-#X msg 100 66 cutall;
-#X obj 100 50 t a a;
-#X obj 132 50 t a a;
-#X obj 169 50 t a a;
-#X connect 0 0 5 0;
-#X connect 1 0 12 0;
-#X connect 2 0 5 0;
-#X connect 4 0 7 0;
-#X connect 5 0 8 0;
-#X connect 5 1 4 0;
-#X connect 6 0 9 0;
-#X connect 7 0 6 1;
-#X connect 8 0 6 0;
-#X connect 9 0 10 0;
-#X connect 11 0 5 0;
-#X connect 12 0 0 0;
-#X connect 12 1 2 0;
-#X connect 12 2 16 0;
-#X connect 12 3 17 0;
-#X connect 12 4 18 0;
-#X connect 12 5 3 0;
-#X connect 13 0 10 0;
-#X connect 14 0 10 0;
-#X connect 15 0 10 0;
-#X connect 16 0 15 0;
-#X connect 16 1 11 0;
-#X connect 17 0 14 0;
-#X connect 17 1 11 0;
-#X connect 18 0 13 0;
-#X connect 18 1 11 0;
-#X restore 37 437 pd pooledit;
-#N canvas 185 447 106 167 poolview 1;
-#X obj 3 84 packel -1;
-#X msg 4 23 chdir \, getsub -1;
-#X obj 53 84 length;
-#X obj 11 63 t a a;
-#X obj 3 137 outlet;
-#X obj 4 3 inlet;
-#X obj 62 2 inlet;
-#X obj 4 44 pool tt;
-#X obj 3 119 prepend;
-#X obj 53 102 - 1;
-#X connect 0 0 8 0;
-#X connect 1 0 7 0;
-#X connect 2 0 9 0;
-#X connect 3 0 0 0;
-#X connect 3 1 2 0;
-#X connect 5 0 1 0;
-#X connect 6 0 7 0;
-#X connect 7 1 3 0;
-#X connect 8 0 4 0;
-#X connect 9 0 8 1;
-#X restore 267 116 pd poolview;
-#X text 266 154 drag an item here;
-#X obj 158 -33 tot .;
-#X msg 136 -50 tot console show;
-#X obj 267 79 widget dd dfd -width 19;
-#X msg 282 -43 -bg yellow -fg blue;
-#X msg 317 101 reset \, load \$1;
-#X msg 118 64 0 jip jop;
-#X obj 348 281 pool tt;
-#X obj 272 225 prepend chdir;
-#X msg 348 260 getall;
-#X obj 272 244 t b b a;
-#X msg 317 278 set;
-#X msg 253 333 ins 2 \; name supatrigga \; synth 0 \; vendor Bram @
-Smartelectronix \; version 1 \; dll c:/local/wbin/vst/resynth/supatrigga.dll
-\; editor 0 \; outs 2 \;;
-#X obj 306 317 prepend add2;
-#X obj 368 317 prepend add;
-#X connect 0 0 33 0;
-#X connect 2 0 15 0;
-#X connect 3 0 15 0;
-#X connect 4 0 15 0;
-#X connect 5 0 15 0;
-#X connect 6 0 15 0;
-#X connect 7 0 15 0;
-#X connect 8 0 34 0;
-#X connect 9 0 0 0;
-#X connect 10 0 0 0;
-#X connect 11 0 0 0;
-#X connect 12 0 11 0;
-#X connect 13 0 10 0;
-#X connect 15 0 0 0;
-#X connect 16 0 1 0;
-#X connect 17 0 1 0;
-#X connect 18 0 19 0;
-#X connect 18 1 5 0;
-#X connect 18 2 4 0;
-#X connect 18 3 3 0;
-#X connect 18 4 2 0;
-#X connect 19 0 20 0;
-#X connect 20 0 21 0;
-#X connect 21 0 22 0;
-#X connect 22 0 2 0;
-#X connect 22 1 3 0;
-#X connect 22 2 4 0;
-#X connect 22 3 5 0;
-#X connect 22 4 6 0;
-#X connect 22 5 7 0;
-#X connect 23 0 18 0;
-#X connect 24 0 9 0;
-#X connect 25 0 29 0;
-#X connect 25 0 43 0;
-#X connect 27 0 26 0;
-#X connect 28 0 26 0;
-#X connect 29 0 28 0;
-#X connect 31 0 32 0;
-#X connect 32 0 25 0;
-#X connect 32 0 30 0;
-#X connect 32 1 27 0;
-#X connect 33 0 31 0;
-#X connect 34 0 15 0;
-#X connect 37 0 36 0;
-#X connect 38 0 40 0;
-#X connect 39 0 1 0;
-#X connect 40 0 34 1;
-#X connect 41 0 15 0;
-#X connect 42 0 49 0;
-#X connect 42 1 48 0;
-#X connect 43 0 45 0;
-#X connect 44 0 42 0;
-#X connect 45 0 44 0;
-#X connect 45 1 46 0;
-#X connect 45 2 42 0;
-#X connect 46 0 47 0;
-#X connect 48 0 47 0;
-#X connect 49 0 47 0;
diff --git a/extensions/gui/ix/toxy/tree.wid b/extensions/gui/ix/toxy/tree.wid
deleted file mode 100755
index 809b26708..000000000
--- a/extensions/gui/ix/toxy/tree.wid
+++ /dev/null
@@ -1,184 +0,0 @@
-package require treectrl
-package require tkdnd
-namespace eval ::ix {
-    variable _
-    proc tree {t target title auto echo path delim} {
-	variable _
-	puts "$t $target $title $echo $path $delim"
-	if {[$t element names] != "el1"} {
-	    $t column create -text $title
-	    $t element create el1 text -fill [list green {selected focus}]
-	    $t style create s1
-	    $t style elements s1 el1
-	}
-	bind $t <Button1-Leave> {dnd drag %W}
-	bind $t <ButtonPress-1> {
-	    set id [lindex [%W identify %x %y] 1]
-	    if {$id ne "" && $id ne "tail"} {
-		%W activate $id
-		::ix::tree_click %W [winfo name %W]
-	    }
-	}
-
-	dnd bindsource $t text/plain "return \[::ix::tree_get $t $target -1 -1\]"
-	bind $t <Tab> "::ix::tree_out $t $target -1"
-	bind $t <KeyPress-Right> "::ix::tree_out $t $target -1"
-	bind $t <Double-1> "::ix::tree_out $t $target -1"
-	bind $t <ButtonPress-3> {}
-	bind $t <ButtonPress-3> {
-	    variable _
-	    focus %W
-	    set target [winfo name %W]
-	    set id [lindex [%W identify %x %y] 1]
-	    if {$id ne ""} {
-		%W activate $id
-		%W selection clear all
-		%W selection add $id
-		set path [::ix::tree_get %W $target 1 -1]
-		if {[winfo exists %W.rc] != 1} {
-		    set m [menu %W.rc -tearoff no]
-		    $m add command -label "path [::ix::tree_get %W $target -1 $id]" -state disabled
-		    $m add command -label delete -command {
-			::ix::tree_msg $target "delete [pdtk_enquote $path]"
-			set p [%W item parent $id]
-			%W item delete $id		      
-			if {[%W item numchildren $p] < 1} {
-			    %W item configure $p -button no
-			}
-		    }
-		    $m add command -label new -command {
-			::ix::tree_nameitem %W $target $path $id
-		    }
-		    $m add command -label copy -command {::ix::tree_msg $target "copy [pdtk_enquote $path]"}
-		    $m add command -label cut -command {::ix::tree_msg $target "cut [pdtk_enquote $path]"}
-		    $m add command -label paste -command {::ix::tree_msg $target "paste [pdtk_enquote $path]"}
-		} else {
-		    %W.rc entryconfigure 0 -label "path [::ix::tree_get %W $target -1 $id]"
-		}
-		tk_popup %W.rc %X %Y
-	    } else {
-		if {[winfo exists %W.rroot] != 1} {
-		    set m [menu %W.rroot -tearoff no]
-		    $m add command -label "new root" -command {
-			::ix::tree_nameitem %W $target "" 0
-		    }
-		}
-		tk_popup %W.rroot %X %Y
-	    }
-	}
-	set _($target:parentList) [list root {} {} {} {} {} {}]
-	set _($target:auto) $auto
-	set _($target:echo) $echo
-	set _($target:path) $path
-	set _($target:delim) $delim
-    }
-    proc tree_nameitem {t target path id} {
-	set path "$path/"
-	destroy .$path
-	toplevel .$path
-	entry .$path.entry -textvariable send_textvariable
-	.$path.entry delete 0 end
-	.$path.entry insert 0 [::ix::random_txt 6]
-	.$path.entry select from 0
-	.$path.entry select adjust end
-#	if {$path == "/"} {set pathname ""} else {set pathname path}
-	set submit "::ix::tree_msg $target \"new \[pdtk_enquote \"$path\$send_textvariable\"\]\";::ix::tree_item $t $id \$send_textvariable;destroy .$path"
-	bind .$path.entry <KeyPress-Return> $submit
-	button .$path.ok -text "OK" -command $submit
-	button .$path.cancel -text cancel -command "destroy .$path"
-	pdtk_standardkeybindings .$path.entry
-	grid .$path.entry -sticky news -columnspan 2
-	grid .$path.ok .$path.cancel -sticky news
-	grid columnconfigure .$path 1 -weight 1
-	focus .$path.entry	
-    }
-    proc random_txt {n} {
-	set i 0
-	set text ""
-	while {$i < $n} {
-	    set int [expr "int(floor(rand()*62))"]
-	    if {$int < 10} {incr int 48} elseif {$int < 36} {incr int 55} else {incr int 61}
-	    set text "$text[format %c $int]"
-	    incr i
-	}
-	return $text
-    }
-    proc tree_item {t p text} {
-	set ti [$t item create]
-	$t item style set $ti 0 s1
-	$t item text $ti 0 $text
-	$t item lastchild $p $ti
-	$t item configure $p -button yes
-	return $ti
-    }
-    proc tree_add {t target args} {
-	variable _
-	set depth [lindex $args 0]
-	set text [lrange $args 1 end]
-	set p [lindex $_($target:parentList) $depth]
-	set ti [tree_item $t $p $text]
-	incr depth
-	set _($target:parentList) [lreplace $_($target:parentList) $depth $depth $ti]
-# 	if {$_($target:auto) == 1} {
-# 	    tree_msg $target "new [tree_get $t $target -1 $ti]"
-# 	}
-    }
-    proc tree_click {t target} { 
-	variable _
-	if {$_($target:auto) == 1} {tree_out $t $target -1}
-    }
-    proc tree_cmd {t target args} {
-	variable _
-	puts "$t $args"
-	set r [eval "$t $args"]
-	if {$_($target:echo) == 1} {pd "$target.rp _cb $r;"}
-    }
-    proc tree_out {t target rec} { 
-        tree_msg $target [tree_get $t $target $rec -1]
-    }
-    proc tree_msg {target msg} {
-	pd "$target.rp _cb $msg;"
-    }
-    proc tree_get {t target rec it} { 
-	variable _
-	if {$it < 0} {set it [$t index active]}
-	if {$rec < 0} {set rec $_($target:path)}
-	if {$rec > 0} {return [tree_getrec $t $target $it ""]} else {
-	    set item [$t item text $it 0]
-	    return $item
-	}
-    }
-    proc tree_getrec {t target tr dl} { 
-	variable _
-	if {$tr > 0} {
-	    lappend dl $tr	 
-	    tree_getrec $t $target [$t item parent $tr] $dl
-	} else {
-	    set tr ""
-	    for {set i [expr [llength $dl] - 1]} {0 <= $i} {incr i -1} {
-		set tr "$tr$_($target:delim)[$t item text [lindex $dl $i] 0]"
-	    }
-	    return $tr
-	}
-    }
-    proc tree_cfg {target item arg} {
-	variable _
-	set _($target:$item) $arg
-    }
-
-}
-
-#> tree treectrl
-#. -height 400 -width 200
-#. #title 1 #auto 1 #echo 0 #path 1 #delim "/"
-#. -font {tahoma 8} -showroot yes -showrootbutton no -selectmode single
-#. @list ::ix::tree_list .- .| .#args
-#. @clear .- item delete all
-#. @add ::ix::tree_add .- .| .#args
-#. @cmd ::ix::tree_cmd .- .| .#args
-#. @auto ::ix::tree_cfg .| auto .#1
-#. @echo ::ix::tree_cfg .| echo .#1
-#. @path ::ix::tree_cfg .| path .#1
-#. @delim ::ix::tree_cfg .| delim .#1
-
-::ix::tree .- .| .#title .#auto .#echo .#path .#delim
diff --git a/extensions/xgui/AUTHORS.txt b/extensions/xgui/AUTHORS.txt
deleted file mode 100644
index 5bc32953b..000000000
--- a/extensions/xgui/AUTHORS.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Damien HENRY	:	Main contributor
-Olaff Matthes	:	The sendto object + good ideas
-
diff --git a/extensions/xgui/INSTALL.txt b/extensions/xgui/INSTALL.txt
deleted file mode 100644
index d05c9fbc4..000000000
--- a/extensions/xgui/INSTALL.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-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
deleted file mode 100644
index 715c2cb74..000000000
--- a/extensions/xgui/LICENSE.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-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
deleted file mode 100644
index 95398b53f..000000000
--- a/extensions/xgui/README.txt
+++ /dev/null
@@ -1,150 +0,0 @@
-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
deleted file mode 100644
index 2915389f2..000000000
--- a/extensions/xgui/adapters_in/xy2coord.pd
+++ /dev/null
@@ -1,38 +0,0 @@
-#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
deleted file mode 100644
index bafabb52e..000000000
--- a/extensions/xgui/adapters_in/xy2move.pd
+++ /dev/null
@@ -1,12 +0,0 @@
-#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
deleted file mode 100644
index e408136b7..000000000
--- a/extensions/xgui/adapters_in/xy2xy1.pd
+++ /dev/null
@@ -1,15 +0,0 @@
-#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
deleted file mode 100644
index 04ad49f23..000000000
--- a/extensions/xgui/adapters_in/xy2xy2.pd
+++ /dev/null
@@ -1,15 +0,0 @@
-#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
deleted file mode 100644
index 2a38c05fa..000000000
--- a/extensions/xgui/adapters_out/click2bxy.pd
+++ /dev/null
@@ -1,16 +0,0 @@
-#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
deleted file mode 100644
index 0ba3c9be7..000000000
--- a/extensions/xgui/adapters_out/coord2xy.pd
+++ /dev/null
@@ -1,16 +0,0 @@
-#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
deleted file mode 100644
index 45cd2aeb6..000000000
--- a/extensions/xgui/adapters_out/drag2move.pd
+++ /dev/null
@@ -1,10 +0,0 @@
-#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
deleted file mode 100644
index 20468163f..000000000
--- a/extensions/xgui/adapters_out/drag2strength.pd
+++ /dev/null
@@ -1,10 +0,0 @@
-#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
deleted file mode 100644
index eb14b1be4..000000000
--- a/extensions/xgui/adapters_out/move2xy.pd
+++ /dev/null
@@ -1,12 +0,0 @@
-#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
deleted file mode 100644
index c797e23ab..000000000
--- a/extensions/xgui/behaviors/dragable.pd
+++ /dev/null
@@ -1,10 +0,0 @@
-#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
deleted file mode 100644
index 9caf83ad9..000000000
--- a/extensions/xgui/behaviors/light_over.pd
+++ /dev/null
@@ -1,34 +0,0 @@
-#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
deleted file mode 100644
index aae992921..000000000
--- a/extensions/xgui/behaviors/ma_2d.pd
+++ /dev/null
@@ -1,130 +0,0 @@
-#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
deleted file mode 100644
index 03723e634..000000000
--- a/extensions/xgui/behaviors/move.pd
+++ /dev/null
@@ -1,10 +0,0 @@
-#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
deleted file mode 100644
index 4703c7a0f..000000000
--- a/extensions/xgui/behaviors/move_x.pd
+++ /dev/null
@@ -1,10 +0,0 @@
-#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
deleted file mode 100644
index 3adce9814..000000000
--- a/extensions/xgui/behaviors/move_y.pd
+++ /dev/null
@@ -1,10 +0,0 @@
-#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
deleted file mode 100644
index 469cc52f4..000000000
--- a/extensions/xgui/behaviors/width_over.pd
+++ /dev/null
@@ -1,30 +0,0 @@
-#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
deleted file mode 100755
index 0c893b65b..000000000
--- a/extensions/xgui/bin/pdx.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/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
deleted file mode 100644
index 120901877..000000000
--- a/extensions/xgui/bin/xgui-client.sh
+++ /dev/null
@@ -1,867 +0,0 @@
-#!/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
deleted file mode 100644
index 4133fe0e0..000000000
--- a/extensions/xgui/bin/xgui.bat
+++ /dev/null
@@ -1 +0,0 @@
-..\..\bin\wish83.exe .\xgui.sh --help
diff --git a/extensions/xgui/bin/xgui.sh b/extensions/xgui/bin/xgui.sh
deleted file mode 100755
index da0bfcd64..000000000
--- a/extensions/xgui/bin/xgui.sh
+++ /dev/null
@@ -1,908 +0,0 @@
-#!/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
deleted file mode 100644
index b38a64aeb..000000000
--- a/extensions/xgui/doc/01_first_seg.pd
+++ /dev/null
@@ -1,123 +0,0 @@
-#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
deleted file mode 100644
index 8c4367abd..000000000
--- a/extensions/xgui/doc/02_behaviors.pd
+++ /dev/null
@@ -1,49 +0,0 @@
-#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
deleted file mode 100644
index dad23536a..000000000
--- a/extensions/xgui/doc/03_low_level.pd
+++ /dev/null
@@ -1,28 +0,0 @@
-#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
deleted file mode 100644
index c76a3c36a..000000000
--- a/extensions/xgui/doc/04_classic.pd
+++ /dev/null
@@ -1,98 +0,0 @@
-#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
deleted file mode 100644
index 92f080436..000000000
--- a/extensions/xgui/doc/05_xseq.pd
+++ /dev/null
@@ -1,315 +0,0 @@
-#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
deleted file mode 100644
index e883c7ce1..000000000
--- a/extensions/xgui/doc/06_physics.pd
+++ /dev/null
@@ -1,24 +0,0 @@
-#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
deleted file mode 100644
index bbf873186..000000000
--- a/extensions/xgui/doc/07_speak.pd
+++ /dev/null
@@ -1,54 +0,0 @@
-#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
deleted file mode 100644
index d771b5c64..000000000
--- a/extensions/xgui/doc/08_more_physics.pd
+++ /dev/null
@@ -1,89 +0,0 @@
-#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
deleted file mode 100644
index 2e2539e6a..000000000
--- a/extensions/xgui/doc/09_more_physics2.pd
+++ /dev/null
@@ -1,199 +0,0 @@
-#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
deleted file mode 100644
index 9a1c27cef..000000000
--- a/extensions/xgui/doc/10_sliders.pd
+++ /dev/null
@@ -1,83 +0,0 @@
-#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
deleted file mode 100644
index 3ac940b19..000000000
--- a/extensions/xgui/doc/Kroonde/K_jongle.pd
+++ /dev/null
@@ -1,44 +0,0 @@
-#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
deleted file mode 100644
index 525db47a8..000000000
--- a/extensions/xgui/doc/Kroonde/K_konfig.pd
+++ /dev/null
@@ -1,81 +0,0 @@
-#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
deleted file mode 100644
index 096467dcb..000000000
--- a/extensions/xgui/doc/Kroonde/K_panel.pd
+++ /dev/null
@@ -1,81 +0,0 @@
-#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
deleted file mode 100644
index 3758034eb..000000000
--- a/extensions/xgui/doc/Kroonde/K_send.pd
+++ /dev/null
@@ -1,70 +0,0 @@
-#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
deleted file mode 100644
index c37480a07..000000000
--- a/extensions/xgui/doc/Kroonde/Koonfig_ip_dest.pd
+++ /dev/null
@@ -1,72 +0,0 @@
-#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
deleted file mode 100644
index 20108fbdd..000000000
--- a/extensions/xgui/doc/Kroonde/Koonfig_my_ip.pd
+++ /dev/null
@@ -1,72 +0,0 @@
-#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
deleted file mode 100644
index 88513d8d4..000000000
--- a/extensions/xgui/doc/Kroonde/Kroonde.pd
+++ /dev/null
@@ -1,8 +0,0 @@
-#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
deleted file mode 100644
index a6b0cdf46..000000000
--- a/extensions/xgui/doc/Kroonde/calibration.pd
+++ /dev/null
@@ -1,47 +0,0 @@
-#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
deleted file mode 100644
index 716f3060d..000000000
--- a/extensions/xgui/doc/Kroonde/inv1024.pd
+++ /dev/null
@@ -1,8 +0,0 @@
-#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
deleted file mode 100644
index 2f5dde541..000000000
--- a/extensions/xgui/doc/Kroonde/kroonde_dest_ip.pd
+++ /dev/null
@@ -1,49 +0,0 @@
-#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
deleted file mode 100644
index 7a7e9addb..000000000
--- a/extensions/xgui/doc/Kroonde/kroonde_ip.pd
+++ /dev/null
@@ -1,49 +0,0 @@
-#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
deleted file mode 100644
index 822e31419..000000000
--- a/extensions/xgui/doc/Kroonde/range.pd
+++ /dev/null
@@ -1,43 +0,0 @@
-#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
deleted file mode 100644
index ef33f3974..000000000
--- a/extensions/xgui/doc/Kroonde/stom.pd
+++ /dev/null
@@ -1,6 +0,0 @@
-#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
deleted file mode 100644
index 91e4bb0b1..000000000
--- a/extensions/xgui/doc/Kroonde/tst.pd
+++ /dev/null
@@ -1,18 +0,0 @@
-#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
deleted file mode 100644
index d5124e51a..000000000
--- a/extensions/xgui/doc/direct_test.pd
+++ /dev/null
@@ -1,18 +0,0 @@
-#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
deleted file mode 100644
index c7d11764d..000000000
--- a/extensions/xgui/doc/help-send2.pd
+++ /dev/null
@@ -1,18 +0,0 @@
-#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
deleted file mode 100644
index 066321868..000000000
--- a/extensions/xgui/doc/help_atom.pd
+++ /dev/null
@@ -1,11 +0,0 @@
-#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
deleted file mode 100644
index efee35c47..000000000
--- a/extensions/xgui/doc/help_convert.pd
+++ /dev/null
@@ -1,8 +0,0 @@
-#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
deleted file mode 100644
index 2cd0dc3c6..000000000
--- a/extensions/xgui/doc/help_damping.pd
+++ /dev/null
@@ -1,15 +0,0 @@
-#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
deleted file mode 100644
index 9196b5f6a..000000000
--- a/extensions/xgui/doc/help_mass.pd
+++ /dev/null
@@ -1,14 +0,0 @@
-#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
deleted file mode 100644
index d8ebbe34d..000000000
--- a/extensions/xgui/doc/help_object_arc.pd
+++ /dev/null
@@ -1,75 +0,0 @@
-#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
deleted file mode 100644
index 575c2269f..000000000
--- a/extensions/xgui/doc/help_object_rect.pd
+++ /dev/null
@@ -1,51 +0,0 @@
-#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
deleted file mode 100644
index 352f36e32..000000000
--- a/extensions/xgui/doc/help_object_text.pd
+++ /dev/null
@@ -1,78 +0,0 @@
-#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
deleted file mode 100644
index 3d9c6077c..000000000
--- a/extensions/xgui/doc/help_spring.pd
+++ /dev/null
@@ -1,34 +0,0 @@
-#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
deleted file mode 100644
index 0bbb9d39b..000000000
--- a/extensions/xgui/doc/help_valueinit.pd
+++ /dev/null
@@ -1,8 +0,0 @@
-#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
deleted file mode 100644
index 6ad1ae027..000000000
--- a/extensions/xgui/doc/help_vector.pd
+++ /dev/null
@@ -1,34 +0,0 @@
-#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
deleted file mode 100644
index d12a12d39..000000000
--- a/extensions/xgui/doc/sound/09_more_physics3.pd
+++ /dev/null
@@ -1,217 +0,0 @@
-#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
deleted file mode 100644
index c037e56c5..000000000
--- a/extensions/xgui/doc/sound/09_more_physics4.pd
+++ /dev/null
@@ -1,219 +0,0 @@
-#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
deleted file mode 100644
index d4a6b3923..000000000
--- a/extensions/xgui/doc/sound/09_more_physics5.pd
+++ /dev/null
@@ -1,238 +0,0 @@
-#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
deleted file mode 100644
index 886038ac4..000000000
--- a/extensions/xgui/doc/sound/09_more_physics6.pd
+++ /dev/null
@@ -1,462 +0,0 @@
-#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
deleted file mode 100644
index 274946734..000000000
--- a/extensions/xgui/doc/sound/09_more_physics7.pd
+++ /dev/null
@@ -1,458 +0,0 @@
-#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
deleted file mode 100644
index 87be4259d..000000000
--- a/extensions/xgui/doc/sound/2yoyo.pd
+++ /dev/null
@@ -1,464 +0,0 @@
-#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
deleted file mode 100644
index 9c8ae4070..000000000
--- a/extensions/xgui/doc/sound/2yoyos.pd
+++ /dev/null
@@ -1,462 +0,0 @@
-#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
deleted file mode 100644
index 561955e22..000000000
--- a/extensions/xgui/doc/sound/atom.pd
+++ /dev/null
@@ -1,33 +0,0 @@
-#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
deleted file mode 100644
index f6a210bf4..000000000
--- a/extensions/xgui/doc/sound/sound.pd
+++ /dev/null
@@ -1,136 +0,0 @@
-#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
deleted file mode 100644
index 58ab6271d..000000000
--- a/extensions/xgui/filters/coord.pd
+++ /dev/null
@@ -1,10 +0,0 @@
-#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
deleted file mode 100644
index ec45cc36c..000000000
--- a/extensions/xgui/filters/xy1.pd
+++ /dev/null
@@ -1,10 +0,0 @@
-#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
deleted file mode 100644
index f62f4170f..000000000
--- a/extensions/xgui/filters/xy2.pd
+++ /dev/null
@@ -1,10 +0,0 @@
-#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
deleted file mode 100644
index fa81b06d4..000000000
--- a/extensions/xgui/install.bat
+++ /dev/null
@@ -1,7 +0,0 @@
-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
deleted file mode 100644
index d5c0d4672..000000000
--- a/extensions/xgui/main/alias.pd
+++ /dev/null
@@ -1,9 +0,0 @@
-#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
deleted file mode 100644
index 6586c96c3..000000000
--- a/extensions/xgui/main/arc.pd
+++ /dev/null
@@ -1,59 +0,0 @@
-#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
deleted file mode 100644
index b40a101d0..000000000
--- a/extensions/xgui/main/canvas.pd
+++ /dev/null
@@ -1,28 +0,0 @@
-#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
deleted file mode 100644
index 1d6dd1f9f..000000000
--- a/extensions/xgui/main/make4seg_ss.pd
+++ /dev/null
@@ -1,31 +0,0 @@
-#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
deleted file mode 100644
index 75f3027c3..000000000
--- a/extensions/xgui/main/make4seg_sss.pd
+++ /dev/null
@@ -1,33 +0,0 @@
-#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
deleted file mode 100644
index 89c240232..000000000
--- a/extensions/xgui/main/make_obj_name.pd
+++ /dev/null
@@ -1,23 +0,0 @@
-#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
deleted file mode 100644
index cb84207a9..000000000
--- a/extensions/xgui/main/node.pd
+++ /dev/null
@@ -1,100 +0,0 @@
-#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
deleted file mode 100644
index 54298a29b..000000000
--- a/extensions/xgui/main/pdx_connect.pd
+++ /dev/null
@@ -1,77 +0,0 @@
-#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
deleted file mode 100644
index b964a70f4..000000000
--- a/extensions/xgui/main/rect.pd
+++ /dev/null
@@ -1,59 +0,0 @@
-#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
deleted file mode 100644
index 1b44fd5db..000000000
--- a/extensions/xgui/main/seg.pd
+++ /dev/null
@@ -1,60 +0,0 @@
-#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
deleted file mode 100644
index ee3b81863..000000000
--- a/extensions/xgui/main/text.pd
+++ /dev/null
@@ -1,59 +0,0 @@
-#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
deleted file mode 100644
index 2c0e16317..000000000
--- a/extensions/xgui/makefile
+++ /dev/null
@@ -1,64 +0,0 @@
-#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
deleted file mode 100644
index 1b6b696e9..000000000
--- a/extensions/xgui/objects/button.pd
+++ /dev/null
@@ -1,81 +0,0 @@
-#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
deleted file mode 100644
index f5697cbae..000000000
--- a/extensions/xgui/objects/i-point.pd
+++ /dev/null
@@ -1,6 +0,0 @@
-#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
deleted file mode 100644
index 291939c5a..000000000
--- a/extensions/xgui/objects/i-rect.pd
+++ /dev/null
@@ -1,142 +0,0 @@
-#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
deleted file mode 100644
index 4c8cebb53..000000000
--- a/extensions/xgui/objects/i-seg.pd
+++ /dev/null
@@ -1,152 +0,0 @@
-#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
deleted file mode 100644
index 3ab21bbe3..000000000
--- a/extensions/xgui/objects/i-seg_mp.pd
+++ /dev/null
@@ -1,140 +0,0 @@
-#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
deleted file mode 100644
index a40a7fcae..000000000
--- a/extensions/xgui/objects/my_slider1.pd
+++ /dev/null
@@ -1,112 +0,0 @@
-#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
deleted file mode 100644
index 36d906d8d..000000000
--- a/extensions/xgui/objects/my_slider2.pd
+++ /dev/null
@@ -1,112 +0,0 @@
-#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
deleted file mode 100644
index 66463cd70..000000000
--- a/extensions/xgui/objects/my_slider3.pd
+++ /dev/null
@@ -1,160 +0,0 @@
-#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
deleted file mode 100644
index 655b6f7d5..000000000
--- a/extensions/xgui/objects/pad.pd
+++ /dev/null
@@ -1,85 +0,0 @@
-#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
deleted file mode 100644
index dfc3ea11c..000000000
--- a/extensions/xgui/objects/potar.pd
+++ /dev/null
@@ -1,103 +0,0 @@
-#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
deleted file mode 100644
index a86ba0a29..000000000
--- a/extensions/xgui/objects/preset.pd
+++ /dev/null
@@ -1,112 +0,0 @@
-#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
deleted file mode 100644
index cbbeaddff..000000000
--- a/extensions/xgui/objects/slider2.pd
+++ /dev/null
@@ -1,141 +0,0 @@
-#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
deleted file mode 100644
index 5e3fa11dd..000000000
--- a/extensions/xgui/objects/slider_prob.pd
+++ /dev/null
@@ -1,118 +0,0 @@
-#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
deleted file mode 100644
index bbe34e594..000000000
--- a/extensions/xgui/pdx.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-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
deleted file mode 100755
index ebd8c0179..000000000
--- a/extensions/xgui/pdx.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/sh
-if test "x${PD}" = "x"; then
- PD=../bin/pd
-fi
-./bin/xgui.sh &
-${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
deleted file mode 100644
index 2defe2ff1..000000000
--- a/extensions/xgui/physics/atom.pd
+++ /dev/null
@@ -1,21 +0,0 @@
-#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
deleted file mode 100644
index 1e8a09735..000000000
--- a/extensions/xgui/physics/damping.pd
+++ /dev/null
@@ -1,59 +0,0 @@
-#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
deleted file mode 100644
index 7371eb9c3..000000000
--- a/extensions/xgui/physics/force.pd
+++ /dev/null
@@ -1,29 +0,0 @@
-#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
deleted file mode 100644
index 8b21948aa..000000000
--- a/extensions/xgui/physics/lia_2d.pd
+++ /dev/null
@@ -1,206 +0,0 @@
-#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
deleted file mode 100644
index bed61e42c..000000000
--- a/extensions/xgui/physics/mass.pd
+++ /dev/null
@@ -1,118 +0,0 @@
-#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
deleted file mode 100644
index b5f75d288..000000000
--- a/extensions/xgui/physics/spring.pd
+++ /dev/null
@@ -1,155 +0,0 @@
-#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
deleted file mode 100644
index 1195cad9c..000000000
--- a/extensions/xgui/physics/vector.pd
+++ /dev/null
@@ -1,162 +0,0 @@
-#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
deleted file mode 100644
index d8dd1192b..000000000
--- a/extensions/xgui/preset1.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-~/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
deleted file mode 100644
index 87ac92d7a..000000000
--- a/extensions/xgui/preset2.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-~/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
deleted file mode 100644
index 158588a0f..000000000
--- a/extensions/xgui/preset3.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-~/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
deleted file mode 100644
index 4e5dfd4fd..000000000
--- a/extensions/xgui/preset4.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-~/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
deleted file mode 100644
index b2526983d..000000000
--- a/extensions/xgui/utils/bounded.pd
+++ /dev/null
@@ -1,43 +0,0 @@
-#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
deleted file mode 100644
index d617e596f..000000000
--- a/extensions/xgui/utils/concat_set_bang.pd
+++ /dev/null
@@ -1,22 +0,0 @@
-#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
deleted file mode 100644
index a9e3b83dc..000000000
--- a/extensions/xgui/utils/concat_value.pd
+++ /dev/null
@@ -1,26 +0,0 @@
-#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
deleted file mode 100644
index 6affbcef2..000000000
--- a/extensions/xgui/utils/convert.pd
+++ /dev/null
@@ -1,10 +0,0 @@
-#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
deleted file mode 100644
index 2d2c84dd0..000000000
--- a/extensions/xgui/utils/in.pd
+++ /dev/null
@@ -1,37 +0,0 @@
-#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
deleted file mode 100644
index 97a8bd252..000000000
--- a/extensions/xgui/utils/init2.pd
+++ /dev/null
@@ -1,27 +0,0 @@
-#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
deleted file mode 100644
index 774fef0f2..000000000
--- a/extensions/xgui/utils/moy.pd
+++ /dev/null
@@ -1,13 +0,0 @@
-#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
deleted file mode 100644
index 3f8473168..000000000
--- a/extensions/xgui/utils/subspace.pd
+++ /dev/null
@@ -1,50 +0,0 @@
-#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
deleted file mode 100644
index 10b59a323..000000000
--- a/extensions/xgui/utils/unique.pd
+++ /dev/null
@@ -1,10 +0,0 @@
-#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
deleted file mode 100644
index dc77c8584..000000000
--- a/extensions/xgui/utils/value2.pd
+++ /dev/null
@@ -1,13 +0,0 @@
-#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
deleted file mode 100644
index 04ef3260e..000000000
--- a/extensions/xgui/utils/valueinit.pd
+++ /dev/null
@@ -1,8 +0,0 @@
-#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
deleted file mode 100644
index 55a9bc47b..000000000
--- a/extensions/xgui/xgui-lib/a2s.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/* 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
deleted file mode 100644
index 59a709869..000000000
--- a/extensions/xgui/xgui-lib/concat.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* 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
deleted file mode 100644
index 019515107..000000000
--- a/extensions/xgui/xgui-lib/help_number.pd
+++ /dev/null
@@ -1,60 +0,0 @@
-#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
deleted file mode 100644
index bbbb491a3..000000000
--- a/extensions/xgui/xgui-lib/m_pd.h
+++ /dev/null
@@ -1,579 +0,0 @@
-/* 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
deleted file mode 100644
index 56b5000c5..000000000
--- a/extensions/xgui/xgui-lib/makefile
+++ /dev/null
@@ -1,86 +0,0 @@
-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
deleted file mode 100644
index 57edc16b1..000000000
--- a/extensions/xgui/xgui-lib/message.c
+++ /dev/null
@@ -1,116 +0,0 @@
-/* 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
deleted file mode 100644
index f30d10daa..000000000
--- a/extensions/xgui/xgui-lib/number.c
+++ /dev/null
@@ -1,249 +0,0 @@
-/* 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
deleted file mode 100644
index 1b46e8a3d..000000000
--- a/extensions/xgui/xgui-lib/oname2l.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* 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
deleted file mode 100644
index f49e374c6..000000000
--- a/extensions/xgui/xgui-lib/recv2.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/* 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
deleted file mode 100644
index 3c78aa6ba..000000000
--- a/extensions/xgui/xgui-lib/replace_selector.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* 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
deleted file mode 100644
index 586662c63..000000000
--- a/extensions/xgui/xgui-lib/seg.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/* 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"
-
-
-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
deleted file mode 100644
index a58b87c6b..000000000
--- a/extensions/xgui/xgui-lib/send2.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/* 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
deleted file mode 100644
index dc2808595..000000000
--- a/extensions/xgui/xgui-lib/test_xgui_lib.pd
+++ /dev/null
@@ -1,134 +0,0 @@
-#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
deleted file mode 100644
index 707f6baba..000000000
--- a/extensions/xgui/xgui-lib/try.sh
+++ /dev/null
@@ -1 +0,0 @@
-../../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
deleted file mode 100644
index 62940bc2d..000000000
--- a/extensions/xgui/xgui-lib/xgui_lib.c
+++ /dev/null
@@ -1,17 +0,0 @@
-/* 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();
-}
-
-- 
GitLab